Verilog,测试零标志

Verilog, testing for Zero flag

提问人:KhoaVo 提问时间:12/11/2017 更新时间:12/11/2017 访问量:1829

问:

module NOR31_1x1(Y,A);
input [31:0] A;
output Y;

wire [29:0] norWire;

    nor nor1(norWire[0], A[0], A[1]);
        nor nor2(norWire[1], norWire[0], A[2]);
    nor nor3(norWire[2], norWire[1], A[3]);
    nor nor4(norWire[3], norWire[2], A[4]);
    nor nor5(norWire[4], norWire[3], A[5]);
    nor nor6(norWire[5], norWire[4], A[6]);
    nor nor7(norWire[6], norWire[5], A[7]);
    nor nor8(norWire[7], norWire[6], A[8]);
    nor nor9(norWire[8], norWire[7], A[9]);
    nor nor10(norWire[9], norWire[8], A[10]);
    nor nor11(norWire[10], norWire[9], A[11]);
    nor nor12(norWire[11], norWire[10], A[12]);
    nor nor13(norWire[12], norWire[11], A[13]);
    nor nor14(norWire[13], norWire[12], A[14]);
    nor nor15(norWire[14], norWire[13], A[15]);
    nor nor16(norWire[15], norWire[14], A[16]);
    nor nor17(norWire[16], norWire[15], A[17]);
    nor nor18(norWire[17], norWire[16], A[18]);
    nor nor19(norWire[18], norWire[17], A[19]);
    nor nor20(norWire[19], norWire[18], A[20]);
    nor nor21(norWire[20], norWire[19], A[21]);
    nor nor22(norWire[21], norWire[20], A[22]);
    nor nor23(norWire[22], norWire[21], A[23]);
    nor nor24(norWire[23], norWire[22], A[24]);
    nor nor25(norWire[24], norWire[23], A[25]);
    nor nor26(norWire[25], norWire[24], A[26]);
    nor nor27(norWire[26], norWire[25], A[27]);
    nor nor28(norWire[27], norWire[26], A[28]);
    nor nor29(norWire[28], norWire[27], A[29]);
    nor nor30(norWire[29], norWire[28], A[30]); 
        nor result(Y, norWire[29], A[31]);
endmodule

嗨,所以我写了上面的代码来测试零标志是否由每个位设置,或者每个位都针对另一个位设置,似乎逻辑是正确的,但无论任何输入,结果都保持零标志的返回 1。我运行了模拟进行测试,尽管尚未设置任何值,但似乎 norWire 已经包含一些值。我可以得到一些帮助来调试这个吗?由于不熟悉 Verilog 和 ModelSim 模拟器,我很难调试它。

位操作 Verilog Modelsim nor

评论

0赞 KhoaVo 12/11/2017
在这种情况下,正确的逻辑是什么?我认为对输入的每个位使用 nor 可以确定它是否为零,因为如果有一个位不为零,则结果返回 0。
3赞 sharvil111 12/11/2017
我假设你想成为当所有的位都是.如果是这种情况,那么使用数据流建模将是更简洁的方法。这将 OR 的每一位,然后否定它并将其分配给 。Y1A0assign Y = ~(| A);AY

答:

1赞 Brian Magnuson 12/11/2017 #1

让我们将其限制为三位来说明问题。如果我们标记位 A、B 和 C,您要表达的是:

!(A | B | C)

你写的是:

!(!(A | B) | C)

其中,一个 NOR(完成最终否定)的输出被转发到下一阶段。

因此,明智地使用“or”和“not”素词应该会让你到达那里。

评论

0赞 KhoaVo 12/12/2017
我尝试使用或对每个位然后否定结果,它也不起作用
0赞 Brian Magnuson 12/12/2017
@KhoaVo 我向你保证,确实如此。请注意,您需要比当前拥有的“nor”门多一个“或”门。