generate 的使用,generate是对parameter,module,assign,always等进行复制的操作,同时在内可以用genvar进行正整数的定义,供给循环使用。
module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
//integer i = 0;
wire [399:0]cout_next; //用于下一次进位的cin
//先进行初始化
bcd_fadd bcd_fadd_inst(
.a(a[3:0]),
.b(b[3:0]),
.cin(cin),
.cout(cout_next[0]),
.sum(sum[3:0])
);
assign cout = cout_next[400-4];
//always @ (*)
//generate 可对模块进行复制
generate
genvar i;
for(i = 4; i< 400; i = i + 4)
begin :bcdadd100 // 要加模块名
bcd_fadd bcd_fadd_inst(
.a(a[i+3:i]),
.b(b[i+3:i]),
.cin(cout_next[i-4]),
.cout(cout_next[i]),
.sum(sum[i+3:i])
);
end
endgenerate
endmodule