1

我不知道下面的代码有什么问题。有人可以帮我调试吗?

module iloop(z,a);
    input [31:0] a;
    output z;
    reg [4:0] i;
    reg s, z;
    initial begin
        s = 0;
        for(i=0; i<32; i=i+1)  s = s | a[i];
        z = !s;
    end
endmodule
4

1 回答 1

8

您的代码有一个无限循环。您已声明i为 5 位 reg,这意味着它的值范围是(十进制)0 到 31。但是,您的 for 循环会检查 if i < 32,这始终是正确的。一旦 i=31,i递增并翻转到 0。

$display是你的朋友。如果将其添加到 for 循环中,您将看到问题:

for(i=0; i<32; i=i+1) begin $display(i); s = s | a[i]; end

我想你想要i<31

或者,也许您想a使用按位 OR 运算符对所有位进行或运算:

s = |a;

你应该用文字解释你想要达到的目标。

于 2010-01-20T19:52:48.063 回答