Ich habe an einem Verilog-Programm gearbeitet, das bei jedem Clock-Inkrement einen vorzeichenbehafteten 8-Bit-Eingang zum 16-Bit-Ausgang hinzufügen und nach Erhalt eines Reset-Signals zurücksetzen soll. Der Additionsabschnitt funktioniert einwandfrei, und sogar das Hinzufügen des negativen 1-Werts funktioniert, aber ich bekomme merkwürdige Ergebnisse in der Simulation für weniger als das. Es ist ungefähr ein Jahr her, dass ich Verilog zum letzten Mal benutzt habe, und obwohl ich alles versucht habe, was ich mir vorstellen kann, bin ich mir nicht sicher, was das Problem ist. Hier ist, was ich so weit wie Code haben:Verilog Signed Addition Subtraktionsfehler
module varcount (clk, reset, in, out);
input clk, reset;
input [7:0] in;
output reg [15:0] out;
reg [15:0] temp;
reg [15:0]count;
parameter X=1000000;
always @ (posedge clk)
begin
if (in[7] == 1)
begin
temp = 16'b00000000000000001 + !in;
count = count - temp;
if (reset)
begin
count = 0;
out = 0;
end
out = count;
end
else
begin
count = count + in;
if (reset)
begin
count = 0;
out = 0;
end
out = count;
end
end
endmodule
Hier ist meine Simulation Eingang:
Und hier ist die Ausgabe, die ich bekomme.
Es scheint wie ein Straight-Forward-Fehler in meinem Programm, aber ich kann es nicht identifizieren.
Willkommen bei Stackoverflow. Es ist schwierig, den Code zu lesen, weil Sie ihn nicht ordnungsgemäß eingerückt haben. Sie zeigen auch nicht, was Sie erwarten, um das richtige Ergebnis gegenüber dem tatsächlichen Ergebnis zu sein. –