1. 为什么130nm节点的PEX值得单独拿出来讲
很多人觉得PEX就是个"点按钮等结果"的活,尤其是到了先进工艺节点,大家注意力全在FinFET和3D IC上,130nm这种"老古董"似乎没什么好聊的。但实际情况恰恰相反——SMIC 130nm混合信号工艺(smic13mmf系列)至今仍然是国内大量模拟IC、电源管理芯片、MCU和传感器接口芯片的主力工艺平台。我接触过的项目中,至少有一半以上的量产模拟芯片跑在130nm节点上,而PEX做得好不好,直接决定了流片回来的芯片是"一次点亮"还是"反复迭代"。
问题的关键在于:130nm是一个承上启下的节点。它不像180nm那样寄生参数相对温和、PEX精度要求没那么苛刻,也不像65nm以下那样有成熟的RC extraction deck和标准化的PEX流程。130nm的金属层数多(1P6M意味着1层多晶硅加6层金属)、介质厚度变化大、金属密度对CMP的影响开始显著,这些因素叠加起来,让PEX的配置变得非常讲究。你用默认设置跑出来的结果,和实际硅片上的表现可能差出20%以上的延迟误差,对于高速接口或者高精度ADC这类对时序敏感的设计来说,这个误差足以让整个设计崩掉。
这篇文章面向的是正在用或即将用SMIC 130nm工艺做设计的工程师,尤其是那些第一次接触smic13mmf_1233_1P6M这个工艺库、对Cadence Virtuoso环境下的PEX流程还不够熟悉的朋友。我会从工艺库的结构讲起,把PEX的完整流程拆开揉碎,包括规则文件的选择、寄生提取的配置、结果验证的方法,以及我在实际项目中踩过的那些坑。不管你是刚入行的新手还是做了几年但一直用默认设置"蒙混过关"的老手,相信都能从中找到有用的东西。
2. smic13mmf_1233_1P6M工艺库的目录结构与关键文件
2.1 工艺库命名规则解读
先把这个工艺库的名字拆开看。smic13mmf是SMIC 130nm混合信号工艺的统称,后面的1233通常代表工艺版本号或者特定的器件选项组合,1P6M则明确告诉你这是1层多晶硅加6层金属的配置。别小看这个命名,它直接决定了你后面PEX要选哪套规则文件——1P6M和1P5M的金属层堆叠不同,寄生电容的计算模型也不一样,选错了规则文件,提取出来的参数就是错的。
在实际项目目录里,这个工艺库通常挂在PDK的路径下,结构大致是这样的:顶层目录下有techfile、assura或calibre规则目录、model目录、pcell目录等。其中和PEX直接相关的是calibre目录下的pex子目录,里面存放着.rules文件和相关的层映射文件。我见过不少新手拿到PDK后直接翻到calibre目录就开始跑LVS,结果PEX的时候找不到规则文件,又回头来翻目录,浪费不少时间。建议一开始就把目录结构摸清楚。
2.2 PEX规则文件的核心组成
在smic13mmf_1233_1P6M的Calibre PEX规则目录下,通常会有几个关键文件:主规则文件(一般叫pex.rules或者带工艺角后缀的变体)、层映射文件(layer.map)、以及可选的温度/电压角配置文件。主规则文件里定义了提取模式(RC、C、RCC等)、频率相关的参数、以及各个金属层和通孔的寄生模型参数。
这里有个容易忽略的点:SMIC 130nm的PEX规则文件通常提供多个版本,对应不同的提取精度和运行时间。比如有的规则文件是"fast"模式,只提取总电容不提取耦合电容;有的是"full"模式,提取完整的RC网络包括耦合效应。选哪个取决于你的设计类型——如果是纯数字逻辑,fast模式可能够用;如果是模拟电路尤其是高精度模拟,必须用full模式。我在一个电源管理芯片项目里,一开始为了省时间用了fast模式,结果后仿真的环路稳定性怎么调都不对,换成full模式后才发现是两条相邻走线之间的耦合电容导致了相位裕度下降。
2.3 工艺文件与PEX的关联
Virtuoso里的工艺文件(techfile)和PEX规则文件之间需要保持一致。具体来说,techfile里定义的金属层号、通孔类型、介质厚度等参数,必须和PEX规则文件里的定义匹配。如果PDK更新了techfile但PEX规则文件没同步更新,提取出来的结果可能完全不对。我建议在开始PEX之前,先确认一下PDK的版本号,然后检查calibre/pex目录下的规则文件日期是否和PDK发布说明一致。这个检查花不了两分钟,但能避免后面几个小时的无效调试。
3. 在Virtuoso中搭建PEX环境的完整步骤
3.1 前置检查:LVS必须先过
PEX的前提是LVS干净。我见过太多人LVS还有几个未匹配的器件就急着跑PEX,结果提取出来的网表和原理图对不上,后仿真根本没法做。所以在启动PEX之前,务必确认LVS报告里没有"unmatched"或者"mismatch"的条目。具体操作是:在Virtuoso的Layout界面打开Calibre LVS,跑完确认报告,确保所有器件和网络都正确匹配。
如果LVS有问题,先解决LVS。常见的问题包括:器件识别错误(比如把多个finger的MOS识别成了单个)、电源地网络短路、衬底接触缺失等。这些问题不解决,PEX就是白跑。
3.2 启动PEX:从Calibre界面到规则配置
在Virtuoso中启动PEX通常有两种方式:一种是通过Calibre的图形界面(calibre -gui),另一种是直接在终端用命令行跑。图形界面适合新手,因为可以直观地看到每一步的配置;命令行适合批量处理和脚本化。我这里以图形界面为主来讲解,因为大部分工程师还是习惯用GUI。
打开Calibre PEX界面后,需要配置几个关键项:输入文件(LVS输出的网表和layout的GDS)、规则文件(指向smic13mmf_1233_1P6M的pex.rules)、输出格式(通常选SPICE或SPECTRE)、以及提取选项(RC还是C-only)。这里特别注意输出格式要和你的仿真器匹配——如果你用Spectre做后仿,就选SPECTRE格式;如果用HSPICE,就选SPICE格式。选错了后面仿真器读不进去。
3.3 提取模式的选择:RC、C、RCC到底选哪个
这是PEX配置里最核心的一个决策。简单来说:
- C-only模式:只提取电容,忽略电阻。适用于低频、对时序不敏感的设计,或者作为快速评估用。
- RC模式:提取电阻和电容,但不提取耦合电容。适用于大多数数字电路和部分模拟电路。
- RCC模式:提取电阻、电容和耦合电容。这是最完整的模式,适用于高速、高精度模拟和混合信号设计。
对于SMIC 130nm的模拟设计,我的经验是:只要你的设计里有任何对时序或者匹配敏感的部分,直接上RCC模式。虽然运行时间会长一些(可能多出30%到50%),但结果的可信度完全不是一个级别。我曾经在一个ADC项目里对比过RC和RCC的结果,RC模式下INL仿真结果是0.5LSB,RCC模式下变成了1.2LSB——差距就是这么明显。
3.4 温度角和电压角的设置
PEX提取时的温度和电压条件需要和你的仿真条件一致。SMIC 130nm的规则文件通常支持多个温度角(比如-40°C、25°C、125°C),不同温度下金属电阻和介质电容都会变化。如果你在PEX时选了25°C,但后仿真跑的是125°C,那结果肯定对不上。
我的做法是:在PEX阶段就提取多个温度角的结果,生成多个网表,后仿真时根据实际工作条件选择对应的网表。虽然这样会增加提取时间,但避免了反复重跑PEX的麻烦。具体操作是在规则文件里指定温度列表,或者在Calibre界面里勾选多个温度选项。
4. PEX规则文件的关键参数与调优策略
4.1 金属层寄生模型的精度控制
SMIC 130nm的PEX规则文件里,每个金属层都有对应的寄生参数模型。这些模型通常基于foundry的测试结构数据拟合而来,精度在±10%以内。但规则文件里有一些参数可以调整提取的精度,比如ACCURACY参数、MIN_RES和MIN_CAP阈值等。
MIN_RES和MIN_CAP这两个阈值决定了多小的电阻和电容会被忽略。设得太大会漏掉重要的寄生参数,设得太小会让网表变得巨大无比、仿真跑不动。我的经验值是:对于130nm工艺,MIN_RES设在0.1欧姆左右,MIN_CAP设在0.01fF左右比较合适。当然具体值还要看你的设计规模和仿真资源。
4.2 耦合电容的提取与简化
RCC模式下,耦合电容的提取是最耗时的部分。规则文件里通常有选项控制耦合电容的提取范围——比如只提取相邻金属层之间的耦合,还是提取所有层之间的耦合。对于6层金属的工艺,如果全提,网表会非常庞大。
一个实用的策略是:先全提一遍,看看哪些耦合电容对电路性能影响最大,然后在后续迭代中适当简化那些影响小的耦合。Calibre PEX支持输出耦合电容的详细报告,你可以根据报告来决策。我在一个高速SerDes项目里就是这么做的,最终把网表大小压缩了40%,仿真速度提升了一倍多,而关键路径的延迟误差控制在2%以内。
4.3 通孔电阻的处理
130nm工艺的通孔电阻不能忽略。规则文件里通常会给每个通孔一个固定的电阻值,或者根据通孔的数量和尺寸来计算。对于大电流路径(比如电源和地),通孔电阻的累积效应可能很显著。我建议在PEX之后,专门检查一下电源和地网络上的通孔电阻,如果压降超过设计裕度的10%,就需要考虑增加通孔数量或者调整布局。
5. PEX结果验证与后仿真衔接
5.1 网表检查:从SPICE文件到仿真器
PEX跑完之后,你会得到一个SPICE或者SPECTRE格式的网表文件。这个文件通常很大,直接打开看是不现实的。我通常用几个方法来快速检查网表的质量:一是看文件大小和节点数,如果节点数比预期少很多,可能是提取模式选错了;二是用仿真器跑一个简单的DC分析,看看静态工作点是否和原理图仿真一致;三是检查关键节点的寄生电容值,和手工估算的对比一下。
5.2 后仿真设置:如何正确调用PEX网表
在Virtuoso里做后仿真,需要把PEX生成的网表替换掉原理图的网表。具体操作是:在ADE里设置Simulation -> Netlist -> Recreate,然后指定PEX网表的路径。或者用config视图来切换。这里有个细节:PEX网表里的器件命名可能和原理图不一样,需要确保仿真器的netlist选项正确映射了这些名称。
5.3 前仿后仿对比:定位差异来源
后仿结果和前仿有差异是正常的,但如果差异超过预期,就需要定位原因。常见的差异来源包括:寄生电容导致的延迟增加、耦合电容导致的串扰、通孔电阻导致的压降、以及提取模式选择不当导致的误差。我的做法是:先对比关键节点的波形,看差异出现在哪个时间点或者哪个信号上,然后反推到具体的寄生参数。
6. 实战中踩过的坑与排查链路
6.1 坑一:规则文件版本不匹配导致提取结果异常
有一次我拿到一个新的PDK版本,直接用了旧的PEX规则文件,结果提取出来的电容值比预期大了将近一倍。排查过程是这样的:先检查了LVS,确认没问题;然后检查了PEX的日志文件,发现里面有一堆warning说某些层找不到对应的模型;最后对比了新旧PDK的techfile,发现金属层的厚度参数变了,旧规则文件里的电容模型还是基于旧厚度算的。换成新规则文件后问题解决。
这个坑的教训是:每次更新PDK,务必同步更新PEX规则文件,并且跑一个简单的测试结构来验证提取结果是否合理。
6.2 坑二:耦合电容提取导致的网表爆炸
在一个大规模混合信号芯片里,我一开始用了RCC模式全提耦合电容,结果生成的网表有几十GB,仿真器直接内存溢出。后来调整了策略:对数字部分用RC模式,对模拟部分用RCC模式,并且设置了耦合电容的提取阈值,只提取大于0.1fF的耦合。这样网表大小降到了可接受的范围内,仿真也能跑起来了。
6.3 坑三:温度角设置错误导致后仿结果偏差
有一次后仿真的结果和测试芯片的实测数据差了将近30%,排查了很久才发现是PEX提取时用的温度角是25°C,但测试是在85°C下进行的。重新提取了85°C的网表后,仿真和实测的偏差缩小到了5%以内。这个坑提醒我:PEX的温度角一定要和实际工作条件一致,不能想当然。
6.4 坑四:通孔电阻被忽略导致电源网络压降过大
在一个大电流的电源管理芯片里,后仿真发现电源网络的压降比预期大了200mV。检查PEX网表发现,规则文件里通孔电阻的默认值是0.5欧姆,但实际工艺下大尺寸通孔的电阻应该更小。后来在规则文件里调整了通孔电阻的计算方式,问题解决。这个坑说明:不要盲目相信规则文件的默认值,关键参数要自己验证。
7. 提高PEX效率的实用技巧
7.1 分块提取策略
对于大规模设计,一次性提取整个芯片的寄生参数既耗时又耗资源。我的做法是分块提取:把芯片分成几个功能模块,分别提取PEX,然后在顶层做联合仿真。这样每个模块的提取时间短,而且可以并行处理。Calibre PEX支持通过-block选项来实现分块提取。
7.2 利用Calibre的增量提取功能
如果你的设计只是局部修改,不需要每次都全提。Calibre PEX支持增量提取(incremental extraction),只重新提取修改过的部分。这个功能在迭代阶段非常有用,能把提取时间从几小时缩短到几分钟。具体用法是在规则文件里启用INCREMENTAL选项,并指定上次提取的结果作为参考。
7.3 脚本化与自动化
如果你需要频繁跑PEX,建议把整个流程脚本化。用Shell或者Python写一个脚本,自动完成LVS检查、PEX提取、网表格式转换、后仿真设置等步骤。这样不仅节省时间,还能避免手动操作带来的错误。我在项目里维护了一套这样的脚本,新版本一出来,跑一个命令就能完成全部PEX流程。
8. 一些个人体会
PEX这个环节,说难不难,说简单也不简单。工具本身的操作可能几天就能学会,但真正做好PEX,需要对工艺有深入的理解,对设计有清晰的判断,还要有足够的耐心去调试和验证。我在刚开始做130nm设计的时候,也觉得PEX就是个流程化的东西,直到有一次流片回来发现芯片的时序完全不对,才意识到PEX配置的重要性。
现在我的习惯是:每个新项目开始的时候,先花半天时间把PEX的规则文件和配置仔细过一遍,确认提取模式、温度角、阈值参数都设置正确。然后在设计过程中,定期跑PEX做后仿真,而不是等到tapeout前才临时抱佛脚。这样虽然前期多花了一些时间,但后期省下的调试时间远远超过这个投入。
另外,SMIC 130nm的PEX规则文件虽然提供了默认配置,但默认配置不一定适合你的设计。花点时间研究规则文件里的参数,根据你的设计特点做调整,往往能显著提高提取结果的准确性。这个投入是值得的。