ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

数字IC验证实战:VCS与Verdi安装部署及环境配置避坑指南

数字IC验证实战:VCS与Verdi安装部署及环境配置避坑指南 入行数字IC验证这几年我换过三家公司、经历过五六次从零搭仿真环境的“开荒”时刻。每次新到一个项目组第一件事永远不是看代码而是先把VCS跑通。很多人觉得VCS安装不就是解压、设个环境变量、跑一下vcs -ID就完事了吗真上手才发现坑全藏在细节里版本和glibc对不上、License连不上、跟Verdi联调时PLI路径写错、编译一个小模块报出一堆莫名奇妙的错误。这篇不是那种“下一步、下一步”的傻瓜教程而是基于我实际部署经验的完整记录。内容包括装之前的版本与系统评估、目录规划与环境变量配置、VCS和Verdi联合仿真的关键链路以及我第一次装完跑测试时踩过的那些坑。无论你是刚入行的验证新人还是要在服务器上部署EDA环境的学生按这个思路走一遍基本能少走三个月的弯路。1. 安装VCS之前先把版本、系统和License这三件事定下来很多教程一上来就让你解压安装包这是最大的误导。VCS和普通的应用软件不一样它高度依赖操作系统环境、编译器版本和License机制。这三件事没想清楚后面装到一半大概率卡住。1.1 版本选择别只盯着最新版VCS的版本号规律一般是年份加月份比如2023.12、2024.03、2024.06。新版本确实会带来更快的编译速度和更多语言特性支持但版本越新对操作系统、glibc、GCC版本的要求也越苛刻。我的建议是先看你项目里的其他组件。如果你用的UVM库是某个固定版本或者项目里已有的VIP、参考模型是从老版本VCS下编译出来的千万不要贸然换新版本。跨版本混用轻则编译告警重则在仿真中产生行为差异。团队内部尽量统一版本这是我在实际项目中吃过亏之后总结出来的教训。另外要留意的是VCS版本和License也需要匹配。老的License文件在授权范围里可能根本没有新版本的feature即便你把新版本装好了启动时照样报license授权失败。这个时候不是Licese Server的问题而是授权文件里的版本范围不够。1.2 操作系统兼容性多大内存、什么发行版VCS官方支持的主要是64位Linux常见的发行版是企业级RHEL/CentOS系很多公司的仿真服务器都是这类系统。Ubuntu能用但偶尔会遇到动态库不兼容的情况。最关键的一个指标是glibc版本你可以用ldd --version或者查看/usr/lib64/libc.so.6来确认。VCS安装包里自带的很多可执行文件和预编译库都是针对特定glibc版本范围编出来的如果系统glibc太老或太新装完会报version GLIBC_XXX not found之类的错误。硬件方面安装目录本身大约占8到15GB不同版本差异明显但仿真过程中产生的临时文件、编译产物、波形文件会快速增长。我之前处理过一台服务器跑一个中等规模的SoC验证回归一个月下来磁盘占用多了将近200GB。所以建议给VCS所在分区预留至少50GB可用空间如果公司有条件用独立挂载的存储盘就更稳妥。内存方面VCS编译是出了名的吃内存。小型模块8GB也能跑但真到了大型设计的全芯片仿真16GB只是起步64GB以上才比较从容。CPU核心数决定了编译速度VCS支持多核并行编译核心数越多越省时间这块在服务器选型时值得重点考虑。1.3 License策略本地文件还是License服务器正规的VCS使用必须有Synopsys的License授权这一点没有任何商量余地。安装之前先跟公司里负责EDA工具管理的同事确认清楚你们签的是本地License文件比如snpslmd生成的license.dat还是通过License Server方式集中授权。两种方式的区别在于环境变量。本地文件方式需要把License服务器地址指向本机端口或者直接指定lic文件路径集中式授权则通常给一个27020license-server-host这样的地址。VCS实际读取的是SNPSLMD_LICENSE_FILE或LM_LICENSE_FILE这两个环境变量设置错了要么起不来要么启动时报 “Invalid license key” 之类的错误。在这必须多说一句网上有些所谓的“破解”“和谐”方案不仅违反软件授权协议而且装完很容易在关键仿真阶段出现稳定性问题。我是做验证的最怕的就是工具本身行为不确定仿真结果自己都不敢信。老老实实用公司采购的License环境干净出了问题也能找原厂支持。2. 从压缩包到可用工具解压部署与目录规划确定了版本、系统和License之后才进入实际操作层面。这一步看似简单但目录规划不合理后面维护和切换版本会非常痛苦。2.1 目录规划安装位置与版本隔离我推荐使用/eda或者/opt/eda这类专门的工具根目录把Synopsys相关的所有东西统一放进去形成类似这样的结构/eda/synopsys/ ├── vcs-2023.12/ ├── verdi-2023.12/ ├── scl-2023.06/ └── install_scripts/按版本号建目录而不是笼统地叫vcs/。因为VCS版本更新很快项目换版本是常态。目录带版本号之后切换环境只需要改环境变量不需要动安装目录干净利落。我见过同事把VCS直接丢在/home/xxx/tools/vcs下面的当时看起来方便后来版本一升级旧环境想留又留不住想删又怕误删非常被动。2.2 解压安装包与权限处理VCS的安装包一般是以tar.gz或tar格式分发体积动辄几个GB。有些版本会拆成多个分卷比如vcs-common、vcs-linux64这类分卷必须全部解压到同一个目标目录缺少任何一个都会导致安装后某些组件不可用。基本解压命令是这样mkdir -p /eda/synopsys tar -zxvf vcs-2023.12-common.tar.gz -C /eda/synopsys tar -zxvf vcs-2023.12-linux64.tar.gz -C /eda/synopsys解压完成后先看一眼解出来的目录结构。VCS目录下通常会包含bin/、lib/、etc/、doc/这类子目录。如果bin/里能看到vcs这个可执行文件说明解压基本正常。权限这块容易被忽略。我建议用一个专门的EDA账号比如eda来做安装和环境部署而不是用root。原因有两个一是VCS会在运行过程中写一些缓存和临时文件到安装目录附近如果属主是root普通用户很容易遇到权限不足的问题二是用统一账号好管理换人的时候不用把账号到处复制。如果安装目录已经解压出来但属主不对直接纠正一下chown -R eda:eda /eda/synopsys/vcs-2023.122.3 确认安装文件完整性的实用小技巧大文件传输过程中经常会出现损坏而VCS在解压时不一定每次都报错。等装完跑起来才发现某个库文件缺失排查起来非常难受。我的习惯是解压前先做一次完整性校验。Synopsys官方下载页面上一般会提供MD5或SHA256校验值。对比方式很简单md5sum vcs-2023.12-linux64.tar.gz把输出结果和官方页面上的值比对。如果对得上再解压对不上重新下载对应分卷。这个习惯帮我避免过一次大麻烦——有一次分卷下载不完整安装后编译任何设计都报“segmentation fault”查了很久才意识到是安装包本身的问题。从那以后我每次装EDA工具都先做校验十分钟的事省下一下午排查时间。3. 环境变量配置决定VCS能不能找到家安装目录有了VCS本身还不能用你得告诉Shell“VCS在哪里”“License从哪里取”。这一步配置错了比安装出错更让人抓狂因为错误提示往往极具迷惑性。3.1 核心环境变量VCS_HOME、PATH、License变量VCS运行需要的最核心的几个环境变量如下变量名作用典型示例VCS_HOMEVCS安装根目录很多内部脚本依赖它/eda/synopsys/vcs-2023.12PATH让Shell能找到vcs、vcs_mosaIC等可执行文件$VCS_HOME/bin:$PATHSNPSLMD_LICENSE_FILESynopsys工具读取License的路径27020lic-serverLM_LICENSE_FILE通用License变量VCS也会读取27020lic-server视情况设置如果你还需要用Verdi那还要追加这两个变量名作用典型示例VERDI_HOMEVerdi安装根目录/eda/synopsys/verdi-2023.12PATH加入verdi可执行文件路径$VERDI_HOME/bin:$PATH有些老版本的VCS还会读取VCS_ARCH用来指定平台架构比如linux64。现代版本基本能自动判断如果手动设置了错误的VCS_ARCH反而会出问题。我的建议是除非官方文档明确要求否则不要手动设置这个变量。3.2 配置文件选.bashrc还是.cshrc这是Linux下很经典的“阵营之争”。VCS本身不care你用bash还是csh但环境变量的写法在两个shell里不同这经常坑到刚从Windows切过来的新同事。如果你用bash大多数Linux默认编辑~/.bashrc。一个比较标准的配置片段是这样的# VCS export VCS_HOME/eda/synopsys/vcs-2023.12 export PATH$VCS_HOME/bin:$PATH # Verdi export VERDI_HOME/eda/synopsys/verdi-2023.12 export PATH$VERDI_HOME/bin:$PATH # License export SNPSLMD_LICENSE_FILE27020lic-server export LM_LICENSE_FILE27020lic-server如果你所在的团队习惯用csh/tcsh那要编辑的是~/.cshrc语法完全不同# VCS setenv VCS_HOME /eda/synopsys/vcs-2023.12 setenv PATH ${VCS_HOME}/bin:${PATH}最怕的是员工A用bash配了一套员工B用csh配了另一套两套变量互相覆盖最后排错都不知道从哪里开始。团队里最好统一一种Shell。我个人在服务器上只用bash配置简单排错也直观。3.3 验证环境变量是否生效配置完别急着跑大设计先用三条命令验证基本盘echo $VCS_HOME which vcs vcs -IDvcs -ID会输出VCS的版本号、安装路径、构建信息等。如果你看到类似VCS Version: 2023.12这样的输出说明环境变量和VCS本体基本没问题。这里有个小细节如果你刚修改完.bashrc记得在当前终端执行source ~/.bashrc或者重新登录否则当前会话里环境变量还是旧的。很多“刚刚配完但vcs不生效”的问题十有八九就是忘了source或者新开了一个不加载配置的Shell。4. 与Verdi联合仿真配置链路与常见坑VCS本身是仿真器负责编译和运行仿真Verdi是调试工具负责看波形、抓信号、分析时序。两者在数字IC验证流程里经常配合使用但很多人装VCS的时候把Verdi当成可选项或者装完了发现两者联调失败。实际上联合仿真这块配置得当能把调试效率提升一大截。4.1 独立安装Verdi与版本匹配Verdi和VCS同属Synopsys但它们是独立的安装包要分别安装。版本上不需要严格一摸一样我试过VCS 2023.12搭配Verdi 2022.06基本功能正常。不过如果你们公司使用UVM方法学且VCS内置的UVM库版本和Verdi的某些特性有依赖版本跨度太大会出现FSDB波形无法识别的情况。保守做法是主版本尽量一致至少都要在相近的年份范围内。Verdi安装之后除了设置VERDI_HOME和PATH还要确认Verdi安装目录下有没有PLIProgramming Language Interface相关目录。PLI是VCS和Verdi之间交互的桥梁路径通常在$VERDI_HOME/share/PLI/VCS/LINUX64/这个目录下会有novas.tab和pli.a或类似命名的库文件。这两个文件是编译时用的关键后续联调全靠它们。4.2 编译选项与仿真流程示例FSDB波形生成的完整链路VCS编译生成FSDB波形常用编译命令是这样的vcs -sverilog -debug_accessall -fsdb \ -P $VERDI_HOME/share/PLI/VCS/LINUX64/novas.tab \ $VERDI_HOME/share/PLI/VCS/LINUX64/pli.a \ testbench.sv -o simv各选项的含义拆解一下-sverilog启用SystemVerilog语法支持如果你的设计是纯Verilog可去掉。-debug_accessall生成完整的调试信息是Verdi能够回溯信号的必要条件。以前老版本常用-debug或-debug_pp新版本推荐用统一写法-debug_accessall。-fsdb让仿真过程能生成FSDB格式波形。-P指定PLI表文件和PLI库这是VCS与Verdi之间的接口不加的话即使运行仿真里面调用$fsdbDumpfile和$fsdbDumpvars也会报错。运行仿真./simv在testbench里你还需要调用Verdi的FSDB任务initial begin $fsdbDumpfile(dump.fsdb); $fsdbDumpvars(0, tb); end仿真跑完后目录下会出现dump.fsdb。接下来启动Verdiverdi -f filelist.f -ssf dump.fsdb -ssf是加载FSDB波形文件的选项后面会进入Verdi界面看到信号波形和层级结构然后就能开始正常的调试工作了。4.3 常见联调失败的排查路径联调失败通常表现为三种情况我的排查顺序如下第一种编译时就报错提示找不到novas.tab或pli.a。这种情况直接去$VERDI_HOME/share/PLI/VCS/LINUX64/目录下看文件是否存在。有些精简版Verdi没装PLI组件需要回到安装包重新补装。如果文件存在检查环境变量VERDI_HOME是否正确展开——终端里执行echo $VERDI_HOME看一眼就知道。第二种编译能过但运行仿真时simv直接退出报类似$fsdbDumpfile task not found的错误。这是典型的PLI库没链接进来检查命令里-P后面两个路径是否写全了以及是否被其他编译选项覆盖。第三种仿真正常结束但生成的.fsdb文件用Verdi打开后波形窗口是空的。这一般不是安装问题而是$fsdbDumpvars的层级参数设置不对。$fsdbDumpvars(0, tb)中第二个参数指定要导出的顶层模块改成$fsdbDumpvars(0, tb, all)或者直接$fsdbDumpvars也能用但层级覆盖范围需要根据你的TB结构调整。再补充一个实用技巧如果你的项目用了UVM编译命令会稍微变复杂一点需要在命令里加上UVM相关选项vcs -sverilog -debug_accessall -fsdb \ -ntb_opts uvm \ -P $VERDI_HOME/share/PLI/VCS/LINUX64/novas.tab \ $VERDI_HOME/share/PLI/VCS/LINUX64/pli.a \ tb_top.sv -o simv新版本VCS也能直接用-uvm代替-ntb_opts uvm具体看你用的版本对哪个更友好。VCS自带的UVM库路径会自动配置不需要额外指定-uvmhome除非你要用某个定制版本的UVM源码。5. 安装自检清单与高频报错排查环境配完不能只说“看起来没问题”得实际跑一次最小测试才算数。这一节我给出一份自检清单然后列出我在不同机器上遇到过的、有代表性的几个报错以及它们背后真正的原因。5.1 安装完成后的第一个编译测试建一个临时目录写一个最简单的testbench验证VCS基础功能module tb; initial begin $display(Hello, VCS!); #10; $finish; end endmodule编译vcs -sverilog tb.sv -o simv如果这一步出结果、simv文件成功生成接着运行./simv终端如果输出Hello, VCS!并且显示$finish的结束信息说明VCS的核心链路已经通了。很多“VCS装好了”的说法其实只是vcs -ID有输出真正跑起来才知道还有多少暗病。我习惯用这种最小测试把编译器和运行器一起验证到位。5.2 高频报错与排查思路以下是我在真实部署过程中遇到的报错以及对应排查路径的整理报错特征常见原因排查/解决思路Failed to check out license / Invalid license keyLicense变量配置错误、License server不可达、授权版本不匹配检查SNPSLMD_LICENSE_FILE和LM_LICENSE_FILE用lmstat -a查服务器状态确认license里包含对应VCS版本的feature/lib64/libc.so.6: version GLIBC_2.XX not found系统glibc版本过低VCS版本要求更高升级系统glibc或选择与当前系统兼容的旧版VCS不建议手动替换系统glibc容易弄坏系统gcc: error trying to exec cc1: execvp: No such file or directory系统中GCC未安装或版本过旧确认gcc -v能正常输出VCS编译仿真器需要调用底层C编译器一般安装对应版本的gcc和g即可Error: Cannot open VCS_BASE / etc/init_tbVCS_HOME变量没配好或安装目录被移动过echo $VCS_HOME确认路径检查目录是否存在且有读权限unknown option: -fsdbVCS匹配不到Verdi的PLI或版本太老确认编译命令里-P参数已经带上部分老版本对-fsdb支持方式不同可查阅release notesh: line 1: vcs: command not foundPATH里没包含VCS_HOME/binwhich vcs检查source环境变量后重试第一类License报错最常见而且最坑的是错误信息可能不是明明白白告诉你license无效而是报一些奇怪的 “Feature is not found” 或者直接启动时卡住。遇到这种情况先跑一下echo $SNPSLMD_LICENSE_FILE确认变量不是空的再去license server上查授权项。5.3 多版本共存时的切换技巧如果你需要同时维护两套VCS版本比如一个老项目锁在老版本另一个新项目必须用新版本千万别改一个污染另一个。比较规范的做法是写一套环境脚本放到用户目录下按需加载。在bash下可以这样设计一个setenv_vcs.sh脚本#!/bin/bash export VCS_HOME/eda/synopsys/vcs-2023.12 export PATH$VCS_HOME/bin:$PATH export SNPSLMD_LICENSE_FILE27020lic-server再做一个setenv_vcs_old.sh#!/bin/bash export VCS_HOME/eda/synopsys/vcs-2020.12 export PATH$VCS_HOME/bin:$PATH export SNPSLMD_LICENSE_FILE27020lic-server用的时候source setenv_vcs.sh不用的时候在新终端里把环境变量重新指向另一套即可。这里要特别注意PATH是累积的环境变量直接在原有PATH前面加上新的$VCS_HOME/bin可能导致老的VCS残留还在PATH里。一个保险的做法是在切换前先把旧的VCS路径从PATH里清掉或者新开一个干净的终端来source脚本。6. 关于VCS与Xcelium的选择以及给新人的一些建议很多刚入行的朋友会纠结一个经典问题数字IC验证到底用什么工具VCS还是Xcelium这问题属于“问对问题比获得答案更重要”的类型因为答案完全取决于你所在的公司流程和项目需求。6.1 数字IC仿真工具选型的现实逻辑VCS是Synopsys家的旗舰仿真器得益于Synopsys在数字IC前端到后端完整工具链的优势比如Design Compiler、PrimeTime都是他家主力产品VCS在许多设计团队里成了默认标配。如果你的环境里跑的是Synopsys的DFT、低功耗验证或UPF流程VCS的无缝集成优势会非常明显。很多IP提供商在交付验证环境时也会优先兼容VCS毕竟客户量大、问题响应快。Xcelium是Cadence家的产品在Cadence完整流程比如Genus综合、Innovus布局布线的使用者中很常见。两家工具在同一台服务器上共存是常态工程师很多时候不是二选一而是根据项目需求切换。比如有的公司数字前端用VCS做功能仿真后端做网表仿真时又换到Xcelium因为PDK参考流程里给的脚本就是为Xcelium写的。从学术角度和语言支持上看两家的SystemVerilog和UVM支持都非常成熟。真正影响选型的往往是下面这些非技术因素公司已经购买的License数量和类型团队现有脚本体系是基于哪个工具的客户或合作方指定的交付和验收环境代工厂参考流程Reference Flow对某个工具的偏好。给新人的一句话建议别把时间花在“哪个工具更好”的争论上。验证工程师的核心竞争力是验证方法学、对设计功能的理解和定位问题的能力。VCS和Xcelium都只是载体环境搭建能力是基本功但不是全部。6.2 给新人的环境搭建心得如果你刚入职拿到一台服务器准备装VCS我推荐按这个顺序走先确认系统版本和权限再确认License可用性接着规划好安装目录解压后用最小testbench验证编译和运行最后才是接Verdi调波形。这个顺序每走一步只引入一个变量出问题的时候定位范围最小。我见过不少新同事一上来就急着把整个UVM工程塞进去编译结果报了一屏错误根本分不清是环境问题还是代码问题。正确的做法永远是先跑通最小用例再逐步叠加复杂度。最后说一个比较隐蔽的细节别忘了关注服务器时间。License授权通常有有效期如果服务器时间跑偏了比如NTP没同步License校验会失败甚至出现“时钟回拨”这类奇葩报错。这是我去年才遇到的坑排查了半天最后发现是虚拟机时间漂移同步之后一切恢复正常。环境搭建这东西不见得每个知识都高深但每一个细节都可能卡你半天记录下来下次就快了。
返回列表