2010-01-20 27 views
0

我不知道什么是错用下面的代码,可以有人帮我调试的Verilog调试

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 

回答

8

你的代码中有一个无限循环。您已声明i是一个5位的reg,这意味着它的值范围是(十进制)0到31.但是,for循环会检查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一起位,逐位或运算:

s = |a; 

你应该在什么样的话,你正在努力实现的解释。