Ich versuche, einen BCD-Addierer in Verilog schreiben, aber ich habe Probleme mit einem der Module. Genauer gesagt, der Addierer, der zwei BCD-Ziffern aufnimmt und hinzufügt. Also, die Idee ist, wenn die Summe der zwei Ziffern kleiner oder gleich neun ist, dann ist es richtig. Wenn es jedoch größer ist, muss ein Offset von 6 hinzugefügt werden. Hier ist mein Verilog-Code so weit:BCD Adder in Verilog
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
Auch immer, wenn ich versuche, es in Xilinx zu synthetisieren, bekomme ich folgende Fehler:
ERROR: HDLCompilers: 247 - "DIGITADD.v" Linie 33 Referenz skalare Draht 'c2' ist keine juristische reg oder variable lvalue
ERROR: HDLCompilers: 247 - "DIGITADD.v" Linie 33 Verweis auf skalare Draht 's2' ist keine juristische reg oder variable lvalue
FEHLER: HDLCompilers: 42 - "DIGITADD.v" Zeile 33 Illegale linke Seite des Verfahrens assi gn
Ich habe versucht, einige Dinge wie Ändern von Draht zu reg ändern, aber ich kann immer noch nicht zur Arbeit. Jede Hilfe wird geschätzt.
Es ist okay, habe ich jetzt herausgefunden. Es ist im Grunde nur Verilog nervig, aber ein paar Tipps nur für den Fall, dass jemand dies findet und das gleiche Problem hat. 1. Setzen Sie keine Assign-Anweisungen in immer Blöcke 2. In diesem Fall sollte Draht sein reg 3. Grundsätzlich deklarieren Sie reg [4: 0] s2 und zuweisen SUM = s2 [3: 0] und COUT s2 [4] 4. Dann ist es viel einfacher, die Logik zu tun – DemonicImpact
Sie können Ihre eigene Antwort hinzufügen und dann akzeptieren. Auf diese Weise wird diese Frage nicht in der Liste der unbeantworteten Fragen angezeigt. – George
Okay danke. Ich wusste das nicht, für den Fall, dass es nicht offensichtlich ist, bin ich immer noch etwas neu. – DemonicImpact