VCS 学习

1. 基本用法

  • vcs a.v b.v top.v执行之后可以得到一个名为simv的可执行文件,执行这个文件就可以启动仿真
  • 针对这个可执行文件有四种常规用法:
    1. 直接调用,会执行到 $finish ,如果代码里还写了 $stop ,遇到此调用还会启动ucli命令行
    2. ucli:./simv -ucli调用,可以通过命令行控制仿真,比如说命令行里输入run就会执行仿真,如果编译的时候没有指定特定的-debug选项,会启动mini UCLI,仅支持run和quit
    3. dve:./simv -gui=dve调用,图形化界面,可以在dve的图形化界面中控制仿真,类似modelsim等
    4. 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编译文件的读取方式有关