4位加法器减法器Verilog代码错误

4位加法器减法器Verilog代码错误,verilog,test-bench,Verilog,Test Bench,我试图在Verilog代码中实现一个4位加法器-减法器,但是我的代码中有一些我无法解决的问题。我不确定测试台或Verilog是否错误。有人能帮我吗?另外,当我尝试模拟它时,它会给出加载错误 我的Verilog代码: module addsubparameter (A, B, OP, C_out, Sum); input A,B; input OP; output C_out; output Sum; wire C_out, Sum; reg assigning; always@(OP) b

我试图在Verilog代码中实现一个4位加法器-减法器,但是我的代码中有一些我无法解决的问题。我不确定测试台或Verilog是否错误。有人能帮我吗?另外,当我尝试模拟它时,它会给出加载错误

我的Verilog代码:

module addsubparameter (A, B, OP, C_out, Sum);

input A,B;
input OP;
output C_out;
output Sum;

wire C_out, Sum;
reg assigning;

always@(OP)
begin
if (OP == 0)
    assigning = A + B + OP;
else
    assigning = A + (~B + 1) + OP;
end

assign {C_out, Sum} = assigning;

endmodule

module adder (a, b, op, cout, sum);
parameter size = 4 ;

input [3:0] a, b;
output [3:0] sum;

input op;
output cout;
wire [2:0] c;

genvar i;
generate
for (i = 0; i < size; i = i + 1) begin: adder
    if (i == 0)
        addsubparameter (a[i], b[i], op, sum[i], c[i]);
    else if (i == 3) 
        addsubparameter (a[i], b[i], c[i-1], cout, sum[i]);
    else
        addsubparameter (a[i], b[i], c[i-1], sum[i], c[i]);
end 
endgenerate
endmodule

您的模拟器应该生成错误和/或警告消息,因为您有语法错误。如果没有,请在EDAPlayde注册一个免费帐户,在那里您可以访问多个模拟器,这些模拟器将产生有用的消息

您需要添加实例名称。例如,我在下面的行中添加了
i0

    addsubparameter i0 (a[i], b[i], op, sum[i], c[i]);
端口连接宽度不匹配,这表示连接错误。这是按位置使用连接时常见的错误类型。您错误地将
sum
信号连接到
cout
端口,反之亦然。您应该改为按名称使用连接。例如,更改:

adder DUT (a,b,op,sum,cout);
致:

对所有实例使用此编码样式

您不会收到模拟警告,但可能会收到关于不完整灵敏度列表的合成警告。更改:

always@(OP)
致:

adder dut (
    .a     (a),
    .b     (b),
    .op    (op),
    .cout  (cout),
    .sum   (sum)
);
always@(OP)
always @*