前言
虽然之前一直在用vcs,但是有一些边边角角的内容都比较模糊,特地从头看一下vcs的官方lab,对应的资料如下!
下图所示的资料,点击下载
学习目标
通过使用 插入verilog任务 和 UCLI 完成debug
Part A:Debugging with Verilog System Task Calls
Task 1 学会一个有用的vcs选项:-h(help)
- 输入下面的指令,可以查看vcs的选项,以达到查询命令的目的!
vcs -h //h就是help,好理解吧!
Task2 编译和运行第一次验证
- 使用下面命令,报错!
vcs -f adder.f -R
- 如下图所示,应该是02?
Task 3 Debugging 这个错误
- 通过调用verilog函数来帮助!
- 添加了上述文档,再重新编译仿真
- 发现sum[1]=0,那么我们再来查看add4.v 中的sum值!
- 发现sum[1]=0,那么我们再来查看add4.v 中的sum值!
- 再在下面的基础上调用查看下一层的值,并且用$stop来暂停仿真!
- 再编译仿真!
vcs -f adder.f -R
- 将之前的finish改成stop,就是为了在这里设置断点,不直接退出!输入run继续执行,如下图所示!
- 随着run的输入,就会发现是addr4模块存在问题,接下来,我们使用quit或者exit退出断点测试
- 打开fa.v文件,发现表达式错误,没有加进位输入!
- 修改过后,继续编译仿真,顺利通过!
- 使用下面的命令继续仿真一下
./simv +monitoroff
- 如上图显示,这次并没有打印其中的过程,是因为我们将仿真文件中的监控能力给关闭了!
- 关闭了这些打印消息,是不是加大了仿真速度?
Part B:Debugging with VCS UCLI Debugger
Task 1 编译和运行第一次验证
- 进入part b,编译仿真
- 出现如下图的错误
Task 2 用UCLI Debugger进行
-
在addertb.v中,将 f i n i s h 改 为 finish改为 finish改为stop,如下图所示:
-
使用下面的命令编译仿真
vcs -f adder.f -R -debug_all -ucli
Task 3 用UCLI Debugger进行debugging
- 如果你忘了ucli的命令,可以输入help查询,如下图所示:
- 然后输入scope,show
- 再输入scope u1等,如图所示:
- 你发现了吗?二选一多路选择器的sum_0应该选择0,而不是1!
- 用ctrl+shift+T新建一个terminal,查看add8.v,不要退出UCLI模式!
- 发现二选一多路选择器,刚好反了,但是不要修改,我们回到ucli继续进行!
- 再使用下面命令,如图
- 上面这不是修复,只是在不离开ucli模式进行模拟!(是不是很复杂,所以公司中很少有人用!)
- 之前的那么多命令,记得住吗?下面命令可以帮助你生成ucli模式中用了那些命令(ucli.key)!
./simv -ucli -i test.s
Part C: Getting Help
Task 1 Submitting Files for Help
如果您需要从VCS支持团队获得帮助,有两个开关可以使您与支持人员的工作更加顺利。分别是-ID和-Xman =4。让我们看看这些开关会产生什么。
不需要更改目录
- 使用下面命令将vcs等信息记录到id.txt中!
vcs-ID > id.txt;more id.txt
- 使用下面命令,效果如下:(将adder.f中的文件全部写入了tokens.v文件中!)
vcs -f adder.f -Xman=4;ls
- 使用上面的命令生成了tokens.v文件,文件如下:
后记
你看到这里了吗?