卢骏 · 2020年07月02日

VCS与verdi联合进行单步调试

我们在验证的时候,会有对自己写的验证代码进行debug的时候,往往在这个时候,我们基本是通过$display,系统函数来打印我们关心的东西,然后进行debug。但是这样的效率是很低的。

vcs提供了单步调试的功能,并且能够配合verdi工具。利用这两个工具,可以方便我们进行debug。

如以下的UVM验证环境:
1.png

◾flist: file list,包含了环境中需要编译,仿真的文件
◾get_file.sh: 自动生成flist文件的脚本
◾Makefile: 执行编译,仿真的makefile
◾source: RTL 源代码目录
◾top_tb.sv: 验证环境顶层
◾uvm_code: UVM验证代码目录

在VCS编译的时候,要额外加上 -debug_access+all -kdb -lca 这个三个选项参数。这样,之后生成的simv,才能支持单步调试功能。

即 vcs -debug_access+all -kdb -lca

makefile的vcs目标,对代码进行编译,生成simv。
2.png

生成simv后,要增加一个选项,-gui=verdi,表示使用verdi这个工具进行单步调试。

makefile的sim目标,代码仿真,进行单步调试。
3.png

执行 make vcs; make run 后,会弹出verdi界面,并且停在0时刻。

此时界面,如下所示,1处为代码结构,2为代码区,3为交互式窗口,4为watch窗口。

4.png

此时打开波形,时刻停在0时刻,信号还没有产生波形。
5.png

在scoreboard中,设置断点,查看接收的包信息。
6.png

在交互式窗口,输入run,或者快捷键F5,或者菜单栏Simulation->Run/Continue。运行仿真。
7.png

此时,仿真会在断点处停下来。
8.png

对get_actual变量,右键,Add to Watches->Add to Watch 1。将变量添加到watch中。
9.png

因为,此时这个变量,还没有获取到值,因此值为null。
10.png

在交互式窗口输入next,或者快捷键F10,或者菜单栏 Simulation->Step/Next->Next。
11.png

执行到获取包。将包添加到watch中。
12.png

此时,包就不是null,而是有值了,可以查看包中各个变量的值。
13.png

此时,波形也会显示到当前仿真时刻,各个信号的波形。
14.png

通过这种,方式,是不是debug,就容易很多了。

更多相关阅读

cadence vmanager(十一) 杂说
irun的增量编译
cadence vmanager(十) vplan与vmanager结合使用的例子

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

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