VCS是由Synopsys公司开发的,由于其具备全套的功能验证环境,以及出色的内存管理功能,故被广泛应用于工业界。
本文主要介绍怎么对testbench以及待测设计test.v文件进行debug, 并最终得到code coverage的情况。
首先我们会使用vlogan -full64 -sverilog -timescale=1ps/1ps -l comp.log test.v tb_test.v
进行初步编译
-full64
是指定vcs的版本为64位-sverilog
指定编译语言,这里是system verilog,由于system verilog兼容了verilog,所以对于编译verilog文件照样适用-timescale=1ps/1ps
:在这里指定模块中的时间单位与时间精度分别位1ps-l comp.log
:编译生成的log文件,里面记录了编译过程,包括错误。test.v tb_test.v
分别为待测设计test.v与测试用的tb_test.v。
注意:一般是在编译的时候指定timescale,而不是在模块中指定;这里的vlogan过程相当于直接对一些代码中的语法进行检查, 并给出编译错误,但是并未生成任何文件。
然后我们使用vcs -full64 -cm cond+fsm+line+tgl+branch -debug_access+all -l elab.log -sim_res=1ps -top tbModuleName -o tbModuleName.simv
进行进一步编译,并生成.simv文件。
- -full64 与前面vlogan中的一致
- -cm cond+fsm+line+tgl+branch 表明在编译的时候会分别检查condition,fsm,line,toggle,branch对于的coverage情况。
- -debug_access+all 在这里应该是打开vcs里面的所有debug权限
- -l elab.log 跟上面的-l comp.log一致,都是记录编译过程。
- -sim_res=1ps 跟前面的timescale使用一致,都是指定时间精度
For example, if you pass -sim_res=1fs, then the timescale for elab module is “1fs/1fs”. Also, the overall simulator resolution is “1fs”.
注意:这一步的目的是进行模块间的链接性检查,也是一个debug的过程,并且会在生成的.simv文件中包含code coverage的情况。
最后运行通过testbenchModuleName.simv -cm cond+fsm+line+tgl+branch -l run.log -gui &
可以直接在VCS中打开对应模拟仿真文件。
day2.