☰
芯片后端PEX寄生参数提取与后仿真实战:从XRC加载到问题排查
2026/10/7 18:12:35 网站建设 项目流程

芯片后端设计里,寄生参数提取(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 可以共存,但建议同一时间只启用一个,因为两个工具都会注册右键菜单和菜单栏按钮,容易冲突,菜单变得很乱。实际项目中我一般只用 Calibre,QRC 单独留在另一个版本的环境里做对照实验。

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:电阻电容一起提。这是模拟后仿的标配。
  • R+C:电阻电容分开提。这种模式下,输出网表里电阻和电容是分开的元件,便于你后续做灵敏度分析。

我自己的经验是:模拟电路做频率特性验证,选RC就够了。如果电路是高速数字接口,比如 DDR、SerDes,那你得用R+C,因为这种场景要分别看 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,弹出对话框后:

  1. Rules标签页:把XRC rules文件路径填进去,Run Directory设成一个独立的工作目录。
  2. Inputs标签页:Netlist选择当前 cell 的 schematic 或 symbol netlist,Layout默认就是当前打开的版图。
  3. Outputs标签页:Extraction Type选RC,Output Format选Calibre View。
  4. Run Control标签页:确认LVS Rules已经指向和 PEX 配套的规则文件,Auto Run LVS可以勾上,让 PEX 前自动跑一次 LVS。
  5. 点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 反相器举个例子,完整走一遍:

  1. 原理图上画好反相器,画版图,DRC 和 LVS 全通过。
  2. 打开版图,跑 Calibre PEX,输出calibreview。
  3. 在 testbench 里放一个反相器 symbol,输出端加一个 50fF 的负载电容,输入端接一个 100ps 上升沿的脉冲。
  4. 创建 config view,把反相器的 view 指向calibre,其余默认。
  5. 跑瞬态仿真,看看输出波形的上升沿和下降沿延迟。

你会发现,前仿的延迟可能是 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 里的哪一种
后仿速度极慢提取模式过于复杂,或衬底寄生打开临时关闭衬底提取,用C+CC只做耦合电容提取

最后说点实际的

工具这东西,用熟了就是个“体力活”,真正拉开差距的往往是踩过坑之后的那点经验。我自己在前面带后仿的时候,最深的体会是:PEX 跑通不算本事,跑完之后你还能解释清楚每个寄生参数为什么长这样,才算真正入门了。

每次拿到一个新模块的版图,别急着跑全流程。花十分钟看看网表里最大的那几颗电容挂在哪个网络、最大的电阻又出在哪段走线,然后对照版图找到那段金属走线,想明白为什么它贡献这么大。这个习惯能让你少走很多弯路,也会让你对“版图即电路”这句话有更实在的理解。

如果这篇文章对你有帮助,可以先把里面的自检清单截图存下来,下次跑 PEX 的时候对照着看一遍。踩过一两回坑之后,你自然就不需要再翻它了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询