☰
Calibre PEX与Virtuoso ADE联调实战:模拟版图后仿真避坑指南
2026/10/5 1:37:41 网站建设 项目流程

跑完LVS、DRC通过,版图干干净净,心里那块石头还没落地——模拟/混合信号项目里还有一关叫PEX和后仿真。说实话,我在很多项目里见过这样的场景:版图从设计到收敛花了两三周,结果一到Calibre PEX和Virtuoso ADE联调,各种报错、结果对不上、仿真慢到怀疑人生,前后折腾掉的时间比画版图还多。更麻烦的是,很多问题看起来是"工具问题",实际上是我们对PEX的配置、输出文件机制、ADE调用方式理解不够透。

这篇文章就是围绕"Calibre与Virtuoso ADE联调"来写的,适合正在做模拟版图、或者从设计角度需要自己跑后仿的工程师。我会把PEX后仿真的完整链路拆开讲,包括Calibre PEX的规则配置、calibreView生成与调用、ADE仿真设置、常见报错排查,以及一些常规文档里不会写清楚的操作细节和避坑经验。内容偏实操,尽量做到你拿着就能照着操作。

1. PEX与后仿真:到底在做一件什么事

1.1 一个"接近真实"的网表是怎么来的

先聊一个最基础但很多人没真正想清楚的问题:PEX到底做了什么。

版图完成并通过LVS,只能说明一件事——你画出来版图里的晶体管、电阻、电容,和你设计原理图里的器件是"一一对应、连接一致"的。但版图里还有一样东西是原理图里不存在的,那就是寄生参数。金属走线本身有电阻,走线和走线之间、走线和衬底之间会形成电容,通孔过孔也有接触电阻。这些寄生参数在高频、高精度、低功耗电路里,会直接改变电路的增益、带宽、相位裕度、噪声和时序。

PEX做的事情,就是基于版图几何和工艺文件里的寄生模型参数,把这些不应该出现但又客观存在的"额外元件"提取出来,生成一份包含原电路器件+寄生器件的网表。这份网表再回到仿真器里跑出的结果,才是版的真实行为。

我用一个比较生活化的类比。版图形同城市道路规划图,LVS检查的是"这条路确实连到了那个路口",PEX则是拿着皮尺和传感器,把每条路多宽、多长、拐弯处有什么干扰、十字路口有多少"杂散电容"都量出来,然后建成一个带有各种"路况信息"的交通仿真模型。后仿真就是在这样一个带路况的模型上跑车,和之前理想化的"直线无阻碍"模型肯定不一样。

1.2 前后仿差异的核心来源

在实际工程项目里,前后仿差多少、差在哪里,主要来自这几类寄生:

第一类是寄生电容,这是绝大多数性能漂移的元凶。金属层间电容、同层金属的侧壁耦合电容、器件本身的边缘电容,在中高频电路里会形成额外的极点,把本来设计好的相位裕度吃掉,甚至让放大器振荡。包括节点电容增大后,电路的带宽会被压缩,settling time变长。

第二类是寄生电阻。长走线的电阻在低功耗设计里可能产生明显的IR drop,多晶电阻、Metal-insulator-Metal电容的上下极板连线电阻都会影响匹配精度。对于电流镜、差分对这类对匹配要求极高的电路,走线电阻会让两端工作点不一致,导致系统性失调。

第三类是衬底耦合和耦合噪声。对于混合信号芯片,数字开关噪声通过衬底和电源网络耦合到敏感模拟节点的现象,在后仿真里会体现得比较明显。很多时候前仿真的噪声仿真结果非常干净,后仿真一跑就出现杂散——这就是寄生网络的"功劳"。

所以我们可以这样理解:PEX不是"可做可不做"的验证流程,而是判断版图质量能不能满足设计指标的最后一关。如果你的设计在PEX后还能达到前仿真90%以上的性能,说明版图画得比较干净;如果掉得很厉害,就要回头修改版图或者调整电路结构。

2. Calibre PEX配置:一上来就翻车的高发区

2.1 前提:LVS必须过

先说一个硬性前提,很多人会忽略。PEX跑之前,LVS必须干净通过。不是"基本通过"、也不是"剩下几个别的问题先跑PEX看看",而是必须clean。因为PEX工具本质上是复用LVS那套器件识别和节点提取引擎,在版图里找器件、识别端口、网表对应关系都是靠LVS的rule来完成的。如果LVS还挂着ERC错误或者"unmatched instance"之类的告警,PEX提取出来的网表很可能少器件、多节点、端口对不上,你后仿真再努力都是白搭。

实际操作中我一般建议在跑PEX前,先把LVS的report打开确认一下:"Incorrect Nets"为0,"Unmatched Instances"为0,点开CDL网表对比日志确认所有器件类型都正确映射到工艺库。只有在这个基础上,PEX的结果才可信。

另外,注意PEX rule文件通常包含了LVS规则。很多工艺厂给的PEX目录下会提供不同版本的rule文件,比如xxx_35_pex_rc、xxx_35_pex_rcc、xxx_35_pex_c这类命名,分别对应不同的提取类型。你需要区分清楚。

2.2 关键配置项逐条拆解

一次标准的Calibre PEX运行,很多人直接在GUI里点来点去,但真正影响结果的其实是几个关键的配置项。我按实际使用频率排一下优先级。

第一个是PEX rule file的选择和确认。这个文件在Calibre界面里被称为"PEX Rules File",一般以.cal或.lvs后缀的形式提供,但打开文件头注释你会看到它对提取类型、提取精度、栅极漏电模型等做了定义。我这里强烈建议:拿到一个新工艺节点,先用fab提供的PEX demo跑一遍,确认生成的网表和参考脚本里的一致,再大规模开展。因为有些fab的rule文件会有隐藏的版本要求,比如必须使用特定版本的Calibre才能运行。

第二个是提取类型(Extraction Type)。选项通常是C、R、C+CC、R+C+CC(不同版本名称略有差异)。C代表只提耦合到地/衬底的电容,CC代表包含耦合电容(即线与线之间的互容),R代表电阻。做后仿真的时候,默认选R+C+CC,也就是最完整模式。但如果发现仿真太慢或者想快速定位问题,可以分别跑只提C和提R+C,做对比分析。这个技巧非常有用,后面在调试部分我专门讲。

第三个是输出格式(Format)。常见的有SPF、DSPF、SBPF、SPEF、CalibreView等。如果你需要在Virtuoso里做后仿真,最推荐的是CalibreView,它生成的是一个包含网表和符号视图的抽象,可以被ADE的config直接调用,省去手动写include文件、又对不上pin的麻烦。DSPF/SPF则适合用其他仿真流程,比如标准数字流程里需要反标寄生到PT或者PrimeTime,才用SPEF。

第四个是网络和器件配置。这里重点看Ground net name、Power net name、Merge选项、POWER/GROUND声明。版图里不同的人命名的电源地五花八门,比如VSS!、VSSA、GND、AVSS,如果你不在PEX里把这些网络归一化,提取出来的寄生电容在Ground定义上一定会乱,出现的现象就是后仿真的节点电压整体漂移、偏置点异常。我的习惯是在PEX界面里手动把ground和supply网络全部加上,包括模拟地、数字地、模拟电源、数字电源,等于是告诉工具"这些管子都参考哪些固定电位"。

第五个是输出路径与命名。这个很多人吃了大亏。Calibre PEX的输出文件会默认写到当前工作目录,而且如果同名文件已经存在,有时会直接覆盖而不给提示。我见过同事因为PEX输出文件被覆盖,后仿真调用了旧网表却没发现,浪费了大半天。后面专门讲这个坑。

2.3 CalibreView是什么、为什么联调首选

CalibreView本质上是Calibre PEX生成的一组"供Cadence Virtuoso仿真的视图文件"。它包含了一张寄生网表(以spectre或hspice格式)、device map、pin map,以及一个可以显示在Library Manager里的cell view。这样你不需要手动去include一个spice网表,再手工维护端口对应关系,而是直接在Config View里把某个cell的view从schematic切换成calibre,ADE就能自动load对应的寄生网表。

CalibreView的生成位置和库的路径有关。通常来说,在CIW或者Terminal里跑PEX,选择calibreView格式并指定输出库名称后,文件会被写到当前library的calibre目录下。不同版本的Cadence和Calibre处理略有差异,但核心机制是一致的:它会在Library Manager中创建一个以calibre命名的view,同时生成对应的.calibre.db、.pex等辅助文件。如果这些辅助文件被破坏或被移走,Library Manager里可以显示view但ADE调用时会报错。所以我的习惯是,PEX完成后先检查指定library路径下是否有完整的.calibre目录和.dbc文件,然后再往下一步走。

还有一点,CalibreView和底层PDK的版本、仿真器模型要匹配。如果PDK升级了而CalibreView还是旧版提取出来的,后仿真时器件参数可能对不上,出现"model not found"或者"parameter mismatch"这类奇怪的报错。

3. Virtuoso ADE联调:把寄生网络真正装进仿真器

3.1 config设置:从schematic到calibre的视图切换

Virtuoso ADE跑后仿真,最标准的做法是通过Config View来切换。进入方式是在Library Manager里选中你的测试bench顶层cell,右键打开Open,在Cell View选择config,或者通过ADE里的Setup->Design选择config文件。

Config文件里会列出你的设计里所有instance以及它们对应的view。前仿真时,所有模块的view都是schematic;要做后仿真时,需要把你关心的模块的view从schematic改成calibre(也就是PEX生成的CalibreView)。这里注意:不需要把所有模块都切换,只切换你真正想后仿的模块即可。比如你只想验证核心运放的后仿,那就在config里只改这个运放的view,其他模块维持schematic,仿真速度和资源占用会小很多。

改完之后,回到ADE界面,选择Setup->Environment,确认Simulator是spectre(或者你用的其他仿真器),然后在Model Libraries里加入PDK提供的模型文件。这里有个容易忽略的细节:有些工艺库的spectre模型和hspice模型是分开的,如果你在PEX的时候选择输出的是hspice格式网表,而ADE里用的是spectre仿真器,会出现语法不兼容、器件读不进去的报错。最省事的做法是PEX输出格式直接选spectre或calibreView(通常calibreView能适配spectre),保持全流程一致。

3.2 仿真设置:corner、仿真器与include

后仿真和前仿真的仿真设置整体上是一致的,无非是corner、温度、模型库这些参数。但有几个和PEX相关的设置需要留意。

第一个是仿真类型的选择。后仿真由于网表变庞大,如果还跑全corner、全工艺角的蒙特卡洛,时间会非常夸张。我的建议是初期快速验证时,只跑typcorner,而且先跑ac或tran里最关键的指标。等确认后仿行为符合预期,再扩充到ss/ff corner。

第二个是"include PEX网表"的方式。如果你走的是CalibreView流程,ADE会自动识别并include,不需要手动添加。但如果你拿到的是DSPF/SPF文件,需要手动在仿真设置里加入类似这样的行:

// 手动include寄生网表示例 simulator lang=spectre include "/path/to/your/output/design.pex.netlist"

注意DSPF文件里通常会有自己的子电路定义和你top cell的名字,如果include时顶层名字和你的testbench对不上,也会报"instance not found"或"unable to read"。

第三个是地网络的正确性。PEX提取出来的寄生电容很多都是对地/对衬底的。如果你的测试bench里没有把地网络名称和PEX里的ground网络对应起来,电容等于悬空或者接错,结果完全失真。所以我每次换新设计做后仿,都会先加一个简单的DC仿真,看关键节点电压是否正常,再跑AC/TRAN,相当于做一次自检。

3.3 后仿真慢到怀疑人生时怎么办

这是后仿真联调里最让人头疼的问题:同样的仿真,前仿几分钟跑完,后仿跑了两小时还在跑。有时候并不是工具坏了,而是你的PEX网表太大了。面对这种情况,我有几个比较成熟的处理思路。

第一,只提关键模块。整颗芯片后仿真在模拟设计里不现实,一般都是挑核心模块来做PEX。比如ADC设计里,重点看比较器、参考驱动、采样开关这些;运放设计里,重点看第一级、第二级和输出级。把要做PEX的模块单独提出来跑,其他部分用行为模型或理想源代替,时间能下降一个数量级。

第二,降低提取的层次化深度。在PEX选项里有一个"hierarchy preserve"或"flatten"相关的设置。如果选择完全flatten,底层所有器件都打平,网表会变得非常庞大;如果按层次保留,则可以把重复单元例化成同一个subckt,网表大小会显著下降。一般PEX工具默认会做层次保留,但如果你之前手动改成flatten了,建议改回来。

第三,简化仿真参数。后仿真验证阶段不需要一开始就用最高精度。可以适当放宽abstol、reltol,把tran的最大步长放宽一点,仿真时间能减少不少。但注意精度放宽不要影响到你关心的指标判断,比如相位裕度如果只差一两度,那还是建议用默认精度再确认一遍。

第四,善用仿真器的"检查点"和波形保存策略。Spectre可以设置只保存指定节点的波形,而不是默认保存所有节点。后仿真网表节点成千上万,全部保存波形文件会巨大无比、拖慢仿真。用ADE里的Outputs->To Be Plotted选择你要看的节点,然后设置保存类型为selected,你会立刻感觉到差别。

4. 后仿真翻车实录:常见报错与排查速查

4.1 "Calibre转换完的输出存在哪":输出文件和路径的坑

在社区里经常看到有人问"Calibre转换完的书存在哪"——这里的"书"大概率是语音输入,实际问的是"输出存在哪"。这个问题其实很实在。PEX跑完后,可以在运行目录下找到一系列输出文件。用CalibreView模式,生成的视图会写到你指定的library路径;用DSPF/SPF模式,会生成类似mychip.pex.netlist、mychip.pex这样的文本网表文件。

我建议你在跑PEX之前,就建立一套自己的输出目录管理规范。比如:

# 目录结构示例 /work/project/xxx_pex/ ├── run_20240520_rcc/ │ ├── mychip.pex.netlist │ ├── mychip.pex │ └── mychip.calibre.db └── run_20240520_c/ ├── mychip.pex.netlist └── mychip.pex

每次跑PEX都新建一个带时间戳或工艺标签的目录,避免同名覆盖。这个习惯帮我在项目后期省下了大量"咦这个网表是哪一版"的时间。

还需要注意一个细节:CalibreView输出到Cadence library之后,如果你用的是分布式计算或者远程存储,路径里有中文/空格,可能会导致ADE读取失败。解决方法很简单,全部用英文路径,不要有空格或特殊字符。

4.2 典型报错速查表

我把自己多年来遇到的高频报错整理成了下面这个速查表,方便大家直接对照:

报错现象常见原因解决方法
找不到PEX rule文件或版本不匹配路径写错或Calibre版本过旧检查rule文件路径,更新Calibre版本或改用fab指定的版本
PEX输出网表里没有寄生参数提取类型选成了LVS而不是PEX确认在Calibre界面选择了PEX/Parasitic Extraction模式,不是只跑LVS
后仿真报"instance not found"config里view切换错误,或网表顶层名和bench不匹配打开config确认模块的view是calibre,检查PEX网表顶部subckt名称
节点电压完全不对、VSS悬空PEX里ground net未设定,或testbench地网络名称不一致在PEX配置里明确所有ground/supply net名称,并检查testbench命名
仿真卡住或内存耗尽PEX网表太大、保存了全部节点波形层次保持提取、只输出关键节点波形、增加机器内存
读DSPF文件报语法错误DSPF格式与仿真器不兼容优先用calibreView,或使用spectre兼容的DSPF选项
前仿和后仿差异大到无法接受实际是提取范围或提取类型设错分别跑只提C、只提R、R+C+CC,定位主导因素
模拟库版本更新后calibreView报错CalibreView由旧版PDK提取,与新模型不兼容确保PEX使用的rule和模型来自同一个PDK版本

排查的时候,我的习惯是先看PEX日志里报告的提取结果概览,比如"Extracted nets: xxx, Devices: xxx, Parasitic caps: xxx, Parasitic resistors: xxx"。如果寄生电容数量只有几个,那基本可以断定PEX配置有问题,不是仿真问题。

4.3 让结果可靠的前提:反标检查与前后仿对比

很多工程师后仿真跑完,看到波形觉得"和前仿长得差不多"就交差了。但后仿真的核心目的是判断"差异在不在容忍范围内",所以我建议至少要完成下面几个检查,再下结论。

第一个是检查PEX的报告。提取完成后,Calibre会生成一个report文件,里面包含了寄生电容总值、电阻总值、网络数量、器件数量等统计信息。你要关注的是:寄生参数的数量级是否符合工艺和版图的预期。比如一个几十微米长的敏感走线,提取出来的电阻应该是在几十到几百欧姆级别;如果提取出来是兆欧级,说明可能在poly层还是contact层上出了问题。

第二个是前后仿真对比要有"方向性"的判断。后仿真由于寄生电阻电容的存在,带宽一般会比前仿低,主极点会向低频移动,功耗可能略有增加,相位裕度可能变小。如果你的后仿真结果显示带宽反而比前仿还高,那一定要怀疑是PEX流程出了问题,可以是提取范围不全、漏了某些网络,或者是testbench在调用网表时用错了corner。

第三个是定位差异来源的Debug方法。当后仿真结果异常,不要一头扎进去调电路,先用"变量控制法"确认寄生类型。具体做法是:跑一版纯C提取(只提寄生电容,不提电阻),再跑一版纯R提取,对比这两版和后仿最终结果。这样你就能知道性能下降是电容主导还是电阻主导。比如传输延迟变差,如果是电容主导,说明走线太长、层间电容太大,需要缩短关键路径或拉开间距;如果是电阻主导,说明走线太细、通孔不够,需要加宽金属、多加via。看清楚了方向,再回版图去改,会高效得多。

另外还有一个容易被忽略的点:后仿真结束后,记得检查一下ADE的仿真日志里是否有"warning: floating node"之类的告警。很多时候PEX网表里某些节点在提取后被标记为floating,如果不处理,它可能以未定义的状态参与仿真,导致结果完全不可信。

5. 联调实战中的几条"野路子"经验

5.1 版本兼容性管理是最大的隐藏坑

在联调过程中,我吃过很多次版本不匹配的亏。Calibre和Virtuoso ADE之间的接口,是通过Cadence的cds_pex接口或PEX API来实现的。如果Calibre的版本升级了,而Virtuoso版本还是两年前的,往往会出现"PEX跑完但ADE集成菜单消失"、"GUI点Run PEX没反应"这类诡异问题。

我的建议是:项目立项时,就把PDK、Calibre、Virtuoso这三者的版本固定下来,写进项目环境配置文档,不要频繁升级。如果确实需要升级,先拿一个已经流片验证过的设计跑一遍全流程,确认PEX和后仿真结果与旧版本一致,再全面切换。

5.2 善用"快速PEX"做版图迭代

模拟版图最痛苦的阶段是DRC/LVS反复修改期间。这时候如果每改一版版图就从零跑一次完整R+C+CC提取,时间成本太高。我的经验是,在版图没收敛之前,先跑一版只提C的PEX,用calibreView快速联调,目的是看性能趋势是否改善,而不是追求绝对精度。等版图基本稳定,LVS完全干净之后,再跑完整的R+C+CC提取做最终验证。这个策略能让你在同样的时间里多迭代好几轮版图。

5.3 把后仿真变成"流程化"操作

联调做到后期,很多时候已经不是技术问题,而是流程问题。我自己的习惯是建立一份checklist,每次PEX+后仿真都按这个清单走:

  • LVS是否clean,report审查过
  • PEX输出格式是calibreView,库路径正确
  • PEX配置文件里ground/supply网络都声明了
  • config中目标模块的view已切换为calibre
  • 仿真模型库已更新为与PEX一致
  • 先跑DC自检,再跑AC/TRAN
  • 对比PEX report中的寄生总量,确认数量级合理
  • 记录前后仿关键指标差异
  • 输出文件和日志归档到带时间戳的目录

这个清单看起来简单,但它能保证你不在"明明配置错了还在分析电路"的状态里浪费几天时间。很多后仿真的"翻车",其实都是流程疏忽导致的。

6. 写在最后的一点体会

做了这么多年模拟版图与设计的协同,我的体会是PEX和后仿真这件事,真正难的不是某一个工具怎么用,而是整个流程里环环相扣的细节。一个pin没对上、一个ground网络没声明、一个输出路径覆盖了,都会让你在后仿真阶段花费数倍的时间去排查。与其到时候盲人摸象,不如一开始就把PEX配置、输出管理、ADE联调这些基础环节标准化。你对流程越敬畏,后仿真阶段就越省心。希望这篇基于大量实战经验整理的笔记,能帮你少踩几个我当年踩过的坑。

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

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

立即咨询