Generate语句常用于编写可配置的、可综合的RTL的设计结构。它可用于创建模块的多个实例化,或者有条件的实例化代码块。
generate for
在使用时必须先在genvar声明中声明循环中使用的索引变量名,然后才能使用它。genvar声明的索引变量被用作整数用来判断generate循环。genvar声明可以是generate结构的内部或外部区域
genvar i;
generate for (i=0;i<N;i=i+1)
begin:data
al al_inst(
a[i],
b[i]
);
end
条件if-generate构造
generate
if(1)
begin:
u1 mux_case mc(
.a(a),
.b(b),
.sel(sel),
.out(out)
);
end
else
begin:u1 mux_assign ma(
.a(a),
.b(b),
.sel(sel),
.out(out)
);
end
endgenerate
case-generate
与if-generate类似,case-generate也可用于从几个块中有条件地选择一个代码块。它的用法类似于基本case语句,并且if-generate中的所有规则也适用于case-generate块。