如何解决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 位在波形中叠加得不好。你能帮我吗?
解决方法
您有一个端口连接错误。您错误地连接了 sum
和 c
信号,因为您使用了按顺序连接。为避免这种常见类型的错误,请使用按名称连接。更改:
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 举报,一经查实,本站将立刻删除。