微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

4 位加法器添加不正确

如何解决4 位加法器添加不正确

我正在使用 Verilog 中的 1 位加法器创建一个 4 位加法器,但遇到了我的 4 位加法器添加不正确的问题。

这是我的代码

1 位

   module ab_fulladd (A,B,Cin,S,Cout);
output Cout,S;
input A,Cin;
wire w1,w2,w3;
xor G1(S,A,Cin);
and
 G2(w1,B),G3(w2,Cin),G4(w3,Cin);
or
 G5(Cout,w1,w3);
endmodule

4 位

    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[i],b[i],c[i],sum[i]);  

else if (i == size-1)  

     ab_fulladd  fa(a[i],c[i-1],sum[i]);  

else  

    ab_fulladd fa (a[i],sum[i]);  

end endgenerate  

endmodule

我的 4 位在波形中叠加得不好。你能帮我吗?

解决方法

您有一个端口连接错误。您错误地连接了 sumc 信号,因为您使用了按顺序连接。为避免这种常见类型的错误,请使用按名称连接。更改:

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,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]),.S(sum[i]));

else if (i == size-1)  

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

else  

    ab_fulladd fa (.A(a[i]),.S(sum[i]));

end endgenerate  

endmodule

它在 edaplayground 上的多个模拟器上编译(注册一个免费帐户)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。