引言
在RTL设计中,很多情况下需要编写很多结构相同但参数不同的语句,或者要对一个模块进行多次实例化,这时如果在参数量很大的的情况下,机械的列举就会显得代码很冗余,所以Verilog则提供了generate语句来很方便地解决了这个问题。
实例
在这个实例中,我们利用generate语句演示了如何用1位全加器来实现100位串行进位全加器。
1位全加器:
module fulladd(input a,
input b,
input cin,
output sum,
output cout);
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
100位串行进位全加器:
module fulladd100(
input [99:0] a, b,
input cin,
output [99:0] cout,
output [99:0] sum );
fulladd demo1(.a(a[0]),.b(b[0]),.cin(cin),.cout(cout[0]),.sum(sum[0]));
genvar i;
generate
for(i=1; i<100;i++) begin:block1
fulladd demo2(.a(a[i]),.b(b[i]),.cin(cout[i-1]),.cout(cout[i]),.sum(sum[i]));
end
endgenerate
endmodule