资讯动态

Calibre PEX部分提参实战:HCELL与XCELL配置详解

发布时间:2026/9/28 16:11:09 来源:尧图企业网站定制
1. 从一次真实的提参翻车说起做版图后仿真的朋友大概率都经历过这样的场景LVS 过了PEX 跑完满心欢喜打开波形一看关键节点的寄生电容比预期大了三倍或者某个模块的延迟怎么都对不上前仿结果。回头查了半天最后发现是提参时 HCELL 没配对把不该提取的单元内部结构也提了一遍或者 XCELL 设错了把本该展开的器件当成了黑盒处理。Calibre 的寄生参数提取PEX是连接版图与后仿真的关键一环而“部分提参”又是 PEX 里最容易出问题的操作。所谓部分提参就是只对设计中某些关键模块或网络进行寄生提取其余部分保持理想连接或简化处理。这样做的好处很直接全芯片提参会生成巨大的网表仿真时间动辄数小时甚至数天而部分提参能把仿真规模压缩到可接受的范围内同时保证关键路径的精度。但问题也恰恰出在这里。哪些单元该展开、哪些该保持层次化、哪些网络需要提取、哪些可以忽略这些决策直接决定了后仿结果的可信度。我见过太多项目因为提参设置不当导致后仿通过但流片失败的案例。这篇文章就把我在实际项目中积累的 Calibre 部分提参经验整理出来从 HCELL/XCELL 的配置逻辑到 PEX 选项的取舍再到常见报错的排查思路尽量把每个决策背后的“为什么”讲清楚。无论你是刚接触 PEX 的新手还是已经跑过几个项目的老手应该都能从中找到一些可以直接复用的方法。2. 部分提参到底在解决什么问题2.1 全芯片提参的代价与部分提参的适用场景先算一笔账。一个中等规模的 SoC 设计晶体管数量在千万级全芯片 PEX 提取出的寄生网表节点数可能达到数亿。用这样的网表跑 SPICE 仿真即使只跑一条关键路径时间也可能以天为单位。更现实的问题是很多仿真器根本吃不下这么大的网表内存直接爆掉。部分提参的核心思路是“抓大放小”。把设计分成两类区域一类是对时序、噪声、功耗敏感的关键模块比如 PLL、高速接口、模拟前端、时钟树关键分支另一类是对寄生不敏感或可以容忍一定误差的数字逻辑、低速控制通路。对前者做精细提取对后者做简化甚至理想化处理。具体来说部分提参通常有以下几种实现方式按模块提参只对指定的 HCELL 做内部寄生提取其余单元保持黑盒或理想连接。按网络提参只提取指定 net 或 net 组的寄生其余网络用理想导线代替。按层次提参在层次化设计中只展开到某一层级更深层级保持简化。混合模式结合上述几种方式对不同模块采用不同的提取策略。这几种方式在 Calibre PEX 中都有对应的选项支持但配置逻辑和适用场景差别很大。选错了方式轻则仿真结果偏差重则网表结构错误导致仿真不收敛。2.2 HCELL 与 XCELL 的本质区别很多人分不清 HCELL 和 XCELL觉得都是“指定单元”随便填一个能跑就行。这是大错特错。两者的作用机制完全不同用错了会直接改变提参结果的物理意义。HCELL的全称是 Hierarchy Cell它的作用是告诉 Calibre这个单元我要保留其内部层次结构并且对其内部进行寄生提取。换句话说HCELL 里的单元会被“展开”Calibre 会进入这个单元内部提取其中每个器件的寄生参数同时保留单元内部的层次关系。HCELL 通常用于那些需要精确后仿的关键模块比如你设计了一个自定义的运放希望后仿时能看到内部每个节点的寄生电容那就把这个运放设为 HCELL。XCELL的全称是 eXclude Cell它的作用是告诉 Calibre这个单元我要排除在提取之外把它当成一个黑盒处理。Calibre 不会进入这个单元内部也不会提取其内部任何寄生参数只把它当作一个理想的器件或子电路。XCELL 通常用于那些已经单独提参并验证过的 IP 模块或者标准单元库中的基本单元——你不需要对每个反相器都做内部寄生提取那样网表会爆炸。用一个生活化的类比HCELL 就像是你把一台机器拆开仔细检查每个零件的磨损情况XCELL 就像是你把这台机器当成一个整体只关心它的输入输出特性不关心内部结构。两者没有优劣之分关键看你的仿真目标是什么。注意HCELL 和 XCELL 不能对同一个单元同时设置。如果一个单元既在 HCELL 列表又在 XCELL 列表Calibre 的行为是未定义的不同版本可能表现不同务必避免这种冲突。2.3 提参精度与仿真速度的平衡点部分提参的本质是在精度和速度之间找平衡。这个平衡点怎么定取决于你的设计类型和仿真目标。对于纯数字设计时序验证通常用 STA 工具就够了PEX 提参主要用于关键路径的 SPICE 仿真验证。这种情况下只需要对关键路径上的单元和网络做精细提取其余部分可以大幅简化。我通常的做法是把关键路径经过的模块设为 HCELL标准单元全部设为 XCELL只提取互连线的寄生。对于混合信号设计模拟部分的寄生直接影响增益、带宽、噪声等指标必须精细提取数字部分如果和模拟部分有耦合耦合路径上的网络也需要提取。这时候 HCELL 的范围要适当扩大但也不能无限扩大否则仿真时间不可控。对于射频设计寄生电感、电容对匹配网络的影响极大往往需要全芯片提取部分提参的适用空间较小。但如果只是验证某个 LNA 或混频器的性能也可以只对该模块做精细提取其余部分用理想连接。这里有一个经验公式可以参考如果部分提参后的网表节点数超过仿真器内存容量的 60%就应该进一步缩小 HCELL 范围或增加 XCELL。仿真时间方面节点数每增加一倍SPICE 仿真时间大约增加 2 到 3 倍所以控制节点数是控制仿真时间的核心。3. HCELL 与 XCELL 的配置实战3.1 HCELL 列表的确定原则与操作步骤确定 HCELL 列表是部分提参最关键的一步。我的原则是只把“寄生敏感且需要内部节点信息”的单元放进 HCELL。具体判断标准有三条第一该单元内部是否有对寄生敏感的模拟电路或高速电路。比如差分对、电流镜、采样保持电路这些结构的性能直接受内部节点寄生电容影响必须展开提取。第二该单元是否在关键路径上且路径延迟对寄生敏感。比如时钟树上的缓冲器链如果只关心总延迟可以把整个链设为 XCELL 用理想延迟代替但如果要分析时钟偏斜和抖动就需要展开提取。第三该单元是否是自定义设计没有经过独立提参验证。标准单元库通常已经做过特征化不需要重复提取但你自己画的模拟模块没有特征化数据必须通过 PEX 获取寄生信息。操作上HCELL 列表通常写在一个文本文件里每行一个单元名。Calibre PEX 通过-hcell选项指定该文件。文件格式很简单my_opamp pll_core serdes_tx clk_buf_chain但有几个细节容易踩坑。单元名必须和版图网表中的单元名完全一致大小写敏感。如果版图网表里是my_opamp你写成My_OpampCalibre 会找不到这个单元直接忽略而且默认不报错。我建议在生成 HCELL 列表后用脚本从版图网表中提取所有单元名做一次交叉比对确保没有拼写错误。另一个细节是 HCELL 的层次路径。如果单元在版图中是多层例化的比如top/u1/u2/my_opamp你只写my_opamp通常也能匹配但如果有多个同名单元在不同路径下Calibre 会全部匹配。如果只想匹配特定路径下的单元需要写完整路径。这个行为在不同版本的 Calibre 中可能略有差异建议用-hcell配合-hcellpath选项明确指定。3.2 XCELL 的典型应用与配置陷阱XCELL 的使用比 HCELL 更频繁因为大部分标准单元和已验证 IP 都应该被排除在提取之外。典型场景包括标准单元库中的所有基本单元反相器、与非门、触发器等已经独立提参并生成寄生网表的模拟 IP存储器编译器生成的 SRAM 模块工艺厂提供的 IO 单元和 ESD 保护单元XCELL 列表的格式和 HCELL 类似也是每行一个单元名通过-xcell选项指定。但这里有一个非常容易犯的错误把需要提取的单元误设为 XCELL。我遇到过这样一个案例一个项目为了加快仿真速度把某个时钟分频模块设为了 XCELL。结果后仿时发现分频器的输出相位噪声比前仿差了 20dB查了一周才发现是这个模块的内部寄生被完全忽略了。分频器里的触发器对寄生电容很敏感尤其是时钟路径上的寄生直接影响分频器的相位噪声。这个模块本应该设为 HCELL而不是 XCELL。所以 XCELL 的确定原则和 HCELL 正好相反只把“寄生不敏感或已有寄生模型”的单元放进 XCELL。如果你不确定一个单元是否敏感宁可先设为 HCELL 跑一次对比结果后再决定是否改为 XCELL。还有一个陷阱是 XCELL 的嵌套问题。如果一个单元被设为 XCELL它内部的所有子单元也自动被排除不管这些子单元是否在 HCELL 列表中。Calibre 不会进入 XCELL 内部自然也不会检查内部的 HCELL 设置。所以如果你的 HCELL 列表里有一个单元但它的父单元在 XCELL 列表里这个 HCELL 设置是无效的。这个逻辑关系必须在配置时理清楚。3.3 HCELL 与 XCELL 的优先级与冲突处理当 HCELL 和 XCELL 列表存在重叠或嵌套关系时Calibre 的处理规则如下如果同一个单元同时出现在两个列表中Calibre 的行为取决于版本通常 XCELL 优先即该单元被排除。但这不是可靠的行为必须避免。如果 HCELL 单元是 XCELL 单元的子单元HCELL 设置无效因为 Calibre 不会进入 XCELL 内部。如果 XCELL 单元是 HCELL 单元的子单元XCELL 设置有效Calibre 在展开 HCELL 时会跳过 XCELL 子单元。为了避免混乱我建议在配置完成后做一次“干跑”dry run用 Calibre 的-pexhier选项生成层次报告检查每个单元的实际处理方式。报告会列出哪些单元被展开、哪些被排除、哪些被忽略。这个报告是验证配置正确性的最直接手段。另外HCELL 和 XCELL 列表中的单元名支持通配符。比如std_*可以匹配所有以std_开头的单元。这个功能在排除整个标准单元库时非常方便但也要小心不要误匹配。比如*_buf会匹配所有以_buf结尾的单元包括你自定义的模拟缓冲器。使用通配符时务必用干跑报告确认匹配结果。4. PEX 提参选项的取舍与参数计算4.1 提取模式的选择R、C、RC、RCCCalibre PEX 支持多种提取模式从最简单的只提电阻R到最完整的电阻电容耦合电容RCC。选择哪种模式取决于你的仿真需求和工艺节点。R 模式只提取电阻忽略电容。适用于电源网络 IR drop 分析或者互连电阻主导的场合。C 模式只提取电容忽略电阻。适用于短互连线的时序分析或者电容耦合主导的场合。RC 模式提取电阻和电容忽略耦合电容。这是最常用的模式适用于大多数数字和混合信号仿真。RCC 模式提取电阻、电容和耦合电容。适用于串扰分析、噪声分析等需要耦合信息的场合。选择模式时一个常见的误区是“越完整越好”。RCC 模式确实信息最全但网表规模也最大仿真时间最长。对于大多数时序验证RC 模式已经足够。只有当你需要分析串扰对时序的影响或者分析衬底噪声耦合时才需要 RCC 模式。工艺节点也是一个重要因素。在 28nm 及以上节点互连电容以平板电容为主耦合电容占比相对较小RC 模式通常够用。在 16nm 及以下节点耦合电容占比显著增加线间耦合可能占总电容的 50% 以上这时候 RCC 模式就很有必要了。4.2 寄生电阻与电容的精度控制参数Calibre PEX 提供了一系列参数来控制提取精度这些参数直接影响网表规模和仿真结果。以下是最常用的几个参数作用典型值影响-cap电容提取精度0.01fF值越小精度越高网表越大-res电阻提取精度0.1ohm值越小精度越高网表越大-minres最小电阻阈值0.01ohm低于此值的电阻被忽略-mincap最小电容阈值0.001fF低于此值的电容被忽略-reduce网表简化级别0-3级别越高简化越多精度越低这些参数的设置需要根据设计特点来定。对于模拟模块我通常把-cap设为 0.001fF-res设为 0.01ohm确保小寄生也能被捕捉。对于数字模块可以放宽到-cap 0.01fF-res 0.1ohm减少网表规模。-reduce参数特别值得说一下。它控制 Calibre 对提取出的寄生网表做多少简化。级别 0 不做简化级别 3 做最大简化。简化的方式包括合并串联电阻、忽略小电容、消除冗余节点等。对于关键模拟模块建议用级别 0 或 1对于数字模块可以用级别 2 或 3。这里有一个实际的计算例子。假设一个模拟模块有 1000 个节点每个节点平均有 5 个寄生电容每个电容平均 0.01fF。如果-mincap设为 0.001fF所有电容都被保留网表中有 5000 个电容。如果-mincap设为 0.01fF只有大于等于 0.01fF 的电容被保留假设有 30% 的电容被过滤掉网表中剩下 3500 个电容。仿真时间大约减少 30%。但被过滤掉的电容中可能包含对电路性能有影响的关键寄生所以这个阈值不能随意设大。4.3 网表输出格式与仿真器接口Calibre PEX 支持多种网表输出格式包括 SPICE、SPECTRE、ELDO 等。选择哪种格式取决于你用的仿真器。输出格式通过-format选项指定。一个容易被忽略的细节是网表中的节点命名规则。Calibre 默认使用版图网表中的节点名但这些名字可能包含特殊字符导致仿真器解析错误。可以用-netname选项指定命名规则比如用_替换特殊字符。另一个细节是寄生网表的层次结构。如果 HCELL 设置正确输出的网表会保留层次结构每个 HCELL 对应一个子电路。这样在仿真时你可以方便地替换或修改某个子电路的寄生参数。如果 HCELL 设置不当所有寄生都平铺在顶层网表会变得难以维护。还有一点Calibre PEX 生成的网表通常包含一个subckt定义把原始电路和寄生网络连接起来。这个subckt的端口顺序必须和仿真器中的符号一致否则会出现连接错误。建议在生成网表后用仿真器的网表检查工具做一次语法和连接性检查。5. 常见报错与排查技巧实录5.1 HCELL 未生效的典型原因HCELL 未生效是部分提参中最常见的问题。表现是你明明把某个模块设为了 HCELL但生成的网表里这个模块还是被平铺了或者内部节点没有被提取。原因通常有以下几种单元名不匹配。这是最常见的原因。版图网表中的单元名可能和你以为的不一样比如大小写差异、前后缀差异、层次分隔符差异。排查方法是从版图网表中提取所有单元名和 HCELL 列表做 diff。Calibre 的干跑报告也会列出哪些 HCELL 被匹配、哪些没被匹配。HCELL 被 XCELL 覆盖。如果同一个单元同时在两个列表中或者 HCELL 的父单元在 XCELL 列表中HCELL 就不会生效。排查方法是检查两个列表的交叉情况以及层次关系。HCELL 文件路径错误。-hcell选项指定的文件路径不对或者文件格式不对比如多了空行、注释符号不对。Calibre 对 HCELL 文件的格式要求比较严格每行一个单元名不能有多余的空格或制表符。PEX 选项冲突。某些 PEX 选项会覆盖 HCELL 设置比如-flatten选项会强制平铺所有层次忽略 HCELL 列表。排查方法是检查 PEX 命令行中是否有冲突选项。5.2 提参结果与预期不符的调试思路提参结果与预期不符可能表现为寄生电容偏大、偏小或者某些节点没有寄生。调试思路如下第一步确认提取模式是否正确。如果你需要耦合电容但用了 RC 模式耦合电容就不会出现在网表中。检查-cap和-res选项的设置。第二步确认 HCELL 和 XCELL 设置是否符合预期。用干跑报告检查每个单元的处理方式。如果某个应该展开的单元被排除了检查它是否在 XCELL 列表中或者它的父单元是否在 XCELL 列表中。第三步确认精度参数是否合适。如果-mincap设得太大小电容会被过滤掉。如果-reduce级别太高寄生网络会被过度简化。尝试放宽这些参数看结果是否改善。第四步确认版图网表和原理图网表是否一致。LVS 通过不代表两者完全一致可能存在器件参数差异或连接差异。用 LVS 报告做一次详细比对。第五步确认工艺文件是否正确。PEX 使用的工艺文件如.rules文件必须和版图工艺一致。用错工艺文件会导致寄生参数完全错误。5.3 网表规模过大导致仿真不收敛的解决网表规模过大不仅拖慢仿真速度还可能导致仿真不收敛。解决思路有两个方向减少节点数和改善网表质量。减少节点数的方法包括提高-mincap和-minres阈值过滤掉小寄生提高-reduce级别简化寄生网络缩小 HCELL 范围把更多单元设为 XCELL使用-netreduce选项对特定网络做简化。改善网表质量的方法包括检查是否有悬空节点或重复节点这些会导致矩阵奇异检查是否有零值电阻或电容这些会导致数值问题检查是否有不合理的寄生值比如负电容或超大电阻这些通常是提取错误。另外仿真器的选项也会影响收敛性。比如 SPECTRE 的gmin和reltol参数适当放宽可以提高收敛性但会牺牲一些精度。这个取舍需要根据仿真目标来定。5.4 常见问题速查表问题现象可能原因排查方法解决方案HCELL 未生效单元名不匹配干跑报告比对修正单元名HCELL 未生效被 XCELL 覆盖检查列表交叉移除冲突项寄生电容偏大提取模式过全检查 -cap 选项改用 RC 模式寄生电容偏小精度阈值过大检查 -mincap降低阈值网表节点过多HCELL 范围过大检查 HCELL 列表缩小范围仿真不收敛悬空节点网表检查清理悬空节点仿真不收敛零值器件网表检查移除零值器件后仿与前仿偏差大XCELL 误设检查 XCELL 列表改为 HCELL6. 一些实战中攒下来的经验6.1 提参前的检查清单在跑 PEX 之前我习惯做一次检查清单避免低级错误浪费时间和计算资源LVS 是否干净通过没有 warning 和 error版图网表和原理图网表的单元名是否一致HCELL 和 XCELL 列表是否经过交叉比对没有冲突和遗漏PEX 选项是否和仿真目标匹配提取模式、精度参数是否合适工艺文件是否和版图工艺一致输出网表格式是否和仿真器兼容磁盘空间是否足够PEX 中间文件可能很大这个清单看起来简单但每次都能帮我省下至少一轮返工。6.2 层次化提参的复用策略对于有多个模块的项目层次化提参可以复用。比如你有一个模拟 IP已经在某个项目中做过精细提参并验证通过那么在下一个项目中如果这个 IP 的版图没有变化可以直接复用之前的寄生网表把它设为 XCELL不需要重新提取。复用的前提是工艺相同、版图相同、提参设置相同。如果工艺变了或者版图有修改就必须重新提取。复用时建议把之前的寄生网表作为子电路导入和新的顶层网表连接。这样既保证了精度又节省了提取时间。6.3 版本差异带来的坑Calibre 的版本更新比较频繁不同版本之间 PEX 的行为可能有差异。我遇到过几次因为版本升级导致提参结果变化的情况一次是 HCELL 的匹配规则变了之前能匹配的单元名在新版本中匹配不上了。一次是-reduce的默认值变了导致网表规模突然增大。还有一次是输出网表的格式变了仿真器解析出错。所以在升级 Calibre 版本后建议用之前的一个已知正确的案例做一次回归测试对比提参结果和仿真结果。如果发现差异先查版本更新日志看是否有相关变更。如果没有再逐步排查配置。6.4 提参结果的后处理技巧Calibre PEX 生成的网表通常需要一些后处理才能用于仿真。常见的后处理包括替换理想器件模型为实际模型添加仿真激励和测试电路修改节点名以匹配仿真器的命名规则合并或拆分寄生网络以优化仿真速度这些后处理可以用脚本自动化。我通常用 Python 写一个后处理脚本读取 Calibre 输出的网表做必要的修改然后输出仿真器可读的格式。这个脚本可以复用节省大量手动修改的时间。脚本的核心逻辑包括解析网表结构识别子电路定义和实例化修改节点名和器件参数输出目标格式。用正则表达式处理网表文本是最简单的方法但对于复杂的网表建议用专门的网表解析库比如 PySpice 或类似工具。6.5 一个容易被忽略的细节温度与电压条件PEX 提取的寄生参数通常是在标称温度和电压下得到的。但实际电路工作在不同温度和电压下寄生参数会变化。比如电阻随温度升高而增大电容随电压变化而变化。对于高精度仿真需要考虑这些变化。Calibre PEX 支持多条件提取可以生成不同温度和电压下的寄生网表。在仿真时根据实际工作条件选择合适的网表。这个功能在模拟电路仿真中特别有用但很多人不知道或者懒得用。如果不想做多条件提取至少要在仿真时用仿真器的温度选项设置正确的工作温度让仿真器根据模型参数计算寄生变化。虽然不如多条件提取精确但比用标称值仿真要靠谱得多。7. 写在最后Calibre 部分提参这件事说到底是一个“取舍”的功夫。取什么、舍什么取决于你对电路的理解和对仿真目标的把握。HCELL 和 XCELL 的配置没有标准答案每个项目、每个模块都可能不同。但只要你理解了它们背后的逻辑——HCELL 是“我要看内部”XCELL 是“我不看内部”——剩下的就是根据具体需求做判断。我个人的习惯是宁可先多提一些跑一次对比再决定哪些可以简化。多花一两个小时做对比比后仿通过但流片失败要划算得多。另外干跑报告和网表检查是两把利器每次提参后都值得花几分钟看一眼很多问题在仿真之前就能发现。最后分享一个小技巧把每次项目的 HCELL/XCELL 配置和对应的 PEX 选项保存下来形成一个配置库。下一个项目遇到类似模块时可以直接参考或复用。这个习惯坚持几年你会发现自己踩的坑越来越少提参的一次成功率越来越高。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑