ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从LVS到Calibre PEX:生成可靠HSPICE寄生网表的全流程与避坑指南

从LVS到Calibre PEX:生成可靠HSPICE寄生网表的全流程与避坑指南 做了这么多年模拟版图验证我越来越确认一件事LVS通过只是起点真正决定后仿能不能贴近实测的是PEX这一步做得够不够细。很多工程师把Calibre PEX当成“LVS之后点一下按钮的事”结果提取出来的HSPICE网表要么端口错位要么寄生参数数量离谱要么直接仿真不收敛。这篇文章就围绕“从LVS验证到Calibre PEX提取HSPICE网表”的完整流程把我实际跑通过的一套方法、配置项背后的原因、以及踩过的坑逐一拆开讲。内容偏实战适合刚接触全定制版图后仿的工程师也适合已经被PEX结果折磨过、想系统梳理一遍的同行。1. 为什么PEX之前必须先啃下LVS这根硬骨头1.1 LVS不是“过一遍”这么简单每次听到有人说“LVS过了可以提PEX了”我都会多问一句LVS的报错是不是真的清零了有没有仔细看过ERC报告金属密度相关的软连接查过没有这些不是例行公事的追问而是因为这直接关系到PEX结果能不能用。从工具原理上讲Calibre PEX并不是独立于LVS的另一种验证它是在LVS已经建立的器件识别和网络连接关系之上再做寄生参数提取。也就是说PEX要先复用LVS阶段的rule deck去“认识”版图里的每一个MOS管、电阻、电容、二极管识别出它们各自的端口和连接线然后再基于这些连接关系计算寄生R和C。如果LVS这一步就存在短路、开路或者器件识别错误PEX提取出来的HSPICE网表会把同样的问题原封不动地带进去。更麻烦的是LVS报错往往是单一的、明确的而寄生提取之后错误的影响会散布到几十万个寄生器件里到时候想定位都无从下手。我见过一个真实案例一个运算放大器的版图LVS报了一个“missing contact”的警告当时觉得只是两个衬底接触孔没画够不影响连接就忽略了。结果PEX提取出HSPICE网表之后衬底网络被分成了两个独立的子网络等效于在衬底上串联了一个很大的电阻。后仿的共模抑制比和实测差了将近20个dB排查了两天才回到layout上补了接触孔。这个教训之后我在团队里定了条规矩PEX之前必须输出一份干净的LVS报告短路和开路项完全清零ERC的高危项逐一确认否则不允许启动提取。1.2 LVS阶段就要盯住的几个检查项既然LVS是PEX的地基那LVS阶段就不能只盯着“clean”这个结果还需要针对未来提取做几个前置检查。第一是电源地网络的识别。很多工艺库里VDD和VSS是靠text label或pin来定义的LVS阶段就要确认电源网络没有被不同名字的label截断。比如顶层用了VDD底层单元里却用VCCLVS有时会因为电源网络同名而自动合并有时则会当成两个网络。这个差异会直接影响PEX阶段的衬底节点和电源网络合并规则导致提取出来的HSPICE网表里电源地网络命名混乱。第二是器件的“识别模式”。Calibre LVS对MOS管的识别有“recognize gates”这类选项通常设置为All。如果设置不对有些器件会被LVS当成普通连线或子电路的一部分到了PEX阶段就不会生成对应的寄生模型。特别要注意那些宽长比很大的功率管、叉指型电容和ESD器件它们在PEX阶段的模型选取本身就比较特殊LVS识别阶段就不能落下。第三是把ERC报告单独调出来看一遍。PEX阶段工具要根据“网络类型”来判断哪些线是信号线、哪些是电源地线、哪些需要计算结电容和衬底寄生。ERC里的floating node、substrate pickup缺失这类问题如果不解决PEX要么提取出大量虚假寄生要么把本该相连的衬底节点断开。总之LVS阶段的每一项检查都是在为PEX减少一个隐藏的变量。2. 开工前先摸清PEX的“粮草弹药”输入文件与目录规划2.1 Rule文件从哪来怎么选Calibre PEX的rule deck通常由Foundry和PDK一同提供不同工艺节点、不同PDK版本对应的rule文件可能差别很大。常见的有两类一类是“calibre.rule”这种单一的综合性文件里面同时包含LVS和PEX的配置另一类是拆分式的结构主文件通过INCLUDE的方式引用若干个组件文件比如device rule、extraction rule、layer mapping文件。打开主文件后通常能看到类似“PEX”“XRC”的注释区域这些就是寄生提取的入口配置。前期最容易踩的坑是拿错版本。曾经有段时间我们同时维护TSMC 28nm和GF 22nm两个项目两个PDK的目录结构几乎一样rule文件名也都是calibre.rule。有同事在一个项目里跑了另一个项目的rule文件Calibre并不总是直接报错而是会在LVS报告里出现一堆“layer not found”的警告然后提取结果里少了半个芯片的金属电容。所以拿到rule文件之后第一件事不是急着跑而是打开文件头确认工艺名称、版本号和PDK发布日期并且和当前电路设计用的工艺文件canonical name对一遍。2.2 目录结构和文件命名如何规划对PEX这种动辄处理上百兆GDS的任务来说运行目录的规划直接影响排查问题的效率。我的习惯是这样的project_name/ ├── layout_data/ # GDS或OASIS文件 ├── source_netlist/ # 从原理图导出的CDL/HSPICE网表 ├── rule_deck/ # PDK提供的rule文件 ├── run_pex/ # Calibre PEX运行目录 │ ├── input/ # 输入数据副本 │ ├── output/ # 提取结果 │ └── log/ # log与report └── simulation/ # 后仿HSPICE文件PEX运行目录不要放在只读路径下因为Calibre PEX会在运行过程中生成大量中间文件包括临时layout、device list、报告文件等。如果权限不足工具会卡在初始化阶段报一些和磁盘空间相关的模糊错误。文件命名也要统一。我习惯把输出网表命名为“topcell_name.pex.netlist”而不是用默认的“calibre.pex.netlist”。因为一个项目迭代十几轮之后默认名会让你分不清哪份是最新结果。还有一个小技巧每次跑PEX之前把输入GDS的修改时间记录到log文件里如果后来发现提取结果和版图对不上第一件事就是校验这份时间戳和file checksum很多“诡异问题”其实都是跑了旧版GDS。2.3 源网表与版图的对应关系检查PEX阶段需要一份source netlist作为参考这套网表通常是从原理图工具里导出的CDL或HSPICE格式网表。如果你们公司用Cadence环境就导CDL如果用OrCAD这些工具也完全可以导出HSPICE格式的网表给Calibre当作source。需要注意的不是格式本身而是这份网表必须和版图是同一个设计版本。Calibre在PEX阶段会用source netlist来对照识别器件的端口和连接如果source网表里某个管的宽长比和版图提取出的器件不一致工具会提示“device mismatch”。很多工程师会直接忽略这类报告但它的真正含义是你提出的寄生网表里面那个器件的模型参数可能来自错误的source instance。后仿时可能表现正常也可能直接让带宽、增益这些指标跑偏。所以在跑PEX之前至少要确认source netlist完成了一次成功的LVS运行。换句话说版图和source网表在LVS阶段已经匹配干净PEX阶段才会把source网表只当作器件元数据的参照而不是重新做一次对错判断。这一步看似多余实际能省掉后面数不清的调试时间。3. Calibre PEX配置项逐项拆解从Input到Output3.1 Inputs页签GDS和Rule文件的关联逻辑Calibre PEX的界面通常由Calibre Interactive调起流程里选择“PEX”之后首先看到的就是输入配置页。这里要填三样东西Layout版图数据库、Rule Filerule deck、Source Netlist源网表。很多人以为把文件路径填对就行其实关键在于理解它们之间的关联逻辑。Layout文件的选择相对直接GDS或OASIS都可以。但要注意一点如果版图数据里有多个cellCalibre会读取rule deck里定义的“LAYOUT PRIMARY”作为顶层cell名。这个名称必须和GDS里的顶层单元完全一致大小写都不能错。如果顶层cell名配不上工具会在报告里报“cell not defined”但位置隐藏在几十行日志中间不仔细看很容易漏掉。Rule File的填写直接决定PEX的“视角”。Calibre PEX与LVS共用大部分rule deck但通过“PEX”这个运行模式工具会启用rule文件里寄生提取相关的部分。有些PDK还会单独提供名为“calibre.pex.rule”的衍生文件里面已经预设了提取所需的层次定义和精度选项。这里我的建议是优先使用PDK为PEX模式专门提供的文件而不是自己手工修改LVS主文件。因为寄生提取对层次定义极其敏感一个布尔层写错提取出的电容值可能整体差一个数量级。Source Netlist的选择则需要考虑提取层次。如果源网表是顶层带子电路的层次化结构PEX提取时可以选择“hierarchical mode”来保持这种层次关系让后仿调试更容易对应回原理图如果源网表是拍平后的flat网表那提取也通常会以flat方式输出。总之这三者的搭配要服从同一个目标让最终输出的HSPICE网表和原理图的对应关系最清晰。3.2 Extraction Type怎么选C、RC还是RC、RCC这是整个PEX配置里最需要动脑的一个选项。Calibre PEX默认给出的Extraction Type大致有C、CC、R、RC、RC、RCC这么几种选错了要么丢信息要么网表爆炸式膨胀。先说说我实际使用中总结的一张对照表提取类型提取内容适用场景C提取所有对地电容和耦合电容不提取电阻数字电路时序估算、模拟电路前期预仿真R只提取寄生电阻不提取电容电源网络IR drop分析、互连线电阻评估RC同时提取寄生电阻和电容包含耦合电容模拟/混合信号后仿的标准选择RC提取寄生电阻和接地电容不提取线间耦合电容希望兼顾效率与精度的折中方案RCC提取寄生电阻和全部耦合电容精度最高高频模拟电路、敏感节点分析CC只提取耦合电容不提取其他串扰分析、噪声耦合分析实际项目里怎么选我的经验是常规模拟后仿比如运放、LDO、基准源直接选RC这个模式已经能把绝大多数影响包进去网表规模在可接受范围。如果是高速接口电路、RF模块对耦合路径特别敏感就选RCC虽然提取时间可能翻倍但能在后仿阶段抓住串扰引起的波形毛刺。而RC这个选项常常被忽略它比RC少了线间耦合电容但对地电容和电阻仍然保留。如果你只是验证一个模块的静态工作点或者做电源网络检查RC是个效率很高的选择。3.3 Netlist Format选择与端口处理策略在Outputs配置里把网表格式选定为HSPICE这是本文的核心动作。IPCInternational Parasitic Capacitance时代大家都在用SPICE格式但模拟设计里HSPICE网表因为语法清晰、兼容性好、运行稳定依然是后仿的主力格式。选定HSPICE之后还会遇到几个细节要不要勾选。首要的是“Include parasitic RC”之类的导出选项这个要保证是开启的否则会得到一份“提取了等于没提取”的网表。其次是对端口的处理PEX输出网表的端口顺序默认情况下会和source netlist保持一致但万一不一致后仿时端口接错后果是灾难性的。Calibre提供了端口顺序调整的选项我建议PEX跑完后立刻打开输出的网表核对“.subckt top out in vdd vss”这一行和源网表顺序是否一致。端口命名也是一个坑。版图里的电源地label如果同时存在“VDD”和“VSS”提取后的HSPICE网表里这些端口名会被当作全局节点处理。如果在HSPICE仿真时没有正确声明全局节点工具可能会把VDD和VSS当成普通信号线。处理办法是在PEX设置里把电源地网络显式指定为“Power nets”和“Ground nets”让工具在网表中使用类似“gnd!”这样的特殊保留名这样后仿时就不会因为大小写或通配符问题导致电源网络悬空。3.4 电源地网络的识别与处理电源地网络的识别是模拟PEX里最考验经验的一环。Calibre PEX需要知道版图里哪些网络是电源、哪些是地、哪些是衬底连接才能在提取时决定是否把某些节点合并到全局网络上。在PEX配置界面里一般会有个Power/Ground的表格你需要手动或从source网表里导入电源地清单。我的习惯是把所有电源网络名和地网络名列全包括模拟电源AVDD、数字电源DVDD、模拟地AGND、数字地DGND以及衬底节点SUB。不要只填主电源地的简称“VDD/VSS”因为PEX提取时如果遇到一个叫“AVDD”的网络而你没有把它标记为电源网络那么它上面的去耦电容特性就会被当成信号耦合路径来提取结果和真实情况完全不同。衬底节点尤其要留意。大多数CMOS工艺的PEX rule会自动把衬底连接提取为一个名为“SUB”“BULK”或“VSS”的全局节点。如果源网表里没有显式的衬底端口PEX输出的网表里可能会把衬底节点以“:SUB”这样的形式挂在每个器件附近。后仿时如果忘了声明这个节点的全局属性仿真器会把所有体效应电容都当成悬空节点来处理直流工作点很快就崩了。这块配置我每次都会单独检查一遍避免“最不起眼的选项带来最致命的问题”。4. HSPICE网表输出的核心参数格式、精度与层次4.1 HSPICE网表的两种呈现方式PEX输出HSPICE网表有两种常见形态层次化hierarchical和扁平化flat。前者保留原始设计的子电路层次比如顶层调用子模块子模块内部再调用单元后者把所有层次打平一个超大子电路里直接放几百个器件和几万条寄生RC。从我自己的后仿习惯来看小模块和中等规模模块直接用扁平化输出最省心。仿真时不用处理复杂的模块连接关系HSPICE跑起来也快。但如果是整个ADC、SerDes TX一类的大模块扁平化网表动辄几十万行仿真器读入都费劲这时候层次化提取的优势就体现出来了——可以分模块后仿也可以把内部节点单独拉出来观测。选择层次化还是扁平化不完全是你说了算还要看PEX rule deck是否支持。如果rule设计时没有保证层次电路边界完整强行开层次化提取会在子电路边界引入大量伪寄生。我的建议是先按rule文件默认模式跑一次看输出网表规模再用“H-cells/N-cells”这类配置调整关键模块的层次而不是一开始就盲目追求扁平化或层次化。4.2 精度控制电阻、电容的阶数与归并PEX提取出来的寄生电阻和电容数量极其庞大如果全部保留网表体积会大到一个不合理的程度。Calibre提供了精度控制的开关核心就是归并merge和舍入round逻辑。拿电容来说PEX会把版图上每一对小面积金属图形之间的电容都算一遍然后通过设置最小电容阈值和合并容差来减少网表规模。如果最小电容阈值设成0.1fF那么所有小于这个值的寄生电容会被直接丢弃如果设成1fF网表会小一个数量级但后仿时高频路径的寄生丢失也会变得明显。我对精度不高的模块比如LDO的反馈网络可以接受0.5fF的阈值对高速比较器或RF前端会把这个阈值压到0.01fF左右宁肯网表大一点也不希望敏感节点的耦合信息丢失。电阻的归并逻辑类似。长走线会被分段提取每一段之间可能串联出很多小电阻。Calibre的“RESISTOR ORDER”参数决定了相邻电阻归并的容忍度数值越大合并越激进网表越小。但如果在某个敏感的高精度电阻分压网络中过度归并后仿的直流增益就会偏。这个参数我通常是逐个case去试先跑一版默认值再看关键节点的RC网络形态是否合理。4.3 LVS选项对PEX结果的影响很多人以为PEX是单独跑的一套流程和LVS选项完全无关。其实Calibre在PEX模式下同样会执行一遍LVS逻辑只是把对比后的匹配关系作为提取的起点。所以在PEX设置里有些“LVS”相关的选项也需要同步检查。比如“Check wafer-level vs. package-level”或“Layout vs. Schematic”的某些过滤开关如果LVS阶段开了某些特定过滤规则PEX阶段最好保持一致否则可能出现器件匹配关系不一致的情况。再比如说“density rule”检查选项如果LVS时开启了金属密度检查而未通过PEX时工具会自动跳过部分区域的提取导致那一块区域的寄生参数整体缺失。还有一个容易被忽略的选项是“recognize gates”在PEX阶段的对应设置。某些特殊结构比如两端反并联的二极管、多指MOS管LVS阶段识别成何种器件PEX阶段就会以该器件的CDF参数作为提取基准。如果两边设置不一致就会出现MOS管参数对不上、子电路端口错乱这类问题。所以我通常会在PEX运行前把LVS和PEX两边的“device generation”设置尽量保持一致差别越少越不容易在后期出幺蛾子。5. 提取完成后怎么判断这份HSPICE网表是“能用”的5.1 输出文件都有哪些应该检查什么PEX跑完运行目录里会多出一堆文件很多人只看一眼有没有生成网表就收工了。这里建议把几份关键输出都看一遍.pex.netlist最终HSPICE格式网表后仿就靠它。.pex.temp中间临时文件包含提取过程中的温度、工艺角信息以及部分器件参数。.pex.log主要运行日志记录了器件识别数量、寄生参数数量和警告信息。.pex.report汇总报告通常包括提取类型、网表格式、顶层单元名这些关键元数据。我会习惯先看.log里最后一屏的统计数字比如“Total parasitic capacitors: 53214”这类信息。如果这个数字和同类型模块的历史数据相比突然差出一个数量级那很可能是提取范围配置错了。比如有的工程师把“extract all layers”的选项误关掉只提取了top两层金属的寄生电容数量自然会少一半以上。然后检查.pex.report里的“Top cell”名称是否和预期一致。这一步看起来多余但在多版本迭代时报告里的顶层单元名是最快判断有没有跑错GDS的线索。5.2 提取网表与LVS网表的差异对比法拿到提取网表之后不要急着拿去仿真先和LVS阶段的source netlist做一次比对。这个比对不是让你逐行读而是重点看三个信息是否一致顶层端口列表、子电路端口顺序、器件数量级。端口列表用文本编辑器打开网表前几行就能看到。HSPICE格式下顶层子电路会写成“.subckt top in inb vdd vss”这一行必须和源网表完全一致。如果端口顺序变了比如“in”和“inb”互换了后仿时输入接反波形看起来就像电路坏了实际上只是端口没对齐。器件数量级可以用网表里“NMOS”“PMOS”“RES”“CAP”这些关键词统计一下。PEX不会改变器件数量只会在器件间增加寄生R和C所以数量级应该和LVS网表基本一致。如果发现MOS管数量明显少了几个那说明有些器件在PEX阶段没被正确识别这种情况直接拿.log里的warning来定位比如“unsupported device”之类。这里有个小工具方法在Linux环境下用grep统计关键词数量比在GUI里数快得多。比如grep -c nm_r top.pex.netlist grep -c c_ top.pex.netlist grep -c xm top.pex.netlist看这几个数字是否符合直觉基本就能判断提取网表是否“有血有肉”。5.3 在HSPICE仿真中接入寄生网表校验完毕后让提取网表真正跑起来还需要做一步“接入”工作。HSPICE仿真通常需要一个顶层testbench文件在里面通过X调用提取网表的子电路。典型结构是这样的.global vdd! gnd! .lib 工艺模型文件 tt .option post .temp 25 x1 in inb out vdd! gnd! top_alias ...注意两点第一X调用的子电路名要和提取网表里的.subckt名字完全一致第二全局节点的处理要小心。如果提取网表里电源端口叫“vdd!”testbench里也必须用同名节点连接不能在X调用时又接了一个“vdd”这两个在HSPICE里是不同节点。接入完成后用hspice命令行跑一次hspice tb_opa_post.sp -o tb_opa_post看输出的.lis文件里有没有“error”“time step too small”这类关键词。如果有大概率不是仿真器问题而是PEX网表和testbench之间端口或节点衔接出了问题。这时候回到第5.2节的端口对比基本都能找到根因。6. 实战中的高频踩坑与排查经验6.1 LVS没clean就硬跑PEX这个坑我已经说了很多次但它出现的频率依然最高。很多新人拿到一个项目发现LVS报了十来个“open”错误觉得“先跑一下PEX看看反正后仿还能改”结果PEX跑出来的网表里这些open对应的节点被悬空后仿的直流工作点完全对不上。遇到这种情况先别急着重跑PEX回到LVS阶段把open和short一个不剩地清掉。不要觉得“反正仿真可以改网表”来绕过问题因为PEX的工艺库和物理规则是基于“干净LVS”设计的人为修改网表只会让后仿结果偏离真实硅片更远。从成本上讲在版图阶段花一个小时修LVS远比在后仿阶段花三天找“莫名错误”划算。6.2 端口识别错误导致网表不可用端口识别错误是最隐蔽、也最抓狂的一类问题。症状通常是后仿跑通了但输入输出的对应关系和前仿完全不一样。一个典型场景是版图顶层明明只放了两排pin但PEX输出的网表顶部却多出一个“nA0”这样的诡异端口。原因通常是版图顶层存在一些小尺寸的text label在LVS阶段被当成普通文本忽略掉了但PEX在提取寄生网络时会尝试把它们识别为端口。解决办法是在PEX配置里把端口识别模式调成“Used”或“Explicit”只接受用户在pin层上明确定义的端口不自动把悬空label当端口。如果你在版图里习惯用金属层的pin来定义输入输出这个设置尤其重要。排查时用版图工具检查一下顶层pin层有没有多余的text是快速定位该问题的有效手段。6.3 电容密度规则提取不完整我在做一次28nm工艺的电源模块项目时发现PEX提取出来的金属电容总量比同规模历史设计少了三分之一。一开始以为是rule文件版本问题后来把提取区域在版图里高亮出来才发现有一块巨大的MOM电容阵列根本没有被提取。排查后发现这个电容阵列使用的金属层组合比较特殊而rule deck里针对该组合的寄生提取开关没有全开。很多PDK的rule文件默认只启用“可制造性校验”通过的层次组合如果你的设计用了非常规的金属层叠或者特殊结构就要手动修改rule文件里的“EXTRACTION CONTROL”字段把对应组合加入提取范围。经验是每接手一个新工艺找一个包含所有常用器件类型和互连线结构的test chip专门做一次“全电容提取完整性验证”确认网表里各个结构的寄生电容数量合理再铺开做全项目。6.4 大版图提取时间爆炸的几种缓解手段做大规模模块PEX时跑十几个小时甚至几天都是常事。这里分享几个实测有效的缓解手段按推荐优先级排列分区提取如果版图是层次化结构可以只对敏感模拟模块做高精度RC提取对数字模块用C-only或RC快速提取再在顶层合并。提高归并精度参数把电阻和电容的“merge tolerance”适当放大比如从“0.01”调到“0.1”网表规模能下降30%到50%大部分电路后仿精度损失很小。关闭不必要选项比如只关心AC特性时可以关闭“Include junction diode”这类选项节省器件级提取时间。用OASIS替代GDS输入同版图OASIS文件读取速度通常比GDS快30%以上尤其是大版图效果非常明显。分布式并行处理如果公司有Calibre的分布式提取license可以用“-distributed”参数把多块版图的提取任务拆到不同机器上并行跑。这个阶段还要注意磁盘空间。PEX中间文件可能占用几十GB甚至上百GB空间跑之前用df -h确认一下运行目录的剩余空间不要等到跑了一半报“disk full”再后悔。最后再分享一个我自己的习惯每次PEX跑完我会顺手在仿真目录里建立一个“post_sim.log”文件记录这次提取的rule版本、process corner、提取类型、网表行数。几个月之后当有人问“这个模块后仿为什么和实测差了2dB”这份记录能帮你快速定位是工艺角问题、提取设置问题还是仿真激励问题。工具用久了就会知道PEX本身不难难的是让每一步都处在可追溯、可复现的状态。希望这篇实战梳理能帮你少走一些我走过的弯路。
返回列表