Verilog 4位加法器加法不正确

Verilog 4位加法器加法不正确,verilog,modelsim,quartus,Verilog,Modelsim,Quartus,我正在用Verilog中的1位加法器创建一个4位加法器,并且面临一个问题,即我的4位加法器不能正确相加 以下是我的代码: 1比特 4位 模块add4bit_参数化(a、b、cin、cout、sum); 参数大小=4; 输入[size-1:0]a、b; 输入cin; 输出电流; 输出[size-1:0]和; 电线[尺寸-2:0]c; genvar i; 生成 对于(i=0;i

我正在用Verilog中的1位加法器创建一个4位加法器,并且面临一个问题,即我的4位加法器不能正确相加

以下是我的代码:

1比特

4位

模块add4bit_参数化(a、b、cin、cout、sum);
参数大小=4;
输入[size-1:0]a、b;
输入cin;
输出电流;
输出[size-1:0]和;
电线[尺寸-2:0]c;
genvar i;
生成
对于(i=0;i

我的4位在波形中加起来不好。你能帮我一下吗?

你的端口连接有问题。您错误地连接了
sum
c
信号,因为您使用了按顺序连接。为了避免这种常见的错误,请使用按名称连接。更改:

ab_fulladd fa (a[i], b[i], cin, c[i], sum[i]);
致:

对所有实例重复此操作。以下是完整的模块代码:

module add4bit_parametric (a, b, cin, cout, sum);  

parameter size = 4;  

input [size-1:0] a, b; 
input cin;  
output cout;  
output [size-1:0] sum;  
wire [size-2:0] c; 

 genvar i;  

generate  

for (i = 0; i < size; i = i + 1) begin: adder 

if (i == 0)  

      ab_fulladd fa (.A(a[i]), .B(b[i]), .Cin(cin), .Cout(c[i]), .S(sum[i]));

else if (i == size-1)  

     ab_fulladd  fa(.A(a[i]), .B(b[i]), .Cin(c[i-1]), .Cout(cout), .S(sum[i]));

else  

    ab_fulladd fa (.A(a[i]), .B(b[i]), .Cin(c[i-1]), .Cout(c[i]), .S(sum[i]));

end endgenerate  

endmodule
模块add4bit_参数化(a、b、cin、cout、sum);
参数大小=4;
输入[size-1:0]a、b;
输入cin;
输出电流;
输出[size-1:0]和;
电线[尺寸-2:0]c;
genvar i;
生成
对于(i=0;i
它在上的多个模拟器上编译(注册一个免费帐户)

ab_fulladd fa (a[i], b[i], cin, c[i], sum[i]);
ab_fulladd fa (.A(a[i]), .B(b[i]), .Cin(cin), .Cout(c[i]), .S(sum[i]));
module add4bit_parametric (a, b, cin, cout, sum);  

parameter size = 4;  

input [size-1:0] a, b; 
input cin;  
output cout;  
output [size-1:0] sum;  
wire [size-2:0] c; 

 genvar i;  

generate  

for (i = 0; i < size; i = i + 1) begin: adder 

if (i == 0)  

      ab_fulladd fa (.A(a[i]), .B(b[i]), .Cin(cin), .Cout(c[i]), .S(sum[i]));

else if (i == size-1)  

     ab_fulladd  fa(.A(a[i]), .B(b[i]), .Cin(c[i-1]), .Cout(cout), .S(sum[i]));

else  

    ab_fulladd fa (.A(a[i]), .B(b[i]), .Cin(c[i-1]), .Cout(c[i]), .S(sum[i]));

end endgenerate  

endmodule