[VCS]在Verdi中找出Glitch

                         VCS在Verdi中找出Glitch

       前言:在验证RTL过程中,我们可能会遇到仿真Hang住的情况,那么怎么去定位到RTL中呢?

一、Zero delay loop导致的Simulation Hang

  • 需要加VCS Option:+vcs+loopreport +vcs+loopdetect +fsdb+glitch=0 +fsdb+region

二、找出Glitch对仿真结果的影响

  • 添加VCS Option:-debug_access+all +fsdb+delta

  • 在Verdi中Trace: 打開Verdi > 載入fsdb > 挑選想觀察的訊號 > 按工具列View > 點選Display Glitch > 如果這個fsdb裡面有Glitch存在,那就會以紅色星號 * 表示

Q: 我一定要把fsdb打開,才知道有沒有Glitch存在嗎?

A: 不用,只要有在Compile + Simulation階段指定上述的VCS option,那可以直接對fsdb檔案輸入:fsdbdebug -info <fsdb name>;如果它最後有顯示 "This fsdb file has glitches",並且當前環境使用的Verdi的版本大於201712SP2-1,那可以用:fsdbdebug -show_glitch <fsdb name>列出有哪些地方有glitch

  •  Debug方法一:將游標指定在"有Glitch的那個時間點",工具列View > Expand Delta > Expand/Collapse Time at Cursor > 就可以看到在這個時間點上,訊號是怎麼變化的
  • Debug方法二:

如果想看這些訊號在SystemVerilog是怎麼作排程(Schedule),工具列View > Expand Delta > 打開Region mode;即可看到這些訊號是怎麼在Event region跳動的

簡單來說:

寫在module...endmodule裡面的code,執行順序是Active > Inactive > Nonblocking Assignment(NBA)

寫在program...endprogram裡面的code,會先等待module/endmodule部分完成後再接著處理,執行順序是Re-Active > Re-Inactive > Re-NBA

我們可以從這張圖看到有"四個顏色"的區域,代表這個fsdb所對應的*.sv中一定存在module和program

  •  Debug方法三:

    看波形會讓你/妳頭昏?那就將游標對準有Glitch的那個時間點 > 選擇想要看的訊號 > 工具列Tools > Event Sequence... > OK > Event sequence視窗會顯示訊號的跳動順序

  • 总结
             说明                                                           Option

+fsdb+delta

是由三個指令組合而成

+fsdb+glitch=0指定Glitch的儲存數量,範圍是0~254,這裡設定為0,代表儲存所有Glitch
+fsdb+region開啟Region mode功能(Debug方法二)
+fsdb+sequential開啟Sequence mode功能(Debug方法三)

Synopsys的DVE(Discovery Visualization Environment)也可以看到Glitch和Delta cycle

只要在compile階段指定:vcs <other options> -debug_access+all,sim階段指定:simv <other options> -gui(或者導出vcd檔案)即可

  1. 打開DVE(dve &) > 工具列Simulator > Capture Delta Cycle Values > 在Source code點選想觀察的訊號 > 按右鍵Add To Waves > New Wave View
  2. 打開Wave視窗 > 工具列Simulator > Start/Continue > 跑完模擬後點選想要看的時間點 > 工具列View > Delta Cycle > Expand Time也可以看到一樣的結果

只不過DVE的波形檔案不支援fsdb,它反而需要*.vcd(Value Change Dumping)檔案

三、快速找出位拼接的信号中,某个信号为第几bit 

  • Verdi (2020/03-SP2 和以後的版本)
  • 在目标信号(l1_int_src[127:0])身上点右键,依次选择:new schematic → connectivity
  • 然后在弹出的Schematic中依次点选View --> InstPort Name
  • 然後找到接點
  • 就能發現區間!

四、在Verdi中抓取function/task内的信号

  • -debug_access+all +fsdb+functions

在调试门仿时,你可能会遇到一个问题,即add_seq_delay。这个问题可能会导致仿真时间无法推进。为了解决这个问题,你可以尝试使用一些选项和命令。其中,使用-cm_glitch 0选项可以对coverage起效果,但不会影响仿真结果。另外,使用+delay_mode_zero、+updsched和-add_seq_delay 1ps可以在waveform上看到glitch效果。如果需要解决zero delay loop问题,你可以使用一个监测loop的tcl小脚本,在ucli中source该脚本,并执行loop_detect命令来检测loop。此外,你还可以使用+nospecify选项来忽略specify路径延时,使用+notimingcheck选项来关闭时序检查,以及使用-add_seq_delay 0.01ns选项来设置或覆盖时序UDP的延时。希望这些方法能够帮助你解决add_seq_delay问题。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [[DV]Debug simulation hang的一些技巧](https://blog.csdn.net/gsjthxy/article/details/107207452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [VCS后仿调试记录(Pre-PR)](https://blog.csdn.net/yumimicky/article/details/124548631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

元直数字电路验证

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

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

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

打赏作者

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

抵扣说明:

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

余额充值