原文鏈接:http://www.lujun.org.cn/?p=1924
我們在驗證的時候,會有對自己寫的驗證代碼進行debug的時候,往往在這個時候,我們基本是通過$display,系統函數來打印我們關心的東西,然后進行debug。但是這樣的效率是很低的。
vcs提供了單步調試的功能,並且能夠配合verdi工具。利用這兩個工具,可以方便我們進行debug。
如以下的UVM驗證環境:
-
flist: file list,包含了環境中需要編譯,仿真的文件
-
get_file.sh: 自動生成flist文件的腳本
-
Makefile: 執行編譯,仿真的makefile
-
source: RTL 源代碼目錄
-
top_tb.sv: 驗證環境頂層
-
uvm_code: UVM驗證代碼目錄
在VCS編譯的時候,要額外加上 -debug_access+all -kdb -lca 這個三個選項參數。這樣,之后生成的simv,才能支持單步調試功能。
即 vcs -debug_access+all -kdb -lca
makefile的vcs目標,對代碼進行編譯,生成simv。
生成simv后,要增加一個選項,-gui=verdi,表示使用verdi這個工具進行單步調試。
makefile的sim目標,代碼仿真,進行單步調試。
執行 make vcs; make run 后,會彈出verdi界面,並且停在0時刻。
此時界面,如下所示,1處為代碼結構,2為代碼區,3為交互式窗口,4為watch窗口。
此時打開波形,時刻停在0時刻,信號還沒有產生波形。
在scoreboard中,設置斷點,查看接收的包信息。
在交互式窗口,輸入run,或者快捷鍵F5,或者菜單欄Simulation->Run/Continue。運行仿真。
此時,仿真會在斷點處停下來。
對get_actual變量,右鍵,Add to Watches->Add to Watch 1。將變量添加到watch中。
因為,此時這個變量,還沒有獲取到值,因此值為null。
在交互式窗口輸入next,或者快捷鍵F10,或者菜單欄 Simulation->Step/Next->Next。
執行到獲取包。將包添加到watch中。
此時,包就不是null,而是有值了,可以查看包中各個變量的值。
此時,波形也會顯示到當前仿真時刻,各個信號的波形。
通過這種,方式,是不是debug,就容易很多了。