
芯片后端设计里寄生参数提取PEX这件事说大不大说小不小。很多人第一次在 Cadence Virtuoso 里跑完版图LVS 也 Clean 了兴冲冲地去抽寄生、做后仿真结果波形和前仿真差得离谱或者干脆仿真器报错不收敛折腾一整天最后发现是 PEX 的设置出了问题又或者是 XRC 文件压根没加载对。这篇文章不绕弯子直接讲实操。我会从 XRC 加载开始把 PEX 前需要确认的环境、Calibre PEX 和 QRC 的关键配置、Calibre View 的生成与调用再到后仿真里那些“看似是电路问题、其实是寄生提取问题”的典型现象一条线讲完。适合正在做模拟版图、或者刚接触后仿真的工程师尤其是那种“照着 tutorial 能跑通但一换工艺、一换模块就抓瞎”的朋友。看完你应该能独立跑通一个完整的 PEX 到后仿真流程并且知道遇到问题该往哪个方向排查。1. 先搞清楚PEX 到底在提取什么为什么不能跳过很多初学者有个误区版图画完、DRC 和 LVS 过了就以为设计结束了。实际上你画的每一条金属走线、每一个通孔、每一段多晶硅在真实芯片里都不是理想的“导线”它们有自己的电阻、电容甚至电感。到了 GHz 频率或者高精度模拟电路里这些寄生参数会直接影响电路的工作点、带宽、相位裕度甚至让电路直接不工作。1.1 寄生参数从哪来——版图的物理真相寄生电阻主要来自三块走线本身的方块电阻、通孔Via和接触孔Contact的接触电阻以及 MOS 管的源漏扩散区电阻。寄生电容就更复杂了同一层金属之间的横向耦合电容、上下层金属之间的层间电容、金属对衬底的电容、MOS 管的交叠电容和结电容全都在里面。举个例子一根 10μm 长、0.5μm 宽的 M1 走线在 0.18μm 工艺下大概有几十欧姆的电阻、几飞法的对地电容。单看好像无所谓但如果是运放输入级的栅极走线或者振荡器的反馈路径这几十欧姆的电阻配合栅极电容很容易形成一个额外的极点把相位裕度吃掉十几度。后仿和前仿的差异百分之八十以上都是这些“看不见的线”造成的。1.2 PEX 流程在整个后端验证链条中的位置完整的后端验证链条一般是版图完成 → DRC 检查物理规则 → LVS 检查电路一致性 → PEX 寄生提取 → 后仿真。PEX 做的是把版图的几何信息结合工艺参数翻译成带寄生元件的网表。这个网表有两种归宿。一种是生成带寄生参数的晶体管级网表跑 Spectre 或者 HSPICE 做后仿真这是模拟工程师最常用的方式。另一种是生成带寄生参数的 DSPF/SPEF 文件给数字后端的 STA静态时序分析工具用比如 Tempus 或 PrimeTime。这篇文章重点讲前一种也就是模拟电路最关心的“抽寄生 → 后仿”路线。在 Virtuoso 的环境里PEX 工具有两大类一类是 Mentor现在叫 Siemens的 Calibre xRC对应的规则文件就是 XRC另一类是 Cadence 自家的 QRC对应的是 qrc 文件。虽然叫法不同但本质上干的事一模一样——都是根据版图几何和工艺规则算 RC。区别在于工具界面、速度、精度控制以及和 Virtuoso 的集成深度。下面我会以 Calibre PEX 为主线因为它是目前流片项目中覆盖率最高、最常见的选择但 QRC 的关键参数也会带一句因为很多老的 PDK 流程还在用。2. 开工前的环境准备工艺库与 XRC 文件加载PEX 是个“洁癖”工具它对环境的要求比 DRC 和 LVS 苛刻得多。很多初学者一上来就跑 PEX结果报错满屏飞其实大多数问题都出在环境没配好。XRC 文件加载这一步看着简单却是整个流程里最容易翻车的地方。2.1 XRC 文件是什么怎么在 PDK 里找到它XRC 文件本质上是 Calibre 的寄生参数提取规则文件它和 DRC/LVS 的规则文件一样是由代工厂Foundry和 PDK 一起提供的。文件名通常带有xrc字样比如xxx_1P6M_cal013_xrc.rule或者calibre_xrc_xxx.3d.rc一般存放在 PDK 安装目录下的calibre/或xrc/子目录里。拿到 PDK 后别急着装到 Virtuoso 里先找到 xrc 文件用文本编辑器打开看几行。你要确认三件事第一文件头部写的工艺节点和金属层数是不是你现在用的第二里面有没有LAYOUT SYSTEM和DRC相关的关键词这决定了它能不能被 Calibre 正确解析第三确认MFG或者RESISTOR这些敏感参数有没有注释掉。我见过不少“PEX 结果全是零”的情况就是因为 xrc 文件里电阻规则被注释掉了工具没报错但结果全是废的。2.2 在 Virtuoso 里把 Calibre 接口配置到位Virtuoso 本身不自带 Calibre它需要一个接口来调用外部工具。这个接口在 PDK 里通常已经配好了但如果你用的自定义工艺库或者 PDK 安装路径变了就要手动检查。关键位置有这几个.cdsinit文件里要有 Calibre 的 skill 加载语句通常是load(/path/to/calibre.skill)或者 PDK 自带的calibre_init。环境变量要设置MGC_HOME指向 Calibre 安装目录MGC_TMPDIR指向可写的临时目录。Virtuoso 的 CIW 窗口里输入calibre如果能弹出一个 Run Calibre 的对话框说明接口已经通了。如果是 QRC 流程则要关注QRC_HOME环境变量以及在.cdsinit里加载qrcSetup相关的 skill 文件。QRC 和 Calibre 可以共存但建议同一时间只启用一个因为两个工具都会注册右键菜单和菜单栏按钮容易冲突菜单变得很乱。实际项目中我一般只用 CalibreQRC 单独留在另一个版本的环境里做对照实验。2.3 XRC 加载后的自检清单每次换工艺库、换版本加载完 XRC 之后我强烈建议你先做一次“空跑”验证。具体方法是画一个最简单的反相器版图或者直接用 PDK 自带的 testcell 版图跑一次完整的 PEX看看能不能正常生成 Calibre View。这一步花不了十分钟但能帮你过滤掉 90% 的环境问题。自检清单整理如下检查项正常状态异常信号XRC 规则文件可读规则文件里能搜到金属层名称文件为空或行首全是//注释Calibre GUI 可启动弹出 Run Calibre 对话框提示找不到calibre命令版图单元有 pinPEX 时能识别出n1、n2等端口提示no pins found或端口全在浮空层LVS 比对目录正确PEX 前 LVS 能正常跑通提示layout/netlist mismatch寄生结果非零生成的 view 里能看到寄生电阻后仿结果和前仿完全一致毫无变化这里面最容易被忽略的是“端口识别”。PEX 是通过 pin 来区分哪个网络是外部端口、哪个网络是内部节点的。如果你的版图里 pin 打在了错误的层次上或者 pin 名字和原理图对不上PEX 跑完生成的 view 就会缺端口。这种情况后仿真时你把 view 放到 testbench 里工具会提示连接失败但如果你用的是 symbol 直接摆放问题会被藏得更深直到仿真跑完才发现波形对不上。3. PEX Run 配置选对模式后仿真就成功了一半环境没问题之后重头戏就是 Run PEX 时的参数配置。这一步直接决定了你抽出来的寄生网表是“够用”还是“没法用”。很多人喜欢用默认设置但默认设置往往不是为你的场景设计的。3.1 三种提取模式R、C、RC 到底怎么选Calibre PEX 打开后第一个要选的就是 Extraction Type。常见选项有R只提电阻。速度快文件小但没电容后仿就不准。C只提电容。适合做功耗估算或者耦合噪声分析。RC电阻电容一起提。这是模拟后仿的标配。RC电阻电容分开提。这种模式下输出网表里电阻和电容是分开的元件便于你后续做灵敏度分析。我自己的经验是模拟电路做频率特性验证选RC就够了。如果电路是高速数字接口比如 DDR、SerDes那你得用RC因为这种场景要分别看 RC 延迟和耦合电容的影响。最忌讳的是拿着C模式的提取结果去跑运放的闭环稳定性那等于只看了一半的寄生。还有一个选项叫Extract Parasitic Coupling Capacitance翻译过来就是提取耦合电容。建议打开。特别是差分信号线、敏感模拟信号线之间的耦合经常是后仿性能跳水的主要原因。关了它后仿波形会“过于乐观”等你流片回来就等着哭吧。3.2 网表输出类型与格式选择Calibre PEX 支持输出多种格式Calibre View、Verilog、SPICE、DSPF、SPEF 等。在 Virtuoso 环境里跑后仿真首选输出Calibre View因为它直接和 Virtuoso 的原理图环境集成调用起来最方便。但这里有个细节Calibre PEX 生成 Calibre View 时会要求你在 Rules 文件里指定 LVS 用的规则文件路径也就是PEX RULES要和LVS RULES保持一致。为什么不一致不行呢因为 PEX 是在 LVS 得到“版图到电路映射关系”的基础上找到每个晶体管、每个电阻的网格位置再在网格上挂 R 和 C。如果 LVS 规则对不上PEX 就会找错器件位置寄生参数挂错节点后仿结果自然就乱了。输出格式里还有个容易忽视的选项Format中的SPICE或SPECTRE。如果你的后仿真打算用 HSPICE 跑选 SPICE用 Spectre 跑选 SPECTRE。格式选错了生成的网表语法不兼容仿真器会报一堆ERROR看起来像是电路有问题其实是格式不匹配的锅。3.3 QRC 与 Calibre 的关键差异既然上面提到了 QRC这里多说几句。QRC 是 Cadence 自己的提取工具和 Virtuoso 的集成方式不太一样。QRC 的规则文件放在 PDK 的qrc/目录下通常是xxx_typical.qrc这样的文件。在 Virtuoso 的 Layout XL 界面里可以设置QRC Techfile然后直接用菜单里的Run PEX或Extract RC来启动。QRC 最大的优势是和 Virtuoso 原生环境贴合得最好尤其在做Parasitic Aware的版图设计时能实时显示关键网络的寄生参数。但它的速度比 Calibre 略慢而且第三方 PDK 对 QRC 的支持往往不如 Calibre 上心经常出现规则文件版本滞后的问题。所以我的建议是能选 Calibre 就选 Calibre除非 PDK 文档明确说只能走 QRC 流程。这里插一个很重要的常识跑 PEX 之前一定要确认版图已经通过 LVS。不是说 LVS 报错就不能跑 PEX而是 PEX 会在 LVS 的比对结果上做寄生提取。LVS 都连错线了PEX 只会把错误网络上的寄生提取出来后仿真在错误的基础上越走越远。这就像体检之前先得确认你量的是自己的身高量错了再精细也没有意义。4. 从 PEX 到后仿真Calibre View 生成与调用配置好 PEX 之后点 OK工具会跑一段时间。跑完别急着去后仿真先看两个东西生成的 Calibre View 里有没有内容以及 LVS 结果里有没有 warning。这两个都确认没问题再往后走。4.1 生成 Calibre View 的完整操作过程这里以最常见的方式做一遍完整说明。在 Virtuoso 的版图编辑器里菜单栏选Calibre → Run PEX弹出对话框后Rules标签页把XRC rules文件路径填进去Run Directory设成一个独立的工作目录。Inputs标签页Netlist选择当前 cell 的 schematic 或 symbol netlistLayout默认就是当前打开的版图。Outputs标签页Extraction Type选RCOutput Format选Calibre View。Run Control标签页确认LVS Rules已经指向和 PEX 配套的规则文件Auto Run LVS可以勾上让 PEX 前自动跑一次 LVS。点Run PEX等待执行完成。跑完之后Calibre 会在当前 library 下创建一个名为cellname_calibre或者类似名字的 cellview。名字的后缀可以在 PEX 设置里改我习惯统一用_calibre因为这样和原 cell 区分明显不容易搞混。打开这个_calibreview你会看到它本质上是个“压缩”的原理图里面除了原来的 MOS 管和电阻之外多了一堆小电阻和小电容每个器件上还有类似R0_C0这样的节点编号。这个 view 就是后仿真要用的核心。4.2 在 Config View 里把后仿真环境搭起来后仿真不是在原来的 schematic 上直接跑的而是通过创建一个 config view把 testbench 里的子模块替换成_calibreview。操作方法是打开 testbench 原理图用Launch → ADE L或ADE XL打开仿真环境。在 ADE 的工具栏里选Setup → Environment或者更高版本里直接选Simulation → Netlisting and Simulation Files。把View List的顺序改成calibre schematic或者更精确一点用config的方式指定被测模块的 view。其实最标准的做法是创建一个新的 config view里面将你的待测模块的 view name 从schematic改为calibre其余模块保持schematic。这样 testbench 里的激励、负载、电源全部用理想模型只有待测模块是带寄生的真实 view。4.3 一个实用的反相器后仿真流程拿最简单的 CMOS 反相器举个例子完整走一遍原理图上画好反相器画版图DRC 和 LVS 全通过。打开版图跑 Calibre PEX输出calibreview。在 testbench 里放一个反相器 symbol输出端加一个 50fF 的负载电容输入端接一个 100ps 上升沿的脉冲。创建 config view把反相器的 view 指向calibre其余默认。跑瞬态仿真看看输出波形的上升沿和下降沿延迟。你会发现前仿的延迟可能是 50ps后仿变成了 80ps而且波形边沿变缓了。这就是走线的栅极电阻和漏端电容联合作用的结果。把这个反相器换成运放、LDO、PLL道理完全一样。4.4 后仿真的负载与激励设置还有个小细节跑后仿真的时候很多人直接把前仿的 testbench 拿过来用结果发现波形坏得离谱。原因往往不是寄生提取的问题而是前仿的 testbench 负载设置太乐观。比如前仿时你用了理想电流源做激励后仿时寄生电阻网络和电流源之间会形成一个额外的 RC 极点导致激励信号失真。所以后仿真建议加一个和实际应用场景一致的驱动源比如前一级反相器的输出而不是理想脉冲源。另外输出负载不要只用纯电容数字电路后面最好加一个等效的输入级比如一个反相器栅极这样后仿结果的参考价值更高。5. 踩坑实录高阻节点、浮空网络、LVS 失败最后这部分是真正的干货区。我把实际操作中踩过的、以及在帮助同事排查时见过的典型问题全部整理出来分门别类讲清楚。每一个问题都是“看起来像电路故障本质上出在 PEX 流程”的典型。5.1 高阻节点直接消失——为什么后仿网表里少了半边电路这是我见过最隐蔽的问题。某次做一个偏置电路LVS 明明 Clean前仿工作点完全正常一跑后仿输出直接偏到电源轨。查了半天发现 PEX 生成的网表里高阻偏置节点上的某些 MOS 管栅极直接悬空了。原因在于偏置节点的驱动能力极弱PEX 提取时会把某些寄生电容对不对其实真正的原因是Calibre PEX 在生成网表时对“没有直流路径”的浮空节点做了简化处理。如果某个节点只有电容没有电阻工具会认为它是“纯浮空”在某些模式下会直接把它合并或者丢弃。解决方法是在 PEX 设置里找到Preserve floating nodes或者Keep unconnected pins之类的选项把它打开。同时版图里偏置节点的走线不要又细又长否则寄生电容会让这个节点在后仿里变成一根“大天线”把所有耦合噪声都收集进来。5.2 LVS 与 PEX 的先后顺序——偷懒付出的代价有一种情况经常出现在赶进度的时候版图刚改完觉得只是换了一层金属LVS 就先不跑了直接跑 PEX想着 PEX 自带的 LVS 反正也会检查。结果 PEX 爆出来一屏的 warning你根本不看就点了完成事后后仿出现问题再回头查时序浪费了一整天。我的建议是无论如何PEX 之前单独跑一次完整 LVS确认 Clean再看 PEX 的报告。不要把 PEX 附带的那次 LVS 当作正式检查因为 PEX 的 LVS 重点是“帮助提取”有些 DRC 风格的错误它不一定报。而且PEX 自带的 LVS 跑挂了很多初学者根本不知道去哪里看 log反而浪费更多时间。5.3 瞬态仿真不收敛的“寄生根源”排查热词里提到的“candece瞬态仿真不收敛”有一大半其实都能在寄生提取这边找到源头。不要一看到不收敛就调仿真器参数先分清情况现象可能原因优先排查方向不收敛发生在某个时间点寄生电容和理想电流源形成强反馈振荡检查提取模式是否选了 RC看后仿网表里是否有大电容挂在敏感节点仿真器提示time step too small寄生引入极小时间常数查看寄生电阻值是否异常大超过百 kΩ 就要怀疑提取设置直流工作点仿真就不收敛寄生让偏置网络产生了额外 DC 路径检查 PEX 是否把某个隔离区错误连接了衬底网络收敛但波形剧烈振荡寄生电感或高频振荡看是否提取了不希望的衬底寄生网络后仿不收敛时调试第一步从来不是调cmin或者gmin而是打开地看一眼寄生网表特别是你关心的那几个关键节点旁边挂了几颗电容、阻值多大。我遇到过的最夸张的一次是版图上大块地金属用错了层次导致所有地从 spectre 视角看都是浮空仿真当然不收敛。5.4 衬底寄生提取的开关——建议单独验证很多 PDK 的 XRC 规则里衬底寄生substrate parasitic默认是打开的。这当然是“真实”的但代价是提取出来的网表体积巨大、后仿速度极慢而且衬底网络模型不准的话反而会影响正常信号的仿真结果。我的经验是第一次跑某模块的后仿先把衬底提取关掉确认功能正确、性能在可接受范围再单独跑一次带衬底提取的版本对比一下差别。如果差别不大说明电路对衬底噪声不敏感以后就可以放心关闭如果差别明显那正好告诉你这个电路对衬底耦合敏感需要认真对待。用这种方式既不会漏掉问题也不会让仿真时间失控。5.5 常见问题速查表再把其他几个高频问题补全一下问题现象直接原因解决办法PEX 报PEX rules file not found路径配置错误或环境变量失效检查 XRC 文件路径用绝对路径代替相对路径提取结果全是 0XRC 文件里的电阻/电容规则被注释打开规则文件检查规则是否完整后仿时指定模块显示view not foundconfig view 里的 view name 和实际生成的 cellview 名字不一致检查_calibreview 是否存在并确认 view name 完全匹配寄生电容过大夸张选择了错误的工艺角规则文件确认 xrc 的type是 typical / fast / slow 里的哪一种后仿速度极慢提取模式过于复杂或衬底寄生打开临时关闭衬底提取用CCC只做耦合电容提取最后说点实际的工具这东西用熟了就是个“体力活”真正拉开差距的往往是踩过坑之后的那点经验。我自己在前面带后仿的时候最深的体会是PEX 跑通不算本事跑完之后你还能解释清楚每个寄生参数为什么长这样才算真正入门了。每次拿到一个新模块的版图别急着跑全流程。花十分钟看看网表里最大的那几颗电容挂在哪个网络、最大的电阻又出在哪段走线然后对照版图找到那段金属走线想明白为什么它贡献这么大。这个习惯能让你少走很多弯路也会让你对“版图即电路”这句话有更实在的理解。如果这篇文章对你有帮助可以先把里面的自检清单截图存下来下次跑 PEX 的时候对照着看一遍。踩过一两回坑之后你自然就不需要再翻它了。