参考博文:http://www.lujun.org.cn/
1,indago系列工具介绍
indago工具,是cadence工具,推出的一系列debug工具。在启动simvision工具时,就会弹出一个窗口,里面就提到了indago工具。
这套工具,非常的强大,但是就是网上介绍的资料不多。因为,有很多人,都不知道这个工具。
主要包括3个工具:
-
debug analyzer app
-
protocol debug app
-
embedded software debug app,简称eswd工具
这三个工具,我只用过debug analyzer app(之后,均简称为indago)和eswd,这两个工具,后面,就对这个两个工具进行详细的介绍。
对于indago,主要用来debug uvm验证环境,会非常有用,当然也可以用来debug RTL。因为该工具,可以查看仿真过程中任意时刻的仿真状态。除了可以往后单步,还能往前单步。因为需要在仿真过程中,将整个仿真过程给记录,因此带来的一个问题,就是造成仿真速度较慢。
而eswed工具,我认为是针对cpu,最强的软件debug工具。该工具,可以将cpu执行的trace流(需要自己开发monitor,从RTL中,将cpu的执行流抓出来),和elf程序,进行一一对应,并且还能和波形进行对应,让我们可以清晰的指导,cpu在每个时刻,在执行什么程序,以及当前的cpu状态。
2,如何产生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脚本。
1
2
3
|
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
允