VCS+Verdi进行testbench调试

背景:

在进行testbench调试时,使用消息打印或者单纯的ucli进行调试效率较低,利用Verdi进行图形化界面调试可以提升效率。

方法:

编译选项:-kdb

                  -ntb_opts uvm(用于后处理时查看uvm_hierachy_tree)

                  (有时候需要加-full64,不然可能启动不了verdi图形化界面,如果刚开始没加导致启动界面失败,需要删除原来的simv等文件,再重新编译,否则可能会报stack trace之类的错误)

仿真选项:-verdi

tips:

watch:在开始仿真时,会进入到verdi界面。在仿真暂停时,可以在左上角的导航栏切换到class标签(或者第一个instance标签,包含dut top),在搜索栏结合*搜索关注的class,如*refm*,class下面有此class的instance,点到instance,右边会显示member,class里的成员均可见,选择需要关注的成员watch(只进class不进instance时,里面的成员没法watch,且只有断点停在此范围,此范围的变量才可watch),可显示其值,包括联合数组,队列等,注意,class里的方法中的变量不可watch,所以有需要的话,需要改到class里声明变量,而不是在方法里声明。

断点:可在代码里的左边栏左击设置断点,执行到此处时会暂停;也可在member中对选中的变量设置断点,但对于数组,好像没法只关注某个成员的变化。再次点击断点标记,可以不使能此断点,再次点击,删除断点。想要get testbench中的变量时,不一定能get到,这时可以使用show命令看哪些能get到,当代码运行到某个class暂停时,其内的变量都是可以get的,其他class的成员,即使通过uvm_top.xxx的层次化引用,也get不到,所以如果想get某个class,或者某个方法里的变量,可以在其内设置断点。

checkerpoint:设置一个标记点,可以rewind到此点,相当于时光倒流。可用于改变某值,看之后什么情况,然后再回退回去。

UVM_HIERACHY:simv选择中加+UVM_VERDI_TRACE=HIER(UVM_AWARE不包含HIER功能),可以在tools-UVM_DEBUG中选择显示uvm_hierachy tree,看UVM结构树,属于后处理,即仿出波形并停止后,才能进行。
在加载自己的uvm_dpi.cc时,可能会存在无法显示uvm hier的情况,并且加ntb_opts uvm选项会失败(dpi重复),这时可以发现编译log里的Top level没有下图中的uvm_custom_install...文件,而UVM_HEIR就是依赖这些文件,所以需要自己加上这个文件,-top要么不指定,指定就要指定全。

SVA debug: 可方便的进行SVA的调试,观察成功、失败等波形情况,也可添加临时的断言而不用重新编译仿真。需要在仿真时开启fsdbDumpSVA 0 top.xxx,或者在平台文件里调用$fsdbDumpSVA(0,top.xxx),属于后处理,需在波形仿出并停止后才能进行,可通过tools-property-evaluator/analyzer/statistic/add temp sva进行相应的调试。

restore/save session: 可保存回复session

debug c:

verdi可以debug c,前提是使用动态链接库.so,且生成库时需要加入-DMODULE_SIM -g等选项(如果刚开始没加-g,后面加-g重新编译前注意清空之前的生成的.o文件,以免出错)。

 之后,在simulation选项中打开enable c/c++ debug开关,等待片刻后,选择show extern functions,就可以看到加载进来的c程序了,双击c程序进入后,可以设置断点。

 tips1: 设置断点后,c程序为当前scope时,不可保存checkpoint,也不可恢复checkpoint,因为c是不消耗仿真时间的。但可以在进入或跳出c时,操作checkpoint。

tips2:可以对循环变量设置断点,方法是,进入到循环进程后,在local列表中右击对应的循环变量,set breakpoint,在condition中加入相应的条件。也可直接对行设置断点。

tips3:local/member列表里出现 数组名-*数组名的形式时,数组名的value是数组地址,*数组名的value是首个元素值。没法直接看数组中其他元素值。

  

UCLI:

get

force/release

run

具体可以在进入ucli模式时,使用xxx -help查看帮助文档。

目前ucli模式好像没法完成wait(xxx==yyy)的功能?对此,可在Verdi debug界面,通过设置断点时加condition条件完成此功能,命令为stop -change xxx -condition xxx==xxx,但是xxx不是层级化引用的名称(uvm_test_top.env.xxx),而是形如_vcs.abc@edf.xxx这种,只能通过Verdi界面右击相应变量设置,不能直接在ucli命令行输入(?)

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值