cadence indago征程(二)如何產生indago database

首先介紹下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文件夾內容。

界面如下所示:


之後,就要介紹下,該軟件,如何使用。

更多內容,訪問我的個人網站:

http://www.lujun.org.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章