Question

Je suis en train d'écrire un BCD Adder dans Verilog, mais j'ai du mal avec l'un des modules. Plus précisément, l'additionneur qui prend deux chiffres BCD et les ajoute. Donc, l'idée est de savoir si la somme des deux chiffres est inférieur ou égal à neuf, il est correct. Cependant, si elle est supérieure, un décalage de 6 doit être ajouté. Voici mon code Verilog jusqu'à présent:

module DIGITADD(
    input [3:0] IN_A,
    input [3:0] IN_B,
    input CIN,
    output reg COUT,
    output reg [3:0] SUM
);

wire s2, c2;

always @ ( * ) 
begin
 assign {c2, s2} = IN_A + IN_B + CIN;

 if(s2 <= 9 && c2 == 0) begin
  assign {COUT, SUM} = {c2, s2};
 end
 else if({c2, s2} > 9) begin
  assign {COUT, SUM} = {c2, s2 + 6};
 end
end
endmodule

De toute façon, lorsque je tente de synthétiser dans Xilinx, je reçois les erreurs suivantes:

ERREUR: HDLCompilers: 247 - "DIGITADD.v" ligne 33 référence à un fil scalaire 'c2' est pas un reg juridique ou variable lvalue

ERREUR: HDLCompilers: 247 - "DIGITADD.v" ligne 33 référence au fil scalaire 's2' est pas un reg juridique ou variable lvalue

ERREUR: HDLCompilers: 42 - ligne "DIGITADD.v" 33 côté illégal gauche de procédure Assign

J'ai essayé de changer certaines choses comme changer le fil à reg, mais je ne peux toujours pas au travail. Toute aide est appréciée.

Était-ce utile?

La solution

D'accord, j'ai tout compris, le bon code est ci-dessous. Au fond, voir le commentaire que je fait sur ma question pour quelques conseils à retenir. Son drôle combien plus simple c'est comparé au gâchis que j'avais plus tôt.

module DIGITADD(
    input [3:0] IN_A,
    input [3:0] IN_B,
    input CIN,
    output COUT,
    output [3:0] SUM
    );

reg [4:0] s2;

assign SUM = s2[3:0];
assign COUT = s2[4];

always @ ( * )
begin
    s2 = IN_A + IN_B + CIN;
    if (s2 > 9)
    begin
        s2 = s2 + 6;
    end
end
endmodule 

Autres conseils

Dans le texte brut, ne dispose pas d'une affectation continue comme instruction « Assign » dans un bloc de procédure à savoir toujours ou initial.

Rappelez-vous la règle et la vie est bon: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top