在设计中需要使用到多个重复的电路,使用for循环可以简洁清楚的进行实例化。本文参考《IEEE Standard for Verilog®
Hardware Description Language》,版本IEEE_1364_2005,章节12.4。
generate 结构有两种:循环与条件,循环。循环生成构造允许将单个生成块多次实例化到模型中。条件生成构造,包括 if-generate 和 case-generate 构造,最多从一组替代生成块中实例化一个生成块。术语生成方案是指用于确定实例化哪些或多少生成块的方法。它包括出现在生成构造中的条件表达式、案例替代和循环控制语句。使用中使用条件生成结构的较少。因此主要介绍generate-for结构。
这里使用例子进行学习,然后给出几点注意事项。
注意事项如下
module mod_a;
genvar i;
generate
reg a;
for (i=1; i<0; i=i+1) begin: loop_name_a
...
end
endgenerate
endmodule
多级生成循环中的分层生成块实例名称如下图所示。对于生成循环创建的每个块实例,循环的生成块标识符通过在末尾添加“[genvar value]”来索引生成块标识符。后续有使用对其进行补充

条件生成构造,if-generate 和 case-generate,根据细化期间评估的常量表达式,从一组替代生成块中最多选择一个生成块。选定的生成块(如果有)被实例化到模型中。这里不进行其他说明,后续有需要进行补充。