2011-09-07 60 views
0

這是Verilog相關的問題。我正在使用XILINX ISE作爲開發環境。在仿真代碼中訪問Verilog genvar生成的實例

我試圖訪問正在使用genvar自動生成模擬變量,但我收到以下錯誤 - > HDLCompiler:71

問題實施例:

genvar i; 

generate 

for(i=0; i < N; i=i+1) 

begin:Sys_Modules 

    TypeXModule #(.width(10)) xmod(.dataY(dataY))); 

end 

endgenerate 

當我跑的合成或仿真我可以看到創建了Sys_Modules [0..N-1] .xmod實例。

當我嘗試將一行添加到仿真訪問Sys_Modules數組:

Sys_Modules [I] .xmod.dataY

我得到以下錯誤:

HDLCompiler:71 DATAY是沒有在前綴下聲明xmod

有什麼辦法可以在模擬中訪問自動生成的值嗎?

謝謝!

回答

1

對生成的實例編寫分層引用是合法的。該功能在IEEE Verilog標準的2.7.2和12.1.3節中描述。但是,實例下標必須是一個常量,以便它可以在編譯時解析。

+0

謝謝你的回答。 我設法使用常量編譯一個版本。 不幸的是,我有一個使用genvar和參數動態生成的模塊。 for循環從I到N,N被定義爲參數(參數= N)。 使用常量類型會破壞使用genvar for循環的目的。編譯器可以很容易地從參數中確定常量值。如果這是真的,它似乎是Verilog語言設計中的一個疏忽。 – Tibio

1

我覺得你運氣不好。正如你發現的,模擬器似乎並不喜歡指向生成塊的模塊外引用(OOMR)。

最近在製作可參數化的測試臺監視器時遇到了類似的問題。我會根據parameter實例化可變數量的子塊。在此範圍內,我需要在每個實例化的模塊中都有一個頂級.start()任務調用.start()任務。由於此OOMR問題,我無法使用for循環執行此操作。

所以,我最後不得不到:

  • 定義reg的頂級.start()任務切換
  • 寫觸發此reg
  • 這總是塊中的另一個generate部分的always @塊在每個子模塊上調用.start()

如果您真的需要查看您的generate d模塊,也許您可​​以嘗試一種類似上述的解決方法?例如,在頂層有一個總線,並使用generate語句來查看您的原始generate d實例,以將有趣的信號複製/分配到此頂層總線。

+0

thx,顯然我將不得不使用某種類似的技巧... – Tibio

2

您不能在合成的Verilog中使用跨實例分層引用。

+0

謝謝。爲什麼是交叉參考?在genvar模塊中使用時會發生同樣的問題。 – Tibio

+0

引用xmod.dataY從父模塊訪問TypeXModule實例內部的信號dataY。 – 2011-09-13 23:19:09