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
Était-ce utile?

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
scroll top