編寫RTL,如果不注意,可能會寫出zero-delay(零延時)的組合邏輯,也就是組合邏輯的輸出,直接反饋到組合邏輯的輸入上。如下圖中組合邏輯,就是零延時的組合邏輯。

對於這樣零延時的組合邏輯,在仿真的時候,仿真工具會一直卡在這個仿真時間處,不會向前走。

代碼如下,testbench中,例化了一個零延時組合邏輯模塊。

仿真命令

irun -64 –sv +access+wrc zero_dut.v testbench.v

仿真結果如下,run之後,仿真環境就卡住了。

irun工具,提供了 –gateloopwarn 選項,用於檢測這種零延時的組合邏輯。

irun -64 –sv +access+wrc -gateloopwarn zero_dut.v testbench.v

執行結果如下:

*W,TRZDGOC: Possible zero-delay gate oscillation detected.

使用simvision工具,進行調試,命令如下:

irun -64 –sv +access+wrc -gateloopwarn zero_dut.v testbench.v -gui

在console界面中,輸入run,開始仿真。

打印,檢測到零延時組合邏輯。

輸入 driver –active,會打印出,工具認爲的零延時組合邏輯的RTL代碼位置。

通過上面的方法,就可以debug出RTL中,零延時的組合邏輯。

對於-gateloopwarn選項,這個是編譯選項,不是仿真選項。

招聘信息

查看原文 >>
相關文章