菜鸟科技网

vcs编译命令常用参数有哪些?

最简单的编译命令

假设你只有一个顶层 Verilog 文件 top.v,并且没有其他依赖库。

vcs编译命令常用参数有哪些?-图1
(图片来源网络,侵删)
vcs top.v

执行这个命令后,VCS 会:

  1. 编译 top.v 文件。
  2. 在当前目录下生成一个可执行文件,默认名为 simv
  3. 你可以直接运行这个可执行文件来开始仿真:
    ./simv

注意:在 Linux 环境下,./simv 是必须的,表示在当前目录下执行该文件。


常用编译选项

在实际项目中,编译命令会包含很多选项来控制编译和仿真的行为。

指定顶层模块

使用 +libext++incdir+ 来指定文件路径和扩展名,使用 -s--top-module 来指定顶层模块。

vcs编译命令常用参数有哪些?-图2
(图片来源网络,侵删)
vcs -s top_module_name \
    +incdir+./src \
    +libext+.v+.sv \
    ./src/params.v \
    ./src/agent.sv \
    ./src/dut.v
  • -s top_module_name: 指定 top_module_name 为顶层模块。
  • +incdir+./src: 声明一个包含目录,-I./src 也可以达到同样效果。
  • +libext+.v+.sv: 指定编译器查找的文件扩展名,这里是 .v.sv
  • 后面跟着的是具体的源文件列表。

编译 UVM (Universal Verification Methodology)

UVM 是目前最主流的验证方法学,编译 UVM 测试台需要加载 UVM 库。

vcs -s top_testbench \
    +incdir+./src+./uvm-1.2/src \
    +define+UVM \
    +libext+.v+.sv \
    ./src/dut.v \
    ./testbench/testbench.sv \
    ./uvm-1.2/src/uvm.sv
  • +incdir+./uvm-1.2/src: 添加 UVM 源文件的路径。
  • +define+UVM: 定义宏 UVM,很多 UVM 的代码会依赖这个宏来编译。
  • ./uvm-1.2/src/uvm.sv: 显式地包含 UVM 的顶层文件。

更推荐的方式是使用 UVM 的编译脚本: UVM 发行包中通常包含一个 uvm_pkg.sv 文件,以及一个编译脚本(如 uvm-1.2/src/run.sh),直接使用其编译脚本是最佳实践。

生成波形文件

使用 -cm 选项可以生成覆盖率数据库,而 -kdb-ucli 则可以生成波形文件。

# 生成 VPD 波形文件 (常用)
vcs -cm line+toggle -kdb -ucli ... # 其他编译参数 ...
# 运行仿真
./simv -cm line+toggle -kdb -ucli +vcs+lic+wait
# 将 VPD 转换为 FSDB (使用 DVE)
vpd2fsdb simv.vpd
# 或者直接生成 FSDB 波形文件
vcs -cm line+toggle -cm hier -debug_access+all ... # 其他编译参数 ...
./simv -cm line+toggle -debug_access+all
  • -kdb -ucli: 在编译时生成调试信息文件 (simv.ucli),用于在仿真时记录波形。
  • -cm line+toggle: 生成代码行覆盖率和翻转覆盖率。
  • -debug_access+all: 这是一个非常强大的选项,它允许你在仿真后通过 DVE 或 Verdi 进行调试,查看内部信号,甚至修改信号值,强烈推荐在调试时使用。
  • 运行 ./simv 时,需要带上编译时生成的相同选项(如 -kdb -ucli)。
  • VPD vs. FSDB: VPD 是 VCS 的原生波形格式,FSDB 是 Verdi 的原生格式,VPD 文件通常比 FSDB 小,但 Verdi 对 FSDB 的支持更好。vpd2fsdb 工具可以在两者之间转换。

调试选项

  • -debug_access: 启用调试功能。
    • -debug_access: 基础调试。
    • -debug_access=rtl: 仅支持 RTL 级调试。
    • -debug_access+all: 最强模式,支持所有调试功能,包括后门访问(backdoor access)、波形查看、信号修改等,调试时推荐使用。

其他常用选项

  • -Mupdate: 增量编译模式,VCS 会分析文件依赖关系,只重新编译发生变化的文件及其依赖项,可以大大缩短编译时间,对于大型项目,这是必须的。
  • -R: 编译完成后立即运行仿真,这在快速验证小改动时非常有用。
    vcs -R -s top_module ... # 其他参数 ...
  • -L: 链接共享库,如果你的测试台需要链接外部的 C/C++ 共享库,可以使用此选项。
    vcs -L./my_lib.so ... # 其他参数 ...
  • -full64: 编译 64 位版本的仿真器,如果你的系统是 64 位的,建议使用此选项以获得更大内存空间。
    vcs -full64 ... # 其他参数 ...

完整的编译与运行示例

假设项目结构如下:

vcs编译命令常用参数有哪些?-图3
(图片来源网络,侵删)
my_project/
├── src/
│   ├── dut.sv
│   └── agent.sv
├── test/
│   └── testbench.sv
├── uvm-1.2/
│   └── src/
│       └── uvm_pkg.sv
└── Makefile

Makefile 中的编译命令示例:

# VCS 安装路径 (根据实际情况修改)
VCS = /tools/synopsys/vcs/O-2025.09/linux64/bin/vcs
# 编译选项
VCS_FLAGS = -full64 \
            -s tb_top \
            +incdir+./src+./uvm-1.2/src \
            +define+UVM \
            +define+DEBUG \
            +libext+.v+.sv \
            -cm line+toggle \
            -debug_access+all \
            -Mupdate
# 源文件列表
SRC_FILES = ./src/dut.sv \
            ./src/agent.sv \
            ./test/testbench.sv \
            ./uvm-1.2/src/uvm_pkg.sv
# 默认目标
all: compile
# 编译目标
compile:
    $(VCS) $(VCS_FLAGS) $(SRC_FILES)
# 运行仿真目标
run: compile
    ./simv -cm line+toggle -debug_access+all +UVM_TESTNAME=my_test
# 打开波形查看器 (DVE)
view:
    dve -vpd simv.vpd -fsdb simv.fsdb
# 清理编译文件
clean:
    rm -rf simv* csrc* ucli* vcs* *.daidir* *.vpd *.fsdb *.log DVEfiles*
.PHONY: all compile run view clean

如何使用这个 Makefile:

  1. 编译:在 my_project 目录下执行 make compile 或直接 make
  2. 运行:执行 make run,它会先检查是否需要重新编译,然后运行仿真并生成覆盖率数据。
  3. 查看波形:执行 make view 会自动打开 DVE 并加载波形文件。
  4. 清理:执行 make clean 删除所有编译生成的文件,回到干净状态。

VCS 与 Verdi 的配合使用

Verdi 是 Synopsys 的强大的调试和波形查看工具。

  1. 编译时生成信号数据库 在 VCS 编译命令中加入 -debug_access+all-kdb 选项。

    vcs -debug_access+all -kdb ... # 其他参数 ...
  2. 运行时记录波形 在运行 simv 时,加上 -ucli 选项。

    ./simv -ucli

    这会生成 simv.ucli 文件,其中包含了所有信号的波形信息。

  3. 使用 Verdi 打开波形 Verdi 可以直接读取 simv.ucli 文件,无需生成巨大的 .vpd.fsdb 文件,这在调试大型设计时非常高效。

    verdi -ssf ucli -ssz 1G &
    • -ssf ucli: 指定信号数据库文件为 ucli
    • -ssz 1G: 为 Verdi 分配 1GB 内存用于加载信号信息,对于大型设计,这个值需要调大。
目的 常用选项 示例
基本编译 vcs <files> vcs top.v
指定顶层 -s <module_name> vcs -s my_top top.v
指定路径 +incdir+<dir> vcs +incdir+./src src/a.v
编译UVM +define+UVM, -s <tb_top> vcs +define+UVM -s my_tb uvm_pkg.sv my_tb.sv
生成波形 -kdb -ucli (运行时) vcs -kdb ...
./simv -ucli
生成FSDB -debug_access+all vcs -debug_access+all ...
./simv
调试 -debug_access+all vcs -debug_access+all ...
增量编译 -Mupdate vcs -Mupdate ...
编译后运行 -R vcs -R ...
64位编译 -full64 vcs -full64 ...
与Verdi联调 -debug_access+all -kdb (编译)
-ucli (运行)
vcs -debug_access+all -kdb ...
./simv -ucli
verdi -ssf ucli

掌握这些核心选项,你就可以应对绝大多数 VCS 编译和仿真的场景了,对于复杂项目,强烈建议使用 Makefile 或其他构建工具来自动化编译流程。

分享:
扫描分享到社交APP
上一篇
下一篇