在写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中零延时组合逻辑。
更多相关阅读
IES low-power中的set_sim_control命令
pxp的ixcom模式,memory不能定义太大问题
irun仿真,竞争产生毛刺,使wait条件满足