J'essaye de concevoir un soustracteur d'additionneur de 4 bits dans verilog. C'est seulement la deuxième chose que j'ai jamais écrite dans Verilog, et je ne connais pas encore la syntaxe correcte. Ce module est que j'ai jusqu'à présent:Comment convertir un nombre en complément à deux dans verilog?
module Question3(carryin, X, Y, Z, S, carryout, overflow);
parameter n = 4;
input carryin, Z;
input [n-1:0]X, Y;
output reg [n-1:0]S;
output reg carryout, overflow;
if(Z==0)
begin
Y = not(y) + 4'b0001;
end
always @(X, Y, carryin)
begin
{carryout, S} = X + Y + carryin;
overflow = carryout^X[n-1]^Y[n-1]^S[n-1];
end
endmodule
Mon compilateur (Xilinx 10.1), ne cesse de dire « Erreur de syntaxe proche si. » J'ai essayé de nombreuses façons de faire la conversion, y compris en utilisant un cas qui prend Y comme argument, puis vérifie toutes les combinaisons 4 bits possibles et les convertit en complément à deux.
Z est ce qui détermine si l'additionneur fait la soustraction ou l'addition. Si c'est 0, cela veut dire soustraction, et je veux convertir y en complément à deux, juste faire des ajouts réguliers. Je suis sûr que le reste de l'additionneur est correct, je ne sais pas quel est le problème avec la partie où je suis en train de convertir.
Est-ce que 'Y_' est censé être' Y_comp1'? –
Personnellement, je ne voudrais pas envelopper l'additionneur entier dans un 'if'. Ce que vous avez écrit implémente deux additionneurs et met ensuite un multiplexeur sur la sortie. Ce que vous voulez, c'est un additionneur avec un multiplexeur sur l'entrée. Vous demandez à l'optimiseur de faire beaucoup. –