J'essaie d'apprendre Verilog et j'ai ce code simple

module division (
    output reg [14:0] A,
    input [14:0] D);
    
    reg[4:0] i;

    always @(*) begin
    
        for (i = 14; i >= 0; i = i-1) begin
            
            A[0] = D[i];
            
        end
    end         
endmodule 

Cela renvoie l'erreur : Index out of range for D.. Je ne sais pas pourquoi, puisque D est déclaré sur cet intervalle. Pouvez-vous m'aider s'il vous plaît? Je sais que le code n'a peut-être aucun sens, mais je n'ai inclus que la partie pertinente au problème.

0
FallonPy 9 nov. 2020 à 19:49

1 réponse

Meilleure réponse

Vous avez déclaré i comme non signé, donc l'expression i >= 0 sera toujours vraie. Lorsque i atteint 0, l'itération suivante est 5'b11111, ce qui est hors limites. Vous devez déclarer i comme integer ou ajouter le mot clé signed.

1
dave_59 9 nov. 2020 à 16:57