ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Cadence IC6.1.8与Spectre 231在Linux上的完整安装与验证指南

Cadence IC6.1.8与Spectre 231在Linux上的完整安装与验证指南 C大哥的这套东西装起来是真的磨人。IC6.1.8配Spectre 231一个管版图与原理图环境一个管仿真内核按理说是模拟IC设计里最常见也最成熟的一套组合。但每次在Linux服务器上重新配环境总能在意想不到的地方翻车缺个libXp.so.6、license端口连不上、hotfix和base版本错位诸如此类的坑我基本都踩过一遍。这篇就专门写给要在Linux环境下手动装IC6.1.8和Spectre 231的朋友从版本选型讲到环境变量再到PDK集成和仿真验证把安装过程中那些文档里不会写明白的点一次说透。1. 版本选型与环境准备思路1.1 为什么是IC6.1.8搭配Spectre231先说版本本身。IC6.1.8是Virtuoso IC 6.1.8本质上是IC618大版本下更新到6.1.8的hotfix。很多晶圆厂PDK尤其是TSMC、SMIC、GF的模拟PDK都会在release note里明确写支持IC 6.1.8或更高版本。如果你用的是更新的IC23.1或者IC24.1老PDK的skill脚本不一定兼容反而在IC6.1.8上跑得稳稳当当。很多人公司里还在用IC617跑老项目新项目让用IC6.1.8这就导致了一个很现实的需求base版本hotfix的干净安装。Spectre 231是Cadence Spectre仿真器2023年1月的版本放在之前叫MMSIM的目录体系下。它在老版本上的主要改进是APLAdvanced Parallelism并行仿真更成熟多核瞬态仿真加速明显而且对spectre的aps模式支持更好。理论上IC6.1.8自带的仿真器也能跑但版本很老很多新PDK的model card里新加的Verilog-A模块需要更新的spectre才能编译通过所以独立装一个Spectre 231是当前比较稳妥的做法。版本配套有一个容易犯的错误只装了IC6.1.8的hotfix包而忽略了底下的base版本结果启动virtuoso直接报SUI1011之类的“missing required base release”。你要理解IC6.1.8本质上“不是IC6.1.8”它是IC618 base加上6.1.8的增量补丁没有basehotfix装得再完整也无济于事。所以下载安装包时一定确认手里同时有IC618 base介质和6.1.8 hotfix介质两者配套安装才是一个可用的IC6.1.8环境。1.2 操作系统与硬件要求的实际经验Cadence官方支持列表其实很长但实际操作中我建议优先选RHEL 7.x/8.x或CentOS 7.x/8.x这两个系统下面遇到的坑最少。Ubuntu 18.04/20.04也能跑不过需要额外处理很多库的兼容问题比如libjpeg62、libstdc版本装起来烦。如果服务器上已经装了别的EDA工具最好先看一眼系统glibc版本ldd --versionIC6.1.8和Spectre 231都是64位二进制要求glibc 2.17以上RHEL7最低能满足RHEL8更没问题。内存建议16G起步仿真任务重的话32G更踏实。磁盘预留我直接给个参考值IC618 base加上6.1.8 hotfix安装完大约需要25G到35GSpectre 231独立装上大约需要10G到15G整套下来50G以上比较从容。不要装在系统盘尽量用独立挂载的数据盘比如/eda后续维护也方便。处理器方面没有硬性要求但Spectre的APS多核加速吃CPU核心数核心越多瞬态仿真越香。I/O性能也不能忽视PDK安装、模型库加载都是大量小文件读写机械硬盘会明显比SSD慢有条件直接上SSD。1.3 用户权限、目录规范与安装介质检查强烈建议单独建一个edauser之类的普通用户不要用root直接跑EDA工具。虽然安装时可能需要sudo权限但运行时用root会出现很多文件权限和库搜索路径问题尤其是PDK往home目录写缓存的时候root还会埋下安全隐患整个团队共用一套环境时权限也会乱。目录规划上推荐类似下面这种结构/eda/ ├── cadence/ │ ├── IC618/ # IC6.1.8安装主目录 │ ├── SPECTRE231/ # Spectre231安装目录 │ └── license/ # license文件存放目录 ├── pdk/ # PDK统一目录 └── work/ # 工作和测试目录目录路径里不要出现空格、中文、特殊符号尤其是tools/dfII这种Cadence内部路径已经很长了再嵌套一层怪异目录很容易触发脚本解析问题。下载完安装介质后先不要急着解压做一个完整性检查。Cadence的安装包通常是tar.gz或者zip压缩包几十个GB文件在传输过程中损坏是常事。用md5sum或者sha256sum对照官网给的校验值过一遍确认文件完好再继续。2. 核心安装流程与关键细节2.1 基础依赖库的准备与验证方法Linux下装Cadence80%的安装失败都出在缺系统库上。Cadence的二进制依赖的库比较古老很多在默认安装的RHEL8里根本没有。我一般先执行下面这一组命令装齐基础库sudo yum install -y ksh csh tcsh sudo yum install -y libXext libXrender libXt libX11 libXpm sudo yum install -y libXp motif openmotif sudo yum install -y libnsl libnsl2 sudo yum install -y glibc-devel libstdc-devel sudo yum install -y fontconfig freetypeRHEL8/CentOS8系统里libnsl被拆出来了如果不装会报libnsl.so.1: cannot open shared object file。这是最典型的版本迁移坑。库装完之后怎么确认main binary能跑起来用ldd手动检查ldd /eda/cadence/IC618/tools/dfII/bin/64bit/virtuoso | grep not found ldd /eda/cadence/SPECTRE231/tools/bin/64bit/spectre | grep not found如果输出里有“not found”说明还有缺的库。这个方法比直接双击virtuoso碰运气高效得多缺什么一目了然然后按图索骥yum install补上即可。这一步做好后面安装流程基本能一路畅通。2.2 License Manager的安装与VC80运行库报错Cadence的license机制走的是FlexNetWindows端LicenseManager服务和Linux端的lmgrd都是同一个套路。安装介质里一般都带licensemanager目录安装时需要跑licenseserverconfiguration.exe或者等价的配置工具。很多人在Windows这步就卡住了报错形如microsoft.vc80.mfc, processorarchitecturex86, publickeytoken1fc8b3b9a1e18e3b, typewin32, version8.0.50608.0 c:\cadence\licensemanager\licenseserverconfiguration.exe这个报错的信息量其实非常大。microsoft.vc80.mfc指的就是Microsoft Visual C 2005运行库的MFC组件publickeytoken1fc8b3b9a1e18e3b是VC8运行库的标准公钥令牌version8.0.50608.0对应VC 2005 SP1。也就是说系统里缺少VC 2005的MFC运行库不是Cadence本身坏了。解决办法很直接安装对应的vcredist_x86.exe即可。注意是x86版本虽然现在的Windows都是64位但License Manager的配置工具本身还是32位程序只装x64运行库不顶用。装完运行库再重新跑licenseserverconfiguration.exe配置license文件路径和端口号一般就能正常起来。装完后确认一下Windows服务里有没有生成Cadence License Manager相关的服务并把端口默认27001或27002加入防火墙白名单。另外license文件和服务器时间强相关如果license报“clock skew too great”检查服务器时间同步是否正常。这个坑在实验室环境特别常见NTP没配置好时间漂了几分钟license就罢工了。2.3 基版本、Hotfix与Spectre231的安装顺序整套安装顺序我建议是这样先装IC618 base。再装IC6.1.8 hotfix。单独装Spectre 231。装PDK。Cadence的安装引导工具是InstallScape在安装介质根目录下执行setuP脚本即可启动。需要注意InstallScape可能需要图形界面跑在无GUI的服务器上先确保X11转发正常否则只能走批处理模式。安装IC618 base时会让你选择安装目录和license方式。license方式选择“Site License Server”然后填27001hostname。这里有个细节直接填IP地址在某些情况下也可以但建议填主机名并在/etc/hosts里写好主机名映射防止后续工具解析失败。base装完再装hotfixhotfix的安装包会要求指定CDS_ROOT指向base的安装目录然后自动识别并升级。IC6.1.8 hotfix装完之后可以检查一下关键目录是否存在ls /eda/cadence/IC618/tools/dfII/bin/64bit/virtuoso能看到文件就说明base与hotfix已经正确套上了。Spectre 231的安装也是用InstallScape安装目录独立设为/eda/cadence/SPECTRE231。值得注意的是新版本Spectre不再叫MMSIM安装包会识别成“Spectre 23.1”。装完后同样检查/eda/cadence/SPECTRE231/tools/bin/64bit/spectre -version能输出版本号就说明核心仿真器已经就位。2.4 环境变量配置详解与验证装完之后最关键的一步就是环境变量。很多人的Cadence工具“装上去了但用不了”90%是环境变量配错。以bash为例我一般在~/.bashrc里这样写# Cadence IC6.1.8 export CDS_ROOT/eda/cadence/IC618 export CDS_INST_DIR/eda/cadence/IC618 export CDS_LIC_FILE27001cadence_server export CDS_LOAD_ENVCDF # Spectre231 export SPECTRE_ROOT/eda/cadence/SPECTRE231 export MMSIM_ROOT$SPECTRE_ROOT # PATH export PATH$CDS_INST_DIR/tools/dfII/bin:$CDS_INST_DIR/tools/bin:$SPECTRE_ROOT/tools/bin:$SPECTRE_ROOT/tools/dfII/bin:$PATH # LD_LIBRARY_PATH export LD_LIBRARY_PATH$CDS_INST_DIR/tools/lib/64bit:$SPECTRE_ROOT/tools/lib/64bit:$SPECTRE_ROOT/tools/dfII/lib/64bit:${LD_LIBRARY_PATH}几点说明。CDS_LIC_FILE支持三种写法porthost、license文件绝对路径、多个license server用冒号分隔的列表。如果你既想用license server又偶尔想本地调试可以写成export CDS_LIC_FILE27001cadence_server:/eda/cadence/license/license.datCDS_LOAD_ENVCDF这个变量值得单独说一下。Cadence在启动时默认会去load用户目录下的.cdsenv和.cdsinit文件如果你之前用过其他版本的Cadence这些老配置文件里可能残留不兼容的设置导致启动报错或者菜单异常。设置CDS_LOAD_ENVCDF可以让工具只加载必要的基础配置避免被脏环境变量干扰。配置完后不要急着跑GUI先在命令行验证source ~/.bashrc which virtuoso which spectre两个命令都能找到对应路径说明PATH配置没问题。2.5 首次启动virtuoso的最小验证方法环境变量配好后第一次启动virtuoso建议这样做mkdir -p /eda/work/testrun cd /eda/work/testrun virtuoso 第一次启动会生成cds.lib、.cdsinit等配置文件CIWCommand Interpreter Window正常起来就算基本成功。CIW窗口里如果出现大量*WARNING*不一定是坏事很多是CDF和PDK相关的告警后续装了PDK自然会消停。初次启动时还容易遇到一个典型问题virtuoso启动后黑屏或者字体显示异常。多半是字体环境没配好安装一下xorg-x11-fonts-75dpi和xorg-x11-fonts-100dpi再设置setenv XLIB_SKIP_ARGB_VISUALS 1基本能解决。3. PDK集成与仿真环境联动3.1 在IC6.1.8中正确挂载PDK装了Virtuoso之后紧跟着就是PDK。不同晶圆厂的PDK安装方式差异很大有的是通过install.cs脚本有的是解压后手动配置。但不管哪种方式最终都要解决两个核心文件cds.lib和display.drf或者二进制工艺文件。典型的cds.lib片段是这样的INCLUDE $PDK_HOME/cds.lib DEFINE smic18mmrf $PDK_HOME/smic18mmrf如果PDK没有自动配置cds.lib手动加上面两行即可。“DEFINE”后面的名字是库名会直接显示在Library Manager里路径指到PDK的实际目录。注意路径要写绝对路径别写相对路径不然换个目录启动virtuoso库就找不到了。display.drf决定版图显示颜色和层次一般PDK会在安装时提示更新如果版图层次显示不对手动在CIW里执行load $PDK_HOME/display.drf或者把它复制到工作目录下的display.drf。有两点提醒。第一PDK的安装路径一旦变了virtuoso里所有基于这个PDK的库都会失效所以PDK目录定下来后就不要随便挪动。第二如果同时存在多个PDK版本不要让两个版本共用同一个cds.lib版本冲突会引发数据库损坏到时候报的错会是各种莫名其妙的ERROR (DB-200001)。3.2 在仿真环境中调用Spectre231做最小测试PDK挂载完成后我建议立刻跑一个最小化的仿真验证工具链才算真正打通。最简单的做法是写一个单管或者反相器的netlist直接用Spectre跑瞬态。inv_tb.scs示例// Inverter testbench simulator langspectre include /eda/pdk/smic18mmrf/models/smic18mmrf.scs sectiontt xl0 vout vin vdd vss smic18mmrf pmos w2u l0.18u m1 xl1 vout vin vdd vss smic18mmrf nmos w1u l0.18u m1 vdd vdd 0 dc1.8 vss vss 0 dc0 vin vin 0 dc0 pulse(0 1.8 0 100p 100p 5n 10n) simulatorOptions options gmin1e-12 tran tran stop20n然后在shell里执行cd /eda/work/testrun spectre inv_tb.scs log inv_tb.log如果仿真正常结束会生成inv_tb.raw目录或者inv_tb.ic0等结果文件。看到Spectre terminated normally这行提示就是成功。如果PDK模型的路径没写对或者模型版本不兼容这里会立刻报错。这一步极其重要它能一次性检验四件事Spectre 231能正常运行、license包含Spectre feature、PDK模型能被正确解析、netlist语法没问题。跑通这个最小仿真后面在Virtuoso里做原理图仿真才有底气。3.3 在Virtuoso里配置仿真器路径很多人会在Virtuoso的ADE L/ADE XL里找不到Spectre或者在仿真时提示“Cannot find spectre”。本质上是因为Virtuoso默认按$PATH查找仿真器如果你只在命令行里设了PATH但启动virtuoso的进程环境没继承那自然找不到。一个稳妥的做法是在.cdsinit里显式指定仿真器路径envSetVal(asimenv.startup spectrePath string /eda/cadence/SPECTRE231/tools/bin/64bit/spectre)或者直接在启动virtuoso前确认环境变量已经写入了~/.bashrc并且是通过source ~/.bashrc之后才启动的virtuoso。IDE有时不会自动加载你后改的环境变量重启一下终端再启动virtuoso问题往往就消失了。4. 常见问题与排查技巧实录4.1 安装与启动阶段的报错对照表我把这几年反复遇到的高频问题整理成一张表方便对照排查现象根本原因解决方法virtuoso: command not foundPATH没配好export PATH$CDS_INST_DIR/tools/dfII/bin:$PATHlibXp.so.6: cannot open shared object file缺少libXp库yum install libXpRHEL8可用libXp兼容包libnsl.so.1: cannot open shared object fileRHEL8移除了libnslyum install libnslSUI1011 missing required base release装了hotfix但没装base找到IC618 base介质先装上License server connection failed端口不通、hostname解析失败telnet host 27001检查端口/etc/hosts配置hostnameCannot find spectre executableSPECTRE_ROOT未设置或PATH缺失配置SPECTRE_ROOT并加入PATHUnsupported graphics deviceX11显示或显卡驱动问题setenv XLIB_SKIP_ARGB_VISUALS 1仿真报ERROR (SPECTRE-1072)license不包含Spectre功能联系管理员确认license feature启动后有大量Autounch错误.cdsenv或.cdsinit残留旧配置CDS_LOAD_ENVCDF绕过Segmentation fault启动崩溃缺库或版本冲突用ldd检查动态库补装对应版本4.2 License问题的深度排查思路License相关问题是安装中最难排查的因为它和网络、时间、文件权限都有关。我的排查顺序是这样的先用telnet测试端口通不通telnet 192.168.1.100 27001如果端口不通看防火墙和license server是否正常启动。Linux端可以用lmutil lmstat -a查看license状态/eda/cadence/IC618/tools/bin/lmutil lmstat -a -c 27001cadence_server如果能看到feature列表里有Virtuoso和Spectre相关项说明license server没问题。如果license server本身正常但工具连不上检查/etc/hosts里的主机名是否和license文件里的主机名严格一致。大小写不一样都会导致失败FlexNet对主机名校验是严格精确匹配的。还有一个容易被忽略的点license文件里如果SERVER行后面跟的是IP地址而工具通过hostname连接license server时FlexNet会反过来用hostname反查IP两边对不上就报连接失败。所以/etc/hosts里保持hostname和IP的映射稳定很重要。4.3 版本冲突与仿真异常的处理新版Spectre和老版PDK模型之间的冲突是模拟设计团队很容易踩的雷。具体表现是同样的netlist老仿真器能跑通新Spectre 231一跑就报一堆Undefined parameter或者Illegal value错误。这通常不是Spectre本身的问题而是PDK模型里用了老版本语法新版本Spectre对语法检查更严格了直接把不规范的写法拦下来而已。遇到这种情况第一件事不是改命令参数而是看报错的模型文件具体是哪个版本对照PDK的release note确认官方建议的Spectre版本。如果PDK官方明确只支持到Spectre 19你拿着Spectre 231去跑兼容性问题就得靠PDK更新来解决自己改模型文件往往是火坑。另外Spectre 231跑仿真时如果内存占用异常高可以在netlist里加gmin和cmin参数限制判据比如options gmin1e-12 cmin1e-18能减少许多数值震荡造成的额外计算。瞬态不收敛时优先检查是不是初始条件没设好给电源和信号节点加.ic语句指定初始电压经常能立刻收敛。4.4 环境隔离与多版本共存的建议团队里经常出现有人用IC617有人用IC6.1.8还有人用IC23.1的情况。最头大的就是大家共用同一个~/.bashrc每次切换版本都要改环境变量改错一个就全体遭殃。我建议用module工具做环境管理。environment-modules在EPEL源里可以直接装sudo yum install environment-modules然后为每个版本写一个modulefile比如/usr/share/modules/modulefiles/cadence/618#%Module set root /eda/cadence/IC618 set spectre /eda/cadence/SPECTRE231 prepend-path PATH $root/tools/dfII/bin prepend-path PATH $root/tools/bin prepend-path PATH $spectre/tools/bin prepend-path LD_LIBRARY_PATH $root/tools/lib/64bit prepend-path LD_LIBRARY_PATH $spectre/tools/lib/64bit setenv CDS_ROOT $root setenv CDS_INST_DIR $root setenv CDS_LIC_FILE 27001cadence_server setenv SPECTRE_ROOT $spectre setenv MMSIM_ROOT $spectre使用时一句话切换module load cadence/618这样大家各开各的终端互不干扰。多版本共存的团队真的应该花一下午把这个配置好能省掉往后一年里反复出现的环境问题。5. 安装过程中的实操习惯与团队协作建议5.1 建立安装checklist脚本每次装完一套新环境我习惯把关键检查项写成一个脚本一键跑完省得一遍遍人肉验证。这里给一个简单的checklist脚本思路#!/bin/bash # EDA environment check export CDS_INST_DIR/eda/cadence/IC618 export SPECTRE_ROOT/eda/cadence/SPECTRE231 echo 1. Check binaries ls $CDS_INST_DIR/tools/dfII/bin/64bit/virtuoso echo virtuoso OK ls $SPECTRE_ROOT/tools/bin/64bit/spectre echo spectre OK echo 2. Check shared libraries ldd $CDS_INST_DIR/tools/dfII/bin/64bit/virtuoso | grep not found echo missing libs || echo virtuoso libs OK ldd $SPECTRE_ROOT/tools/bin/64bit/spectre | grep not found echo missing libs || echo spectre libs OK echo 3. Check license server lmutil lmstat -a -c 27001cadence_server | grep Users of Virtuoso || echo license check failed echo 4. Check PDK ls /eda/pdk/ | head -5把这些检查项写进脚本以后任何机器迁移或者版本升级后跑一遍就能快速定位问题在哪个环节比人肉排查高效太多。5.2 目录权限与备份策略安装完成后给/eda/cadence/IC618和/eda/cadence/SPECTRE231的目录权限做一个收口chown -R edauser:edauser /eda/cadence/IC618 /eda/cadence/SPECTRE231 chmod -R 755 /eda/cadence/IC618 /eda/cadence/SPECTRE231不要让所有人对安装目录都有写权限否则有人手滑改了个配置文件全团队的Cadence都跟着遭殃。安装目录保持只读个人工程放在各自的/eda/work/目录下。备份策略上cds.lib、.cdsinit、.cdsenv、display.drf这些配置文件一定要纳入版本管理建议放到一个git仓库里。每次调好环境把这些文件备份一次换机器或者重装系统后直接拉下来复用能省很多事。5.3 新环境交付前的最小验收标准每次帮同事或新成员配完环境我都会定一个“交付标准”跑完这轮才算环境真正可用which virtuoso和which spectre能找到可执行文件。virtuoso能正常启动CIW窗口无致命错误。在Library Manager里能看到目标PDK库。打开一个已有的原理图testbenchADE里能选到spectre并跑完一个仿真。spectre -version输出版本为23.1。这五条全部通过环境才算真正交付。很多人装完工具只看“virtuoso能打开”就宣布环境就绪结果一到仿真就露馅反而不如老老实实把最小仿真跑通再宣传。我自己在实际操作中还有一个执念刚装完的环境一定要先用命令行手动跑一次spectre再在Virtuoso里跑一次ADE仿真。两边都能通才算对整套环境完全放心。命令行跑能排查工具链自身的坑Virtuoso跑能排查GUI集成和PDK挂载的坑两条链路分开验证问题定位起来特别快。这套方法我用到现在几乎没在哪台机器上反复折腾超过一个下午。
返回列表