module top_module(
input [399:0] a, b,
input cin,
output cout,
output [399:0] sum );
wire [99:0] cout_; //实例化一个数组
bcd_fadd u_fadd(a[3:0],b[3:0],cin,cout_[0],sum[3:0]);
generate
genvar i;
for(i = 1; i<=99;i++)begin : bcd
bcd_fadd u_fadd(a[(4*(i+1)-1):(4*(i))],b[(4*(i+1)-1):(4*(i))],cout_[i-1],cout_[i],sum[(4*(i+1)-1):(4*(i))]);
end
endgenerate
assign cout = cout_[99];
endmodule
一开始看到这个题直接用for循环怎么都做不出来,查了才知道for里不能直接调用module,傻乎乎搞了几个小时。效率太低应该早点搜答案。
然后才去学的generate来用(才初学,之前都不知道语法)
generate
可以对module、reg、assign、always、task等语句或者模块进行复制
必须使用genvar申明一个循环变量; begin 后需要加标签(即复制的部分的标签);必须在begin end里进行循环、复制。
endgenerate