Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continous assignment,initial和always。在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。
genvar为新增数据类型,存储正的integer。在generate语句中使用的index必须定义成genvar类型。localparam与parameter有些类似,不过其不能通过redefinition改变值。除了可以在generate语句中使用if-else,case外,还能使用for语句进行循环
例如:
generate
genvar j ;
for(j=0;j<=INST_NUM;j=j+1)
begin : inst
dff #(PARAMETER) unit(.clk(clk),
.ena(ena),
.in(in),
.out(out)
) ;
end
endgenerate
1,genvar后面的for,变量必须是genvar变量;generate+if,不如`ifdef `else `endif
2,for里必须有begin,哪怕只有一句
3,begin必须有名称,原因见4
4,这里例化的模块名称是inst[j].unit
5,generate语句可以看作是标准化为块的综合指令