1. 基本用法
vcs a.v b.v top.v
执行之后可以得到一个名为simv的可执行文件,执行这个文件就可以启动仿真- 针对这个可执行文件有四种常规用法:
- 直接调用,会执行到
$finish
,如果代码里还写了$stop
,遇到此调用还会启动ucli命令行 - ucli:
./simv -ucli
调用,可以通过命令行控制仿真,比如说命令行里输入run
就会执行仿真,如果编译的时候没有指定特定的-debug选项,会启动mini UCLI,仅支持run和quit - dve:
./simv -gui=dve
调用,图形化界面,可以在dve的图形化界面中控制仿真,类似modelsim等 - verdi:
./simv -gui=verdi
另一个图形界面,功能更强大,需要指定-kdb -lca选项,
- 直接调用,会执行到
2. 常用选项
-y
指定库的目录,包含其他的.v文件-f configure.f
在configure.f里面可以写各种vcs要用到的编译时的参数,源文件,路径等等。注意,只有编译过程的选项起效,其他选项并不能放在这个文件中,比如-debug_access+all,能执行的选项包括:- 任意以+开头的编译时选项
- -f -y -l -u -v这五个以-开头的编译时选项
+libext+.v
指定在库中要搜索.v文件+incdir+文件路径
指定`include搜索的路径-suppress=messageID
,停止某些信息的输出,如-suppress=SV-LCM-PPWI
,停止ID为SV-LCM-PPWI的信息输出-timescale=1ns/1ps
,设置仿真的timescale-sverilog
支持system verilog,具体哪个版本查阅手册,vcs2016支持sv2012标准+warn=none
停止警告信息输出-debug_all
打开所有调试功能,需要调试的时候要指定这个选项,除此之外还有类似的-debug_pp
,-debug
,-debug_access+
,性能影响-debug_all>-debug>-debug_pp,-debug_access可以更细粒度的指定功能,可以比-debug_pp消耗更少-fsdb/-debug_access+fsdb
使能fsdb波形数据记录,-fsdb即将废弃,用-debug_access+fsdb替代
3. Verdi
- verdi可以直接打开fsdb文件,通过-ssf选项
- View -> signal list可以查看信号列表
4. 踩坑记录
- system verilog写的package文件,通过-y指定库路径是没法搜到的,需要单独写出源文件
- 如果文件名和模块名不一致,也可能无法通过-y指定库路径搜索到,需要单独写出源文件
- 如果一个文件里写了一个主module和多个子module,如果主module通过generate语句生成例化子module,可能汇报incorrect construct library的错误,这时候把主模块放到文件顶部就可以解决这个问题?原因未知,猜测和vcs编译文件的读取方式有关