J'ai travaillé sur un programme Verilog qui est supposé ajouter une entrée 8 bits signée à la sortie 16 bits à chaque incrément d'horloge et réinitialiser à la réception d'un signal de réinitialisation. La partie d'addition fonctionne bien, et même en ajoutant la valeur 1 négative fonctionne, mais j'obtiens des résultats étranges dans la simulation pour des nombres moins que cela. Cela fait environ un an que j'ai utilisé Verilog pour la dernière fois, et malgré tout ce que je peux penser, je ne sais pas quel est le problème. Voici ce que j'ai en ce code:Verilog Signé Addition Erreur de soustraction
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
Voici mon entrée de simulation:
Et voici la sortie que je reçois.
Il semble comme une erreur droite en avant dans mon programme, mais je ne peux pas l'identifier.
Bienvenue sur StackOverflow. Il est difficile de lire votre code parce que vous ne l'avez pas indenté correctement. Vous ne montrez pas non plus ce que vous attendez d'un résultat correct par rapport au résultat réel. –