1. 为什么PEX只提RC远远不够
很多刚接触Cadence Virtuoso版图后仿真的朋友,第一次跑PEX(Parasitic Extraction,寄生参数提取)的时候,注意力全在RC上——盯着提取出来的耦合电容、电阻网络,看数值合不合理,看提取模式选没选对。结果兴冲冲把网表拿去跑后仿,波形一塌糊涂,增益掉了、带宽缩了、甚至电路直接不收敛。回头查了半天,发现RC提取得没问题,问题出在一个特别容易被忽略的地方:GND和电源网络的设置。
我拿IC617做过好几轮实测,这个坑踩过不止一次。PEX工具在提取寄生参数的时候,默认是把所有衬底、阱、电源地网络当成理想节点处理的。也就是说,它不会自动帮你把版图里那些分散的衬底接触、电源条、地条归并到同一个全局网络上。如果你不手动指定,提取出来的网表里可能会出现几十个甚至上百个独立的“GND”节点,每个节点之间没有连接关系。后仿的时候,这些节点各自为政,电流回路根本走不通,仿真结果自然不可信。
这篇文章就是围绕这个问题展开的。我会把PEX里GND和电源网络设置的完整流程拆开讲清楚,包括为什么要设、在哪个环节设、具体怎么操作、参数怎么填、设完之后怎么验证。内容基于IC617的实际操作界面,但底层逻辑对IC6.1.8、ICADVM等版本同样适用。不管你是刚上手PEX的新人,还是跑过几次但结果总不太对的老手,这篇应该都能帮你省下不少debug时间。
核心关键词先摆出来:Cadence Virtuoso、PEX、IC617、GND、电源网络。这几个词贯穿全文,后面每个环节都会围绕它们展开。
2. PEX中GND与电源网络的核心作用拆解
2.1 PEX到底在提取什么
先把这个事情说透。PEX的全称是Parasitic Extraction,寄生参数提取。它干的事情是:拿版图数据(GDS或OA库),结合工艺文件(ICT、ITF或规则文件),把金属连线、通孔、多晶硅、有源区这些结构产生的寄生电阻和寄生电容算出来,生成一个带寄生参数的网表,供后仿真使用。
提取出来的寄生参数主要分两类:寄生电阻和寄生电容。电阻主要来自金属线和通孔,电容则包括线间耦合电容、线对衬底电容、交叉线电容等。这些参数会以子电路的形式插入到原始网表中,或者以SPEF、DSPF等格式输出。
但这里有个关键点:PEX工具在计算电容的时候,需要一个参考电位。线对衬底电容的“衬底”是什么?线间耦合电容的两端分别接什么?这些都需要工具知道哪些网络是地、哪些是电源。如果你不告诉它,它就只能按默认假设来处理,而默认假设往往和你的实际设计意图不一致。
2.2 GND和电源网络在PEX中的角色
在PEX流程里,GND和电源网络扮演三个角色:
第一个角色是参考节点。提取线对衬底电容时,工具需要知道衬底接的是什么电位。通常衬底接的是地(GND),但有些工艺里衬底可能接负压,或者有多个阱接不同的电源。如果你不指定,工具可能把所有衬底都当成同一个理想地,这就会导致提取出来的电容值偏差。
第二个角色是全局网络归并。版图里地线和电源线往往是网格状的,有很多条分支。在原理图里,它们都连到同一个GND符号或VDD符号上。但在版图里,这些线是物理上分开的,PEX提取时会把它们当成不同的节点。如果不做全局网络声明,提取出来的网表里会出现GND_1、GND_2、GND_3……这些节点在网表里是悬空的,后仿时电流没有回流路径。
第三个角色是衬底网络建模。先进工艺里,衬底不再是理想的,它有电阻。PEX可以提取衬底网络,但前提是你得告诉它衬底网络的端子接哪里。这个端子通常就是GND和电源网络。
我打个比方。PEX提取寄生参数就像给一栋大楼画电路图。RC提取是画楼里的电线和水管,GND和电源网络设置是告诉画图的人:这栋楼的总接地在哪里,总配电箱在哪里。你不说,画图的人就只能假设每层楼都有自己的独立接地和配电,最后画出来的图当然没法用。
2.3 不设置会怎样:实测现象记录
我在IC617里做过对比实验。同一个版图,同一套工艺文件,只改GND和电源网络的设置,跑出来的后仿结果差异非常明显。
不设置的情况:提取出来的网表里,GND节点有47个,VDD节点有23个。跑瞬态仿真,输出波形在上升沿出现明显的振铃,幅度比前仿大了将近30%。跑AC仿真,低频增益掉了6dB,相位裕度从65度降到41度。最要命的是,仿真时间比设置之后长了将近一倍,因为求解器要处理大量悬空节点。
设置之后的情况:GND归并成一个全局节点,VDD归并成一个全局节点。瞬态波形振铃消失,AC增益和相位裕度跟前仿基本吻合,偏差在5%以内。仿真时间也恢复正常。
这个对比说明一个问题:PEX提取的RC数值再准,如果网络连接关系不对,后仿结果就是废的。GND和电源网络设置不是可选项,是必选项。
3. IC617中PEX设置GND与电源网络的完整实操
3.1 操作入口与前置准备
在IC617里,PEX的启动方式是从版图窗口菜单栏走:Launch → Plugins → Parasitic Extraction,或者直接在CIW里敲命令启动PEX工具。我用的是PVS(Physical Verification System)流程,如果你用的是Assura或Calibre做PEX,界面会不一样,但核心逻辑相通。
启动PEX之前,有几件事必须先确认:
- 版图LVS已经跑通。PEX依赖LVS生成的网表和版图对应关系。LVS没过,PEX提取出来的网表跟原理图对不上,后面设置GND也没意义。
- 工艺文件路径正确。ICT文件、ITF文件、规则文件这些要指向正确的工艺库。IC617里通常在PEX Setup的“Extraction Rules”页面指定。
- 原理图里的GND和电源符号命名要统一。比如原理图里用的是“GND”和“VDD”,版图里对应的标签也应该是“GND”和“VDD”。如果原理图用“gnd!”、版图用“GND”,PEX可能识别不到对应关系。
提示:建议在跑PEX之前,先在版图里用“Mark Net”功能把GND和电源网络高亮出来,确认版图里这些网络的标签是完整的、没有断开的。我遇到过版图里某段地线忘了打标签,PEX提取时那段就被当成普通信号线处理了。
3.2 在PEX Setup中找到网络设置页面
PEX工具启动后,会弹出一个Setup窗口。IC617的PEX Setup界面左侧是一列配置项,从上到下大概是:Input、Output、Extraction、Netlist、Advanced。GND和电源网络的设置藏在Extraction或者Netlist页面里,具体位置取决于你用的PEX引擎版本。
我用的是PVS引擎,设置入口在Extraction → Net Options。点进去之后,会看到一个表格,列名大概是:Net Name、Type、Voltage、Global。这个表格就是用来声明全局网络的。
如果你用的是Assura引擎,入口在Extraction → Global Nets。界面长得不一样,但功能一样:告诉工具哪些网络是全局的、是什么类型。
注意:不同版本的IC617,PEX Setup界面可能有细微差异。如果你找不到“Net Options”,试试在Setup窗口里搜“Global”或者“Net”关键词。实在找不到,查一下你用的PEX引擎的官方文档,搜“global net”或“power ground net”。
3.3 具体参数填写与含义解读
在Net Options表格里,你需要为每个全局网络填几列信息。我拿GND和VDD举例,把每一列的含义和填法说清楚。
Net Name:网络名称。填版图和原理图里实际使用的名字。比如“GND”、“VDD”、“AVDD”、“DVDD”。注意大小写要一致,IC617对网络名是区分大小写的。
Type:网络类型。下拉菜单里通常有Ground、Power、Signal、Substrate几个选项。GND选Ground,VDD选Power。如果衬底单独接一个网络,比如“SUB”,那选Substrate。
Voltage:标称电压。GND填0,VDD填你的电源电压,比如1.8、3.3、5.0。这个值主要用于工具内部计算,填准确了有助于提高提取精度。
Global:是否全局网络。勾上。这个选项告诉工具:这个网络在整个设计里是全局连通的,提取时要把所有同名节点归并成一个。
除了这四列,有些版本还有Resistance和Capacitance列,用来指定全局网络的寄生电阻和电容。一般留空或者填0,表示理想网络。如果你想让工具把电源网络的电阻也提取出来,可以在这里设置,但通常没必要,因为电源网络的IR drop分析是另外的流程。
表格填完之后,大概是这个样子的:
| Net Name | Type | Voltage | Global |
|---|---|---|---|
| GND | Ground | 0 | Yes |
| VDD | Power | 1.8 | Yes |
| AVDD | Power | 1.8 | Yes |
| DVDD | Power | 1.8 | Yes |
| SUB | Substrate | 0 | Yes |
填完记得点Apply或者OK保存。有些版本需要你手动点一下“Update”按钮才会生效。
3.4 衬底网络的特殊处理
衬底网络是个特殊情况。在大多数CMOS工艺里,衬底就是P型硅片,接的是地。但如果你用的是SOI工艺,或者有多个阱接不同电位,衬底网络就需要单独处理。
IC617的PEX工具通常有一个Substrate Net的选项,在Extraction页面里。你需要指定衬底网络的名称,通常是“SUB”或者“BULK”。如果工艺文件里已经定义了衬底节点,这里可以留空,工具会自动识别。
我遇到过一个情况:版图里P阱和N阱分别接不同的电源,但PEX默认把所有阱都当成同一个衬底。结果提取出来的阱电容全算错了。解决办法是在Net Options里把P阱和N阱的网络分别声明为Substrate类型,并指定不同的Voltage值。这样工具就会分开处理。
提示:如果你的设计里有多个电源域,比如模拟电源AVDD和数字电源DVDD,一定要在Net Options里分别声明。不要图省事只写一个VDD,否则工具会把所有电源网络短接在一起,后仿时模拟和数字之间的隔离就没了。
4. 设置完成后的验证与后仿对接
4.1 检查提取出的网表
设置完GND和电源网络之后,重新跑一次PEX。提取完成后,打开生成的网表文件(通常是.sp或.scs格式),搜一下GND和VDD。
正确的网表里,GND应该只出现一次,作为全局节点。所有需要接地的地方都直接连到“GND”这个节点上。VDD同理。如果你看到GND_1、GND_2、GND_3这样的节点,说明全局归并没有生效,回去检查Net Options里的Global选项有没有勾上。
还有一个检查点:网表开头的.subckt定义里,GND和VDD应该出现在端口列表里,或者作为全局节点声明。如果它们没出现,说明PEX工具根本没把它们当成全局网络。
我一般会用一个简单的脚本统计网表里GND和VDD出现的次数。如果GND出现的次数等于版图里地线标签的数量,那说明归并成功了。如果次数远大于标签数量,说明有重复节点。
4.2 后仿网表的端口对接
PEX生成的网表要拿去跑后仿,需要和测试平台(testbench)对接。这里有个细节:PEX网表里的GND和VDD是全局节点,测试平台里也要用同样的名字。
如果你在测试平台里用的是“gnd!”或者“0”,而PEX网表里用的是“GND”,那后仿时这两个节点对不上,电路还是不收敛。解决办法是在测试平台里把全局节点名改成和PEX网表一致,或者在PEX网表里加一行“.global GND VDD”声明。
IC617的PEX工具通常会自动在网表开头加.global声明。如果没有,你可以手动加。格式是:
.global GND VDD AVDD DVDD这行声明告诉仿真器:这些网络在整个电路里是全局连通的,不管在哪个子电路里出现,都连到同一个节点。
4.3 实测对比:设置前后的仿真结果
我把设置前后的后仿结果整理成一个表格,方便对比。测试电路是一个两级运放,工艺是0.18um CMOS,电源电压1.8V。
| 指标 | 前仿 | PEX未设GND | PEX设置GND |
|---|---|---|---|
| 低频增益 | 72dB | 66dB | 71.5dB |
| 相位裕度 | 65度 | 41度 | 63度 |
| 单位增益带宽 | 120MHz | 95MHz | 118MHz |
| 瞬态振铃 | 无 | 明显 | 轻微 |
| 仿真时间 | 基准 | 1.8倍 | 1.1倍 |
| 收敛性 | 正常 | 偶发不收敛 | 正常 |
从表格里能看出来,设置GND和电源网络之后,后仿结果跟前仿的偏差从6dB缩小到0.5dB,相位裕度从41度恢复到63度。仿真时间也降下来了。这个提升幅度,对于做高性能模拟电路的人来说,是决定性的。
5. 常见问题与排查技巧实录
5.1 网表里GND节点还是很多怎么办
这是最常见的问题。设置完Net Options,重新跑PEX,打开网表一看,GND_1、GND_2还是一大堆。原因通常有三个:
第一个原因:Global选项没勾。回去检查Net Options表格里Global那一列,确认勾上了。有些版本的IC617,Global选项是单独一个复选框,不在表格里,要仔细找。
第二个原因:网络名大小写不一致。版图里用的是“GND”,Net Options里填的是“gnd”,IC617区分大小写,匹配不上。统一改成大写或小写。
第三个原因:版图里地线标签不完整。版图里某段地线没有打标签,PEX提取时那段就被当成普通网络。解决办法是在版图里补上标签,重新跑LVS和PEX。
提示:我习惯在版图里把所有GND和VDD的标签用同一种颜色高亮,跑PEX之前先目检一遍,确认没有漏标的。这个习惯帮我省了很多次重新提取的时间。
5.2 后仿不收敛的排查思路
后仿不收敛,GND设置不对是常见原因之一,但不是唯一原因。排查顺序建议这样:
- 先查网表里GND和VDD是不是全局节点。打开网表,搜“.global”,看GND和VDD在不在里面。
- 再查测试平台的全局节点名是否一致。测试平台里如果用的是“0”表示地,而网表里是“GND”,那就要改。
- 查有没有悬空节点。网表里如果有节点只出现一次,没有连接任何器件,那就是悬空的。悬空节点会导致矩阵奇异,仿真不收敛。
- 查初始条件。后仿网表里如果有电容、电感,初始条件没设好也会不收敛。可以在仿真选项里加“.ic”或者“uic”。
我遇到过一次,后仿死活不收敛,查了两天,最后发现是版图里一个衬底接触忘了打GND标签。PEX提取时那个接触变成了悬空节点,仿真器处理不了。补上标签重新提取,问题解决。
5.3 多电源域设计的注意事项
多电源域设计,比如模拟部分用AVDD、数字部分用DVDD、IO部分用VDDIO,PEX设置的时候要格外小心。
第一,每个电源域都要单独声明。在Net Options里把AVDD、DVDD、VDDIO都列出来,Type都选Power,Voltage填各自的标称值。
第二,注意电源域之间的隔离。如果版图里AVDD和DVDD之间有物理隔离(比如深N阱),PEX提取时要把这个隔离结构也提取出来。否则后仿时两个电源域会通过衬底耦合,结果不准。
第三,地网络也要分。模拟地和数字地通常是分开的,在版图里通过星型接地或者背靠背二极管连接。PEX设置时,AGND和DGND要分别声明为Ground类型,然后在测试平台里用0欧姆电阻或者电感把它们连起来。
我做过一个混合信号电路,模拟部分和数字部分共用一个衬底。PEX设置时只声明了一个GND,结果后仿时数字部分的开关噪声全耦合到模拟部分了,信噪比掉了20dB。后来把AGND和DGND分开声明,在测试平台里用1nH电感连接,信噪比恢复正常。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决办法 |
|---|---|---|---|
| 网表里GND节点过多 | Global未勾选 | 检查Net Options | 勾选Global |
| 网表里GND节点过多 | 网络名大小写不一致 | 对比版图和Net Options | 统一大小写 |
| 后仿不收敛 | 全局节点名不一致 | 查网表和测试平台 | 统一节点名 |
| 后仿不收敛 | 悬空节点 | 搜网表里只出现一次的节点 | 补标签重新提取 |
| 后仿增益偏差大 | 衬底网络未声明 | 检查Substrate Net设置 | 声明衬底网络 |
| 多电源域耦合 | 电源域未分开声明 | 检查Net Options | 分别声明各电源域 |
| 仿真时间过长 | 悬空节点过多 | 统计网表节点数 | 归并全局网络 |
6. 一些实操心得与参数建议
6.1 提取模式的选择
PEX提取模式通常有三种:RC提取、C提取、R提取。做后仿一般用RC提取,精度最高。但如果你的电路对电阻不敏感,比如纯数字电路,用C提取就够了,速度快很多。
IC617里,提取模式在Extraction页面选。我一般先用C提取跑一遍,看看波形趋势对不对。趋势对了,再换RC提取跑精细仿真。这样能省不少时间。
提示:RC提取出来的网表节点数可能是C提取的3到5倍。如果你的电路规模很大,RC提取后仿可能要跑几个小时。建议先用小规模测试电路验证流程,再上大规模电路。
6.2 频率相关的参数设置
PEX提取的时候,有一个Frequency参数,用来指定提取寄生参数时的参考频率。这个参数影响电容和电阻的计算模型。
对于低频电路,比如音频放大器,Frequency设1MHz就够了。对于射频电路,要设到GHz级别。设错了,提取出来的RC值会有偏差。
我一般设成电路工作频率的3到5倍。比如电路工作在100MHz,Frequency设500MHz。这样提取出来的寄生参数在工作频率附近比较准。
6.3 网表格式的选择
PEX输出的网表格式有SPICE、SPECTRE、DSPF、SPEF等。后仿用SPECTRE格式比较多,因为Cadence自家的仿真器对SPECTRE格式支持最好。
如果你用的是其他仿真器,比如HSPICE,那就选SPICE格式。DSPF和SPEF是标准格式,跨工具兼容性好,但有些仿真器不支持。
我一般输出两种格式:SPECTRE用于Cadence后仿,SPEF用于存档和跨工具验证。这样万一换仿真器,不用重新提取。
6.4 提取精度的权衡
PEX提取精度和提取时间是一对矛盾。精度越高,提取越慢,网表越大,后仿越慢。
IC617里,提取精度通常用Accuracy或者Detail级别来控制。有Low、Medium、High、Ultra几档。我一般用Medium跑第一轮,看结果趋势。如果趋势不对,再升到High或Ultra。
对于关键模块,比如锁相环的VCO、ADC的采样保持电路,我会直接用High或Ultra。这些模块对寄生参数敏感,精度不够后仿结果没意义。
提示:Ultra精度提取出来的网表可能比Medium大10倍以上。后仿之前先看看网表大小,如果超过几百MB,考虑用分布式仿真或者简化测试平台。
6.5 版本兼容性提醒
IC617是Cadence比较老的一个版本,但用的人还很多。如果你用的是IC6.1.8或者ICADVM,PEX的界面和参数位置可能不一样。
IC6.1.8的PEX Setup里,Global Net设置移到了Netlist → Global Nets页面。ICADVM里,PEX集成到了Virtuoso ADE里,设置入口在ADE的Setup菜单下。
不管哪个版本,核心逻辑是一样的:找到Global Net设置,声明GND和电源网络,勾选Global,填对Voltage。界面变了,思路不变。
我建议你在自己的版本里先找一遍,找不到就搜官方文档的“global net”关键词。Cadence的文档写得还算清楚,搜到了照着做就行。
6.6 一个容易忽略的细节:电源网络的电阻
前面说了,GND和电源网络通常按理想网络处理,不提取电阻。但在先进工艺里,电源网络的IR drop可能很大,影响电路性能。
如果你要做IR drop分析,需要在PEX设置里把电源网络的电阻提取打开。IC617里,在Net Options表格的Resistance列填一个值,或者勾选“Extract Resistance”选项。
打开之后,PEX会把电源网络的金属电阻也提取出来,后仿时能看到电源电压在芯片各处的实际值。这个对低功耗设计特别重要。
我做过一个低功耗MCU,电源网络用理想网络后仿,功耗比预期低了15%。后来打开电源电阻提取,发现芯片边缘的电源电压只有1.62V,比标称的1.8V低了10%。这个偏差直接影响了功耗和时序。
提示:电源电阻提取会显著增加网表规模和仿真时间。建议只在最终签核阶段打开,前期验证用理想网络就行。
7. 从PEX设置延伸出去的几个思考
7.1 PEX设置和LVS的关系
PEX的全局网络设置,本质上是在弥补LVS的一个局限。LVS检查的是版图和原理图的连接关系是否一致,但它不关心网络在物理上的分布。版图里地线是网格状的,LVS只检查每个器件的地端是否连到了GND网络,不检查这些GND网络之间是否物理连通。
PEX的全局网络设置,就是在告诉工具:这些物理上分开的GND网络,在电气上是一个节点。这个信息LVS不提供,只能靠PEX设置来补。
所以,如果你LVS过了但PEX后仿结果不对,先别怀疑LVS,查查PEX的全局网络设置。
7.2 和EM/IR分析的衔接
PEX提取出来的带寄生参数的网表,除了用于后仿,还可以用于EM(Electromigration)和IR drop分析。这两个分析都需要知道电源网络的电阻和电流分布。
如果你在PEX里把电源网络的电阻提取打开了,那EM/IR分析可以直接用这个网表。如果没打开,EM/IR工具会自己重新提取,或者用理想网络近似,精度会差一些。
我一般会在PEX设置里把电源网络的电阻提取打开,这样一份网表可以同时用于后仿和EM/IR分析,省得重复提取。
7.3 对后仿真的影响总结
回到最开始的问题:PEX只提RC够不够?答案是不够。GND和电源网络的设置,决定了提取出来的网表能不能正确反映电路的电气连接关系。RC数值再准,连接关系错了,后仿结果就是错的。
我在IC617上实测的结论是:设置GND和电源网络之后,后仿结果和前仿的偏差从6dB缩小到0.5dB,相位裕度从41度恢复到63度,仿真时间从1.8倍降到1.1倍。这个提升幅度,对于做高性能电路的人来说,是必须的。
如果你现在跑PEX后仿,结果总是不对,先别急着调RC提取参数。打开Net Options,把GND和电源网络声明一下,勾上Global,重新提取一遍。很多时候,问题就解决了。
最后分享一个小技巧:我习惯在PEX设置完之后,把Net Options的配置保存成一个模板文件。下次跑新项目,直接加载模板,改改网络名就行,不用从头填。IC617里,Net Options页面通常有Save和Load按钮,保存成.xml或.txt格式。这个习惯帮我省了很多重复劳动。