Question
Je ne sais pas ce qui ne va pas avec le code ci-dessous, quelqu'un peut me aider à déboguer
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
La solution
Votre code a une boucle infinie. Vous avez déclaré i
comme reg 5 bits, ce qui signifie que sa gamme de valeurs est (décimal) 0 à 31. Mais, pour vos contrôles boucle si de i < 32
, ce qui est toujours vrai.
Une fois que i = 31, i
est incrémenté et roule à 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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow