2013-07-19 84 views
1

我需要連接到已生成的SystemVerilog接口的端口。但我不知道生成的接口的實例名稱是什麼,所以我無法弄清楚如何連接它們。連接到SV生成的接口

例如,如果我生成這樣的代碼:

generate 
    for (genvar abc_if_inst = 0; abc_if_inst < NUM_ABC; abc_if_inst++) 
    abc_if if_abc (.clk(clk), .resetn(resetn)); 
endgenerate 

如何引用的接口信號,例如我假設它是這樣的:

.port_x (if_abc_GEN_INST_NUM.port_x), 
.port_y (if_abc_GEN_INST_NUM.port_y), 

回答

1

最好是把begin - end周圍的for循環的內容和應用標籤。如果您不使用標籤,則自動標籤將被添加爲genblk,後綴爲唯一的ID號。 IEEE Std 1800-2012的第27.6節詳細說明了生成塊命名的作品。第27節是關於生成塊的。一個例子約產生for循環頁753

爲您提供的代碼,請嘗試:

generate 
    for (genvar abc_if_inst=0; abc_if_inst<NUM_ABC; abc_if_inst++) begin : mygen 
    abc_if if_abc (.clk(clk), .resetn(resetn)); 
    end 
endgenerate 

然後,您可以通過連接:

.port_x (mygen[0].if_abc.port_x), 
.port_y (mygen[0].if_abc.port_y), 
// ... 
.port_x (mygen[NUM_ABC-1].if_abc.port_x), 
.port_y (mygen[NUM_ABC-1].if_abc.port_y), 

注意的mygen需求指數成爲常數,例如參數,另一種genvar或硬編碼值。

+0

很好的回答,謝謝。但是不應該提及接口實例名稱嗎?也許是這樣的: .port_x(mygen [0] .if_abc.port_x), – WestHamster

+0

@WestHamster好抓,固定。 – Greg