
先声明一下这篇文章是“用CentOS 7安装Cadence搭建适合IC Design的科研环境”系列的第四篇。前几篇已经处理掉了CentOS 7最小化安装、网络与基础环境、图形界面与远程登录、以及license server部署这些前置工作。这一篇的目标很明确把IC Design流程里最常用的三件套——Cadence IC617Virtuoso原理图与版图环境、MMSIM151Spectre仿真器、Mentor Calibre2015DRC/LVS版图验证——完整装好并且让它们能互相配合跑起来。我不会写成那种“截图下一步”的傻瓜式流水账。很多教程装完以后你照着点完了也不知道自己干了什么换了台机器换个网段就一头雾水。这篇会尽量把每一步背后的判断逻辑讲清楚为什么选这几个版本、环境变量为什么这么配、报错怎么定位、以及哪些地方容易踩坑。适合正在搭实验室EDA服务器、或者在自己工作站上复现科研环境的研究生和工程师如果你用的是其他Linux发行版把包管理器命令替换一下思路也能直接用。1. 安装前的准备工作与整体思路1.1 三件套的定位与版本搭配先把三个东西的角色分清楚。IC617是Cadence IC 6.1.7的简称里面包含Virtuoso Schematic Editor、Virtuoso Layout Suite XL等前端与版图设计工具是日常画原理图、画版图的入口。MMSIM151是Cadence旗下独立的仿真器套件核心是Spectre负责跑电路仿真。Calibre2015是Mentor现Siemens EDA的版图验证工具用来跑DRC、LVS和PEX是tapeout之前最硬的一道关卡。这三个工具不是越新越好。IC617通常搭配MMSIM15.x使用Cadence官方和很多Foundry PDK都是按这个组合验证过的。MMSIM151之所以经典是因为它在Spectre的收敛性、大电路规模支持上比早期版本稳不少同时还没有后续版本那么激进的新特性适合科研场景里面各种“奇葩”电路结构的仿真。Calibre2015则是很多成熟PDK rule deck默认支持或至少兼容的版本换太新的Calibre有时候反而会撞上rule file版本不匹配的报错。工具组件版本标识核心角色与IC617协同情况Cadence IC617IC6.1.7Virtuoso前端与版图设计主设计环境MMSIM151MMSIM 15.1.0Spectre电路仿真器替代老版本内置仿真器收敛性更好Calibre20152015.xDRC/LVS/PEX版图验证通过calibre.skl集成进Virtuoso科研环境最忌讳“版本冲动”。实验室服务器上稳定跑了两三年的组合往往比花一个礼拜折腾出来的最新组合更有价值。IC617 MMSIM151 Calibre2015就是一组经过大量PDK和流片验证的成熟组合装完以后能省掉很多奇奇怪怪的兼容性问题。1.2 目录规划与用户权限设计很多第一次搭EDA环境的人习惯装到/home/用户名下面图省事。但这在实验室环境里很糟糕一旦用户主目录被清理或者账号被删整个软件环境就没了而且多人共用一台服务器时权限没法管理。合理的做法是把EDA工具统一放到独立的目录和管理员、数据分开。我一般推荐这样的布局/eda/ ├── cadence/ │ ├── IC617/ │ └── MMSIM151/ ├── mentor/ │ └── calibre2015/ ├── pdk/ # 工艺库 ├── library/ # 项目库 └── README磁盘分区上最好单独给/eda划一个逻辑卷或分区这样重装系统不影响工具如果条件允许用机械盘或SSD都行但一定要预留充足空间。IC617本体加MMSIM151、Calibre2015再加上常见的几套PDK装到后期轻轻松松就二三十GB建议至少给50GB。账号方面建议创建一个专用用户比如edauser加入eda用户组然后给/eda设置组权限。这样多个用户只要加入eda组就能调用工具但不会误改安装目录里的文件groupadd eda useradd -g eda -m edauser chown -R edauser:eda /eda chmod -R 775 /eda1.3 系统依赖检查与基础软件准备在动手装Cadence之前先花五分钟确认系统状态。三件套对CentOS 7本身没多高要求但CentOS 7默认最小安装缺少大量老式X11库和脚本解释器这些恰恰是Cadence这种老牌EDA工具最依赖的东西。先看系统基本信息cat /etc/redhat-release uname -a然后检查包管理器是否正常、有没有配好网络源。如果用的是CentOS 7的安装镜像做本地源确保/etc/yum.repos.d/里对应源可用。这里建议第一次配置时把 EPEL 也装上后面找一些兼容库会方便很多yum install -y epel-release另外一个重要问题是磁盘空间。用df -h看一下根分区剩余量不要装到一半才发现空间不够安装中断后残留的目录和日志会让人很想砸键盘。2. IC617Virtuoso安装step by step2.1 安装依赖完整补齐IC617 是从IC 6.1.x时代一路下来的它的二进制大量依赖32位兼容库和旧版X11库。在CentOS 7上最常遇到的启动失败原因就是缺libXp.so.6、libXm.so.4这类老库。与其等报错再补不如安装前一次性装齐。在CentOS 7上我用的是这一组依赖命令yum install -y ksh csh libXp libXp.i686 libstdc libstdc.i686 \ glibc glibc.i686 libgcc.i686 libXext.i686 libXrender.i686 \ libXt.i686 libXrandr.i686 libXft.i686 openmotif openmotif22 \ libnsl libnsl.i686 unixODBC unixODBC-devel \ xorg-x11-fonts-ISO8859-1-75dpi xorg-x11-fonts-Type1 \ xorg-x11-fonts-misc逐个解释一下为什么需要它们ksh和cshCadence的安装脚本、启动脚本大量使用这两种shell。CentOS 7最小化安装默认没有。libXpX11的打印扩展库IC617的图形界面启动时几乎必查这个库而且需要32位版本。openmotif/openmotif22提供Motif控件库对应libXm.so.4和libXm.so.3。IC617界面就是基于Motif的缺了它工具起来就是一个白板或者直接崩溃。libnslName Service Library老版Cadence可执行文件会直接链接它。unixODBC某些EDA流程里数据库访问用的ODBC接口依赖。各种xorg-x11-fonts-*字体缺失时启动Virtuoso会出现花屏、方块乱码或者窗口控件排版错乱。装完以后可以用ldd快速验证一下某个关键可执行文件的库依赖是否完整这是EDA环境排障最常见的三板斧之一ldd /eda/cadence/IC617/tools/dfII/bin/virtuoso | grep not found如果输出为空说明动态库层面基本没问题。2.2 执行SETUP.SH安装主体不同的安装介质形式可能不一样有的是ISO镜像有的是tar归档有的是一组installer目录。但万变不离其宗解压或挂载好以后进入安装包根目录找到SETUP.SH执行它。假设我已经把IC617的安装包放到/mnt/eda/IC617下解压或者挂载后mount -o loop IC617.iso /mnt/eda/IC617 # 或者 # tar -xzf IC617.tar.gz -C /mnt/eda/IC617 cd /mnt/eda/IC617 ls -la chmod x SETUP.SH ./SETUP.SH进入交互界面后核心选项通常就几步选择安装模式。一般是1Install products。输入安装目录。这里输/eda/cadence/IC617注意目录不需要提前创建安装程序会自动建。询问是否配置license。如果license server已经按前一篇配好这里可以直接输入5280你的license服务器主机名如果还不确定选No后面用环境变量指过去也行。选择要安装的子产品。IC617的安装包里有Base、Virtuoso、QRC等一堆子项。科研环境建议至少把Base和Virtuoso相关组件选上如果不需要做寄生参数提取或者后仿QRC可以暂时不装省点空间和时间。安装过程大概持续二十到四十分钟取决于虚拟机I/O性能。期间会不断打印正在解压和安装的文件列表最后出现Installation completed successfully之类的字样就说明主体完成了。如果中间中断不建议直接重跑SETUP.SH覆盖最好把目标目录删干净重新来残留的半成品文件会让后续排障变得很痛苦。2.3 环境变量与启动验证Cadence工具对环境变量的依赖非常重。如果环境变量不写对工具即使装上也会有各种“找不到命令”“找不到license”“加载不了库”的诡异报错。我用的是系统级环境变量文件/etc/profile.d/eda.sh这样所有加入eda组的用户登录后都能自动加载# /etc/profile.d/eda.sh export CDS_ROOT/eda/cadence/IC617 export MMSIM_ROOT/eda/cadence/MMSIM151 export MGC_HOME/eda/mentor/calibre2015 export CDS_LIC_FILE5280eda-server export MGLS_LICENSE_FILE1717eda-server export CDS_LOAD_ENVCWD export PATH$CDS_ROOT/tools/bin:$CDS_ROOT/tools/dfII/bin:$MMSIM_ROOT/tools/bin:$MGC_HOME/bin:$PATH如果你习惯用csh/tcsh对应的~/.cshrc里写法是这样的setenv CDS_ROOT /eda/cadence/IC617 setenv MMSIM_ROOT /eda/cadence/MMSIM151 setenv MGC_HOME /eda/mentor/calibre2015 setenv CDS_LIC_FILE 5280eda-server setenv MGLS_LICENSE_FILE 1717eda-server setenv CDS_LOAD_ENV CWD setenv PATH ${CDS_ROOT}/tools/bin:${CDS_ROOT}/tools/dfII/bin:${MMSIM_ROOT}/tools/bin:${MGC_HOME}/bin:${PATH}注意CDS_LOAD_ENVCWD这个变量指定Cadence在启动时从当前工作目录加载环境文件cds.lib、.cdsinit而不是只从安装目录加载。很多时候Virtuoso启动后“找不到库”“菜单不对”就是因为这个变量没设。装好后的验证命令which virtuoso virtuoso -Vvirtuoso -V能打印Cadence工具的版本信息。如果这一步能正常输出版本说明二进制和依赖库已经没问题。接着可以试着启动图形界面virtuoso 第一次启动通常比较慢耐心等一下。如果用的是远程SSH记得确认DISPLAY变量有没有正确转发echo $DISPLAY。如果用X11转发或者VNC还要保证客户端的X服务正常。2.4 初始化文件与PDK关联IC617启动后默认会加载用户主目录下的.cdsinit文件。这个文件是用SKILL语言写的初始化脚本决定启动界面、菜单、加载哪些工具。从安装目录拷贝一份默认模板是个好习惯cp /eda/cadence/IC617/tools/dfII/samples/local/.cdsinit ~/.cdsinit然后编辑它在合适位置追加Calibre菜单加载语句这步等第4章讲完再回来看也行; 加载Calibre菜单 load( strcat( getShellEnvVar(MGC_HOME) /lib/calibre.skl ) )工艺库PDK的关联则依赖cds.lib。Virtuoso启动时会根据cds.lib里的INCLUDE或DEFINE语句找到工艺库和项目库。最简单的方式是在你的项目工作目录里创建一个cds.lib内容类似INCLUDE /eda/pdk/smic_xxx/libs.defs DEFINE mylib ./mylib很多Foundry PDK安装脚本会直接生成一份libs.defs或lib.defs你只需要在cds.lib里把路径INCLUDE进去就行。这个文件必须在启动Virtuoso的当前目录下或者由CDS_LOAD_ENVCWD指向的目录里。PDK加载不成功Library Manager里就看不到工艺库后续所有设计都没法做所以这一步一定要确认清楚。3. MMSIM151仿真器的安装与适配3.1 MMSIM151 与 IC617 的版本关系这里要先理清一个概念IC617自带了一套Spectre仿真器但版本较老。MMSIM151是Cadence后来独立发布的仿真器套件包含了升级版的Spectre、Turbo等仿真引擎。在IC617上跑仿真时通过环境变量和选项把仿真引擎指向MMSIM151这样既能用新版的仿真收敛算法又不影响前端设计环境。MMSIM151和IC617的适配关系在Cadence官方Release Notes里有明确说明。简单讲IC6.1.7推荐搭配MMSIM15.1或相近系列。有人图新鲜装MMSIM16、17结果仿真时出现模型库不兼容或异常退出的情况不少见。在科研环境里稳定压倒一切MMSIM151是个经过大量验证的稳妥选择。IC版本推荐MMSIM版本备注IC6.1.7MMSIM15.1当前文章组合IC6.1.8MMSIM15.1/16.1新版Virtuoso可尝试更新仿真器IC23.1等MMSIM23.x新版本按官方配套走3.2 安装过程速记MMSIM151的安装过程和IC617类似也是SETUP.SH交互式安装mount -o loop MMSIM151.iso /mnt/eda/MMSIM151 # 或者 # tar -xzf MMSIM151.tar.gz -C /mnt/eda/MMSIM151 cd /mnt/eda/MMSIM151 chmod x SETUP.SH ./SETUP.SH安装目录输/eda/cadence/MMSIM151产品组件建议Base、NLOnly都选上。NLOnly是Spectre的Netlist Only运行方式某些后台批处理流程会用到。安装完成后/eda/cadence/MMSIM151/tools/bin/spectre是核心可执行文件。验证命令spectre -V输出里应该能看到类似Spectre 15.1.0的版本号。如果提示找不到共享库用同样的ldd检查方法定位缺什么。这里我遇到过最多的是libgfortran和libquadmath缺失直接补上yum install -y libgfortran libgfortran.i686 libquadmath libquadmath.i6863.3 让 Virtuoso 正确调用 MMSIM 仿真器仅仅把MMSIM151装上还不够关键要让Virtuoso的ADE仿真环境知道该用哪个仿真器。常见的情况是打开ADE L后Simulator那一栏显示的是spectre但实际上可能调用老版本。有两种方式可以强制指定。第一种通过.cdsenv文件。在项目目录下新建或编辑.cdsenv写入asimenv.startup simulator string spectre spectre.envOpts controlMode string batch第二种直接在ADE L界面操作Setup - Simulator/Directory/Host把Simulator选成spectre然后确认MMSIM的bin目录已经在$PATH里。还有一个容易被忽略的点MMSIM151运行Spectre时模型文件model file里的section、mismatch等定义必须与你安装的Spectre版本兼容。如果PDK给的模型文件是给MMSIM 10.x写的跑MMSIM151通常会报“unknown parameter”之类的错误。遇到这种问题要么找PDK方要新版本模型要么在模型文件里做兼容处理。科研环境里最常见的做法是直接选一款官方明确支持MMSIM151的PDK版本省心。从命令行角度也可以快速验证MMSIM151的Spectre能否正常跑一个最小网表。写一个简单的反相器spice网表调用spectre跑一遍看是否能正常退出。这一小步能帮你把“工具问题”和“PDK/模型问题”迅速分开后面排障会轻松很多。4. Calibre2015 版图验证工具安装与集成4.1 Calibre 在版图验证流程里的位置Calibre在模拟版图设计中的地位基本是“流片前最后一道关卡”。它主要做DRC设计规则检查、LVS版图与原理图一致性检查、PEX寄生参数提取。Fab厂给出的DRC rule deck、LVS rule deck绝大多数都是基于Calibre格式的。其他工具比如PVS、Assura当然也能跑但在生态兼容性和Foundry支持度上Calibre属于“绕不开的存在”。在科研流程里Calibre通常不是一个人单独跑命令行的而是集成在Virtuoso的菜单里版图画完以后直接在Layout窗口里点Calibre - Run DRC方便很多。Calibre2015的老归老但对大多数成熟PDK来说都够用而且和IC617的组合经过大量验证网上能查到的报错解决方案也最多。4.2 解压安装与license指向Calibre的安装相比IC617简单得多。很多Calibre安装包形式是tar归档解压以后就是一套完整的目录结构关键是license和环境变量要配好。假设安装包是Calibre2015.tar.gzmkdir -p /eda/mentor tar -xzf Calibre2015.tar.gz -C /eda/mentor cd /eda/mentor ls -ld calibre*一般情况下解压出来的目录名带版本号和平台信息比如calibre2015.4_36.27。为了环境变量简洁我习惯把它重命名或做一个软链接ln -s /eda/mentor/calibre2015.4_36.27 /eda/mentor/calibre2015Calibre的license走的是Mentor的license机制环境变量是MGLS_LICENSE_FILE指向license server的端口和主机名export MGLS_LICENSE_FILE1717eda-server注意这个环境变量和第2章里写的Cadence license变量CDS_LIC_FILE是不同的体系两个都要配。很多人把这两个搞混导致Cadence能启动、Calibre一跑就报license错误。验证Calibre安装是否成功calibre -version如果license server已就绪输出会显示Calibre版本和功能特性。想快速看看GUI能不能拉起可以执行calibre -gui在弹出的图形界面里确认菜单完整再关掉。4.3 环境变量与 Virtuoso 菜单集成要让Calibre的菜单出现在Virtuoso的版图窗口里需要加载Calibre提供的SKILL接口文件calibre.skl。前文在.cdsinit里写的这一行这时候就生效了load( strcat( getShellEnvVar(MGC_HOME) /lib/calibre.skl ) )加载之前确认MGC_HOME环境变量已经指向Calibre的安装根目录。我可以这样检查echo $MGC_HOME ls $MGC_HOME/lib/calibre.skl如果文件存在就重启Virtuoso。新版版本的Calibre会直接在CIW窗口里输出类似“Calibre SKILL interface loaded”的信息。此时打开一个版图菜单栏应该多出一项Calibre里面能看到Run DRC、Run LVS、Run PEX、Run Interactive等入口。在Calibre集成中还经常用到另外两个环境变量export MGC_CALIBRE_REPLAY/tmp/replay_calibre export MGC_CALIBRE_ALLOW_FLOAT_LICENSE1第一个变量指定Calibre运行记录和中间文件输出目录建议指向一个可写目录第二个变量在license紧张时可以允许浮动license共享具体要根据你购买的license类型来定不是必须的。5. 实际安装中常见的坑与排查实录5.1 三板斧定位问题工具装不起来的报错千奇百怪但定位思路就那么几条。我总结成“三板斧”。第一看动态库。任何可执行文件启动失败第一件事就是用ldd检查ldd /eda/cadence/IC617/tools/dfII/bin/virtuoso | grep not found以“not found”结尾的行就是缺的库一个萝卜一个坑缺什么就yum装什么。前提是先确定自己装的是64位还是32位版本缺的是.i686还是.x86_64库别补错了。第二看环境变量。把$CDS_ROOT、$MMSIM_ROOT、$MGC_HOME、$PATH、$CDS_LIC_FILE、$MGLS_LICENSE_FILE全都echo一遍确认没有空值、没有打错路径。很多“灵异问题”最后都是环境变量写错一个字母。第三看日志。Cadence和Calibre运行时都会在运行目录或/tmp下留下日志文件。比如Virtuoso的cds.log、Calibre的.calibre目录下的report文件。报错信息看不太懂时翻日志尾部往往有真正的异常原因。5.2 经典报错速查表下面这张表是这些年帮人装EDA环境时最常遇到的问题基本覆盖了CentOS 7 IC617 MMSIM151 Calibre2015组合下90%的报错场景。现象可能原因处理方法./SETUP.SH: No such file or directory脚本没有执行权限或安装包在Windows下解压导致换行符不对chmod x SETUP.SH用dos2unix转换脚本格式libXp.so.6: cannot open shared object file缺X11兼容库yum install libXp libXp.i686libXm.so.4: cannot open shared object file缺OpenMotif库yum install openmotif openmotif22启动Virtuoso后窗口花屏、字体方块缺X11字体包yum install xorg-x11-fonts-*virtuoso: cannot open displayDISPLAY变量没设置或X服务不可用检查SSH X11转发、VNC或本地DISPLAYlicense checkout failedCDS_LIC_FILE或MGLS_LICENSE_FILE指向错误检查license server地址、端口和lmstat状态ADE里选不到SpectreMMSIM的bin目录不在PATH或.cdsenv配置缺失检查PATH确认spectre -V可执行配置.cdsenvCalibre菜单在Virtuoso里不出现.cdsinit没加载calibre.skl或MGC_HOME没设置检查load语句与getShellEnvVar(MGC_HOME)返回值DRC/LVS启动后立即退出无窗口Calibre license失败或GUI库依赖缺失用calibre -gui命令行方式启动看报错原因老PDK模型在Spectre里报unknown parameter模型与MMSIM版本不兼容更新PDK模型或切换到PDK推荐的MMSIM版本5.3 几个容易被忽略的细节很多问题不是“技术性”的而是细节和习惯问题。第一个是磁盘权限。IC617在启动时会在安装目录下写一些临时文件或缓存如果目录属主是root而你是普通用户启动就会报“permission denied”。所以我前面才强调把/eda整体chown给edauser:eda。第二个是防火墙和主机名。license server和客户端不是同一台机器时确保两个方向都能访问到对应端口。CentOS 7的firewalld默认可能是开启的要么放行端口要么在可信内部网络里直接systemctl stop firewalld。实验室内部服务器这样做省心很多。第三是字体配置。很多人装上Virtuoso后觉得界面字体特别小或者全是方框其实不是工具坏了是系统里缺X11核心字体。前面命令里已经装过xorg-x11-fonts-*如果还不行检查一下fc-list输出必要时装dejavu-sans-fonts、liberation-fonts这类基础字体包。第四如果是在VMware虚拟机里装建议把虚拟机的图形内存和显存调大一点否则Virtuoso这种老式X11界面在高分屏下拖动时会掉帧卡顿。以及装完工具以后打一个虚拟机快照这一步能让你后面所有折腾都有后悔药可吃。5.4 环境可用性验证建议装完三件套别急着开始画图。先在空目录里把整套流程快速过一遍新建一个cellview、放一个简单器件、跑一次仿真、再跑一次DRC/LVS。这个过程能暴露90%的环境配置问题。我的建议顺序是在项目目录启动Virtuoso确认CIW窗口无异常报错。用Library Manager新建一个library关联PDK里的基础器件库。原理图里放一个pmos和nmos做一个最简反相器。在ADE L里选择spectre仿真器跑一次dc或tran仿真确认波形输出正常。画一个最小版图跑一次Calibre DRC确认rule deck加载正常再跑一次LVS确认网表提取和比对正常。如果能走到第5步基本可以认为这套环境已经达到“可日常使用”状态了。以后写论文、跑流片都是在这个基础上开展后面遇到问题也会相对集中排障范围不会扩散到“工具没装好”这种低级层面。最后再分享一个个人习惯。我每次装完环境会在/eda/README里记录当天的安装命令、依赖包清单、版本号、环境变量配置以及遇到的报错和解决代码。这种笔记看起来不起眼但等到几个月后重装系统、或者帮同门排障的时候照着笔记操作能省下一整天时间。EDA工具的坑大多不是智商问题而是信息不对称问题——踩过一次的坑记下来就不再是坑了。