1. 项目缘起与整体设计思路
1.1 为什么PEX是模拟版图设计的“最后一公里”
做模拟IC版图的人都有一个共识:LVS过了不代表电路能用,DRC清了不代表性能达标。真正决定流片成败的,往往是**寄生参数提取(PEX)**这一步。我在多个SMIC 130nm工艺项目上踩过坑之后,越来越觉得PEX是整个设计流程里最容易被低估、也最容易出问题的环节。
简单说,PEX就是把版图上的金属连线、通孔、多晶硅等结构,转换成带有电阻、电容甚至电感的寄生网络,再反标回原理图做后仿。没有PEX,你仿的只是理想电路;有了PEX,你仿的才是真实芯片。对于SMIC 130nm这种成熟工艺,金属层数多、线宽窄,寄生效应在GHz以下就已经很明显了,尤其是做射频、高速ADC或者高精度基准源的时候,忽略PEX基本等于盲人摸象。
这篇文章以smic13mmf_1233_1P6M这个工艺套件为例,把Cadence Virtuoso环境下从版图准备到PEX后仿的完整流程拆开讲。smic13mmf_1233_1P6M是SMIC 130nm混合信号工艺的一个典型配置:1层多晶硅、6层金属,支持MIM电容和厚金属选项。这个工艺在国内高校和中小IC设计公司里用得非常多,资料相对齐全,但PEX相关的完整中文实操记录并不多。我把自己在项目里跑通的流程、参数设置、踩过的坑都整理出来,希望能帮到正在用这个工艺的朋友。
1.2 整体流程拆解:从版图到后仿的五个阶段
PEX不是孤立的一步,它前后牵扯到版图、LVS、规则文件、仿真环境等多个环节。我习惯把它拆成五个阶段:
- 版图准备与LVS验证:确保版图与原理图完全一致,这是PEX的前提。LVS不过,PEX跑出来的网表毫无意义。
- PEX规则文件配置:选择正确的工艺文件、设置提取模式(R+C、R+C+CC等)、指定输出格式。
- PEX运行与网表生成:在Calibre或Quantus中执行提取,生成带寄生的SPICE网表。
- 后仿环境搭建:把PEX网表替换原理图,配置仿真激励和测试平台。
- 结果对比与迭代:对比前仿后仿差异,定位寄生热点,决定是否优化版图。
这五个阶段里,第一阶段和第二阶段最容易出问题。LVS的选项设置、PEX规则文件的路径、提取模式的选择,任何一个细节错了,后面全是白费功夫。下面我按这个顺序,把每个环节的关键操作和注意事项讲清楚。
1.3 工具选型:为什么用Calibre做PEX而不是Quantus
Cadence Virtuoso自带的Quantus QRC当然可以做PEX,而且和Virtuoso集成度更高。但在SMIC 130nm这个工艺节点上,我实测下来Calibre xRC的精度和稳定性更好,尤其是做R+C+CC提取的时候,Calibre的规则文件更成熟,SMIC官方提供的PEX runset也是基于Calibre格式的。
另一个原因是Calibre 3.48这个版本在业内用得极广,很多公司的PDK都是围绕它验证的。虽然新版本功能更强,但3.48的兼容性最好,跑SMIC 130nm的PEX基本不会遇到奇怪的bug。当然,如果你公司有Quantus的license并且PDK支持完善,用Quantus也没问题,流程逻辑是相通的。
注意:Calibre版本和PDK版本必须匹配。我见过有人用Calibre 2020跑SMIC 130nm的老PDK,结果PEX规则文件里的语法不兼容,提取出来的网表缺了很多节点。建议优先使用PDK文档里推荐的Calibre版本。
2. 核心细节解析与实操要点
2.1 版图准备:LVS之前的自查清单
PEX的前提是LVS干净。但LVS过了不代表版图没问题,有些隐患LVS查不出来,却会严重影响PEX结果。我在跑PEX之前一定会做这几项检查:
- 确认所有器件都有对应的PEX模型:SMIC 130nm的PDK里,有些器件(比如某些类型的MIM电容)在PEX规则文件里可能没有精确的寄生模型,需要手动确认。如果器件不支持PEX,提取出来的网表会把它当成理想器件,后仿结果会偏乐观。
- 检查电源地网络的连接:PEX对电源地网络的提取非常敏感。如果VDD和VSS的金属宽度不够,提取出来的IR drop会很大。我习惯在版图里把电源地尽量走宽,至少用顶层厚金属。
- 确认衬底连接:SMIC 130nm是P型衬底,衬底噪声耦合在混合信号设计里很关键。PEX规则文件里要开启衬底网络提取,否则后仿看不到衬底耦合效应。
- 检查dummy填充:dummy metal和dummy poly会影响寄生电容。如果PEX规则文件里没有正确处理dummy,提取出来的电容会偏大。SMIC的PEX runset通常会忽略dummy,但你要确认一下。
这些检查看起来琐碎,但每一条我都遇到过实际问题。有一次做高精度ADC,后仿发现采样保持电路的建立时间比前仿慢了30%,查了半天才发现是PEX规则文件里没有提取MOM电容的侧壁电容,导致寄生电容被低估了。
2.2 PEX规则文件配置:关键参数逐项解读
Calibre PEX的核心是规则文件(runset),SMIC 130nm的PDK里通常叫pex_runset或者xrc_runset。这个文件里有很多参数,我挑几个最关键的讲:
提取模式选择:Calibre支持多种提取模式,常用的有:
| 模式 | 含义 | 适用场景 | 提取时间 |
|---|---|---|---|
| R | 只提取电阻 | 电源网络IR drop分析 | 快 |
| C | 只提取电容 | 耦合噪声分析 | 快 |
| R+C | 提取电阻和电容 | 一般模拟电路后仿 | 中等 |
| R+C+CC | 提取电阻、电容和耦合电容 | 高速/射频电路 | 慢 |
| R+C+CC+L | 加上电感提取 | 射频电感分析 | 很慢 |
对于SMIC 130nm的模拟电路,我一般用R+C+CC。如果做射频或者高速SerDes,才考虑加L。R+C+CC的提取时间可能是R+C的3到5倍,但精度提升很明显,尤其是线间距很小的走线。
频率设置:PEX提取的寄生参数是频率相关的。规则文件里通常有一个frequency参数,默认可能是1GHz。如果你的电路工作在100MHz,用1GHz提取出来的电容会偏小。我一般把频率设成电路工作频率的2到3倍,比如100MHz的电路设300MHz。
输出格式:Calibre PEX可以输出SPICE、SPECTRE、DSPF等多种格式。Virtuoso后仿一般用SPECTRE格式,因为和Cadence仿真器兼容性最好。如果要用其他仿真器,可以选SPICE格式。
网表层次化设置:PEX网表可以输出成扁平化(flat)或者层次化(hierarchical)。扁平化网表节点多、仿真慢,但不会有层次映射问题。层次化网表仿真快,但需要确保原理图和版图的层次结构一致。我一般先用层次化跑一遍,如果报错再改扁平化。
实操心得:PEX规则文件里的
mfactor参数要特别注意。如果版图里有多指器件或者并联器件,mfactor设置不对会导致提取出来的电阻电容值差好几倍。我习惯在LVS阶段就确认好mfactor,PEX直接沿用。
2.3 提取模式与精度权衡:R+C+CC到底值不值得
很多人问我,R+C+CC提取时间那么长,到底有没有必要。我的答案是:看电路类型。
对于低速模拟电路,比如音频放大器、LDO、基准源,R+C就够了。这些电路的信号频率低,耦合电容的影响很小,提取R+C+CC纯属浪费时间。
但对于以下场景,R+C+CC是必须的:
- 高速ADC/DAC:采样时钟的耦合会影响采样精度。
- 射频前端:LNA、Mixer的输入输出耦合会改变匹配网络。
- 高速接口:SerDes的差分线耦合会导致眼图闭合。
- 开关电容电路:时钟馈通和电荷注入对耦合电容很敏感。
我做过一个10bit 100MS/s的SAR ADC,前仿ENOB是9.8bit,用R+C提取后仿降到9.2bit,用R+C+CC提取后仿降到8.7bit。差距很明显。所以对于这种电路,R+C+CC不是可选项,是必选项。
2.4 衬底网络提取:混合信号设计的隐藏关键
SMIC 130nm工艺的衬底是低阻P型衬底,衬底噪声耦合在混合信号设计里非常严重。PEX规则文件里有一个extract_substrate选项,默认可能是关闭的。如果你的电路里有数字模块和模拟模块共存,一定要打开这个选项。
打开衬底提取后,PEX网表里会多出很多衬底节点和衬底电阻。仿真时间会增加,但你能看到数字开关噪声如何通过衬底耦合到模拟电路。我做过一个混合信号项目,数字模块的时钟馈通通过衬底耦合到模拟基准源,导致基准电压波动了5mV。这个效应在前仿里完全看不到,只有打开衬底提取才能发现。
注意:衬底提取会增加网表节点数,仿真时间可能增加50%以上。如果仿真资源有限,可以先用R+C+CC跑一遍,确认功能正确后再加衬底提取做最终验证。
3. 实操过程与核心环节实现
3.1 在Virtuoso中启动PEX的完整步骤
假设你已经完成了版图设计,LVS也过了。下面是我在Virtuoso里跑PEX的标准流程:
第一步:确认LVS结果。在Virtuoso的Layout界面,打开Calibre LVS,确认LVS报告里没有error,warning也要逐条看。有些warning(比如未连接的节点)会影响PEX结果。
第二步:准备PEX规则文件。从SMIC PDK里找到PEX runset,通常路径是PDK/Calibre/pex/下面。确认规则文件里的工艺角(corner)设置正确,一般用typical。
第三步:启动Calibre PEX。在Virtuoso的Layout界面,菜单栏选择Calibre -> Run PEX。如果没有这个菜单,说明Calibre集成没装好,需要手动在终端里跑。
第四步:配置PEX选项。在弹出的对话框里设置:
- Input Layout:选择你的版图单元
- Runset:选择PEX规则文件
- Extraction Type:选R+C+CC
- Output Format:选SPECTRE
- Output Netlist:指定输出路径和文件名
第五步:运行并等待。PEX运行时间取决于版图规模和提取模式。一个中等规模的模拟电路(几百个器件),R+C+CC大概需要10到30分钟。如果超过1小时,可能是版图太大或者规则文件设置有问题。
第六步:检查PEX报告。PEX完成后会生成一个报告文件,里面会列出提取的节点数、电阻数、电容数。如果节点数明显偏少,可能是提取模式设错了。
3.2 PEX网表反标到原理图的详细操作
PEX生成的SPECTRE网表不能直接仿真,需要反标到原理图里。Virtuoso提供了两种方式:
方式一:Config视图。在原理图里创建一个Config视图,把需要后仿的单元指向PEX网表。这种方式适合局部后仿,比如只后仿某个关键模块。
方式二:直接替换。把PEX网表复制到仿真目录,在ADE里把原理图替换成PEX网表。这种方式适合整体后仿。
我一般用方式一,因为可以灵活选择后仿的范围。具体操作:
- 在Library Manager里找到你的设计库,右键新建一个Cellview,类型选
config。 - 打开Config视图,在
Top Cell里选择你的顶层原理图。 - 在
View List里把需要后仿的模块的View改成pex(或者你PEX网表的名字)。 - 保存Config,然后在ADE里选择这个Config作为仿真对象。
这样仿真器就会用PEX网表替换原理图,其他模块还是用原理图。后仿时间比全扁平化网表短很多。
3.3 后仿环境搭建与仿真设置
后仿和前仿的仿真设置基本一样,但有几个地方要注意:
- 仿真器选择:用Spectre APS或者Spectre X,比普通Spectre快很多。PEX网表节点多,普通Spectre可能跑不动。
- 收敛选项:PEX网表里有很多小电阻和小电容,容易导致收敛问题。在ADE里把
reltol从1e-3改成1e-4,abstol从1e-12改成1e-13,收敛会好很多。 - 仿真精度:后仿的精度设置要比前仿高。我一般把
errpreset设成conservative,虽然慢但结果可靠。 - 初始条件:PEX网表里的节点初始电压可能和前仿不一样,如果电路有多个稳态,后仿可能收敛到错误的状态。可以加
.ic语句指定关键节点初始电压。
3.4 前仿后仿对比:如何定位寄生热点
后仿跑完之后,最关键的一步是对比前仿后仿结果,找出差异最大的节点。我一般用以下方法:
- DC对比:先跑DC,对比关键节点的电压。如果DC就差很多,说明PEX网表有问题,可能是提取模式错了或者LVS没对齐。
- AC对比:跑AC,对比增益、带宽、相位裕度。如果带宽下降很多,说明寄生电容偏大,可能是走线太长或者耦合电容没提取对。
- TRAN对比:跑TRAN,对比建立时间、过冲、振铃。如果建立时间变慢,说明寄生电阻偏大,可能是电源地走线太窄。
定位到差异后,回到版图里找对应的节点。比如发现某个节点的寄生电容特别大,就去版图里看这个节点连接的金属面积是不是太大,能不能缩小。如果寄生电阻特别大,就看走线是不是太窄或者太长,能不能加宽或者换层。
实操心得:PEX报告里会列出每个节点的寄生电阻和电容值。我习惯把报告导入Excel,按寄生值排序,找出最大的前20个节点,重点优化。这个方法比盲目改版图效率高很多。
4. 常见问题与排查技巧实录
4.1 PEX运行报错:规则文件路径与语法问题
问题现象:Calibre PEX启动后立即报错,提示Cannot open runset file或者Syntax error in runset。
排查思路:
- 检查规则文件路径是否包含空格或特殊字符。Calibre对路径很敏感,最好用纯英文路径。
- 检查规则文件里的
LAYOUT PATH和SOURCE PATH是否正确指向版图和原理图。 - 检查Calibre版本是否匹配。SMIC 130nm的PEX runset通常是为Calibre 3.48或更早版本写的,用新版本可能语法不兼容。
解决方法:如果路径没问题,语法也没问题,试试把规则文件里的INCLUDE语句改成绝对路径。有时候相对路径在Virtuoso环境里解析不对。
4.2 PEX网表节点缺失:LVS与PEX的层次映射问题
问题现象:PEX跑完了,但网表里节点数明显偏少,后仿结果和前仿几乎一样。
排查思路:
- 检查LVS报告里有没有
unmatched的器件。如果有,PEX会忽略这些器件。 - 检查PEX规则文件里的
hierarchy设置。如果设成了flat,但版图是层次化的,可能会丢节点。 - 检查PEX报告里的
extracted device count,和原理图里的器件数对比。
解决方法:重新跑LVS,确保所有器件都匹配。如果LVS没问题,把PEX的层次化设置改成flat再跑一遍。扁平化网表虽然大,但不会丢节点。
4.3 后仿不收敛:寄生网络导致的仿真问题
问题现象:后仿跑TRAN时,仿真器报Convergence failure,或者仿真时间异常长。
排查思路:
- 检查PEX网表里有没有阻值特别大的电阻(比如大于1GΩ)或者容值特别小的电容(比如小于1aF)。这些元件会导致矩阵条件数变差。
- 检查电源地网络。如果电源地之间有很小的电阻,会导致很大的电流,仿真器难以收敛。
- 检查仿真器的
reltol和abstol设置。
解决方法:
- 在PEX规则文件里设置
min_res和min_cap,忽略太小的寄生元件。我一般设min_res=0.1Ω,min_cap=0.01fF。 - 在ADE里把
reltol改成1e-4,abstol改成1e-13。 - 如果还不行,试试用
Spectre X的APS模式,收敛算法更好。
4.4 前仿后仿差异过大:寄生提取精度问题
问题现象:后仿结果和前仿差很多,比如增益下降3dB,或者带宽减半。
排查思路:
- 检查PEX提取模式。如果只用了R+C,耦合电容没提取,高速电路的差异会很大。
- 检查频率设置。如果电路工作在100MHz,但PEX频率设成了10GHz,提取出来的电容会偏小。
- 检查衬底提取。如果衬底提取没开,混合信号电路的差异会很大。
解决方法:
- 改用R+C+CC模式重新提取。
- 把PEX频率设成电路工作频率的2到3倍。
- 打开衬底提取,重新跑后仿。
4.5 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| PEX启动报错 | 规则文件路径错误 | 用绝对路径,避免空格 |
| 网表节点缺失 | LVS未匹配或层次设置错误 | 重跑LVS,改flat模式 |
| 后仿不收敛 | 寄生元件值极端 | 设min_res/min_cap,调reltol |
| 前仿后仿差异大 | 提取模式或频率设置错误 | 改R+C+CC,调频率 |
| 仿真时间过长 | 网表太大或精度过高 | 用层次化网表,降精度 |
| 衬底噪声看不到 | 衬底提取未开启 | 打开extract_substrate |
4.6 独家避坑技巧:我踩过的那些坑
坑一:PEX规则文件里的温度设置。SMIC 130nm的PEX runset默认温度可能是25°C,但你的电路可能工作在-40°C到125°C。如果PEX温度设错了,提取出来的电阻值会差很多。我一般把PEX温度设成和仿真温度一致。
坑二:MIM电容的PEX模型。SMIC 130nm的MIM电容在PEX规则文件里可能有多个模型选项。如果选错了,提取出来的电容值可能差20%以上。我习惯在PEX之前先跑一个简单的MIM电容测试结构,确认提取值和PDK标称值一致。
坑三:厚金属的电阻率。SMIC 130nm的顶层厚金属电阻率比普通金属低很多。如果PEX规则文件里没有正确区分厚金属和普通金属,电源网络的IR drop会算错。我一般会在PEX报告里检查厚金属的方块电阻值,确认和PDK文档一致。
坑四:PEX网表的单位。Calibre PEX输出的网表单位可能是米、微米或者纳米的。如果单位搞错了,寄生值会差几个数量级。我习惯在PEX规则文件里明确指定单位,然后在网表里抽查几个节点的寄生值,确认量级正确。
坑五:后仿的初始条件。PEX网表里的节点很多,如果电路有多个稳态,后仿可能收敛到错误的状态。我一般会在ADE里加.ic语句,指定关键节点的初始电压,确保后仿从正确的状态开始。
这些坑我都实际踩过,每一个都花了至少半天时间排查。希望你看完能直接绕过。
5. 从PEX结果反推版图优化
5.1 寄生电阻优化:电源地网络加宽与换层
PEX报告里如果发现某段电源地走线的寄生电阻特别大,最直接的优化方法就是加宽走线。SMIC 130nm的顶层厚金属方块电阻大概是0.05Ω/sq,普通金属是0.1Ω/sq。如果一段走线有100个方块,厚金属的电阻是5Ω,普通金属是10Ω。对于1mA的电流,压降分别是5mV和10mV。看起来不大,但如果电源地网络有多段串联,累积起来就很可观了。
我一般把电源地网络尽量走顶层厚金属,宽度至少5μm。如果面积允许,用多层金属并联,进一步降低电阻。对于大电流路径,比如功率放大器的供电,我会用10μm以上的宽度。
5.2 寄生电容优化:缩短走线与增加间距
寄生电容和走线面积成正比,和线间距成反比。如果PEX报告里某个节点的寄生电容特别大,先看这个节点的走线是不是太长。能缩短就缩短,能换层就换层。
如果走线长度没法缩短,就增加和相邻走线的间距。SMIC 130nm的金属最小间距是0.2μm左右,但寄生电容在间距小于1μm时下降很快。我一般把关键信号的间距设成最小间距的2到3倍,寄生电容能降低30%以上。
对于高速差分线,我会用差分走线,让两条线的耦合电容相互抵消。SMIC 130nm支持差分走线,PEX规则文件里也有对应的提取模型。
5.3 耦合电容优化:屏蔽与差分走线
耦合电容是高速电路后仿差异的主要来源。如果PEX报告里某两条线之间的耦合电容特别大,可以考虑加屏蔽线。在两条敏感线之间加一条地线,耦合电容会降低很多。但屏蔽线会增加面积,要权衡。
另一种方法是差分走线。差分线的耦合电容在差分信号下会相互抵消,共模噪声也会被抑制。SMIC 130nm的PEX规则文件支持差分线提取,提取出来的耦合电容会分成差模和共模两部分。
5.4 迭代流程:PEX到版图修改再到PEX
PEX不是一次性的工作,而是一个迭代过程。我的标准流程是:
- 第一版版图跑PEX,记录关键节点的寄生值。
- 对比前仿后仿,找出差异最大的节点。
- 回到版图优化这些节点,重新跑LVS和PEX。
- 再次对比,直到后仿结果满足指标。
这个迭代过程可能重复3到5次。每次迭代都要重新跑LVS和PEX,时间成本不低。所以我一般会在第一版版图就把电源地和关键信号走好,减少迭代次数。
实操心得:PEX迭代的时候,可以只重新提取修改过的模块,不用全芯片重新提取。Calibre支持增量提取,能节省很多时间。具体方法是在PEX规则文件里设置
incremental选项,指定上次提取的网表作为参考。
6. 仿真结果分析与设计迭代
6.1 关键指标对比:增益、带宽、相位裕度
后仿跑完之后,我一般会对比以下指标:
| 指标 | 前仿值 | 后仿值 | 差异 | 可接受范围 |
|---|---|---|---|---|
| DC增益 | 60dB | 58dB | -2dB | ±3dB |
| 单位增益带宽 | 100MHz | 85MHz | -15% | ±20% |
| 相位裕度 | 65° | 60° | -5° | >45° |
| 建立时间 | 10ns | 12ns | +20% | ±30% |
| 功耗 | 1mW | 1.05mW | +5% | ±10% |
如果差异在可接受范围内,就可以定版。如果超出范围,就要回到版图优化。
6.2 寄生热点定位:从PEX报告到版图坐标
PEX报告里会列出每个节点的寄生电阻和电容,但不会直接告诉你这些节点在版图的哪个位置。我一般用以下方法定位:
- 在PEX报告里找到寄生值最大的节点名。
- 在Virtuoso的Layout界面,用
Find功能搜索这个节点名。 - Virtuoso会高亮显示这个节点对应的版图区域。
- 检查这个区域的走线,找出寄生大的原因。
这个方法很直接,但前提是PEX网表的节点名和版图节点名一致。如果PEX规则文件里设置了节点名映射,可能需要对一下。
6.3 设计迭代决策:什么时候可以定版
定版的标准不是后仿结果和前仿完全一样,而是后仿结果满足设计指标。我一般会设一个裕量:后仿结果要比指标要求好20%以上。比如指标要求相位裕度大于45°,后仿至少要54°。这样留出工艺角和温度变化的裕量。
如果后仿结果刚好满足指标,我建议再优化一轮。SMIC 130nm的工艺波动在±10%左右,温度范围-40°C到125°C,寄生参数也会随温度变化。留足裕量才能保证流片成功率。
7. 写在最后:一些个人体会
PEX这个环节,说难不难,说简单也不简单。工具操作本身不复杂,但细节特别多,每一个参数背后都有原因。我刚开始做PEX的时候,总觉得规则文件是黑盒子,跑通就行。后来踩坑多了才明白,只有理解每个参数的含义,才能在出问题的时候快速定位。
SMIC 130nm这个工艺虽然老,但资料齐全、成本低,非常适合做模拟电路的教学和原型验证。smic13mmf_1233_1P6M这个配置在混合信号设计里很实用,1P6M的金属层数足够做复杂的电源地网络和屏蔽。我建议新手从这个工艺入手,把PEX流程完整跑一遍,理解寄生提取的原理和影响。
最后分享一个小技巧:PEX跑完之后,别急着看后仿结果,先把PEX报告里的寄生值统计一下。如果某个节点的寄生电容超过1pF,或者寄生电阻超过100Ω,先检查版图是不是有问题。很多时候,版图上的一个小疏忽,比如走线多绕了一圈,就会导致寄生值翻倍。提前发现这些问题,比后仿跑完再回头改要省时间得多。