2015-08-18 59 views
0

我有這段代碼片段。這是一個標準實例,但爲什麼使用gen_srl16
我一直認爲SRL16E srl16e (...應該就夠了。爲什麼在標準的「SRL16E」實例化中使用「gen_srl16」?

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 

回答

2

在這種情況下gen_srl16只是一個generate for-loop的名字。它與子模塊實例化無關。

繼Verilog的規格(IEEE Std 1800-2012,CH 27.4):

產生循環塊產生結構可有名或無名的(...)如果產生塊而得名,它是一個宣言生成塊實例數組。該數組中的索引值是genvar在精化過程中所假定的值。這可以是一個稀疏數組,因爲genvar值不必形成連續的整數範圍。即使循環生成方案不生成生成塊的實例,也會將該數組視爲已聲明。

+0

Thx!幫了我很多。 – AlexTheGalax

+0

但爲什麼有人應該使用這個「生成塊實例數組的聲明」? – AlexTheGalax

+0

由於可以使用分層名稱引用此塊中的聲明,而不是由生成塊本身實例化的層次結構內的聲明。請檢查我鏈接的文件以查找一些實際示例。 – Qiu

相關問題