尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Calibre与Virtuoso ADE联调实战:PEX后仿真的坑与最佳实践

Calibre与Virtuoso ADE联调实战:PEX后仿真的坑与最佳实践 Calibre与Virtuoso ADE联调实战PEX后仿真的坑与最佳实践做模拟IC设计的朋友应该都有过这种经历前仿真波形漂亮得能直接拿去发论文结果PEX后仿真一跑要么带宽掉了30%要么相位裕度直接变成负的严重的连功能都不对了。这时候你才意识到寄生参数不是“可选项”而是决定流片成败的生死线。我最早被PEX“教育”是在一个6位SAR ADC的项目上。前仿真的INL/DNL数据非常好结果版图完成后跑后仿真SFDR直接从70dB掉到50dB出头查了两天才定位到是采样电容的底板寄生电容引入了非线性。从那以后我养成了一个习惯——版图阶段就同步搭好PEX和后仿真的流程绝不让寄生提取变成最后一刻才想起来的事。这篇文章不聊教科书上那些“什么是PEX”的基础概念直接聚焦Calibre和Virtuoso ADE联调过程中真正容易踩的坑以及我反复验证过的最优操作路径。内容覆盖环境配置、规则文件选型、提取参数决定、常见报错排查、以及后仿真加速技巧希望能帮还在被各种“灵异现象”折磨的朋友省下几个通宵。1. 整体设计思路为什么PEX和后仿真要在版图阶段就介入1.1 后仿真不是“验证”是“设计修正”的一部分很多工程师把PEX和后仿真当成版图画完之后的验证步骤顺序上放在DRC/LVS之后、流片之前。这个思路本身没错但问题在于——如果你等版图完全画完才开始做后仿真一旦发现性能不达标改版图的成本是巨大的。改一条关键net的走线可能牵涉到整个布局的调整接着要重新DRC、重新LVS、重新PEX一个循环下来少说两三天。更合理的做法是把后仿真提前到版图的中期阶段。比如你画完了核心差分对和负载管的版图先局部提取寄生参数跑一个关键路径的AC或者瞬态仿真确认这一部分的寄生对性能的影响在可接受的范围内再继续画外围电路。这种“边画边验”的模式在高速ADC、高性能PLL、SerDes收发机这类对寄生极其敏感的设计中几乎是必须的。以我个人经验PEX和后仿真介入的最佳节点是主要器件放置完毕、关键信号通路已经完成布线的时候。这时候整理的寄生信息已经具备代表性同时还有足够的余地进行版图调整。1.2 Calibre PEX在联调流程中的角色定位在一个标准的模拟设计流程中Calibre PEX扮演的角色是把版图中的几何信息转换为电学信息版图上两条金属线靠得近会产生耦合电容长走线有电阻有源区会贡献结电容。Calibre把这些几何关系按照foundry提供的规则文件提取成寄生网表或calibre view然后在Virtuoso ADE中加载就能做带寄生的仿真。整套联调链路中Calibre PEX和Virtuoso ADE各自负责的任务边界很清晰Calibre PEX负责根据版图GDS和规则文件生成带寄生信息的网表或视图Virtuoso ADE负责调用这些结果结合测试bench执行前仿真、后仿真的对比分析问题往往出在两者“接口”的地方比如生成的文件格式不兼容、端口映射失败、寄生参数单位不匹配等等。所以理解整个数据流的方向和格式转换规则比单独掌握某个工具的操作要重要得多。1.3 联调方案的三种选择calibre view、DSPF网表、SPECTRE网表理论上Calibre PEX输出的格式有很多种但在Virtuoso ADE环境里做后仿真实际常用的就三种路径这里先做一个对比方案类别输出格式适用场景优点缺点calibre view方式基于PDK的view常规模拟/混合信号设计操作最直观直接在原理图中切换view做后仿需要PDK支持viewDefinition集成DSPF网表替换.dspf文件数字模块或大规模混合信号文件小适合层次化寄生需要手动配置替换流程稍繁琐网表级提取SPICE/SPECTRE网表全定制模拟电路可控性最强无法直接在原理图上反标查看单纯从联调的便捷性来说calibre view方式是我最推荐也是绝大多数项目里最常用的。它让你在ADE中直接把原理图的view从schematic切换到calibre就能看到带寄生信息的仿真结果节点电压、支路电流都能反标查看调试体验和普通前仿完全一致。2. 联调前的环境配置被忽视的“细节决定成败”2.1 Calibre与Virtuoso ADE的版本匹配与路径配置很多刚入行的同事遇到“PEX跑出来结果加载不了”的问题第一反应是规则文件和版图的问题但我接手过的咨询case里至少有三分之一其实是版本不匹配或环境变量没配置好。先说版本匹配。Calibre有独立的release版本Virtuoso也有自己的IC版本比如IC617、IC231。两者之间有官方验证过的兼容性矩阵。尤其要注意的坑是如果Calibre的版本过老可能无法正确解析新版Virtuoso生成的某些文件反过来Virtuoso的版本过新而Calibre太老同样会出现接口不兼容。实际操作中建议使用foundry PDK release notes里标注的、经过验证的工具版本组合。如果一个项目组同时维护多个PDK最好为每个PDK建立独立的工具版本环境避免“能跑不代表正确”的局面。环境变量方面要确保下面几个关键变量配置无误setenv MGC_HOME /path/to/calibre/installation setenv PATH ${MGC_HOME}/bin:${PATH} setenv CALIBRE_HOME ${MGC_HOME}在Virtuoso的.cdsinit文件中还需要确保Calibre菜单正确加载。一般来说PDK安装脚本会帮你完成这些事但如果是手动配置要确认load(calibre.skl)或类似路径已经执行。2.2 PDK中PEX rule deck的选择xRC还是LVS这个是关键Calibre PEX的核心输入之一就是rule deck也就是由foundry提供的、定义了层映射、寄生模型、提取精度等内容的规则文件。大家经常在项目目录里看到一堆不同后缀的rule文件最常见的是.lvs后缀和.xRC后缀。这个选择直接决定了PEX结果是否正确但我见过不止一个项目因为用错rule deck导致提取的电容值整个差了一个数量级。如果用的是LVS rule直接跑PEX很多foundry会在文件中包含寄生提取的语句但本质上这不是专门为提取准备的精度和模型完整度都不可控正确的做法是使用专门的xRC rule在Calibre的PEX界面中指定xRC类型的rule文件。同时不同金属层、不同器件类型的提取参数都写在rule的DEVICE语句和CAPACITANCE ORDER等部分foundry通常会在PDK中提供多个版本比如calibre_xRC_rules、calibre_xRC_3D等有的支持3D提取、有的只支持2.5D。2.3 提取类型的选择R、C、CC、RC到底怎么选在Calibre PEX的Setup页面中你会看到一个“Extraction Type”相关的设置一般提供C、CC、R、RC等选项。这条选项在界面里往往被快速掠过但它对仿真结果和仿真时间的影响极其重要。只提取C对地电容最粗糙也是仿真最快的方式适合早期版图评估只提取CC耦合电容适合评估差分信号之间的串扰提取RC把金属电阻也纳入考虑对IR drop和RC延迟敏感的设计必须用这个提取RCCC最完整也是最慢的方式。工程上的常用做法是早期后仿先用C-only模式跑快速定位功能性问题等版图接近收敛再用RCCC全量提取做最终确认。这样既保证了效率又不会漏掉关键的信号完整性问题。这里值得特别提醒一点在PEX选项里还有“Ground Nets”相关的设置。如果你指定的地线不完整提取出的寄生电容就会少算掉一大块很多“后仿和实测对不上”的案例就是在这里埋下的隐患。3. 核心实操从版图到后仿真的全流程拆解3.1 第一步DRC/LVS先过别拿“干净不过”的版图跑PEX很多新手会忽略一个硬性前提Calibre PEX虽然可以独立运行但它内部的运算逻辑严重依赖于版图的连通性信息而这个信息来自LVS抽取的结果。如果你的版图LVS都过不了或者有大量floating的netPEX提取出的寄生网表即使能生成可信度也几乎没有。我自己的流程优先级是跑DRC确认没有严重影响可靠性的违例跑LVS确认器件、连线、端口完全一致再进入PEX。如果LVS过不了先排查是不是有dangling net。这类net在PEX提取时可能被意外地赋予非常大的对地电容后仿真里你会看到某个节点电压被“神秘下拉”怎么查都查不出原因。3.2 第二步Calibre PEX核心参数设置与网表输出以最常见的calibre view输出方式为例操作路径是在Virtuoso的版图窗口中打开Calibre菜单选PEX → Run PEX。在PEX界面中需要重点设置的内容有如下几个第一Inputs页面中的规则文件路径。这里要注意使用xRC规则文件并指定好运行目录Run Directory。运行目录我习惯单独建一个pex_run文件夹不要和LVS的结果混在一起否则后续结果对比和清理都很混乱。第二Outputs页面中选择提取类型和输出格式。选择calibre view作为输出时需要指定一个库名和单元名。库名建议用带_pex后缀的新库单元名保持和原版图一致这样在ADE中替换view时非常直观。第三Netlist页面中设置端口提取方式。这里有两个常见选项gate-level还是transistor-level。绝大多数模拟设计应该选transistor-level这样提取出的网表保持晶体管级精度gate-level通常用于数字标准单元的时序提取。关于“calibre转换完的网表存在哪”这个新手高频问题我多说一句PEX运行完成后结果默认存放在你指定的Run Directory中通常包括cellname.pex.netlist、cellname.pex等文件。如果你选择输出calibre view还会有一个calibre.view文件生成在指定的库路径下。如果你在ADE里加载时找不到结果先检查这个运行目录下是否有这三个文件calibre view文件、网表文件、以及日志成功结束的标记。3.3 第三步在Virtuoso ADE中加载后仿真视图并完成设置版图PEX提取完成之后回到原理图界面。打开ADE L或者ADE XL/ADE Explorer在Setup → Environment中需要修改View List的优先级。默认情况下是schematic cmos sch这种顺序你要在列表里把calibre这个view插到最前面让仿真器优先读取带寄生信息的视图。我建议的配置示例View List: calibre schematic cmos sch Stop View: schematic这样设置后ADE在构建仿真网表时会自动选择calibre view如果你某个cell没有extract成功它兜底fallback到schematic view。接下来选择仿真类型。后仿真的测试bench最好独立建一个testbench cell和前仿真共用激励源和负载电路但将DUT改为calibre view。这样对比前后仿真数据时你的注意力可以全部放在寄生效应上不会被bench差异干扰。仿真器的选择上常规模拟设计用spectre即可spectre对calibre view解析得很好。如果你的设计有射频模块可能要关注spectre RF和PEX结合的专用设置这属于射频仿真的范畴这里先不展开。3.4 第四步后仿真结果对比与反标调试后仿真跑完最直接的一步就是把前后仿真的波形叠在一起看。在ADE中前仿结果和后仿结果可以存在同一个波形窗口里用不同的颜色区分。我个人习惯把前仿设为虚线后仿设为实线方便快速识别偏差。如果关键指标偏差在可接受范围内恭喜流程收工如果偏差过大就需要利用反标back-annotation功能定位问题。在calibre view模式下你可以在原理图中直接单击节点查看寄生信息。比如某个敏感节点连了多大电容、多大电阻一目了然。在此基础上你可以做“渐进式排查”把所有寄生电容拿掉、只保留电阻仿真看结果是否恢复或者只保留某一段特定net的寄生其他置零逐步缩小影响范围。这类操作在Calibre的寄生网表中手动改动比较复杂更高效的做法是在PEX阶段就分多次提取比如先只提取电容、不提取电阻对比不同寄生类型对性能的影响权重。3.5 补充说明PEX提取精度的影响因素PEX结果的精确度不仅取决于工具本身还取决于几个前置条件版图数据的完备性GDS必须包含所有metal filldummy信息。很多人不知道foundry在DRC阶段加的dummy metal在PEX提取时如果没有识别为金属图形耦合电容的结果会有很大偏差。所以PEX用的GDS必须是经过fill处理之后的最终版GDS这一点务必向你的foundry确认衬底耦合效应的考虑标准的2.5D提取工具默认不包含衬底网络。但如果设计中有大量数字开关噪声耦合到敏感模拟电路的情况可能需要单独做衬底提取这属于substrate noise analysis的范畴不是标准PEX能覆盖的软件层面可以用专用流程处理但成本较高温度与工艺角的影响PEX提取的寄生参数与温度和工艺有关。如果仿真中用了不同的工艺角注意PEX结果是否需要相应的缩放系数有些foundry在rule中内置了这些系数有些则需要手动设置。4. 联调常见问题与排查技巧实录4.1 问题一PEX运行成功后ADE加载不到calibre view这是联调中最常见的问题我几乎每个项目周期都会遇到一次。症状是PEX界面明明显示Run Completed但在ADE的View List里把calibre放最前仿真仍然跑的是schematic或者干脆报错说找不到calibre view。排查顺序第一步确认calibre view是否真的生成到了目标库。在Library Manager中看目标库对应的cell如果只有一个schematic view和layout view那说明view没有生成成功第二步检查PEX运行目录下的calibre.view文件内容确认里面的映射关系是否正确。这个文件本质是一个文本文件记录的是“cellname到PEX网表文件”的映射格式如下// Generated by Calibre PEX MY_LIB MY_CELL pex viewNamecalibre netlist/path/to/run_dir/MY_CELL.pex如果这个文件路径不对或者网表文件缺失在ADE里自然找不到calibre view。第三步确认目标库在lib.defs中的定义。如果库是远程NFS挂载或只读的可能无法写入新的view导致PEX结果“凭空消失”。4.2 问题二后仿真波形严重失真甚至放大到离谱出现这种“灵异现象”时先不要怀疑寄生提取的准确性而是检查测试bench的激励连接。最常见的原因是PEX提取后DUT的端口顺序或端口数量发生了变化。原来看起来正常的激励连接现在可能把一个高阻节点接到了电源上导致工作点完全漂移。排查方法是在ADE生成的仿真网表中检查DUT子电路的端口声明和bench中的连接是否一一对应。特别注意PEX网表中可能额外暴露了一些“内部”端口比如衬底节点。另外还有一种可能性是寄生电阻的单位没有正确匹配。Calibre提取的结果通常使用微米制单位如果PDK的模型卡片使用厘米制或毫米制就会出现数量级的偏差。这种问题很隐蔽因为波形形状可能看起来“合理”只是数值差很多。遇到这种情况检查规则文件中和单位相关的设置并确认提取出的寄生参数数值的量级是否符合该工艺的典型值。4.3 问题三PEX运行太慢怎么加速大规模版图做全量RCCC提取跑几个小时甚至一晚上都不罕见。要提升效率推荐几种实用手段分区提取如果设计是层次化架构可以只对关键的模拟模块做transistor-level提取数字部分用门级或简化网表处理最后在顶层拼接。Calibre支持这种层次化的提取策略需要在DDRDevice Description Rule和hierarchy选项中做相应配置并行计算Calibre PEX支持多线程在输入选项中找到和CPU相关的设置合理配置线程数可以显著缩短时间只提取关心的网络如果后仿真只是为了验证某个具体指标可以在PEX的Net Selection中只勾选需要关注的net减少计算规模。还有一个很容易忽略的加速技巧——把确定不需要寄生提取的器件从提取范围中“排除”掉。比如大面积的去耦电容版图寄生对它有影响但远不如对信号通路的影响重要在PEX规则中可以把它们标记为不提取大幅减少网表大小。4.4 常见问题速查表这里整理一张速查表方便各位在工作中快速定位问题故障现象可能原因排查与解决方法PEX成功但ADE找不到viewcalibre.view文件路径错误/库不可写检查运行目录与库权限后仿波形形态对但数值异常单位不匹配或端口顺序错误检查端口映射与参数量级某节点电压被异常拉低LVS未通过或dangling net先过LVS再重跑PEX后仿结果比前仿“还好”寄生网络未完整接地检查Ground Nets设置提取结果文件体积巨大RC提取了全部节点使用net selection缩小范围4.5 不太常见但要注意的坑有些问题出现的频率不高但一旦遇到就能耗掉半天时间。我印象最深的几个第一PEX的结果和仿真器版本之间的兼容性。Calibre在某个版本之后默认输出的网表格式中包含了新语法如果spectre版本太老仿真时会直接报语法错误。这类问题的典型特征是日志里抛出一堆看不懂的unknown keyword或者unable to parse。解决思路是升级spectre版本或者在PEX输出时选择兼容模式。第二层次化设计的View Name冲突。如果设计中同名子单元在原库和PEX库中都存在view mapping可能会混乱。需要确保PEX库的层次命名和原库严格一致不能有大小写差异。第三蒙特卡洛后仿真的坑。很多人会在PEX后仿真中直接跑蒙特卡洛但你得先确认PEX提取网表中的器件是否还保留mismatch模型。有些提取选项会把器件模型“平摊”掉导致蒙特卡洛结果没有统计意义。你需要确认PEX网表中器件是否还有相应的statistical model调用。5. 后仿真流程优化的进阶建议5.1 建立标准PEX配置脚本避免手点我强烈建议把PEX的配置固化为一个可复用的脚本或者一个runset文件而不是每次打开界面手动选。尤其是rule deck路径、输出库名、提取类型这些参数一旦稳定就别再动。具体做法是在Calibre PEX界面中完成一次正确配置后保存为命令文件command file后续跑新单元时只要在Inputs中更新GDS和顶层cellname其余设置保持不变。这样可以最大程度减少人为操作的失误概率。5.2 前仿真与后仿真的自动化对比当你的项目涉及大量不同corner、不同温度的后仿真时手动一个一个跑效率极低。建议利用ADE XL或Ocean脚本把前仿和后仿的批量跑分做进一个流程里一次性输出对比报告。Ocean脚本中可以通过envOption设置view list在脚本里对同一个测试同时跑schematic view和calibre view输出结果直接汇总到一个文本或者CSV文件中。这样工艺角、温度、前后仿的所有数据自动汇集完全省去了手动记录和整理的时间。5.3 寄生参数的影响分级哪些net必须精细提取有经验的版图工程师在画版图时心里就有一张“敏感网络清单”。这张清单决定了PEX之后需要重点关注的寄生参数位置。第一优先级射频输入输出端、振荡器节点、高阻偏置点、基准电压节点第二优先级差分信号对、时钟网络第三优先级电源地网络。对第一优先级的节点不仅要做PEX还建议在版图阶段就人工估计寄生电容的预算。比如一个高阻节点如果预期寄生电容是50fF而你设计时只剩了10fF的余量那后仿真跑出来不达标几乎是必然事件。这类问题与其等后仿真不如在版图阶段就规避。5.4 数据管理别让PEX结果污染主库最后分享一个工作习惯所有PEX结果一律放在单独的库和独立的运行目录中不要在目标设计库中直接写入calibre view。这样做有三个好处主库干净别人打开不会莫名其妙看到一堆calibre view删除或重新提取时不用去主库里清理残留view定义不同版本的PEX结果可以共存方便对比不同版图修改方案的寄生差异。具体落地时我习惯以cellname_date_version的格式命名PEX运行目录同时把每次的PEX配置命令文件也存一份到该目录下。这样任何时刻回看都能知道这次提取用的是什么规则、什么选项、提取了哪些网络。以上这些内容都是我在实际项目中反复趟过坑之后沉淀下来的经验。PEX和后仿真这个环节很多时候不是技术难度大而是环节多、版本杂、环境乱导致的问题多。把流程理顺把可能出问题的地方提前设好防线后仿真才能成为你真正值得信赖的设计验证工具而不是流片前最后一个不可控的噩梦。
返回列表