题干:
You are provided with a BCD one-digit adder named bcd_fadd that adds two BCD digits and carry-in, and produces a sum and carry-out.
module bcd_fadd ( input [3:0] a, input [3:0] b, input cin, output cout, output [3:0] sum );
Instantiate 100 copies of bcd_fadd to create a 100-digit BCD ripple-carry adder. Your adder should add two 100-digit BCD numbers (packed into 400-bit vectors) and a carry-in to produce a 100-digit sum and carry out.
用题目提供的BCD加法器构造一个100位加法器。
解答:
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
wire [99:-1] cc;//连接cin和cout
assign cc[-1] = cin;
genvar i;
generate
for(i=0;i<$bits(a)/4;i++)
begin:BCDadd
bcd_fadd instance1(
.a(a[4*(i+1)-1:4*i]),
.b(b[4*(i+1)-1:4*i]),
.cin(cc[i-1]),
.cout(cc[i]),
.sum(sum[4*(i+1)-1:4*i])
);
end
endgenerate
assign cout = cc[99];
endmodule
generate用法
genvar i(变量名)//可在generate内声明
generate
for(i=0;i<SIZE;i++)
begin: 循环名
//
...
end
endgenerate