1.原题
补充:Ripple carry adder :行波进位加法器 又称为逐位进位加法器
2.解答
方法1:当时拿着这道题,就想到的是利用 直接相加的方法来做
本质上是因为verilog中,如果 x+y产生了进位,那么verilog的语法会自动将x+y扩展成5位数。
方法2:利用生成块方法:
需要注意的地方:生成块里面的generate endgenerate中的begin end 必须要使用一个名称来称呼
在网上看到的其他方法:
1.采用实例化模块的方式进行的:
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum);
wire cout0,cout1,cout2;
fadd U1(x[0],y[0],0,cout0,sum[0]);
fadd U2(x[1],y[1],cout0,cout1,sum[1]);
fadd U3(x[2],y[2],cout1,cout2,sum[2]);
fadd U4(x[3],y[3],cout2,sum[4],sum[3]);
endmodule
module fadd (
input a, b, cin,
output cout, sum );
assign {cout,sum} = a + b + cin;
endmodule