2010-01-20 5 views
0

Je ne sais pas ce qui ne va pas avec le code ci-dessous, quelqu'un peut me aider à déboguerdébogage 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 

Répondre

8

Votre code a une boucle infinie. Vous avez déclaré i en tant que reg à 5 bits, ce qui signifie que sa plage de valeurs est (décimale) de 0 à 31. Mais, votre boucle for vérifie si i < 32, ce qui est toujours vrai. Une fois i = 31, i est incrémenté et passe à 0.

$display est votre ami. Si vous ajoutez à votre boucle, vous verrez le problème:

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

Je pense que vous voulez i<31.

Ou, peut-être vous voulez OU tous les bits de a ensemble, en utilisant le bit-wise opérateur OR:

s = |a; 

Vous devez expliquer en mots ce que vous essayez d'atteindre.

Questions connexes