ARTICLE DETAIL

资讯详情

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

Redhawk中PAD与IOPAD解析:从模型构建到IR Drop影响

Redhawk中PAD与IOPAD解析:从模型构建到IR Drop影响 1. 为什么Redhawk里要单独处理PAD和IOPAD刚接触Redhawk做功耗分析的朋友多半会在PAD这个问题上卡一两个月。要说清楚这件事先得明白一个前提芯片所有电流都要从PAD进入再从PAD流出PAD的寄生参数直接影响整颗芯片的电源完整性结果。很多团队跑出来的IR Drop和EM结果跟实测差异大往往不是Redhawk设置错了而是从一开始就没把PAD和IOPAD模型当回事。先说两个名词的区别。PAD在Redhawk语境里通常指物理焊盘也就是连接封装基板或探针卡的金属区域比如Wire Bond工艺里的铝padFlip-Chip工艺里的C4 Bump而IOPAD更多出现在IO Ring的场景里指的是IO单元内的焊盘单元包含ESD保护结构、预驱动电路以及与外部封装的连接点。实际工程项目里我们一般把这两个合在一起处理因为它们在功耗分析中的角色是一致的给芯片提供电源通路同时引入寄生电阻、电容和电感。Redhawk做的是电源网络完整性分析核心对象是Power/Ground网络。PAD就是电源网络从封装侧进入芯片侧的第一个节点所以它身上挂的寄生R、C、L必须准确建模。你想想看如果VDD pad上的寄生电阻被低估了50毫欧整个die上的IR Drop都会被低估EM check也会跟着误判。反过来如果pad电容没建对动态功耗分析里开关电流的波形就会失真高频场景下的电压跌落模拟也会偏离实际。另一个容易被忽略的地方是IOPAD里的ESD二极管。ESD结构在正常工作时候是不导通的但它贡献的寄生电容是真实存在的而且面积越大电容越大。这个寄生电容接在power和ground网络之间等于给电源网络加了一个去耦电容。如果你的分析模型里没有这个电容动态分析的Vdrop结果会偏悲观因为少了ESD电容的瞬态泄放作用。所以Redhawk里解析PAD / IOPAD本质上是在给电源完整性模型补齐最外圈的边界条件。这篇文章我打算从实际操作角度把Redhawk解析PAD和IOPAD的完整流程拆开讲一遍。内容涵盖PAD模型从哪来、怎么建立、如何在Redhawk里配置、IOPAD的特殊处理方式以及高频踩坑的地方。适合正在做后端功耗分析或者刚接手Redhawk流程的工程师也适合想搞明白PAD模型底层逻辑的IC设计人员。2. PAD数据来源与模型构建思路2.1 foundry提供的PAD模型到底是什么做PAD解析第一步不是打开Redhawk而是先拿到准确的PAD模型数据。这个数据通常来自Foundry的PDK不同工艺节点、不同封装方式PAD模型差异非常大。对于Wire Bond工艺PAD模型的核心是一组寄生参数PAD金属本身的寄生电阻、对衬底的寄生电容、键合线的寄生电感。键合线电感一般以nH为单位一根典型的金线键合大概是1-3nH具体取决于线长和线径。这意味着VDD pad上的电源阻抗在高频下主要由这个电感主导几十到几百MHz的动态电流都会在这个电感上产生明显的压降。对于Flip-Chip工艺C4 Bump的模型更简单一些寄生电感比wire bond小一个数量级通常在0.05-0.15nH范围内寄生电阻也小。所以同样是100mV的IR Drop budgetflip-chip比wire bond好做得多原因就在这里——bump的寄生参数小电源通路更“粗壮”。Foundry交付的PAD模型文件格式五花八门。有些直接给SPICE子电路有些给一个文本形式的RLC表格也有些会在APLAbstract Power Library里预定义好。我见过最多的还是下面这种文本格式PAD PADVDD_3V3 AREA 80u 80u R_PAD 0.25 C_PAD 0.42p L_BOND 1.8n R_BOND 0.12这里每个字段的含义都很直白PAD面积、PAD自身的电阻、寄生电容、键合线电感和电阻。拿到这种数据之后我们要做的就是把这些参数翻译成Redhawk能识别的PAD模型定义。2.2 PAD Library的两种构建路径Redhawk里PAD模型的载体叫PAD Library常见的有APL文件或者单独的PAD模型文件。构建路径根据手上数据不同可以分两条路走。第一条路直接用Foundry提供的APL文件。大的Foundry会为自家工艺提供经过验证的APL文件Redhawk可以直接读取。这种方式最省事模型也最可靠因为这些APL里的寄生参数是经过硅实测校准过的。但实际项目里我发现一个问题Foundry给的APL文件往往是“通用版”针对standard IO cell做的如果你的设计用了定制IO或者特殊pad结构直接套就会不精确。第二条路自己写PAD模型。这时候需要把Foundry给的RLC参数手动组织成Redhawk支持的格式。要注意单位换算电阻统一用Ω电容用F电感用H。Redhawk的GUI里也有PAD模型编辑界面可以直接填数字但我更推荐直接用文本文件因为后期修改和版本管理方便。构建PAD Library时还有一点必须考虑——PAD的种类。一个真实芯片里的PAD绝不只一种普通信号PAD、电源PAD、地PAD、模拟PAD、参考电压PAD它们的尺寸、层叠结构、ESD设计都不同寄生参数差异很大。我见过一个团队把所有PAD统一成一个模型去分析结果电源PAD和信号PAD的特性差异完全没体现签名分析报告自然不靠谱。正确做法是按PAD类型分别建模型每个类型单独一条记录。2.3 无PAD模型数据时的兜底方案有些情况下尤其是早期评估或者用的IP是老工艺Foundry给不了完备的PAD模型。这时候有两条路可以救急。一是用相似工艺的模型做缩放。如果你手上有同工艺族其他节点的PAD模型可以按面积比例调整R和C。寄生电阻跟面积成反比寄生电容跟面积成正比这个缩放逻辑在相同工艺族内基本成立精度也能接受。二是直接通过LVS寄生提取工具从版图里抽PAD的寄生参数。把版图里PAD相关的部分切出来用Calibre或者StarRC跑一个带寄生提取的LVS把得到的C和R写进PAD模型。这个方法比猜准得多唯一的问题是周期长而且提取出来的参数是DC/低频的没包含封装互连的感性效应。如果你用的是Flip-Chip封装还有个加分选项让封装设计团队提供Bump的RLC模型。他们做封装SI/PI分析时一定会建bump的模型这个模型可以直接拿来做PAD模型精度非常高。我在一个车规项目里就是这么干的省了自己建模型的功夫结果还比Foundry给的默认模型准。3. Redhawk中PAD模型的导入与配置实操3.1 APL文件在Redhawk里的加载流程Redhawk本身提供了一套完整的PAD模型管理机制核心就是APL。APL文件可以在Redhawk启动后手动加载也可以写在Redhawk的启动脚本里自动加载。通常建议放在脚本里因为每次重新打开工程都要重新加载手动操作难免遗忘。加载命令在Redhawk的命令行模式里很直接类似于setup design -name demo_chip setup process -tech tsmc28hpc read_def ./data/demo_chip.def read_spef ./data/demo_chip.spef read_apl ./data/pad_library.apl read_pg_config ./data/pg_config.txtread_apl就是把PAD Library读进来。文件加载之后Redhawk会解析其中定义的PAD类型并在后续的电源网络分析中自动识别DEF里对应的PAD cell。APL文件里需要定义的关键内容包括三方面PAD cell的名称、PAD cell所属的逻辑网络P_Gnd还是P_VDD、PAD cell的寄生参数。这里最容易犯的错误是名称不匹配。APL里定义的PAD cell名称必须跟DEF或者Verilog netlist里用的名字完全一致Redhawk匹配时是按字符串精确匹配的。你APL里写VDDC_PAD但版图里叫VDD_PAD_C那就匹配不上结果就是某个PAD根本没有模型。具体APL文件的内容一般长这样PAD VDD_PAD DIR INOUT P_Gnd VDD R 0.35 C 0.68pF L 1.2nH ROUTE_HIER 1 END_PAD注意这里的P_Gnd VDD含义不是PAD接地而是定义一个逻辑节点名。Redhawk用这个节点名把PAD跟实际的电源网络连接起来。3.2 通过GUI为IOPAD绑定模型如果你的环境没有命令行许可只能用GUI那操作路径也不复杂。Redhawk主界面里找到Setup - Technology/Package在Package页面里有一个PAD Management的区域里面可以浏览当前已经加载的所有PAD cell。操作顺序大概是先点击Add PAD Library选择你的APL文件然后展开已加载的PAD cell列表双击某个PAD cell可以查看或编辑它的寄生参数接着在Customize标签下把某个PAD cell映到具体的电源网络。这里有个细节GUI里编辑的PAD模型只在当前会话生效不会自动写回APL文件。如果你改了参数记得用Save功能导出一份新的APL文件否则下次重新打开工程改动就丢了。我因为这个丢过一整天的分析结果后来养成了“每改一次PAD参数就立即导出文件”的习惯。GUI方式的优势是直观适合刚开始接触Redhawk的人上手。劣势是操作步骤多容易漏。碰到一个设计有上百个不同类型的PAD一个个在GUI里核对效率太低了。所以我实际操作时都是GUI和命令行混用用GUI快速扫一眼模型是否匹配真正的大规模配置和验证用命令和脚本来做。3.3 PAD与电源网络的映射关系检查PAD模型加载完之后还有一个关键步骤检查PAD跟电源网络的映射关系是否正确。这一步漏了后面的分析全白做。怎么检查最直接的方法是看Redhawk生成的pad_mapping_report。这个报告会列出设计中所有被识别到的PAD cell、它们所属的电源网络、以及模型参数。你需要人工核对几个关键信息电源PAD是否全部挂到了正确的VDD网络上地PAD是否全部挂到了正确的GND网络是否有PAD被识别成Unmapped状态同一电源域内的PAD数量与版图是否一致我碰到过一个案例芯片分1.8V和3.3V两个电源域但APL文件里把3.3V的PAD模型错绑到了1.8V网络对应的PAD cell上等于两个电源域的PAD寄生参数全部交叉错位。问题出在写APL时网络名抄错了。这种错误通过检查报告很容易发现但如果你跳过了这一步分析结果全部作废。检查清单长这样检查项判断标准常见错误PAD cell名称匹配与DEF/LVS网表完全一致大小写差异、下划线差异网络映射正确对应到正确的VDD/GND域电源域交叉、漏放顶层网络寄生参数正负所有R/C/L为正数单位换算错误导致数量级异常PAD数量完整与版图数量一致某些PAD被识别为普通单元4. IOPAD的功耗与动态分析特殊处理4.1 IOPAD在功耗计算中的角色IO电路在芯片总功耗里占比不低尤其是高速接口IO或者pad多的设计。IOPAD的处理方式和Internal Cell不一样因为IO模拟电路没有标准单元库里的leakage和switching power模型可用它的功耗模型天然就是分开的。Redhawk里处理IOPAD功耗有几种方式。第一种是从IO库的.lib文件获取功耗信息这是最理想的方式——如果IO供应商给了带功耗属性的lib文件Redhawk可以直接读取跟分析普通标准单元一样简单。但现实情况是很多IO lib要么是加密的要么干脆不给功耗模型这时候你得走第二种方式用Vectorless或者手工指定的功耗值。如果IO的.lib确实拿不到我常用的方法是根据IO的工作条件估算功耗。比如一个工作频率100MHz、负载电容10pF的LVCMOS输出IO动态功耗约等于CV^2f即10p1.8^2100M≈3.2mW。把每个IO的功耗想清楚然后用Redhawk的set_power_estimation命令给这些IOPAD实例指定功耗。这种方式出来的结果虽然精度不如lib方式但在早期评估阶段完全够用。除了IO自身的开关功耗IOPAD的ESD寄生电容也要参与动态分析。这块我在前面提过一次这里再强调一下Redhawk在做瞬态仿真时PAD Library里定义的C值会作为电容负载挂在电源网络上直接影响地弹和电源噪声。如果你的IO edgerate很快ESD电容带来的瞬态影响会被放大。4.2 IOPAD作为电源网络边界条件的设置IOPAD在电源网络中扮演的另一个角色是电流注入点。所有IO电路的电流都是从IOPAD供电的IO电源域取电所以动态功耗分析时这些IOPAD就是IO电源域的片外电流接入点。这意味着你在设置IO电源域的分析边界时必须把对应的PAD指定为这个域的power source。Redhawk里可以用define_power_switch或者电源域设置命令来指定。如果不指定Redhawk会默认IO电源域的电流只能从普通VDD PAD进入而普通VDD PAD的模型和IO PAD的模型在寄生参数上有差异分析结果自然有偏差。具体到Redhawk命令层面IO电源域的设置大概是这样set_power_domain -name IO_3V3 -voltage 3.3 define_pad_power -domain IO_3V3 -pad VDDIO_PAD -net VDDIO这段命令的含义就是把VDDIO_PAD这个PAD定义为IO_3V3这个电源域的供电来源并且把它连接到VDDIO这个物理网络。4.3 IO激励翻转率对IOPAD结果的影响动态分析里IOPAD功耗跟翻转率toggle rate强相关这个参数设置不对整个IO功耗就失真了。数字逻辑的翻转率通常在5%-20%之间但IO pad的翻转率完全不一样。高速串行接口比如PCIe或者USB数据线翻转率能到50%甚至更高而控制信号、地址线这类IO翻转率可能只有2%-5%。Redhawk在Vectorless分析模式下如果不能拿到网表的翻转率信息会使用默认值或者你在set_switching_activity里指定的值。我的习惯是至少把IO分成“高速数据IO”和“普通控制IO”两大类分别设置翻转率。高速IO按实际协议速率换算成等效翻转率和负载电容控制类IO按设计文档给出的典型工作频率来估算。还要注意一个容易忽略的点IO输出pad的负载电容包含了片外负载而不仅仅是片内寄生电容。一个IO驱动PCB走线和接收端引脚时等效负载可能是10-30pF这跟片内只有飞法级电容完全不同。所以在给IOPAD设置功耗或者做动态仿真时必须把片外负载电容一并考虑进去否则功耗和Vdrop都会被严重低估。5. 实操案例一个完整IOPAD解析过程5.1 案例背景与输入文件拿一个我去年做的项目举例这个项目是一个28nm工艺的SoC有大约400个IO其中IO电源分了两组一组是1.8V的GPIO一组是3.3V的专用接口IO。芯片是Wire Bond封装总共有60个电源PAD和40个地PAD。输入文件包括DEF文件包含所有PAD的物理位置和方向、门级Verilog网表、SPEF文件、Foundry的PAD RLC数据表文本格式、以及IO库的部分lib文件覆盖了核心数字IO但模拟IO没有。最麻烦的是模拟IO那块没有lib功耗模型。最终我们的做法是手工写了一个io_power.txt按管脚功能分成三类全速差分IO、单端信号IO、静态IO分别给功耗和翻转率。然后通过Redhawk的set_power命令把这些值应用到对应IO实例上。5.2 从RLC数据到可用的APL文件拿到Foundry的PAD RLC数据后我第一步是整理表格按电源PAD、地PAD、信号PAD分成三组每组再根据PAD尺寸细化分类。这个芯片里有两种尺寸的PAD90x90um和70x70um所以最后分了五类大号电源PAD、小号电源PAD、地PAD、大号信号PAD、小号信号PAD。第二步是把每组数据换算成APL格式。Foundry给的数据单位比较杂电阻有给Ω的也有给mΩ的电容有给pF的也有给fF的电感都是nH。Redhawk的APL文件默认单位是Ω、F、H所以换算时我统一用脚本处理避免手算出错。第三步是写APL文件。核心内容是把每个PAD cell名称跟DEF里的名字对齐。DEF里的PAD cell命名通常类似PADVDD90_1、PADGND70_5这种带尺寸后缀。APL里按同样的命名规则创建对应的PAD model并填入换算好的RLC参数。最后在Redhawk里加载APL文件跑一遍report_pad命令确认所有PAD都匹配上模型。第一次跑出来有3个PAD的匹配状态是NO_MODEL查了一下是DEF里命名多了个后缀跟APL里对不上。改完APL重新加载这次全部匹配成功。5.3 电源PAD数量对IR Drop的实际影响这里有一个非常有价值的对比数据。我们同时做了两组分析一组按实际的60个电源PAD和40个地PAD建模另一组人为减半电源PAD数量比如只建30个电源PAD其他条件不变。结果差异非常直观。完整PAD模型下芯片核心电压域的IR Drop最差点在95mV左右PAD数量减半后最差点的IR Drop直接飙升到142mV。原因一方面在于PAD本身的寄生电阻少了30个并联通路等效电阻变大另一方面更关键的是PAD数量会影响PAD与封装电源环之间的阻抗分布PAD稀疏区域的电流要绕更远的路才能进到die里局部IR Drop自然更严重。这个对比充分说明了PAD建模精度对电源完整性结果的重要性。很多项目在PAD数量不够或者模型不准的情况下跑出宽松的IR Drop结果误以为芯片没问题结果流片回来发现某些角落电压不足这种问题在测试阶段很难debug只能重新改版或者加workaround。5.4 IOPAD功耗修正前后的芯片功耗对比IOPAD功耗修正这个点我也拿同一颗芯片做过对比。第一次分析时因为IO lib覆盖不全我们没有做任何修正直接让Redhawk用内部功耗估算引擎来算。结果看到IO电源域的总功耗只有预期值的四成。原因很明确Redhawk默认估算功耗时没有把片外负载电容算进去而且对那些没有lib模型的IO它只能靠网表拓扑猜功耗猜出来的值明显偏低。后来我们手动给所有IO实例绑定了功耗和翻转率并设置了片外负载电容。修正之后IO电源域总功耗从约350mW上升到约830mW而实测数据是约790mW误差在5%以内。这个对比证明了IOPAD功耗手动校准的价值——不校的话动态分析基本不用看了全片功耗差了近一倍IR Drop和EM结果全部失真。6. 高频报错列表与排查技巧PAD相关的问题有很强的共性。下面这些场景我几乎每隔一段时间就会遇到一次整理出来方便各位按图索骥。6.1 报错追溯速查表错误现象可能原因排查方法大量PAD显示NO_MODELAPL里PAD cell名跟DEF不匹配导出报告中未匹配的PAD名对比DEF中对应实例名检查大小写和前后缀IR Drop结果异常偏大PAD模型电感值过大或漏绑电源PAD检查PAD Library中L值数量级用report_pad确认电源PAD数量与版图一致动态分析Vdrop波形震荡严重PAD模型里C值缺失少了ESD电容的稳压作用确认IOPAD模型里C_PAD和ESD电容都已填入EM结果报PAD过流单个PAD的电流上限设置过低检查PAD模型里的EM current limit参数与实际工艺DRM对照IO电源域功耗异常低缺少IO功耗模型或翻转率未设置手工为IO实例指定功耗和toggle rate确认片外负载电容已设置APL文件读取报语法错误文件里有非法字符或单位遗漏用文本编辑器打开APL检查格式重点看首行和PAD定义结束语句最让人头大的问题往往不是模型本身而是命名不一致。曾有次debug了整整一天最后发现是DEF文件里PAD cell大小写不统一——同一个PAD cell三分之一的实例是大写开头三分之二是小写开头。Redhawk匹配是按实例名做的所以大写那部分全部匹配不上。从那以后我养成了一个习惯PDV检查时直接对PAD cell名称做一次全场扫描强制统一命名规则。6.2 一个绕不开的坑PAD寄生是0但没报错Redhawk有个特性很坑但也合理如果APL里某个PAD cell只定义了R值没有定义C值Redhawk不会报错它默认C是0。这时候分析照常能跑结果看起来也正常但C0意味着PAD完全没有寄生电容动态分析会缺少ESD电容的稳压作用Vdrop结果偏高。而且这个偏差是全局性的不是只影响几个点可能整个die上的电压噪声都变大。排查这个问题没有捷径只能在生成APL文件时仔细核对每个PAD的R、C、L三项参数都完整。我写过一个简单的脚本读取APL文件自动检查每一个PAD model下R/C/L三项是否齐全缺哪项直接print出来。这个脚本救了我好几次建议你们也搞一个。另外一个相关坑是PAD模型里的R值数量级不对。有一次我在手动建APL文件时把0.35Ω误写成了0.35mΩRedhawk没报错分析结果里所有电压都偏高。因为PAD的等效串联电阻几乎可以忽略压降自然就小了。这种错误比C缺失还隐蔽因为结果看起来“还挺好的”。后来我在写文件前会先用计算器验算一遍数量级0.35Ω的PAD在1A电流下压降是0.35V这显然太大了正常PAD压降应该在mV级别。6.3 IO电源域漏设导致的结果偏差我踩过一个比较深的坑一颗芯片既有核心逻辑电源域又有IO电源域。第一次做动态分析时我只在顶层设置了核心域的PAD映射IO域的PAD模型虽然加载了但忘了指定define_pad_power命令把它们关联到IO电源域。Redhawk没有报错因为IO域里还有其他的电源激励源比如一些从核心域逻辑生成的内部电源。结果出来的IO域IR Drop数据完全不可信分布很随机。后来花了三天排查才发现是IO电源PAD没有被正确指定为电源源导致的。从那以后我把这一步固化到了流程脚本里任何新项目都要跑一个check_pad_power的小脚本自动比对每个电源域下是否有匹配的PAD连接。没有的话直接报warning不让后续分析继续跑。7. 提升PAD解析效率的三个经验纯技术流程讲完了最后聊聊效率相关的经验。这几个经验是我做多个项目反复验证过的新手可以少走弯路。第一个经验PAD模型文件务必纳入版本管理。APL文件、IO功耗配置文件这些看起来不起眼但它们直接决定分析结果。我用Git管理项目目录时这些文件跟DEF、网表一样重要任何修改都记录下来。曾经有个团队因为没有版本管理一个PAD模型参数被人改了没人知道结果项目签核出了偏差追查原因追了两周。第二个经验PAD分析一定要做自动化检查。人工检查几十个PAD没问题几百个PAD就容易看花眼。我自己写了一个EDA脚本Redhawk Tcl脚本启动时自动加载APL、自动跑report_pad、自动检查是否有PAD缺失模型、自动核对每个电源域的PAD数量。整个过程一分钟内完成一次都不落下。你们的工具链里未必有现成的但真的建议花半天时间写一个类似的脚本。第三个经验跟封装团队保持沟通。PAD模型不只依赖Foundry封装设计也会影响PAD的寄生参数。Wire Bond的线弧高度、引线间距、Bump尺寸这些都会改变最终的RLC参数。我每次拿到新封装的更新版图都会找封装团队确认一遍PAD模型是否需要更新。实测下来封装参数对PAD模型的影响通常能占到10%-20%对is_signoff级别的分析来说不能忽略。PAD和IOPAD解析这件事看起来是Redhawk流程里的一小步但它的影响贯穿整个电源完整性分析链条。模型准结果才可信模型不准后面一切分析都是在错误地基上盖楼。希望这篇内容能帮各位把PAD这块地基打牢少踩我之前踩过的那些坑。
返回列表