ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux部署Cadence Virtuoso IC6.1.8与Spectre 23.1仿真链路全指南

Linux部署Cadence Virtuoso IC6.1.8与Spectre 23.1仿真链路全指南 最近好几个做模拟IC的朋友都来问我同一个事手上有Cadence IC6.1.8和Spectre231的安装包在Linux工作站上装了两三天要么启动不了virtuoso要么在ADE里点仿真直接报模型未定义。我刚开始碰这套工具链时也差不多光一个环境变量就折腾了一整晚。这篇记录把安装思路、目录规划、License配置、环境变量和最容易翻车的几个点都写出来给准备在Linux上部署Virtuoso IC6.1.8 Spectre 23.1仿真链路的同学做个参考。先提醒一句这套东西和Allegro/OrCAD是两条完全不同的产品线别拿Allegro的安装教程硬套。1. 开始之前IC6.1.8和Spectre 23.1到底是一套什么工具1.1 两个名字背后的产品线差异Cadence在产品命名上非常容易造成混乱。IC6.1.8准确来说是指Virtuoso定制设计平台也就是大家常说的IC618它包含原理图编辑器、版图编辑器、ADE仿真环境等而Spectre是模拟仿真引擎通常作为MMSIM安装树的一部分发布你手里的“Spectre231”安装包按官方习惯通常对应Spectre 23.1安装后一般出现在$MMSIM_ROOT/tools/bin/spectre这个位置。简单说IC6.1.8负责“画”和“设”Spectre负责“算”。Virtuoso在仿真时会调用Spectre作为后端求解器两者组合起来才是完整的模拟IC前端仿真链路。但如果你是做PCB的那另外那套Allegro/OrCAD和IC618没有任何共用安装流程搜索引擎里大量“Cadence安装教程”其实是SPB 17.4的别搞混。1.2 服务器配置和依赖库清单IC618和Spectre 23.1对硬件要求不算夸张但也不是随便一台机器就能跑得很舒服。我建议至少16GB内存、40GB空闲磁盘CPU核心数尽量多因为Spectre在跑corner和蒙特卡洛时会明显吃多核。官方支持名单里RHEL 7/8是主力CentOS 7/8、Rocky Linux 8这类兼容发行版也常见Ubuntu能装但坑多一些刚入手不建议用Ubuntu。依赖库是第一个拦路虎。很多“启动不了”的问题根子不在Cadence而是系统里缺了古老的X11/Motif运行库。在CentOS/RHEL系上可以这样装sudo yum install -y csh tcsh ksh sudo yum install -y motif.x86_64 libXp.x86_64 libXext.x86_64 libXmu.x86_64 libXt.x86_64 sudo yum install -y glibc.i686 libstdc.i686 motif.i686 libXp.i686注意那个.i686IC618的启动脚本和历史包袱里还有不少32位组件哪怕你的系统是纯64位缺少32位glibc和motif也会在启动阶段直接弹错。另外License Manager需要Java运行环境装个OpenJDK 8/11一般够用不要装太新的版本部分老License工具对Java版本敏感。2. License服务器搭建安装IC618前必须处理的门禁2.1 台面上的安装流程installer、目录规划、解压Cadence的IC类工具推荐用官方installer装而不是简单解压完就完事。我的习惯是在/opt下建一个干净的Cadence父目录并且每个大组件独立成目录方便后续升级和单独卸载mkdir -p /opt/cadence/installer mkdir -p /opt/cadence/license mkdir -p /opt/cadence/IC618 mkdir -p /opt/cadence/MMSIM231现在你拿到的安装包通常是tar包或者ISO镜像。tar包先确认校验值然后解压ISO镜像直接mountmount -o loop IC6.1.8.iso /mnt/cdrom进入安装介质目录后找到setup.sh或者installer可执行文件运行./setup.shinstaller会弹出图形界面按顺序选择要安装的产品。这里有一个经验如果终端在X11转发下图形界面起不来别死磕直接试试./installer -mode silent配合应答文件或者用DISPLAY:0.0切到本机图形界面。我在服务器上通常不开图形能terminal安装就terminal安装。目录规划和安装顺序也有讲究先装License Manager再装IC618最后装MMSIM/Spectre。License服务不通后面装得再顺也白搭。2.2 license的“通”与“不通”lmgrd、license.dat、LM_LICENSE_FILECadence用的是FlexLM许可机制流程是License服务器上的lmgrd读license.datlicense.dat里定义Server行、Vendor daemon行和Feature行。客户端通过环境变量LM_LICENSE_FILE或者CDS_LIC_FILE找到服务器然后向它申请Feature。拿到正版授权文件后第一件事是检查SERVER行里的主机名和你机器真实的hostname是否一致hostname如果不一致要么改/etc/hostname要么修改license文件里的主机名。FlexLM对主机名匹配很严格大小写差一个字符都会导致checkout失败。端口默认是5280如果和现有服务冲突可以在SERVER行末尾指定比如5280改成5281。改完端口后客户端环境变量也要同步改。启动License服务时用这样的命令/opt/cadence/license/bin/lmgrd -c /opt/cadence/license/license.dat -l /opt/cadence/license/lmgrd.log验证服务状态用/opt/cadence/license/bin/lmstat -a -c /opt/cadence/license/license.datlmstat能看到Feature列表和当前已签出的许可证数量。如果客户端报“License checkout failed”不要只怀疑license文件先在本机telnet一下端口通不通telnet 127.0.0.1 5280如果端口不通多半是防火墙或者lmgrd根本没起来如果通但feature查不到则是license文件和主机名不匹配或者VENDOR路径找不对。有一说一80%的License问题我到最后都发现是主机名或者端口配置不一致而不是授权本身有问题。3. Virtuoso IC6.1.8启动环境环境变量一次写对3.1 环境变量各字段的含义Virtuoso启动的环境变量看着多其实核心就几个。既然Cadence自家脚本大量使用csh很多老工程师习惯写.cshrc但我个人更推荐写到/etc/profile.d/cadence.sh里这样所有用户的bash登录会话都能自动加载少踩“为什么我source了还是不行”的坑。下面是一个我在IC618 MMSIM231组合上验证过的配置export CDS_INST_DIR/opt/cadence/IC618 export CDS_ROOT/opt/cadence/IC618 export MMSIM_ROOT/opt/cadence/MMSIM231 export PATH$CDS_INST_DIR/tools/dfII/bin:$CDS_INST_DIR/tools/bin:$MMSIM_ROOT/tools/bin:/usr/bin:/bin export LD_LIBRARY_PATH$CDS_INST_DIR/tools/lib/64bit:$MMSIM_ROOT/tools/lib/64bit:$LD_LIBRARY_PATH export LM_LICENSE_FILE5280cadence-lic-server export CDS_LOAD_ENVCadence逐个解释一下CDS_INST_DIR是IC618软件的主安装路径CDS_ROOT一般和它相同很多脚本会同时读这两个变量PATH里tools/dfII/bin放在最前面因为virtuoso这个可执行文件实际在这个目录下MMSIM_ROOT指向Spectre仿真器的安装路径这也是为什么你在PATH里只配了IC618还不够仿真器也必须能直接搜到。LD_LIBRARY_PATH里加上Cadence自带的64位库能避免一部分动态库冲突。这里有个常见误区有人会把OA_HOME也手动指向一个OpenAccess安装目录。在IC6.1.8里OpenAccess库其实已经内嵌在IC618安装树中一般不需要单独设置OA_HOME硬设反而可能让PDK版本判断出错。把OpenAccess的管理交给Cadence默认机制就好。3.2 .cdsinit、OpenAccess与首次启动自检环境变量配好后还需要一个用户级启动文件.cdsinit。这个文件的作用类似shell的.bashrcVirtuoso启动时会加载它来初始化菜单、快捷键、加载PDK等。如果$HOME下没有.cdsinitVirtuoso虽然也能弹出界面但很多菜单会是裸的PDK关联也有问题。第一次启动前从安装目录的示例文件复制一份cp $CDS_INST_DIR/tools/dfII/samples/local/cdsinit $HOME/.cdsinit如果用的PDK是工艺厂提供的PDK安装说明里通常要求在你的.cdsinit里添加一行类似load(path/to/pdk/setup.il)的内容。这一步别省不加载PDK后面的工艺库和Spectre模型全都没影。启动前先做一次自检确认命令能找到which virtuoso which spectre正常情况应分别输出IC618和MMSIM目录下的路径。如果which virtuoso没输出先检查PATH顺序如果virtuoso能找到但进程起不来切到一个有图形权限的窗口看报错信息。远程SSH环境下记得用ssh -X开启X11转发或者用VNC登录图形桌面。没有可用的显示器Virtuoso的GUI是无论如何也弹不出来的。首次启动命令cd ~/work virtuoso 观察启动日志重点看有没有“OpenAccess”或“PDK”相关警告。如果PDK库是老的CDB库你还会在Virtuoso里看到库管理器无法打开这个问题放到第5节展开。4. Spectre 23.1仿真器装好之后还要跑通4.1 MMSIM安装树里的Spectre和安装后检查很多人以为“装好了Spectre”就万事大吉其实Spectre是装在MMSIM目录里的安装包可能叫MMSIM231或者SPECTRE231安装时选定的组件不同最终二进制位置会有差异。装完后先找一下可执行文件find /opt/cadence/MMSIM231 -name spectre -type f正常情况下应该在/opt/cadence/MMSIM231/tools/bin/spectre。如果这个二进制都不存在说明安装时漏选了Spectre主程序或者只装了某个附加组件需要回到installer补装。确认存在后运行版本检查cd /tmp /opt/cadence/MMSIM231/tools/bin/spectre -V输出会带版本号和构建信息。如果这里报缺少动态库先把第1.2节里的依赖库补齐如果是license问题则回到第2.2节排查。4.2 命令行先验证不依赖PDK的网表测试在Virtuoso里跑仿真的链路很长为了快速判断Spectre本身是否正常我习惯先脱离PDK做一次最原始的电阻分压DC仿真。新建一个文件test.scssimulator langspectre V1 a 0 dc1 R1 a b 1k R2 b 0 1k dc dc start0 stop1 step0.1这个网表只用电压源和电阻不依赖任何工艺模型如果Spectre引擎正常就能算出b点电压。运行命令cd /tmp /opt/cadence/MMSIM231/tools/bin/spectre test.scs log test.log看到仿真正常结束日志里没有ERROR再看生成的test.raw或psf目录里有结果就可以确定Spectre引擎本身没问题。从这一步再往上问题就集中在PDK模型、ADE配置和Virtuoso之间的集成上。如果要用MOS器件做验证就必须引入PDK模型文件。PDK的libInit或setup流程会告诉你模型文件在哪个路径典型形式是models/spectre/xxx.scs或xxx.lib。在命令行测试里可以通过include语句引入include /path/to/pdk/models/spectre/xx.scs sectiontt注意sectiontt表示选典型corner如果PDK里没有这个名字在模型文件里搜一下section定义即可。很多“器件未定义”其实不是引擎坏了是corner名称写错或者模型库没include进去。4.3 在ADE环境中切换并配置Spectre命令行验证通过后回到Virtuoso的ADE环境。打开原理图调出ADE L启动前先检查两件事第一仿真器类型。在菜单Setup - Simulator/Directory Host里确认选的是spectre而不是spice或者ams。有些PDK的cell view是基于spectre语法写的选错仿真器会报一堆语法错误。第二模型库。在Setup - Model Libraries里添加PDK的spectre模型文件。这里特别提醒不要只把模型文件列进去还要点选“Use”或“Select”并确认section对应你需要的工艺角。如果没有正确加载模型跑仿真时就会报“器件未定义”或者“model not defined”。设置完成后在ADE里新建一个瞬态分析比如stop10u点Run。第一次跑通后整个安装链条才算真正闭环Virtuoso调用SpectreSpectre读取PDK模型并把波形返回ADE画出来。5. 从安装到跑仿真最常把我卡住的五个地方5.1 virtuoso: command not found这个报错最常见也最简单。你明明装了IC618但终端里敲virtuoso就是找不到。原因基本是PATH没生效。Virtuoso的可执行文件在$CDS_INST_DIR/tools/dfII/bin而不是很多人想象的$CDS_INST_DIR/bin。我建议不管用什么shell先执行echo $CDS_INST_DIR echo $PATH看到tools/dfII/bin没在PATH里直接补。如果环境变量对但当前窗口不生效大概率是修改完profile后没有重新登录source /etc/profile.d/cadence.sh后立刻验证一下。还有一种情况是你改了.bashrc但Cadence相关的tool初始化脚本是用csh写的交互shell又是bash导致某些子进程环境不一致写成profile.d全局配置文件能缓解。5.2 license checkout failed这个问题的排查链路要按顺序走别一上来就怀疑license文件。第一步看license服务器本身的log确认lmgrd和cadencedaemon是否都起来了第二步在客户端机器上跑lmstat -a看能不能连上服务器、能否看到目标feature第三步检查客户端的LM_LICENSE_FILE它的优先级很容易被其他工具覆盖。有些EDA环境里Siemens、Synopsys工具也会设置LM_LICENSE_FILE如果多个路径之间没加冒号后写的会覆盖先写的。我遇到过最隐蔽的情况是服务器的网卡MAC变了导致FlexLM计算出的hostid和license文件里的值不一致表面看主机名、端口全对但就是checkout失败。换网卡、开虚拟网卡、或者笔记本休眠恢复后都要留意这个点。另外Cadence客户端环境变量还支持CDS_LIC_FILE如果同时设置了LM_LICENSE_FILE和CDS_LIC_FILE实际生效的优先级可能会让你困惑建议统一只用LM_LICENSE_FILE。5.3 libXm.so.4 / libXp.so.0 缺失线索通常长这样error while loading shared libraries: libXm.so.4: cannot open shared object file这是因为IC618的启动脚本需要老的Motif库而CentOS 8/RHEL 8从默认源里移除了部分兼容库。解决方法是安装兼容的Motif和Xp库比较省事的命令是sudo yum install -y compat-libXtXm sudo yum install -y libXp.x86_64 libXp.i686如果是Ubuntu系对应包名通常是libmotif4、libxp6装之前先apt search libXm看本机源里有什么。这里也提醒一下不要因为缺库就随手去网上找一个.so文件复制到/usr/lib64架构不匹配或版本不对会引发更奇怪的崩溃优先用发行版仓库的兼容包。这类缺失库问题通常在启动阶段集中爆发建议把第1.2节的依赖一次装齐别等报错再一个个补。5.4 OA版本不匹配与CDB库迁移如果你之前用的是IC5141或者手上的PDK是老的CDB格式在IC6.1.8里打开库时会遇到“OpenAccess”相关错误。IC618默认是基于OpenAccess数据库的老库不能直接被编辑。Cadence提供了一个转换工具“Conversion Toolbox”中的CDB到OpenAccess转换对应的就是网上搜索里常见的“cdb to openaccess”流程。转换前先备份原库然后启动转换工具选择要迁移的库把CDB格式转换成OA格式。转换完成后在Virtuoso的Library Manager里能看到正常图标也才能继续调用PDK和做版图。很多老工程师的库放在/home/xxx/analog_lib转换时需要注意路径权限不要直接在NFS挂载目录上转换容易因为锁文件中断。如果是PDK库自带的OA版本和当前IC618的OpenAccess版本不一致启动时会提示类似“library is not compatible with current OA version”。这种情况优先找PDK厂商更新其次检查lib.defs里是否写过错误的OA_VERSION必要时删掉被PDK绑死的lib.defs让Virtuoso重新生成。切忌手动乱删库文件操作前先做目录级备份。5.5 仿真器报“器件未定义”或“模型未找到”这个坑在安装完成后更常见。Spectre本身能跑、ADEL也能启动一点Run就报“model not defined for M1”。原因很直白仿真器不知道M1用哪个模型因为model library没配置对。排查思路在ADE的Model Libraries里确认模型文件路径存在确认section与PDK支持的工艺角一致。PDK安装脚本通常会在.cdsinit里自动加好这部分如果你手动改过.cdsinit先注释掉自加的配置用PDK原生的初始化流程。另一个容易忽略的是cellview里器件的model参数名Spectre会按这个参数去模型库里查找。比如PDK模型库里定义的device叫nch_25ud18而你原理图里的是NMOS_VTH两者对不上就会报未定义。还有一种隐蔽情况模型文件路径里包含环境变量而当前启动Virtuoso的shell环境没有导出那个变量。命令行的验证方法是在启动virtuoso的终端里echo这个路径确认变量存在如果为空白在profile.d配置里补上。讲到最后我还是想说一句这类安装问题没有太高深的技巧就是把链路拆开一段一段验证。License不通就先绕开license跑命令行仿真器跑不通就用纯RCL网表验证模型报错就回到PDK配置逐层剥下去基本都能找到根因。这套IC618 Spectre 23.1的安装链路一旦走通后面刷新PDK、加新仿真器版本都能复用同样的方法论。
返回列表