首先介紹下indago工具,也就是debug analyzer app。
在debug uvm驗證環境時,我們一般是通過增加打印,然後仿真,根據仿真打印的log,來確定問題。如果打印加得不夠,還得修改源代碼,增加代碼代碼。
有了indago工具之後,就再也不需要在環境中,增加額外的打印代碼。因爲indago工具,可以查看仿真時刻的任意狀態。
那indago是如何實現的了?其中的關鍵,就在於,使用irun工具仿真的時候,需要產生indago database,將仿真過程中的信息,給記錄下來。最後使用indago工具,載入這個database,實現信息的回看。
下面,就說一下,如何生成這個indago database。
一、編譯階段
在編譯階段,要加入如下三個選項:
-
-ida: 使能indago debug analyzer。 如果使用xrun工具,不需要加該選項。
-
-linedebug:支持代碼行調試,必加
-
-uvmlinedebug: 支持uvm庫代碼行調試,可選
二、仿真階段
在仿真階段,需要加入 +UVM_HYPERLINKS=ON 選項,和-input run.tcl 選項,來指定仿真所需要的tcl文件。
在run.tcl中,可以精細化的控制indago database生成。因爲產生indago database會降低仿真速度,因此需要使用run.tcl,來精細化控制,database的生成過程。
下面是一個參考的run.tcl腳本。
ida_probe -log -sv_flow -uvm_reg -log_objects -sv_modules -wave -wave_probe_args="top_tb -depth all –all memories"
run
exit
三、ida_probe命令
ida_probe,指定database中記錄產生的數據。
這個命令很重要,因爲後面indago能回看的數據,完全是由這個命令,來指定的。比如,ida_probe,指定了database要記錄波形,那麼將來在indago工具中,纔可以看到波形。
下圖,是ida_probe命令的說明:
這裏,說明一下這個命令的一些常用選項:
1、-start_time/-end_time
指定database記錄仿真狀態的起始時間和結束時間。主要用來,記錄關鍵一段仿真過程的狀態。
2、-log
記錄打印的信息
3、-log_objects
記錄打印信息中的,動態對象。
4、-uvm
記錄uvm package信息。如果使用這個選項,需要編譯帶上 –linedebug 選項。
開啓這個選項,會將uvm的基類,比如uvm_test,uvm_env等這些基類進行記錄,這樣將來在indago工具中,可以在這些基類中,回看仿真過程。
如果不關心uvm基類的底層過程,可以不用加這個選項。
5、-uvm_reg
記錄uvm_reg的信息,需要在編譯選項,加入 –uvmlinedebug。當uvm環境中,有uvm寄存器模型,需要將該選項加上。
6、-wava/-wave_probe_args=xxx
-wave開啓波形記錄。 -wave_probe_args,指定波形記錄的形式。xxx參數,是傳遞給probe的參數。
對於probe命令,其說明如下:
如-wave_probe_args= "dut_top -depth all –all memories",表示記錄dut_top模塊的內部信號波形,以及該模塊之下所有模塊的內部波形。因爲還有-all選項,因此還會記錄memory的波形。
7、-sv_files
允許記錄systemverilog文件
8、-sv_flow
允許記錄systemverilog信息
9、-sv_modules
允許記錄systemverilog的module信息。默認爲是不記錄systemverilog的module信息的。
10、-sv_packages= "pkg"
記錄指定systemverilog package的信息
11、-include_build_phase
記錄systemverilog flow中,build phase的信息。默認爲uvm,不記錄build phase的信息,如果想要記錄,需要加入這個選項。
12、-ingore_sv_files= "files"
不記錄,指定的sv文件。可以使用匹配表達式
13、-ignore_sv_instances= "insts"
不記錄,指定的sv的模塊。
-ignore_sv_instances= "top.router",不記錄top下router模塊的信息。top.router必須是module,而不能是動態對象(比如class對象)。
14、-ignore_sv_packages= "pkgs"
不記錄,指定的systemverilog package信息。
15、-ignore_sv_functions= "functs"
不記錄,指定systemverilog的function和task。
例如,-ignore_sv_functions= "bar*" ,不記錄bar開頭的函數和任務
16、例子
```tcl ida_probe –log –sv_flow –ignore_sv_packages="cdn_gpio cdn_mem" ```表示,記錄log,以及systemverilog,但是不記錄cnd_gpio和cdn_mem這2個package。
ida_probe –log –start_time=100ns –end_time=20000ns –wave –wave_probe_args="dut_top –depth all"
表示,記錄從100ns開始,200000ns結束,在這一段時間中,記錄log,和波形,波形記錄dut_top模塊以及這個模塊之下的所有信息。
##17、ida_probe命令小結
因爲使用ida_probe之後,會降低仿真速度,因此需要合理的使用提供的選項,記錄關鍵的信息。而不是全記錄。
比如不需要記錄RTL波形,那麼就不要加-wave選項。
比如,關心一段時間的仿真狀態,那麼就要使用-start_time/-end_time,這兩個選項。來限定記錄的時間。
四、indago啓動
通過run.tcl腳本,指定產生database的信息。irun工具仿真完畢後,會在當前目錄下,生成ida.db文件夾。
直接使用indago命令,啓動indago工具,indago會自動載入ida.db文件夾內容。
界面如下所示:
之後,就要介紹下,該軟件,如何使用。
更多內容,訪問我的個人網站: