答案如下:
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
wire [99:0] cout_mid; //中间变量,每位向量值固定所以不需要寄存
bcd_fadd add1(
.a(a[3:0]) ,
.b(b[3:0]) ,
.cin(cin),
.cout(cout_mid[0]),
.sum(sum [3:0])); // 第一个例化比较特殊,单独领出来写
genvar i ; //genvar和generate 是用在重复例化专用的函数,注意要用begin和单独的名字
generate
for (i=1; i<100; i=i+1) begin : add_gen
bcd_fadd add2 (.a(a[i*4+3:i*4]), .b(b[i*4+3:i*4]), .cin(cout_mid[i-1]), .cout(cout_mid[i]), .sum(sum[i*4+3:i*4]));
end
endgenerate
assign cout = cout_mid[99];
endmodule