[DV]Debug simulation hang的一些技巧

本文分享了DebugSimulationHung住的技巧,包括基本方法如在循环体前后添加打印信息,高阶方法如利用VCSOption进行单步调试,以及常见导致SimulationHung的代码总结。还讨论了Coverageissue解决方案。

                      Debug simulation hang的一些技巧

 

       前言:作为DV,经常碰到各种simulation hang住的情况,比如使用wait忘了加delay、forever下面的blocking语句放在了if()语句里面,但是if()表达式不成立等等,有时候很难通过打log来定位导致Simulation Hung住的代码段。本文将分享一些Debug Simulation Hung住的技巧

 

一、基本方法

       在初次起环境的时候,在所有的循环体前中后都写上打印信息,待TB Simulation PASS之后,提高该信息的打印等级。

 

二、高阶方法

       通过增加VCS Option来实现单步调试,以定位导致Simulation Hung的代码,步骤如下:

  1. 使用DVE,在VCS compile option 中加-debug_all,在simulation option中加-gui,在DVE中设定断点然后simulation step by step。这种方法其实还是蛮繁琐的,因为即使1个cycle内就会有上万个step,一个step一个step点下去其实还是很耗时间。
  2. 同样在compile option中加-debug_all,在simulation option中加:-ucli -i tmp.ucli
  3. 在tmp.ucli中可以标注仿真时间,然后从这个时间过后开始step运行,从而找到死循环。(如下example,run 1000ns后,开始step by step执行,可以自己预期一下多少step后进行到死循环,如果少了可以 多写一些)
  4. tmp.ucli ex:
run 1000ns
step
step
...
q


三、常见的导致Simulation Hung的代码总结

 3.1、blocking port

 

 3.2、do begin end waile();条件很成立

 

四、Coverage issue

       某些comb condition coverage可能由於glitch的存在會導致理論上打不到的點被誤打到。

  • Solution

  1. -cm_glitch 0 option可以起一定的效果,注意這個option只針對coverage起效,并不影響仿真結果
  2. +delay_mode_zero, +updsched -add_seq_delay 1ps, 作用是墊一個delay 0, 其實就是把update 值的動作拿到最後再做
  3. 如果需要在waveform上看到這個glitch可以加+fsdb+glitch=0 +fsdb+sequential +fsdb+region

 

五、参考文献

  1. http://blog.eetop.cn/calvin

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元直数字电路验证

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值