卢骏 · 2020年06月11日

irun工具检测TB环境零延时无限循环

在写TB代码时,如果循环退出条件没注意,可能使循环一直不能退出,而且该循环又是没有延时的,因此就出现了zero-delay(零延时)的无限循环。

如下循环代码:
1.png

本来每次循环,i会加一,当i不小于50,就会退出循环。但是因为在循环体内,将i又减一,因此,循环退出条件不能满足,程序就会一直卡在这个循环中。

仿真命令

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

仿真现象如下,irun工具就卡住了。
2.png

在这种情况下,就需要对TB进行调试,但是如果TB的代码比较负责,那么想找到这个零延时的无限循环,可就不好找了。

irun提供了 +linedebug 编译选项,可以实现代码的调试。

仿真命令

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

编译的过程中,会提示warning,提示+linedebug会有仿真性能影响。所以如果不是为了调试这种零延时的无限循环情况,请不要加上该选项。
3.png

仿真现象如下,发现irun工具还是卡住了。
4.png

按crtl-c,停下仿真。然后神奇的现象出现了。
5.png

打印出了,出现零延时无限循环的代码位置。

经过测试,发现+linedebug选项,也可以debug RTL中零延时组合逻辑。

更多相关阅读

IES low-power中的set_sim_control命令
pxp的ixcom模式,memory不能定义太大问题
irun仿真,竞争产生毛刺,使wait条件满足

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
20194
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息