我正在尝试在 verilog 中设计一个 4 位加法减法器。这只是我用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
我的编译器(xilinx 10.1)一直说“if 附近出现语法错误”。我尝试了许多不同的转换方法,包括仅使用以 Y 作为参数的 Case,然后检查所有可能的 4 位组合,并将它们转换为二进制补码。
Z 决定加法器是做减法还是加法。如果为 0,则表示减法,我想将 y 转换为二进制补码,然后进行常规加法。我确定加法器的其余部分是正确的,我只是不知道我要转换的部分有什么问题。