我不知道下面的代码有什么问题。有人可以帮我调试吗?
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
我不知道下面的代码有什么问题。有人可以帮我调试吗?
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
您的代码有一个无限循环。您已声明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;
你应该用文字解释你想要达到的目标。