1. 验证平台开发环境搭建

VCS(Verilog Compiler Simulator)是Synopsys公司推出的高性能数字电路仿真器,也是当前IC验证领域使用最广泛的仿真工具之一。在开始编写SystemVerilog验证平台之前,必须先把VCS工具链、License授权和Shell环境变量配置妥当,否则后续的编译、仿真、波形调试都无从谈起。本章从工具安装、License配置、环境变量设置到第一个SystemVerilog程序的编译仿真,完整走通一次环境搭建流程。

一、VCS安装与目录结构

VCS通常以安装包形式提供,Linux平台下常见为.tar.gz或.spf格式。安装前需要确认操作系统版本、glibc版本、磁盘空间(建议预留20GB以上)以及是否已安装gcc、g++、make等基础编译工具。安装过程一般由Synopsys Installer引导完成,安装路径建议统一规划,例如:

/tools/synopsys/vcs/T-2022.06
/tools/synopsys/verdi/T-2022.06
/tools/synopsys/scl/2022.06

其中VCS是仿真器主体,Verdi是波形与调试工具,SCL(Synopsys Common Licensing)是License管理组件。三者版本需要相互兼容,否则会出现License无法识别或Verdi无法加载FSDB波形的问题。安装完成后,VCS目录下会包含bin/、linux64/、include/、etc/等子目录,其中bin/vcs是编译仿真的主入口,bin/urg用于覆盖率报告生成,bin/dve是图形化调试环境。

二、License设置

VCS属于商业EDA工具,运行时必须从License服务器获取授权。License通常由公司IT或EDA管理员统一部署,常见形式有两种:一是本地License文件,二是远程License服务器(lmgrd守护进程)。无论哪种形式,都需要通过环境变量SNPSLMD_LICENSE_FILE或LM_LICENSE_FILE指定License位置。

若使用远程License服务器,典型配置如下:

export SNPSLMD_LICENSE_FILE=27000@lic-server.company.com

其中27000是lmgrd默认端口,lic-server.company.com是License服务器主机名。若使用本地文件,则写为:

export SNPSLMD_LICENSE_FILE=/tools/synopsys/license/Synopsys.dat

配置完成后,可用lmstat -a -c $SNPSLMD_LICENSE_FILE查看License状态,确认VCS、Verdi相关feature是否可用。常见feature名称包括vcs、vcs_runtime、Verdi、verdi_runtime等。如果提示“Cannot find license”或“License server unreachable”,应优先检查网络连通性、端口是否被防火墙拦截、License是否过期。

三、环境变量配置

为了让Shell能够直接调用VCS和Verdi命令,需要把工具的可执行目录加入PATH,并设置必要的辅助变量。推荐在~/.bashrc或项目专用的setup.sh中统一配置:

export VCS_HOME=/tools/synopsys/vcs/T-2022.06
export VERDI_HOME=/tools/synopsys/verdi/T-2022.06
export PATH=$VCS_HOME/bin:$VERDI_HOME/bin:$PATH
export SNPSLMD_LICENSE_FILE=27000@lic-server.company.com
export VCS_ARCH_OVERRIDE=linux64

配置完成后执行source ~/.bashrc,再用which vcs和vcs -ID验证。若vcs -ID能正常输出版本号和编译日期,说明工具链已可用。若提示缺少共享库,可通过ldd $VCS_HOME/bin/vcs检查依赖,常见缺失为libstdc++.so.6版本过低,需要升级系统gcc或指定更高版本的库路径。

建议把项目相关的环境变量写入独立的setup.sh,而不是直接修改全局.bashrc。这样不同项目可以使用不同VCS版本,避免版本冲突。

四、第一个SystemVerilog编译仿真流程

环境就绪后,用一个最小SystemVerilog例子走通“编译—仿真—看波形”的完整链路。新建文件hello.sv:

module hello;
  initial begin
    $display("Hello, VCS SystemVerilog!");
    $finish;
  end
endmodule

编译命令如下:

vcs -full64 -sverilog -debug_access+all hello.sv -o simv

参数含义:-full64表示64位模式;-sverilog启用SystemVerilog语法;-debug_access+all打开调试访问权限,便于后续用Verdi查看波形和信号;-o simv指定生成的可执行文件名。编译成功后目录下会出现simv、csrc/、simv.daidir/等文件。

运行仿真:

./simv

终端应输出:

Hello, VCS SystemVerilog!
$finish at simulation time 0

若需要生成FSDB波形供Verdi查看,可在Testbench中加入$fsdbDumpfile和$fsdbDumpvars,并在编译时加入-P $VERDI_HOME/share/PLI/VCS/LINUX64/novas.tab $VERDI_HOME/share/PLI/VCS/LINUX64/pli.a。仿真结束后执行verdi -ssf hello.fsdb即可打开波形窗口。

VCS 环境搭建与首个 SystemVerilog 编译仿真链路 ① 工具安装 VCS / Verdi / SCL /tools/synopsys/… gcc / make 依赖 ② License 配置 SNPSLMD_LICENSE_FILE 27000@lic-server lmstat 验证 feature ③ 环境变量 VCS_HOME / VERDI_HOME PATH 追加 bin 目录 vcs -ID 验证 ④ 编译 vcs -full64 -sverilog -debug_access+all ⑤ 运行仿真 ./simv 生成 simv / csrc / simv.daidir 终端输出 Hello, VCS SystemVerilog! $finish at time 0 FSDB 波形 $fsdbDumpfile / $fsdbDumpvars verdi -ssf hello.fsdb 覆盖率报告 -cm line+cond+fsm urg -dir simv.vdb 常见问题:License 不可达 / libstdc++ 版本过低 / -sverilog 未加导致 SV 语法报错

五、常见问题与排查思路

环境搭建阶段最容易卡住的地方集中在三类:License、依赖库和参数遗漏。License问题表现为vcs启动即退出并提示“License checkout failed”,此时先用lmstat确认服务器可达、feature未过期;依赖库问题表现为error while loading shared libraries,用ldd定位缺失的.so文件;参数遗漏问题最常见的是忘记加-sverilog,导致logic、always_ff等SystemVerilog关键字被当作非法标识符报错。

另外,-debug_access+all虽然方便调试,但会降低编译优化程度、增大仿真开销。在项目后期做回归测试时,可以去掉该选项,改用-debug_access+class或直接关闭调试访问,以提升仿真速度。若使用Verdi查看波形,务必确认novas.tab和pli.a路径与VCS版本匹配,否则会出现$fsdbDumpfile未定义或仿真中途崩溃。

不要在没有License授权的情况下尝试长期运行VCS,也不要把License文件随意复制到多台机器。License通常与MAC地址或hostname绑定,违规使用会导致整个License服务器被锁定。

六、环境搭建检查清单

检查项验证命令预期结果
VCS可执行which vcs输出VCS bin路径
VCS版本vcs -ID显示版本号与编译日期
License状态lmstat -a -c $SNPSLMD_LICENSE_FILEvcs、Verdi feature为UP
Verdi可执行which verdi输出Verdi bin路径
编译通过vcs -full64 -sverilog hello.sv -o simv生成simv,无error
仿真运行./simv打印Hello并正常$finish
波形生成verdi -ssf hello.fsdbVerdi打开并显示信号