Frage

Ich versuche, eine BCD Adder in Verilog zu schreiben, aber ich habe Probleme mit einem der Module. Genauer gesagt, der Addierer, die zwei Ziffern BCD nimmt und addiert sie. So ist die Idee, wenn die Summe der beiden Ziffern kleiner als oder gleich neun, dann ist es richtig ist. Allerdings, wenn es größer ist, dann hat ein Offset von 6 hinzugefügt werden. Hier ist mein Verilog-Code so weit:

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

Wie auch immer, wenn ich versuche, es in Xilinx zu synthetisieren, ich folgende Fehlermeldungen erhalten:

ERROR: HDLCompilers: 247 - "DIGITADD.v" Linie 33 Verweis auf skalare Draht 'c2' ist keine juristische reg oder variable L-Wert

ERROR: HDLCompilers: 247 - "DIGITADD.v" Linie 33 Verweis auf skalare Draht 's2' ist keine juristische reg oder variable L-Wert

ERROR: HDLCompilers: 42 - "DIGITADD.v" -Leitung 33 Illegal linke Seite der prozeduralen assign

Ich habe versucht, einige Dinge zu ändern, wie Draht zu reg zu ändern, aber ich kann es immer noch nicht an der Arbeit. Jede Hilfe ist willkommen.

War es hilfreich?

Lösung

Okay, I figured it out, the correct code is below. Basically, see the comment I made on my question for some tips to remember. Its funny how much simpler this is compared to the mess I had earlier.

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 

Andere Tipps

In plain text, do not have a continuous assignment like "assign" statement in a procedural block i.e. always or initial.

Remember the rule and life is good :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top