我已经获得了此代码片段。它是标准实例,但为什么使用gen_srl16
?我一直认为SRL16E srl16e (...
应该足够了。
genvar i;
generate
for (i=0;i<WIDTH;i=i+1)
begin :
gen_srl16
SRL16E srl16e(
.Q(dataout[i]),
.A0(a[0]),.A1(a[1]),.A2(a[2]),.A3(a[3]),
.CE(write),.CLK(clk),.D(datain[i])); // CE -clock enable
end
endgenerate
答案 0 :(得分:2)
在这种情况下,gen_srl16
只是generate for-loop
的名称。它与子模块实例化无关。
遵循Verilog规范(IEEE Std 1800-2012,ch.27.4):
在循环中生成块生成构造可以命名或未命名(...)如果生成块被命名,则它是生成块实例数组的声明。此数组中的索引值是精化过程中genvar假定的值。这可以是稀疏数组,因为genvar值不必形成连续的整数范围。即使循环生成方案没有生成生成块的实例,也认为该数组已被声明。