卢骏 · 2020年06月01日

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脚本。

 1.    ida_probe -log -sv_flow -uvm_reg -log_objects -sv_modules -wave -wave_probe_args="top_tb -depth all –all memories"

 2.    run

 3.    exit 


三、ida_probe命令

ida_probe,指定database中记录产生的数据。

这个命令很重要,因为后面indago能回看的数据,完全是由这个命令,来指定的。比如,ida_probe,指定了database要记录波形,那么将来在indago工具中,才可以看到波形。

下图,是ida_probe命令的说明:
1.png

这里,说明一下这个命令的一些常用选项:

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命令,其说明如下:

2.png

如-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、-ignore_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、例子
 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文件夹内容。

界面如下所示:
3.png

之后,就要介绍下,该软件,如何使用。

更多相关阅读

vcs回退交互式仿真
交互式仿真下dve和verdi中查看二维数组值
cadence indago征程(一)indago系列工具介绍

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
10974
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息