在寫TB代碼時,如果循環退出條件沒注意,可能使循環一直不能退出,而且該循環又是沒有延時的,因此就出現了zero-delay(零延時)的無限循環。

如下循環代碼:

本來每次循環,i會加一,當i不小於50,就會退出循環。但是因爲在循環體內,將i又減一,因此,循環退出條件不能滿足,程序就會一直卡在這個循環中。

仿真命令

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

仿真現象如下,irun工具就卡住了。

在這種情況下,就需要對TB進行調試,但是如果TB的代碼比較負責,那麼想找到這個零延時的無限循環,可就不好找了。

irun提供了 +linedebug 編譯選項,可以實現代碼的調試。

仿真命令

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

    編譯的過程中,會提示warning,提示+linedebug會有仿真性能影響。所以如果不是爲了調試這種零延時的無限循環情況,請不要加上該選項。

仿真現象如下,發現irun工具還是卡住了。

按crtl-c,停下仿真。然後神奇的現象出現了。

打印出了,出現零延時無限循環的代碼位置。

經過測試,發現+linedebug選項,也可以debug RTL中零延時組合邏輯。

招聘信息

查看原文 >>
相關文章