ARTICLE DETAIL

资讯详情

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

Redhawk电源完整性分析:PAD/IOPAD解析方法与IR-drop仿真实践

Redhawk电源完整性分析:PAD/IOPAD解析方法与IR-drop仿真实践 上个月帮一个团队定位IO环IR-drop偏高的现象Redhawk跑出来的VDDIO压降图在整圈PAD上都泛红但同一个网表换个版本跑又正常了。后来查明原因他们把电源源放错了对象——本应挂到IOPAD的VDDIO域结果挂到了内部逻辑VDD上IO环自然缺电。这种问题在电源完整性分析里非常典型Redhawk能不能正确解析PAD/IOPAD直接决定IO域和内核域的压降仿真是否可信。这篇文章就把我在实际项目里梳理的PAD/IOPAD解析方法完整讲一遍从输入数据准备、Source设置到结果自查适合用Redhawk做IR-drop/EM分析的物理设计工程师也适合刚接触封装协同仿真的人。1. 先搞清楚Redhawk把PAD解析成什么1.1 从Wirebond到Flip-chip电源入口的建模差异在Redhawk里PAD不只是一个物理单元它是电源网络方程组的边界条件。静态IR-drop分析本质上是在已知电流消耗和电源入口电压的前提下求解片上供电网格的电阻网络。电源入口在哪里Wirebond封装里就是片上的电源/地PADFlip-chip封装里入口变成了Bump但IOPAD上的IO电源环仍然要单独解析。你把PAD当成普通标准单元去处理等于把边界条件放错了位置网格里的电压分布自然跟着错。很多工程师拿到GDS只关心core区域忽略了IO ring。PAD如果没有解析出来Redhawk会把IO电源网络当成孤立浮动网络报告里通常会提示某个net没有driver或没有power source。更麻烦的是有些极端case下工具直接跳过该电源网络的IR计算最终IO压降数据是空的或者默认继承一个看起来正常、实际没有任何参考意义的数值。等到封装团队拿着这份报告去做系统级评估问题就被放大了。1.2 IOPAD不是单元是边界条件IOPAD不是一个简单的矩形开窗。它上面有ESD二极管、驱动管、预驱动逻辑、level shifter还有PAD本身的寄生电阻。Redhawk解析IOPAD时最关键的是确认它的电源pin连接关系VDDIO、VSSIO连到IO ring电源网格内部逻辑VDD连到core电源网格。这两条连接一旦搞错后面所有IR/EM结果都失去意义。我习惯按“边界条件电源引脚”这样的二元组来管理边界条件解决“电源从哪里进来”的问题电源引脚解决“进来之后通向哪些内部网络”的问题。只有这两个信息都准确一个IOPAD才算真正被解析清楚。这也是为什么很多资深工程师会把IO库的lib文件里pg_pin定义当作第一参考而不是直接看net名字。2. 解析PAD的输入准备数据从三个地方来2.1 层次化网表里的I/O实例Redhawk读入设计后第一手资料就是层次化网表。网表里有每个IO单元的例化名、cell名称以及每个pin连接的信号网络。I/O库的lib里电源pin通常标成pg_pin(VDDIO)、pg_pin(VSSIO)有些工艺库还带pg_pin(VDD)和pg_pin(VSS)。这些信息在Redhawk的GUI Net Browser里都能直接看到。从顶层网表过滤IO cell时常用通配符如*IOPAD*、*IO_PAD*、*PVDD*、*PVSS*。但这只是辅助手段最终还是要根据library定义来确定哪些cell属于IOPAD哪些只是普通的IO buffer。我在项目里见过一个团队用名字过滤把一组叫IO_CORE_VDD的单元全部划到IOPAD结果那是core域的内部电源开关单元不是真正的IO PAD最后IO域的IR分析从一开始就是错位状态。2.2 DEF中的IO placement与坐标PAD的物理坐标从哪里来最直接的是DEF文件。DEF里会记录每个IO instance的坐标和orientation有些版本还带- FIXED或- PLACED状态。Redhawk解析PAD时会依据DEF中的位置把这些IO单元放到对应的物理区域。这里有个易踩的坑DEF如果是从早期布局阶段导出的IO单元可能只处在symbolic place状态而不是最终physical固定位置。Redhawk拿到这样的DEFIOPAD位置和真实版图会有偏差轻则导致解析出来的电源源落在相邻两个PAD之间的空隙重则直接连到错误的网络。所以读DEF之前务必确认这是最终版本的placement最好配合GDS或LEF做physical awareness检查。2.3 GDS/APL中PAD几何与电特性的映射PAD开口的具体位置和形状通常由GDS中的passivation层或开窗层决定。Redhawk的Geometry Editor可以叠加显示这些多边形让你很直观地看到IO ring上的电源PAD分布。如果只靠DEF的symbolic location不结合GDS确认金属开口后续给IOPAD施加电压源时可能出现“源在几何上重叠但没有和电源网络连通”的假象。电特性部分则来自库模型。常见的I/O库模型有IBIS、SPICE子电路、以及Redhawk体系的APLApache Power Library模型。这些模型里包含I/O buffer的上下拉等效电阻、ESD二极管特性、预驱动功耗行为等信息。模型与PAD实例正确关联后Redhawk才能提取出寄生R和C而不是把PAD当理想导体。否则IO电流可能全部灌入理想节点IR-drop结果会被严重低估。3. PAD/IOPAD电源源的搭建全流程3.1 先确认哪些网络才是真正的VDDIO/VSSIO动手建立电源源之前先做一件事把所有电源网络列出来确认IO ring的网络名和对应的电源域。不要只看名字因为不同工艺库里同一套IO电源可能叫VDDIO、VDDPST、VDD33、VDDH这些可能指向同一个物理电源域也可能完全不同。我建议用I/O库的lib文件或SPICE模型作为依据。打开库文件找到IO单元的电源pin定义看它声明了哪些pg_pin然后回到Redhawk里做Hierarchical Pin Trace顺着这些引脚追到PAD和IO ring。这样得到的结论比单纯字符串匹配可靠得多。遇到多电源域的芯片这个步骤尤其重要。检查项建议做法I/O库文件打开.lib或.spi确认IO单元的电源引脚名网络名结合库文件判断VDD33和VDDPST是否同一域Redhawk电源域按IO cell group单独建domain而非混入core域PAD物理信息从最终DEF的- FIXED坐标读取不要用中间版本3.2 Source Editor手动布点适合小规模宏块Redhawk图形界面里加PAD电源源的操作并不复杂但顺序很重要。我一般按下面几步做加载PGDB后打开Power Sources相关窗口。把对象类型选为Instance并通过Cell Name过滤掉非I/O单元只留下IOPAD、PVDD、PVSS这类候选。在版图上框选IO ring上的IOPAD单元右键选择建立Voltage Source。设置Source Type为DC Voltage填入IO域电压比如1.8V。绑定目标网络为VDDIO随后确认电源源条目显示为VDDIO : IO_PAD_xxx的形式。对地PAD同样建立0V的电压源绑定VSSIO。手工方式适合IO单元数量不多、或者需要逐个检查异常单元的场景。比如你在排查某个角落的PAD为什么电压异常单独选中一两个IOPAD重新定义电源源可以快速缩小问题范围。但大规模芯片的IO ring一圈动辄几百个PAD手工点选太慢也容易漏批处理才是标准做法。3.3 批处理脚本大规模IOPAD解析的标准做法批处理的思路就是通过实例名、cell类型、以及库里的pg_pin定义把候选PAD一次性抓出来然后为它们批量创建电源源。脚本框架可以参考下面这个伪代码# 伪代码/示意实际命令名请按当前Redhawk版本调整 set io_pad_insts [get_db_insts *IOPAD*] add_power_source -type voltage -inst $io_pad_insts -pin VDDIO -value 1.8 set io_vss_insts [get_db_insts *IOPAD*] add_power_source -type voltage -inst $io_vss_insts -pin VSSIO -value 0.0多电源域设计里强烈建议对每个电源域分别处理不要图省事把所有*PAD*一次性挂到同一个电压源上。你可以在脚本里加一层判断根据IO cell所在的电源域属性把它们分到不同组再分别赋电压值。更健壮的做法是从DEF和library出发生成一份CSV清单里面包含每个IOPAD的实例名、坐标、所属电源域、电压值。脚本只要读这份CSV就能批量建立电源源。这样即使设计迭代版本更新只要CSV重新生成一次电源源也能跟着同步更新不容易出现“源还在旧位置”的偏差。4. IO Pad寄生与电源域建模这里最容易出错4.1 封装RLC挂在PAD上的方式以及什么情况可以简化为理想源很多项目只做裸片级IR-drop分析这时候在PAD上直接加理想电压源通常够用。裸片内部IR-drop看在PAD到逻辑单元之间的电压差PAD外部如果接的是理想源分析结果已经能反映片上网格的瓶颈。加上理想源也方便前后版本对比不会因为封装模型的差异干扰判断。但一旦要做封装协同仿真或者芯片封装系统联合分析情况就不一样了。这时PAD上不应该再挂理想电压源而要挂带RLC的封装模型。电源从PCB经过封装基板、bond wire或bump到达PAD每一段都有寄生电阻和电感。如果仍然用理想源等于把这些寄生全部跳过仿真出来的IO电压自然比实际偏乐观。这里最容易出的问题不是“要不要挂RLC”而是“RLC模型和PAD坐标没对上”。封装模型里每个pin都有自己的编号和位置如果PAD解析后的坐标与封装pin坐标存在偏移Redhawk做映射时可能匹配到错误的节点或者干脆放弃精确建模。我建议在解析完PAD后把PAD坐标列表和封装模型pin坐标列表做一次交叉比较偏差超过一个cell pitch就要回头查数据来源。4.2 ESD二极管、IO预驱动电流在静态分析中的处理IOPAD上的ESD二极管实际上是在PAD rail和内部rail之间形成了一组PN结。静态分析里如果IO域电压设置不当这些PN结可能表现为正向导通或反向漏电导致电流流向突然变得奇怪。你在Redhawk里可能看到IOPAD上报出异常漏电流这时候不要急着怀疑工具先回顾电压域分配是否准确。IO预驱动电路在翻转时会产生不小的动态电流。如果IO库的功耗模型没有加载或者REDHawk项目设置里没有勾选I/O switching powerIO环的动态电流就会被忽略。静态IR-drop如果只算平均功耗结果可能勉强可用但如果是peak IR分析忽略I/O switching power会让IO环压降明显偏乐观。这个坑在高速接口比较多、IO翻转频繁的设计里尤其明显。所以我的建议是静态和动态分析分开看。静态分析用于排查网格连通性和平均供电能力动态分析用于找峰值压降。如果两组结果趋势不一致优先确认是否是PAD位置或I/O功耗模型缺失导致的而不是盲目调整电压源数值。5. 解析后的自查方法以及三个真实踩坑案例5.1 通过电源源报告和IR map检查解析效果PAD/IOPAD解析完不能只看工程能跑通。我每次都会做三层自查第一层查看电源源统计报告。报告里会列出期望的PAD电源源数量和实际创建成功的数量。两者不一致说明有部分PAD没有被解析到最常见原因是实例名过滤条件写窄了或者某些IOPAD没有pg_pin连接。第二层在IR-drop map里点选IOPAD查看节点电压。正常情况下PAD处的电压应该非常接近你设置的电源源电压比如1.8V的IO域PAD节点至少应该显示1.79V以上。如果显示偏低说明从电源源到PAD节点之间有额外压降那就要查是寄生电阻过大还是源没真正落在目标网络上。第三层看浮动网络报告。Redhawk通常能给出没有驱动或没有电源源的net列表。只要里面还有VDDIO、VSSIO相关网络说明PAD解析还留有尾巴。这种情况下得到的IR-drop结果不能作为最终交付数据。5.2 案例一电源源贴在几何上但没连到网络有次排查一个PCIe接口的IO压降问题IOPAD上明明已经加了1.8V电源源但IR map里该点电压只有1.2V。打开几何图形一看电源源的位置确实在PAD开窗的中心但那块金属在开窗层以下并没有直接覆盖VDDIO走线网络。电源源是建立在了几何对象上而不是网络pin上导致实际没有和VDDIO形成有效连接。修复办法是把电源源的附着方式改成“关联到pin脚”或者把几何源向下投影到VDDIO所在的金属层确保源与目标金属网络连通。这个案例说明解析PAD不只是取坐标还要确认源与金属网络之间的连接关系。5.3 案例二IO域和core域共用一个电源源另一个团队做低功耗设计core是0.8VIO是1.8V。他们在建立电源源时图省事把所有PAD统一设成了core的0.8V。结果Redhawk把IOPAD上的ESD路径判定为反偏静态分析里流出流入IO buffer的电流全部变成“假性漏电”VDDIO压降图看起来一片深蓝却怎么解释都不通。后来按cell类型把IOPAD独立划成一个IO电源域单独设置1.8V再把core域和IO域的电源源分开问题立刻消失。这个案例也提醒我多电源域芯片的PAD解析第一步一定是分域而不是先急着放电压源。5.4 案例三DEF坐标没更新解析串位一次交付前检查发现IO ring上的电源源数量是对的但IR热点位置和封装团队给出的失效PAD位置对不上。两边拉通数据后才发现Redhawk读入的DEF是几版之前的中间布局IO单元虽然都已经place但还没有到最终fixed状态实际坐标比最终版偏了一个cell pitch。解析出来的电源源看起来一个不少但物理位置上全部串到相邻PAD上去了。修法很简单用最终DEF重新生成PGDB然后重新解析PAD。但要避免以后再次踩坑最好在脚本里加一个检查项量取每个PAD中心到IO ring边界的距离如果距离和库里定义的标准instance pitch不一致直接报警。这种自检能省掉大量返工时间。最后再唠叨两句把PAD/IOPAD解析做好不是把电源源加完就算完事。我个人的习惯是不管用哪个版本、哪种流程跑完以后都要挑两到三个不同位置的IOPAD单独查看它们在静态IR下的节点电压和流经电流再看看IO ring上电流的流向是否合理。这些细节能很快暴露源定位是否准确也能帮你提前发现一些库模型配置上的隐患。解析PAD/IOPAD本身不算复杂操作但如果你只是把Source界面按了一遍而不回查结果后面分析跑出来的各种怪异现象往往会耗费比操作多好几倍的时间去排查。先把边界条件放对后面的电源完整性分析才踏实。
返回列表