Cadence家的Xcelium也就是大家常说的XRUN在数字IC验证圈子里属于绕不开的工具之一。很多刚入行或者从学校转过来的朋友拿到手的第一件事就是装环境、跑通第一个仿真结果往往卡在安装环节、license配置或者对着xrun的一堆命令行参数发呆。这篇文章我就以22.09版本为例从零开始把“装好工具、配上环境、跑通第一个工程”这条线完整捋一遍顺手把我当年踩过的坑也一并交代清楚。内容主要面向三类人刚接触数字IC验证的学生、从其他仿真器比如VCS、Questa转过来的工程师、以及准备在部署环境里折腾Xcelium的开发人员。读完你至少能搞明白三件事这工具装的时候要注意什么、环境变量该怎么配不会出错、以及一个完整的SystemVerilog仿真工程从编译到出波形要经过哪些步骤。中间涉及的每一步我都会说清楚“为什么”而不是只给一堆命令让你抄。1. 整体设计思路先想清楚XRUN这套工具链是怎么运转的1.1 Xcelium和XRUN到底指什么先说清楚命名这件事。Xcelium是Cadence推出的数字逻辑仿真器产品线它之前有个更老的名字叫Incisive再往前还能追溯到NC-Verilog、NC-VHDL。而XRUN是启动这个仿真器的命令行入口也是现在所有Xcelium项目的统一启动命令——不管是跑Verilog、SystemVerilog、VHDL还是混合语言仿真都用xrun这一个命令搞定。可能有人会问为什么不叫xcelium而是xrun其实这也是为了统一入口。早期Cadence的工具链里跑Verilog用ncverilog跑VHDL用ncvhdl混仿用ncsim命令五花八门脚本写起来麻烦后来Cadence把所有入口收敛成xrun再通过参数去区分编译、elaboration、仿真这几个阶段。所以你在文档里看到“xrun”“Xcelium”“XRUN”混着称呼它们说的是同一套东西。1.2 一个仿真工程在XRUN里是怎么被处理的新手最大的误区是以为xrun一条命令就是把代码“跑起来”。实际上XRUN内部把整个流程拆成了三个层面编译compile、细化elaborate、仿真simulate。编译阶段做的事情比较好理解——把源文件.v、.sv、.vhd转换成语义分析后的中间表示类似C语言的编译过程检查语法、类型、模块声明之类的错误。细化阶段是把整个设计层次结构展开解析模块间的连接关系实例化出完整的电路拓扑再做一些静态检查比如端口没连、线网悬空这类问题。仿真阶段才是真正运行波形的过程仿真器按时间轴推进事件队列输出波形和日志。xrun默认会一口气把三个阶段全部跑完但你也完全可以通过参数控制分步执行——比如只编译不仿真、只elaborate不跑仿真这在调试大型工程时特别好用不用每次从头编译一遍。22.09版本对分步执行和增量编译的支持已经非常成熟编译一次之后的第二轮迭代速度能提升好几倍。1.3 选Xcelium而不是VCS、Questa它的优势在哪很多新手都会纠结市面上有三大主流仿真器——Cadence Xcelium、Synopsys VCS、MentorSiemens EDAQuesta到底选哪个。我的建议是如果你所在的公司或者课题组已经定了某种流程那就别折腾跟着既有环境走。但如果你是自由选择Xcelium在几个方面是有明显优势的单内核混合语言仿真非常稳。Xcelium从底层就是一个统一的仿真内核支持Verilog、SystemVerilog、VHDL、PSL等多种语言混编不需要像某些工具那样启动“混合模式”桥接模块去转来转去。SystemVerilog和UVM支持非常完整特别是对于断言SVA、覆盖率收集、UVM寄存器层的支持都是业界顶级的。22.09版本对SystemVerilog-2017新特性的支持又往前推进了一大步。与Cadence自家的Verdi调试工具、Genus综合、Tempus时序签核配合起来无缝衔接流程脚本可以打通。如果你用的是完整的Cadence数字流程Xcelium的体验是最顺滑的。多核并行编译技术名叫“Xcelium.DPE”对大规模设计的增量编译优化很明显。实测下来一个上千万门的模块用多核并行编译的时间和内存消耗都比我用过的VCS旧版本要友好一些。不过它也有个小缺点——命令行体系比较庞杂新手容易看晕。但没关系这篇文章就是来解决这个问题的。2. 安装前的准备系统要求、安装包检查、License预备2.1 系统配置的基本要求装Xcelium 22.09第一件事不是急着解压安装包而是确认操作系统环境符合要求。这个版本官方支持的主流Linux发行版包括RHELRed Hat Enterprise Linux7.9、8.x以及对应的CentOS 7/8、Rocky Linux等兼容衍生版Ubuntu 20.04、22.04也在支持范围内。操作系统架构必须是64位x86_64这是硬性要求不要指望在32位环境里跑。内核版本方面RHEL系建议3.10及以上Ubuntu系建议5.4及以上其实绝大多数现代的Linux发行版都能满足。硬件方面我个人的经验是最少给到8GB物理内存16GB及以上会比较舒服。仿真是一个内存消耗很大的活儿尤其是在跑UVM验证环境和回归测试的时候内存动不动就吃掉十几个GB。磁盘空间如果只是安装单机版的基础仿真工具我建议至少预留80GB的空间因为安装包本身十几个GB解压和安装后占用的空间会进一步膨胀。另外仿真过程中生成的波形文件、日志文件、中间产物也都很占空间如果你的工程会长期迭代及时清理临时目录是好习惯。2.2 安装包里都有什么下载之后怎么校验22.09版的安装包一般是一堆tar文件例如xcelium2209_SetupLinux.tar之类。解压出来之后你会看到类似于InstallDir_XX、Hotfix_XX这样的子目录。其中InstallDir就是主安装包Hotfix是补丁包。在动手安装前强烈建议先做一次安装包完整性校验。很多同学下载完就直接解压结果在安装中途报错说某个文件损坏或者checksum不匹配回头还要重新下载几十GB的东西非常浪费时间。正规渠道下载的安装包会附带SHA256或者MD5校验值用sha256sum或者md5sum命令核对一下再解压。校验通过后再检查一下解压后的目录里面有没有README或其他说明文件。Cadence安装包里的README通常写明了最低的OS版本要求、依赖库列表、安装步骤摘要别跳过这一步我见过太多人解压完就抓瞎问“下一步该运行哪个脚本”其实读两分钟README就全知道了。2.3 License和License Server的预备知识Xcelium是收费商业软件不带license你是跑不起来的。很多新手卡在这里一脸茫然地说“我装好了但xrun报license错误”。实际上license这东西在安装之前就应该准备好。Cadence的license常见有两种形态单个license文件通常是.dat或者.lic以及通过license server进行网络授权LM_LICENSE_FILE指向license server的端口和主机名例如5280myserver。如果是个人学习装机通常用单机license文件直接设置环境变量指向该文件即可。如果是公司或者实验室的网络环境基本会走license server的统一管理。注意一个容易忽略的点Xcelium的license需要包含对应的仿真模块feature常见的有Xcelium_Simulator、Xcelium_Questa_Compatibility之类的feature。如果你的license只买了别的产品线比如只买了数字综合工具那么即便Xcelium本体装好了启动仿真的时候照样会提示feature not found。提前和license管理员确认好feature列表能省很多麻烦。2.4 确保依赖库已经装齐Xcelium在Linux环境下运行依赖一批基础系统库。只要系统是相对“完整”的桌面版Linux发行版这些库通常都已经装好了但如果你用的是精简版服务器环境或者Docker容器就很容易缺库。常见依赖库包括libXext、libXft、libX11、libstdc、libncurses、libnsl等。我推荐的方式是在安装Xcelium之前先用系统包管理器把这些基础库补齐。CentOS/RHEL系统可以用yum或者dnfUbuntu系统用apt。补齐依赖库再装Xcelium会让整个过程顺畅很多。不然xrun命令是找得到了运行的时候报依赖库缺失还得回头再查系统日志反而更麻烦。3. 安装流程全记录从解压到验证安装成功3.1 解压安装包并启动安装程序假设你已经把安装包tar文件放在一个干净的目录下比如/home/user/xcelium_pkg/。接下来的步骤大致是这样mkdir -p /home/user/xcelium_pkg tar -xvf xcelium2209_SetupLinux.tar解压完成后进入解压出来的目录找到可执行的安装向导脚本。通常安装程序的启动方式是运行其中的setup.sh或者通过installscape工具。Cadence新版本的安装程序一般采用installscape统一的图形勒索界面它会引导你选择安装目录、选择要安装的组件基础仿真器、各个语言的编译器、文档、示例等。如果你所在的服务器没有图形界面或者想通过SSH远程安装别担心installscape本身支持命令行模式或者通过vnc方式操作也可以用静默安装模式。不过对新手来说能开图形界面就用图形界面直观一点不容易出错。3.2 选择安装组件和安装目录规划要趁早安装过程中会让你选择安装目录。建议路径选得干净好记例如/opt/cadence/xcelium2209。注意路径里尽量不要有中文、空格以及奇怪的符号因为后续环境变量、脚本解析都跟路径打交道特殊字符会制造很多没必要的麻烦。组件选择这一步如果你的磁盘空间够我建议把SystemVerilog、Verilog、VHDL相关的全部选上。默认情况下安装程序会帮你有选择性地勾选但新手不用太省空间后面再用到某个组件发现没装就要重新跑安装程序更折腾。文档和示例examples也建议装上里面自带的demo工程是很好的学习材料。安装时间取决于你的机器性能。放到现在的服务器上装一个基础版20到30分钟都属于正常范围如果你的机器比较老盯着进度条耐心等就好。3.3 License文件放置与指向安装结束后需要把license文件放置到合适的位置。我推荐把license文件放在安装目录之外的一个路径例如/opt/cadence/license/xcelium_license.dat防止后续升级工具时不小心覆盖掉。然后设置环境变量指向这个license文件或license server。这一步极其关键我后续会专门开一节详细讲环境变量。3.4 快速验证安装是否成功安装完成后先别急着写代码仿真做一次快速验证which xrun xrun -version如果环境变量配置正确which xrun应该能打印出xrun的可执行文件路径xrun -version会打印出版本信息比如xrun 22.09-p001看到版本号说明工具本体已经装好并且环境也通了一半。此时还可以跑一下Xcelium安装目录中自带的一个examples程序选一个最简单的verilog仿真demo编译运行一下如果报license错误说明license配置还有问题如果正常打印出仿真结束的日志说明整套工具链已经打通了。4. 环境变量配置详解那些让人头疼的PATH和license变量4.1 核心环境变量PATH、LM_LICENSE_FILE、CDS_LIC_FILE环境变量配置是新手翻车最多的地方。xrun命令找不到、license连接不上、运行时报一些奇怪的动态库错误八成都是环境变量没配好。核心变量有这几个PATH变量必须包含xrun所在的bin目录。Xcelium 22.09的xrun可执行文件通常在$CDS_ROOT/tools/bin和$CDS_ROOT/tools/xrun/bin这两个目录下。其中CDS_ROOT指你的安装根目录。license相关变量有两个常见写法LM_LICENSE_FILE是Cadence和其他多家EDA工具通用的环境变量CDS_LIC_FILE是Cadence的专用变量。如果你的环境里只有Xcelium设置其中一个就够了建议设置CDS_LIC_FILE因为它是Cadence工具优先读取的变量如果还装了其他EDA工具可能要把多个license源都写入LM_LICENSE_FILE用冒号分隔。还有一种情况两个变量都设置了且指向不同的license源Cadence工具的读取顺序会比较复杂。新手要注意别把两条license设置冲突了。最稳妥的做法是在.profile或者.bashrc里统一写清楚只设置一个主license变量。4.2 常用Shell环境配置示例我以bash为例给出一个典型的配置片段放在你的~/.bashrc里export CDS_ROOT/opt/cadence/xcelium2209 export PATH$CDS_ROOT/tools/bin:$CDS_ROOT/tools/xrun/bin:$PATH export CDS_LIC_FILE/opt/cadence/license/xcelium_license.dat如果你的license走的是服务器模式则CDS_LIC_FILE写成类似这种格式export CDS_LIC_FILE5280license_server_hostname配置完成后执行source ~/.bashrc让环境变量生效。然后再次输入which xrun验证一下路径是否已经指向正确位置。这里有一个我踩了很多次才养成的习惯新建一个独立的仿真环境脚本比如叫env_setup.sh把上面这些环境变量集中放在里面每次开新终端就source一下。这样不会污染系统全局配置切换Xcelium版本比如22.09和23.03并存时也方便不用去改.bashrc。4.3 其他需要关注的辅助变量除了PATH和license变量还有几个辅助变量有时候也要关心一下。CDS_INST_DIR一般指Cadence安装总目录不过Xcelium的单目录安装通常不需要单独设置CDS_ROOT已经够用。如果遇到动态库加载问题可以设置LD_LIBRARY_PATH指向Xcelium的lib目录例如$CDS_ROOT/tools/lib但要注意别乱加否则会影响系统里其他程序。平时不设置遇到缺库比如提示libstdc.so.6版本不对的时候再去对应调整。TMPDIR变量影响Xcelium临时文件的存放位置。默认情况下它用系统的/tmp目录但/tmp往往空间有限大型仿真的时候临时文件可能会把/tmp塞爆。建议把TMPDIR指向一个大分区下的专用目录例如/tmpfs_fast或者/var/tmp/xcelium_work。4.4 环境变量配置后的验证步骤配好环境变量之后用以下命令做一轮系统性的检查echo $CDS_ROOT echo $PATH echo $CDS_LIC_FILE xrun -version每一步输出的结果都应该在你预期之内。如果任何一环出现空值或者路径指向错误马上修正不要带着问题进入仿真阶段。另外把xrun -help的输出认真浏览一遍也是新手快速上手的好办法xrun的帮助信息虽长但结构很清晰按功能分组列出所有选项和清晰说明。5. 第一个仿真项目完整实操从RTL到波形显示5.1 搭建项目目录结构仿真项目的第一步不是写代码而是规划目录。我推荐一个简单又清晰的目录结构你后面做稍微大一点的工程也能直接扩展counter_sim/ ├── rtl/ # 存放RTL源文件 ├── tb/ # 存放testbench文件 ├── run/ # 仿真运行目录日志、波形、中间文件都在这 └── script/ # xrun命令行脚本、tcl脚本把目录分开有两个好处一是RTL代码和验证代码不会混在一起二是仿真产生的临时文件不会污染源文件目录。如果你的工程后面引入了UVM环境目录结构还可以按env、test、agent、sequence之类更细地拆但现在这个规模已经够用了。5.2 写一个最简单的RTL计数器为了演示完整流程我选一个4位同步计数器功能足够简单但能验证时钟、复位、使能这些最基础的信号。RTL代码长这样module counter_4bit ( input wire clk, input wire rst_n, input wire en, output reg [3:0] q ); always (posedge clk or negedge rst_n) begin if (!rst_n) q 4d0; else if (en) q q 1b1; end endmodule这段代码里注意几个关键设计决策复位用的是异步复位低电平有效这是可综合电路里很常见的写法计数使能信号en拉高时计数加1。代码本身很简单但正好能覆盖仿真里最核心的信号类型。5.3 写testbench时钟生成、复位激励和波形dump对应的testbench要负责生成时钟、复位激励、以及把波形dump到文件里。代码如下module tb_counter; logic clk; logic rst_n; logic en; logic [3:0] q; counter_4bit dut ( .clk (clk), .rst_n(rst_n), .en (en), .q (q) ); // 时钟生成10ns周期 initial begin clk 0; forever #5 clk ~clk; end // 激励复位、使能、运行 initial begin rst_n 0; en 0; #20; rst_n 1; // 释放复位 en 1; // 开始计数 #80; en 0; // 暂停计数 #40; en 1; // 再次计数 #40; $finish; end // 波形输出VCD格式 initial begin $dumpfile(counter.vcd); $dumpvars(0, tb_counter); end endmodule这里的testbench是一个完全自包含的SystemVerilog文件没有使用接口、类等复杂SV特性但对新手来说足够撑起第一轮仿真体验。信号类型用了logic而不是reg/wire这是SystemVerilog推荐的通用四态类型。5.4 用xrun跑通整个仿真流程进入run目录执行xrun ../tb/tb_counter.sv ../rtl/counter_4bit.v -access rw -vcd这里简单拆解一下参数xrun后面跟着需要编译的所有源代码文件-access rw 表示允许工具在仿真时读写波形文件和相关信号-vcd 选项告诉xrun在仿真结束或指定时间输出VCD波形文件。这行命令会自动执行编译、elaboration、simulation三个步骤。仿真结束之后你会看到类似下面的日志片段实际时间戳和版本号会有所差异xrun(64): 22.09-p001: (c) Copyright 1995-2022 Cadence Design Systems, Inc. TOOL: xrun(64) 22.09-p001 FILE: output.log ... Simulation complete via $finish(1) : TIME 180 ns看到Simulation complete就说明仿真已经走通了。这时在run目录下会生成counter.vcd文件。如果你希望仿真过程中实时查看波形、甚至交互式地给信号赋值可以加-gui参数启动SimVision图形界面。但命令行方式的优势是可脚本化、可回归我建议新手先把命令行方式跑通再回头尝试GUI模式。5.5 打开VCD波形用nWave还是SimVision波形文件生成之后怎么打开它也有一点讲究。VCD格式是最通用的波形格式几乎所有仿真器和波形查看器都认。Xcelium自带的SimVision可以打开VCDCadence生态常用的Verdi里的nWave也可以。我个人推荐使用Verdi/nWave来看波形因为它的信号分组、波形搜索、逻辑值对比功能强大特别是挂UVM环境以后从波形追踪到源码的效率非常高。命令很简单nWave counter.vcd 如果你手上只有Xcelium本体、没装Verdi那直接用SimVision也行。在xrun命令行里加一个-simvision参数或者在仿真结束后运行simvision counter.vcd都可以打开波形查看。打开波形后把clk、rst_n、en、q这4个信号拖进波形窗仿真拉起之后你应该能看到q在en为1的时候每个时钟沿加1在rst_n为0的时候清零。看到这个波形就说明你的第一个Xcelium仿真项目正式跑通了。5.6 写出可复用的run脚本不要每次手动敲命令第一轮仿真跑通之后我强烈建议你马上写一个脚本把整个命令流程固化下来后续改代码、加用例直接跑脚本就行不需要重复敲一堆命令行。一个简洁的run.sh可以做这样的事#!/bin/bash source /opt/cadence/env_setup.sh cd $(dirname $0)/../run xrun ../tb/tb_counter.sv ../rtl/counter_4bit.v -access rw -vcd -l counter.log其中-l选项指定日志文件名后续分析和排查可以直接打开日志文件不用在终端里翻找输出。这个脚本虽然简单但引入了一个工程化的思维仿真命令是会被反复运行的把它脚本化是管理复杂验证流程的第一步。6. XRUN常用参数与调试技巧从新手到熟练工的进阶清单6.1 多文件工程和文件列表告别一长串命令行当工程文件数量多起来以后把所有文件一股脑写在xrun命令行后面是很痛苦的。此时可以用文件列表filelist来管理。比如创建一个filelist.f文件../rtl/counter_4bit.v ../tb/tb_counter.sv然后执行xrun -f filelist.f -access rw -vcd如果用到宏定义、include路径、库路径还可以用FILEDIR、incdir等参数扩展。不同仿真器在filelist语法上的兼容性一直是个麻烦事但Xcelium对主流格式的兼容做得还不错比如用-f指定文件列表用incdir路径指定include目录用-v 库文件来挂载标准库。6.2 分步执行compile、elaborate、simulate分开跑前文提到xrun默认一次性跑完三个阶段。但在工程迭代中每次都完整跑一遍三个步骤其实很低效。Xcelium支持用-xmverilog等选项或者用marker文件来保存编译结果实现增量编译。更直白的做法是用-ccompile only、-elaborate只细化、-R只运行等参数控制阶段。比如xrun -f filelist.f -compileonly # 只编译 xrun -f filelist.f -elaborate # 在已有编译结果基础上细化 xrun -f filelist.f -R # 只跑仿真如果你改的只是testbench而不是RTL通过增量方式跑第二轮仿真速度提升非常明显。新手一开始不熟悉通常是一条命令跑到底等到工程大了、编译一次要好几分钟就会认识到分步执行和增量编译的价值。6.3 仿真选项速查这些参数你会经常用到参数作用使用建议-access rw设置波形读写权限需要dump波形时必加-f filelist.f指定文件列表文件多时强烈推荐incdirdir添加include目录使用头文件时用-v file.v挂载库文件用到标准库或IP时用-timescale 1ns/1ps指定时间单位和精度源文件没有timescale时用-l logfile指定日志文件建议养成习惯-q安静模式少打log跑大批量回归时用-gui启动SimVision图形界面调试阶段用-clean清理临时目录归档项目前用上面这个表列出来的参数基本覆盖了日常仿真90%的使用频率。当然xrun的参数远不止这些熟练之后你还可以在22.09版本基础上配合UVM、SVA断言、功能覆盖率等进阶特性去挖掘。6.4 调试技巧仿真卡住、波形没生成、信号不正确怎么办调试是对直觉和经验的考验。这里说几个特别常见的情况仿真卡住不退出。大多数情况是testbench里有死循环或者$finish没写、仿真时间设得太大。先检查是不是有forever循环没跳出再查看CPU占用情况。如果CPU占用接近100%多半是仿真在忙把仿真时间缩小一档再跑一次就好。波形文件生成了但信号全部是z或者x。这个极大概率是信号没有被正确驱动常见原因是复位没做好或者testbench根本没有给初始值。解决办法是检查initial块里有没有给clk、rst_n赋初值以及testbench中DUT的端口接没接对。仿真结果和预期不符一个典型例子是信号在期望的时间点没有翻转。打开波形对照时钟边沿数和使能信号检查激励时间轴对不对。很多情况下是testbench里的#延时时序和复位释放时间点对不上调整一下激励节奏就好了。6.5 与Verdi联调从xrun一键启动Verdi调试在Cadence流程里Xcelium和Verdi是黄金搭档。具体做法是在xrun命令加-xverilog的兼容选项同时配合-kdb选项生成Verdi认识的数据库xrun -f filelist.f -access rw -kdb -gui这条命令执行后会打开Verdi并且在Verdi里可以看到完整的设计层次、源码关联、信号跳变。对调试UVM环境来说加上-uvm选项还能直接把UVM源码路径和类层次一起带出来。这一步是很多公司实际项目中的默认调试姿势。7. 新手常见问题排查环境、编译、license、运行现场实录7.1 xrun: command not found这个报错十有八九是PATH变量配置问题。先用echo $PATH确认xrun所在目录是否在PATH里再确认CDS_ROOT指向的路径是否真的存在。我见过不少人在.bashrc里写环境变量写完忘记source或者路径写错了比如把tools/bin写成tool/bin排查时一步步打印变量很快就能定位。7.2 License问题checkout失败、log里出现feature缺失license报错的典型形式是类似“license checkout failed”或者“Cannot find license file”的信息。挨个检查这几项CDS_LIC_FILE或LM_LICENSE_FILE是否设置正确license文件路径下的文件是否存在、可读文件里的server hostname和端口是否匹配如果用了server模式用lmstat命令查看license服务是否活着确认license里包含Xcelium对应feature。有一个很反直觉的坑license文件末尾如果含有换行符格式错误比如Windows下编辑过Cadence的工具解析时会莫名失败。如果你用Windows编辑过license文件先转成Unix换行格式再放上去。7.3 编译阶段报错语法错误之外的那些特殊情况编译报错并不总是代码写错。有一个特例是文件扩展名的影响.v文件默认按Verilog-2001编译.sv文件按SystemVerilog编译。如果你把SystemVerilog的语法写在.v文件里即使内容完全正确也会报语法错误。另一个常见问题是库文件缺失。比如编译遇到“cant open /lib/foo.v”之类的信息先确认文件列表里库路径写没写对incdir有没有遗漏。还有timescale问题多个模块的默认时间单位和精度不一致仿真时会看到莫名其妙的时间延迟。建议在编译选项里统一指定-timescale 1ns/1ps或者在每个源文件里都写清楚timescale指令避免不一致。7.4 仿真运行异常core dump、卡死、内存不足仿真跑到一半core dump先看目录下生成的core文件用gdb或者系统日志做基本定位。很多仿真器内部问题在升级热点补丁后会被修复所以遇到被反复触发且无法用代码层面规避的core dump去Cadence官网查一下当前版本的热修补丁安装后重新跑通常有效。内存不足则要具体分析如果是大设计考虑用xrun的多核/分布式选项控制同时编译的模块数如果是仿真时间过长确认testbench里有没有不必要的循环仿真时间是不是被设成了天文数字。另外别忘了我前面提到的TMPDIR设置仿真临时文件占用过大也可能挤占系统内存导致OOM。7.5 波形文件异常VCD文件巨大、波形看不到具体信号VCD文件是真切的文本格式信号越多、仿真时间越长文件体积越大。这类问题有几个排查思路确认$dumpvars的层次参数如果写的是tb_counter会dump这个模块下的全部信号如果你只关心特定信号可以写成$dumpvars(level, tb_counter.dut.q)限制dump层次。如果VCD文件已经生成但打不开大概率是文件写入不完整。检查日志里有没有报告“vcd file write error”以及磁盘空间是否写满了。SimVision或nWave打开VCD后一片空白先检查时间轴范围再检查信号是否被最小化隐藏了。7.6 快速排查速查表现象最可能的原因优先排查方向xrun找不到PATH未配置echo $PATH检查tools/binlicense报错license变量或文件问题检查CDS_LIC_FILE、feature编译语法错文件类型不匹配检查扩展名、包含路径仿真不结束testbench死循环检查forever、系统时间波形全x/z复位或者初始值缺失检查initial块VCD文件巨大dump层次过深限制$dumpvars层次core dump工具bug或库冲突查干补丁、检查依赖库8. 最后再分享一点我个人的小习惯这套流程真正跑通之后我建议你再多做两件事一是把官方examples目录里那些自带的demo工程挨个跑一遍只看别人写的testbench是怎么组织激励的比自己瞎试效率高得多二是从第一次仿真开始就保留运行日志和命令记录等工程变大之后你会发现能回溯“上一次到底是怎么跑出来的”能省下大把时间。我自己就是从第一个计数器工程开始养成这个习惯的后来编译报错、波形异常时翻历史日志和脚本帮我定位了不少问题。Xcelium官方文档和在线支持support.cadence.com的信息密度也挺高遇到自己解决不了的问题时直接去那里搜往往比在任何群里提问要快。
阅读完成 · 觉得有帮助?