首页 / 资讯中心 / 文章详情

Calibre QRC寄生参数提取全攻略:从原理到signoff实战避坑

Calibre QRC寄生参数提取全攻略:从原理到signoff实战避坑 ★ FEATURED ARTICLE
每次后端项目做完PR手里攥着timing报告看着那串干净的setup slack心里总觉得不踏实——直到在跑完QRC提取寄生参数之后再把这条路径丢进PT里重新看一遍才发现那些藏在版图边缘的耦合电容和金属电阻原来一直在悄悄拖后腿。这就是寄生参数提取在数字后端流程里最日常的“抓鬼”现场也是今天这篇要聊透的核心内容Calibre QRC怎么用、为什么这么用、以及怎么避开那些只有实际跑过才知道的坑。QRCQuantitative Retention Check这里实际指Calibre的寄生提取引擎即Quantus RC Extraction Solution是Siemens EDA旗下Calibre平台里的全芯片寄生参数提取工具。它跟Calibre家族的LVS、DRC共用同一套版图数据库和层次化处理框架但做的事情完全不同DRC看的是几何规则、LVS看的是连接关系而QRC要回答的是“每条net上到底挂了多大的电阻、电容它们怎么影响信号速度”。这篇文章既写给刚入行、第一次接触PEX流程的初学者也适合想深入了解提取精度tuning、排查时序分析异常的老工程师尽可能把从零到一、从原理到坑位一次讲透。1. 内容整体设计与思路拆解1.1 寄生参数从哪来版图的物理现实与RC来源版图工序走完所有晶体管、金属连线、通孔都以多边形的形式画在GDS/OASIS文件里。理想情况下一条net从驱动端到负载端之间只有驱动管的输出电阻和负载管的输入电容时序计算干净利落。但现实中每一条信号线都铺在二氧化硅介质之上身边还并排着其他金属层走线于是两部分寄生就出现了。第一部分是金属线本身的电阻。铜或铝的方块电阻再小乘以走线长度再除以线宽还是会得到几十欧姆甚至几百欧姆的串联电阻。长距离跨模块走线或者层数切换频繁的信号电阻累积后对信号上升沿的延迟影响非常可观。第二部分是电容。电容分三类金属线对地衬底或电源平面的耦合电容称为area电容金属线侧面跟相邻线之间的侧壁耦合电容即sidewall电容还有上下层金属交叠区域产生的垂直耦合电容即coupling电容。现在的先进工艺中金属间距越缩越小侧壁耦合占比越来越高甚至在总电容里超过对地电容成为串扰和时序偏差的主要来源。QRC要做的事情就是根据版图的几何形状、交叠面积、间距、层间介质厚度、介电常数等物理参数用场求解器去计算每一条net的R和C然后输出成时序工具能识别的格式。不能把这项工作看得太“辅助”——在后仿真阶段它的影响远高于大多数人的预期。1.2 不提取寄生参数会发生什么从时序违例到芯片报废没有寄生参数的时序分析相当于在理想路况下测赛车加速。前端综合时用的互连模型常常是粗略的统计估算值而实际布局布线后线长、层叠、密度都变了。你不提取就永远不知道post-route之后你的关键路径真正长什么样。我见过一个实际案例某中端SoC项目的APR netlist做post-route时序验证时setup本来还有200ps余量等QRC提取完真实RC再跑PT余量变负了。最后定位到是一条跨了三个block的长信号线中途还穿过一个高密度的memory缝隙侧壁电容比预估大了近一倍。如果当时省掉QRC这一步直接让后端signoff版本流片这条路径在真实硅片上大概率因setup违例而功能异常。另外IR drop分析和信号完整性分析SI也都依赖寄生参数文件。没有准确的RC网表静态时序分析里没有delay计算基础动态功耗仿真也缺少基础数据。QRC在这里建立起了版图几何和电学行为之间的桥梁。1.3 QRC在整体后端流程中的位置标准数字后端流程串起来大致是RTL综合 → DFT插入 → 布局布线 → 时钟树综合 → 布线后优化post-route optimization→ 寄生参数提取PEX→ 签核级STA/功耗分析 → 物理验证DRC/LVS→ 签核。QRC的位置通常在最终DRC/LVS之后或同步进行输入是最终版图数据和LVS通过的netlist输出是给PrimeTime、Tempus等工具用的spef、dspf或spf格式文件。这里有一个容易被忽略的点QRC提取结果的精度和抽取模式会直接影响后续时序签核的乐观/悲观程度。选标准模式速度快但结果偏乐观选高精度模式结果更接近硅片实测但运行时间翻倍。要在两者之间做权衡就得先理解QRC的计算原理和模式差异。2. 核心细节解析与实操要点2.1 QRC与Calibre LVS/PEX的关系及文件基础在深入QRC命令之前需要先理解它在Calibre平台里的执行方式。很多工程师以为QRC是一套独立工具实际上它更准确地说是一个寄生提取的引擎运行在PEX流程之中。PEXParasitic Extraction整体流程中Calibre先做一遍LVS风格的层次化规则检查识别出器件MOS管、电容、电阻、二极管等和net的拓扑结构然后调用QRC引擎对互连结构做电阻电容求解。QRC最终输出两个层面的结果一个是被提取后带寄生参数的netlist有时候是带寄生元件的SPICE网表另一个是面向时序工具的寄生参数标准格式文件。要跑通这个流程准备的文件一般包括版图文件GDSII或OASIS格式LVS netlist用于连通性识别的原理图网表QRC rule file工艺厂提供的提取规则和LVS rule通常是.rule或.lvs文件配套但增加了QRC提取相关的配置cellmap文件做层次化提取时标识哪些cell需要flatten、哪些按hierarchical处理nxtgrd文件工艺的层叠和介电常数等物理描述文件QRC rule file和nxtgrd文件通常由foundry在PDK里直接提供工程师拿到的是可以运行的脚本框架但其中很多参数需要根据项目的实际需求做调整。2.2 场求解器原理与三种提取模式标准、高精度与ATE模式QRC引擎的计算精度主要取决于如何求解电容矩阵。底层采用三维场求解器对金属结构用有限元或边界元方法把导体表面划分成若干小单元通过求解麦克斯韦方程组来计算单位面积的电容密度再乘以实际面积得到总电容。QRC提供不同的精度等级和模式常见的有模式精度速度适用场景标准模式Standard中等快早期post-route时序评估、非关键路径验证高精度模式High Accuracy高慢签核级时序、关键路径或窄耦合结构验证ATE模式很高最慢对特定关键结构进行片级验证常用于做特征化高精度模式和标准模式差异的核心在于电容计算的精细度——高精度模式会把每根金属线在三维空间里对周围所有导体的全部耦合分量都算进去而标准模式则做了一些近似例如忽略远距离耦合、合并小电容速度更快但结果偏乐观。2.3 为什么选QRC与同类工具的特性对比行业中寄生提取工具不止QRC一款常见的有Synopsys的StarRC、Cadence的Quantus QRC这个命名有点绕——Calibre QRC是Siemens的Quantus QRC是Cadence的以及Mentor后并入Siemens的xRC。它们做的是同一件事但各有侧重。QRC的优势在于它跟Calibre的DRC/LVS共用版图读取引擎和层次化加速架构在同一条flow里PEX之后的LVS比对、DRC复查可以直接复用中间数据整体流程更流畅。Calibre平台支持的命令控制方式也更灵活——通过一个控制文件command file设置各种提取选项这和公司内部已有的Calibre脚本体系天然兼容。另外QRC支持交互式调试模式可以直接高亮版图中的某条net看它提取出来的RC网络结构对debug时序问题时帮助很大这一点在分析串扰或RC不匹配时尤其实用。3. 实操过程与核心环节实现3.1 文件准备rule、command、cellmap与nxtgrd的配置要点跑QRC提取之前先把环境变量和配置文件理清否则后面容易在莫名其妙的地方卡住。最基础的是选择正确的rule文件。foundry的PDK发布包里通常会区分提供Calibre LVS rule和Calibre xRC rule。以我们常用TSMC工艺为例PDK安装后在Calibre目录下能找到类似CalibreXRC或QRC字样命名的文件夹里面的rule文件后缀可能是.qxrc或需要通过include方式引入。QRC rule file里一般包含// 示例片段仅供参考实际配置因工艺和PDK版本而异 LAYOUT SYSTEM GDSII // ... // 指定nxtgrd文件位置 QRC FILE nxtgrd .../nxtgrd_file // 开启耦合电容提取 COUPLE TO GROUND YES COUPLE TO SIGNAL YES控制文件command file则需要明确指定一些关键选项例如// 寄生参数提取命令文件示例 CALIBRE QRC // 指定要提取的格式 QRC FORMAT SPEF // 指定顶层cell名 QRC TOPCELL SOC_TOP // 提取所有层 QRC ALL LAYERS // 忽略低于阈值的电容单位fF QRC MINC 0.01 // 输出文件路径 QRC OUTPUT .../top.spefcellmap文件在层次化提取中至关重要。之前遇到过一个项目某IP是第三方提供的hard macro内部逻辑不需要提取直接用behavior model做时序抽象即可。此时如果不配置cellmap把该IP设成“blackbox”QRC会在该IP内部一层一层提取结果既慢又浪费磁盘空间还可能因为没有对应的标准单元库而报错。nxtgrd文件描述的是工艺层叠信息。它的内容和DRC/lvs的layer mapping必须保持一致否则会出现“层信息和规则不匹配”的报错。通常PDK的nxtgrd文件和rule文件是配套发布的不建议混用不同版本的组合。3.2 核心控制参数详解QRC THRESHOLD、NETLIST_FORMAT、PEX REDUCE等QRC的命令和控制语句里有一批高频使用的参数直接影响提取结果的精度和大小。先说QRC THRESHOLD。这个参数设置的是一个电容/电阻的阈值凡是低于该值的寄生元件在输出时会被舍弃。设得太大会丢掉很多小耦合电容输出文件小、速度快但时序精度损失明显设得太小输出文件会爆炸时序工具读进去后内存占用和运行时间都会大增。这里建议根据signoff流程的实际经验来设定。像28nm及以下的工艺coupling电容的占比很高QRC THRESHOLD不建议超过0.005fF即5e-18F否则关键路径上一些微小但众多耦合电容累积起来的影响会被低估。而比较老的工艺或规模很大的芯片可以考虑适当放松到0.01fF左右。再说NETLIST_FORMAT。QRC可以输出SPF、DSPF、SPEF等格式各有适用场景。spf是最基础的格式dspf包含微分的RC网络信息spef是最常用于PrimeTime签核的格式它用标准化的关键字描述寄生网络。选择哪种更多取决于后续接哪个STA工具——如果接PrimeTime的话直接输出SPEF就行如果接Synopsys的StarRC flow则常常会生成dspf再做后续转换。还有一个和精度直接相关的参数是QRC PEX REDUCE。这个开关控制是否对提取后的RC网络做降阶简化。做reduction后网络节点数大幅减少时序仿真速度更快但会引入近似误差不做reduction结果精度最高但网表最庞大。签核阶段一般建议先不做reduction分析关键路径后再针对非关键路径或者大网表做reduction。3.3 控件文件与关键开关低阈值过滤与多层耦合提取的影响实际项目中还有一个经常被忽视的配置是QRC MINC和耦合提取开关。QRC MINC设置的是min coupling capacitance所有低于该值的耦合电容会被当作用不到的小量丢掉。这个值的设定直接影响signoff结果中的串扰分析精度。在先进工艺节点金属走线间距可以小到几十纳米。一条长的总线中每两根相邻线之间的耦合电容可能有几百aF即1e-16F虽然每条单独看都不大但几十条线累积起来对延迟的影响非常显著。QRC MINC一旦设得过大在总线上跑SI分析时就会漏掉很多coupling导致串扰噪声估计偏差。另一个相关开关是耦合电容提取范围// 同行同层耦合 COUPLE SAME LAYER // 相邻层耦合 COUPLE ADJACENT LAYER // 是否提取对地电容 COUPLE TO SUBSTRATE有些低功耗项目为了速度会在早期阶段只提取对地电容COUPLE TO SUBSTRATE YES而关闭上层耦合的详细计算这样跑出来的结果是理想化的。真正到了signoff之前还是要打开全部耦合提取否则串扰分析结果偏差巨大。3.4 完整运行流程从LVS到QRC提取的一体化命令解析把上面的配置组合起来一个典型的QRC提取运行命令大致如下# 设置PDK环境 setenv PDK_DIR /path/to/pdk setenv CALIBRE_HOME /path/to/calibre # 运行Calibre PEX内部调用QRC引擎 calibre -pex -spice tmpsvdb \ -hier \ -pathmap pathlist_file \ -input soc_top.gds \ -output top_lvs.spice \ -rulefile qrc_rule \ -commandfile qrc_command运行时拆解来看-pex -spice表示跑寄生提取并输出spice网表-hier表示进行层次化提取配合cellmap来管理哪些模块需要展平-pathmap用来映射数据路径-rulefile指向QRC rule-commandfile指向控制文件。跑完之后得到的输出文件包括带寄生参数的SPICE网表用于后续仿真SPEF格式的寄生参数文件用于PrimeTime提取报告文件包含提取的RC总数、文件大小、警告信息实际后仿验签流程中QRC跑完之后通常还会做一次LVS检查目的是确认提取过程没有改变netlist的逻辑连接关系。这一步常被新手忽略但它在signoff里是必须的——要证明你提取寄生参数后的网表仍然和原始版图在逻辑上完全等价。4. 常见问题与排查技巧实录4.1 问题速查从rule file报错到时序突变的原因剖析跑QRC时碰到的报错和异常我把这些年遇过的典型问题整理成一张速查表现象可能原因排查方向报错找不到nxtgrdQRC rule file中引用的路径和实际PDK路径不一致检查环境变量和rule文件中的路径配置提取完spef里没有电阻规则文件中金属电阻率参数缺失或设为零检查foundry PDK中QRC rule的电阻率定义提取结果时序比预想乐观很多threshold或Minc设置过大漏掉了很多coupling cap将threshold下探一档重新提取关键路径层次化提取时某个IP内部报错cellmap配置不全某些cell没有定义处理方式检查cellmap是否包含所有第三方hard macroLVS比对不过提取后的网表连接关系与原理图不一致检查门级网表是否包含dangling net或短路结构4.2 时序过悲观或过乐观reduction设置与提取精度的博弈实际工作中最头疼的不是跑不过而是跑出来的结果跟预期对不上。比如说QRC提取完送进PT跑timing发现critical path比之前pr阶段用理想RC跑出来的悲观很多——这时候不一定是提取出错反而是它更接近真实情况。但如果悲观到完全不合理比如非关键路径也全部违例就要考虑是不是reduction参数开得太大或者threshold设太低把过多微小电容也纳入了输出。这里有一个实操心法对比不同配置下的提取结果。我曾经同时跑标准模式和高精度模式分别生成两份spef在PT里对同一个critical path做对比分析。如果标准模式比高精度模式乐观超过5%说明你的设计本身对寄生参数高度敏感或者是标准模式的近似假设不适用于当前工艺节点。这时不能偷懒必须升级到高精度模式做最终签核。还有一个高频坑是SPEF文件里节点名不一致。版图netlist中内部节点可能被命名为n123这类格式但SPEF要求用*_123_这种标识QRC在转换时如果cellmap有问题可能导致节点名不匹配PT读进去就报错。这个问题排查起来很费时间建议在一开始跑完QRC后用一个小脚本检查SPEF中的node数量和顶层cell名是否和版图一致省得后面把PT结果打印出来时发现全是unknown。4.3 独家避坑技巧PDK版本匹配、浮空网表与微观电容调试这里整理几个常规文档里不太会写透但实际项目中特别有用的经验第一个是PDK版本的匹配问题。QRC rule file和nxtgrd文件不能随便用不同版本凑合。PDK更新之后nxtgrd中的介电常数和厚度参数都有调整甚至金属层stack都有变化。如果你用的rule是旧版、nxtgrd是新版工具往往不会直接报错但计算结果会跟silicon存在系统性偏差。这种偏差最难查因为它表现不是报错而是时序结果不对。强烈建议在项目开始时就把所用PDK版本号、QRC rule版本、nxtgrd版本记录在flow脚本的注释里。第二个是浮空net的处理。版图里存在一些没有实际驱动端的金属碎片或dangling netQRC默认会对它们做电容计算。这些浮空结构贡献的电容如果被计入网表会大大增加晶体管负载让时序看起来更差。但它们在真实硅片上确实存在只是不一定影响功能。遇到这种情况根据foundry的设计规则设置浮空net的处理方式有时候是在LVS阶段就将其归入“子电路内部ignore”避免它们干扰关键路径的时序分析。第三个是微观电容的调试技巧。当某条net提取结果异常偏大时可以用QRC的交互模式直接看这条net的详细RC网络。比如设置一个单net提取QRC NET clk QRC OUTPUT .../clk_only.spef这样生成的SPEF只有这条net的寄生参数可以清晰看到是哪个segment贡献了最多的耦合电容对定位问题非常有帮助。5. 实践经验与流程调优建议5.1 从“能跑”到“跑得好”QRC运行效率的三大优化维度QRC是全芯片提取中比较耗时的一步动辄跑上几个小时。在保证精度的前提下提升QRC运行效率通常有三个维度可以优化。第一个维度是层次化提取策略。默认情况下QRC会对整个设计做层次化提取利用重复单元的复用大幅减少计算量。但有些设计中标准单元库里的cell内部结构非常复杂如果全部展平计算量会爆炸。合理设置cellmap让标准单元库中的cell保持hierarchical只把顶层的互连做flatten处理可以有效平衡精度和速度。第二个维度是分区提取。全芯片一次跑完如果内存和时间不可控可以按物理区域或功能模块分成几块分别提取后再合并。但要注意边界处理——在分区边界处跨区互连需要特殊处理否则可能会产生重复提取或漏提取。很多项目组采取的做法是重叠分区两块区域重叠几条线宽的宽度然后再去重比较稳妥。第三个维度是提取精度分档。跑signoff时用高精度模式跑早期post-route评估时用标准模式。不要所有阶段都用最高精度去跑否则后端迭代周期会被拉得很长。把这个思路固化到flow脚本里做成一个参数开关前端工程师按需切换即可。5.2 与PrimeTime/RedHawk衔接要点spef导入与RC一致性检查QRC输出的SPEF文件最终是要交给PrimeTime或RedHawk这类签核工具使用的。衔接过程中的常见问题多半出在RC一致性检查上。PrimeTime读入spef后建议先用report_analysis_rc_network或类似命令检查net的RC负载量级是否符合预期。比如某条clock tree上的net总电阻不应超过几十欧姆如果报告显示几千欧姆说明SPEF节点合并出现问题。此外核签阶段往往会做多模式多角度的STAMMMC比如SS corner、FF corner不同corner下的寄生参数理论上是不同的。QRC提取时可以选择不同的process corner来生成对应的spef文件如果只提取了一种corner的RC然后在所有corner下复用时序分析的准确性就要打折扣。规范的signoff流程中至少要对slow和fast两个corner分别做一次QRC提取。RedHawk做IR drop分析时需要的则是带完整RC网络的SPEF或直接输出带电阻结构的网表QRC在输出时可以额外配置输出功耗分析格式两者共享同一套提取引擎但优化目标不同——spf和spef对电源网络的处理方法可能不一样这一点要认真读foundry给出的指引。6. 写在最后的个人体会聊了这么多配置、参数和流程最后想分享一点实际的感悟。寄生参数提取这件事看起来是后端流程里“跑一下命令”就完事的小步骤但它恰恰是最能体现后端工程师对工艺理解深度的地方。一堆多边形叠在一起会产生多少电容、哪些地方的寄生会影响关键路径、什么条件下可以放心降低提取精度——这些判断能力不是看看文档就能具备的必须靠一次一次流片、一次一次回填分析积累起来。我个人在实际操作中的体会是QRC提取最怕的不是报错而是“看起来正常、实际上已经偏了”。所以我现在做每个项目拿到QRC输出的第一件事不是直接丢给PT跑时序而是先打印几组关键net的RC汇总数据跟预期量级做个快速比对——这个习惯帮我提前拦下了好几次因为PDK文件配错而导致的“假时序通过”。也建议大家在搭建自己的flow时把这种“自我验证”的小步骤沉淀成脚本每次提取完自动检查节点数、总电容、最大电阻这几个指标设置合理的上下限阈值。这个习惯养成了你能在项目里少踩很多坑。
阅读完成 · 觉得有帮助?
咨询建站