ARTICLE DETAIL

资讯详情

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

从封装设计到IBIS模型:Sigrity XtractIM寄生提取五步实操指南

从封装设计到IBIS模型:Sigrity XtractIM寄生提取五步实操指南 干过信号完整性仿真或者做过高速数字设计的工程师十有八九都搜过“ibis模型下载”这几个字。但搜索结果往往让人失望要么是某芯片厂商官网几百个文件的归档页面里面一堆名字雷同的版本根本分不清哪个对应自己用的封装要么逛了一圈论坛下载下来一看是三五年前的旧封装管脚定义都对不上。说到底IBIS模型跟具体芯片封装强绑定封装引脚排列、基板叠层、焊线或凸点结构不一样寄生参数就完全不是一回事。从网上随便扒一个放进仿真结果只能自己骗自己。真正可靠的做法是从封装设计数据出发把寄生参数提取出来再跟I/O缓冲行为捆到一起生成一份贴合实际器件的IBIS模型。这套流程里Sigrity XtractIM是绕不开的主力工具。这篇文章把从封装设计稿开始用XtractIM提取寄生参数并生成IBIS模型的完整过程拆开讲一遍。先讲清楚工具的原理边界再给一套可以直接照做的五步操作链路最后把我在几十个项目里踩过的坑集中整理出来。适合三类人看正在给新封装建模型的SI工程师、拿到芯片但厂商死活不提供IBIS的硬件工程师、以及想搭仿真模型规范化流程的团队负责人。1. 为什么总有人在搜“IBIS模型下载”我却劝你建一个属于自己封装的1.1 IBIS不只是一个文件它封装了驱动行为、引脚和寄生参数三件事很多刚接触IBIS的工程师以为它就是个“芯片模型文件”拿过来就完事。实际翻过IBIS 4.0以上版本的朋友应该有印象一个完整的IBIS文件至少要包含三块核心内容第一是I/O Buffer的行为级描述包括上拉、下拉曲线、V-T曲线、C_comp管脚电容这些第二是封装段的寄生参数通常写成R_pkg、L_pkg、C_pkg的形式第三是引脚映射表把芯片物理引脚号对应到信号名和模型名。这里容易被忽略的是第二部分也就是封装寄生参数。这部分直接决定了信号经过封装时延、过冲、串扰的底层约束。同一个芯片的die完全一样但一个人用BGA封装、另一个人用QFN封装两者的封装电感和电容差异能把DDR眼图开到完全不同的程度。所以厂商如果说“这个型号新封装还没建模”那本质上是封装段的数据缺了不是你随便拿个旧型号顶替就能解决的事情。1.2 厂商给得慢、给得旧、甚至不给都是现实里常见的麻烦项目里最常见的尴尬场景是芯片选型定了硬件原理图都画完了SI工程师去找IBIS模型发现厂商官网只挂了一个“Generic”的通用模型或者只提供了某个评估板封装的版本跟你实际布局的封装管脚差了一截。你再发邮件问FAE要经常是一周没回复、两周说“在整理”、一个多月后给了一个连封装引脚号都对不上的版本。这种事情不是个案尤其是中小厂商、特种器件或者定制封装更是重灾区。另一个常见场景是公司内部自己做先进封装比如2.5D、FOWLP这类非标准封装厂商拿到芯片die的model给到板级但封装外壳是我们自己设计的这中间唯一的补位办法就是自己提取寄生参数、自己生成IBIS封装段。1.3 什么情况下值得走XtractIM建模型这条路也不是所有设计都需要自己建IBIS。低频数字电路、纯低速控制信号的PCB设计拿个Generic模型做一次性check问题不大。但如果你在做DDR3/DDR4/DDR5、PCIe、SerDes、以太网、或者对电源完整性有严格要求的系统封装段的数据就非常重要。封装引脚的具体寄生参数会显著影响信号的时序裕量和噪声裕量。我的判断标准简单直接信号速率达到1Gbps以上或者设计里包含可插拔连接器、板载封装转接这类非理想结构就老老实实自己提取。另外如果你们公司是封装设计、PCB设计、SI仿真三条线并行的流程尽早把XtractIM提取IBIS嵌入到流程中效率会比自己每次手工去改厂商模型高一个量级。2. XtractIM的工作逻辑它是怎么把封装变成RLC和IBIS的2.1 一句话理解XtractIM在干的事XtractIM做的事可以浓缩成一句把封装的几何版图、介质叠层、材料参数通过三维电磁场求解转成一组能在电路仿真里直接使用的等效RLC寄生网络再自动映射成IBIS/Pin Package等规范段落。它的底层是真实的三维全波电磁求解不是那种用经验公式估算的2D静态场计算。工具会把你定义的每个net看成一个多端口的互连结构求解出端口之间的S参数再由S参数拟合等效电路最后以IBIS的语法规则把R、L、C值写出来。这也正是它跟PowerSI的定位差异PowerSI偏重频域分析和全波验证XtractIM偏重寄生提取和模型生成两者经常搭配着用。2.2 往工具里喂什么数据才能得到有用的输出用XtractIM建IBIS模型不是把封装版图往软件里一丢就完事。我开始跑这个流程的时候也犯过懒结果跑出来的电感值离谱后面排查了一圈发现是叠层信息没填对。所以准备工作非常关键。整理了一下基本的输入清单输入项说明容易遗漏的点封装布局文件支持Allegro Package Designer、APD等主流的封装版图格式确认版本兼容性有时候需要另存对应格式叠层定义每一层的厚度、介质材料、铜箔厚度叠层截面图和设计文件里的信息要一致材料参数介电常数、损耗正切、电导率不同频率下Dk会变宽带仿真尽量给扫频数据端口定义根据实际信号回流路径设置激励/检测端口Die端、焊球端、电源地端一个都不能漏焊盘/焊球/凸点几何Bump、Ball、Wire bond的尺寸几何差几十微米高频下寄生就差很多有一点我想特别强调你给的叠层信息决定了所有后续结果的准确性。XtractIM不是自动推断器它需要你告诉它哪一层是信号层、哪一层是完整的地参考层、介质是哪种材料。厂商给的叠层图经常只有厚度数据没有材料损耗参数这时候宁可先查材料手册填个近似值也不能空着不填。2.3 输出物的样子一个IBIS文件里封装段长什么样理解了输入再来看输出。用XtractIM生成IBIS后真正跟封装相关的其实就是文件中一段结构规整的描述。拿一个简化例子看[Component] MY_CHIP [Manufacturer] My_Company [Package] | variable typ min max R_pkg 0.421 0.350 0.500 L_pkg 1.250nH 1.000nH 1.500nH C_pkg 0.280pF 0.220pF 0.320pF [Pin] signal_name model_name 1 VDD POWER 2 GND GND 3 DQ0 SIGIN ... [Pin Mapping] pin model_name model_type 1 VDD POWER power 2 GND GND ground ...这里的R_pkg、L_pkg、C_pkg就是整个封装寄生参数的均值或各pin独立的值。XtractIM生成时会根据提取到的每个网络电气特性把每个pin的寄生参数填到对应的pin记录中。拿到手之后质量如何、行为正不正确就是后面第五章要重点验证的东西。3. 实操链路从封装版图到IBIS模型五步跑完一遍3.1 导入封装设计文件别跳过单位校准这道工序第一步是把封装设计文件导进来。XtractIM能直接读Allegro Package Designer、APD等设计工具的导出数据也支持ODB这类中间格式。这里我要提醒一句导入之后第一件事不是急着设置仿真而是确认单位系统。很多封装版图默认单位是mil但也有些工厂提供的文件是mm。如果文件单位跟你的设置不一致工具在自动判定微带线、带状线结构的时候会全部偏移。我实操中最稳的处理方式导入前先在设计工具里把单位统一到“um”导入后直接检查BGA焊球的直径和间距量级是否符合常识。比如0.8mm pitch的BGA焊球直径应该在0.4mm左右如果看到数字是0.00004这种量级基本就是单位错了停下来重新倒文件。3.2 定义端口模型质量的分水岭端口定义是我认为整个流程中最关键、也最容易被忽视的一步。XtractIM提取寄生参数的逻辑是先把die端当成一个激励端口把封装外部引脚当成响应端口然后看能量怎么从一个端口流到另一个端口。所以die端放在哪里、参考点选哪个网络直接决定提取出来的L和C值。在SiP或者单芯片封装里die端通常放在bump或者bond finger的中心位置也就是芯片焊盘跟封装内部连线交界的位置。封装外侧的端口放在solder ball的底部中心也就是焊球接触到PCB焊盘的基准面。电源和地端口不要漏因为它们构成了回流路径的主要部分。如果把一组高速信号的参考地网络漏掉了提取出的返回电感会偏大很多仿真出来的信号眼图会比真实情况差。我自己常用的操作顺序是先通过Net筛选把高速信号网络找出来逐个标记为“Signal”把芯片的电源网络全部标记为“Power”把参考地网络标记为“Ground”手动检查每条高速信号的回流路径上有哪些相邻的地平面确保Ground端口覆盖完整3.3 宽带电磁仿真参数设置频率范围、网格和收敛端口定义完成后开始设置求解。信号速率决定仿真频率范围这里有个常用估算公式(f_{max} \frac{0.35}{t_r})其中(t_r)是信号上升时间10%~90%。拿DDR4来算上升时间大约200ps那么(f_{max})约1.75GHz。但实际仿真带宽建议跑到这个基础频率的3~5倍也就是5~10GHz把高频谐波都包含进去。SerDes这类25Gbps以上的信号起步就要跑到20GHz以上。网格剖分方面XtractIM的求解器会自动生成网格但关键区域需要人工干预。我一般把bump、wire bond、ball这些结构变化剧烈的位置网格加密平坦的走线区域可以适当放宽。以我的经验一套中等规模的BGA封装加密设置之后网格量会到数百万级跑一趟大概几分钟到十几分钟。如果仿真时间短到几秒钟多半是网格太粗收敛结果不可信如果跑了几小时没动静多半是网格设置太细检查一下是不是把整个基板平面划分了均匀细网格。3.4 生成IBIS模型XtractIM的自动映射能力仿真跑完之后接下来就是生成IBIS。XtractIM这里有个专门的模型生成流程可以选择直接输出IBIS Package描述段也可以输出SPICE网表或者S参数。如果目标是IBIS它在输出时会自动完成RLC等效电路提取再按照IBIS语法规则映射到[Package]段落和[Pin]表格中。需要手动参与的地方是确认信号pin对应的model_name映射关系。XtractIM知道这个网络是信号还是电源但它不知道这个信号在IBIS里应该对应SIGIN、SIGOUT还是SIGIO以及使用哪个I/O buffer行为模型。这通常要从厂商给的I/O buffer数据或IBIS文件模板里复制映射关系再跟XtractIM生成的封装信息合并。这一步不要偷懒做一次仔细的diff后面仿真会省很多深挖问题的力气。3.5 导出与初始校验导出IBIS文件之后我习惯先用文本编辑器做一遍结构校验检查[Pin]段落里引脚数量跟封装的引脚数是否一致检查[Package]段落里R_pkg、L_pkg、C_pkg的量纲是否正常电感值量级是不是nH级别、电容是pF级别检查[Pin Mapping]段落里signal name跟原理图里的信号名是否匹配如果这三项都没问题基本可以进入电路仿真验证环节了。如果发现问题不要急着手动改IBIS文件回到前面的端口定义或者叠层设置去查原因。直接手改文件容易把工具生成的RLC一致性破坏掉后面出问题更难排查。4. 避坑指南封装寄生提取里最容易翻车的四个环节4.1 Dieside端口定位不准电感值整体偏移这个坑我刚开始做的时候踩得最狠。有个DDR4的封装模型提出来L_pkg比厂商参考值大了一倍多怎么看都不对。排查过程不算顺利因为工具提示没有报错仿真也正常结束只有结果数值“看起来不太合理”。后来我把die端端口位置从bond finger中心微调到了靠近chip边缘的位置再跑一遍L值立刻降下来了。原因在于die端口的参考点位置不同电流路径的长短就不同提取到的回路电感自然不同。端口位置偏移几十微米高频下电感值就可能偏差20%以上。所以设置端口的时候最好是开启显示焊盘和bump的中心,把port点对到中心区域,并且逐个截图留档方便出问题时对比。4.2 参考平面设置错了特征阻抗和电感值一起乱掉还有一次是给一个FCCSP封装建模型信号从die端走到BGA球至少要跨两个地层。我图省事把参考平面设成了最近的一层GND结果提取出来的特征阻抗比期望值低了差不多15欧姆。排查的时候我把叠层截面图打开仔细看了一遍发现问题出在那层“GND”并不是完整的参考平面它在中部被一条电源走线劈开了一大块。信号跨过这个缺口的时候回流路径绕到更下面的地平面实际回路的面积变大电感变大阻抗自然就变了。修正办法是把参考定义为完整地平面或者在做端口设置时给这个网络补上两个地端口让求解器自动找到最短回流路径。这个场景特别提醒现在先进封装里电源地网络越做越碎你是不是真的了解每一层平面的完整度设置参考平面之前先把电源地网络完整性检查做了能省不少事。4.3 网格密度只看数值不看结构网格密度对仿真精度的影响相信大家都知道但网格策略怎么定很多教程没细说。我见过有同事把所有结构都用全场均匀细网格去跑一个封装跑了三个小时也见过网格开太粗S参数扫出来曲线全是毛刺的。我的经验是分区域处理Bump、Wire bond、Ball这些低维结构用相对细的网格基板里的长走线沿着线宽方向加密长度方向可以稍微放宽大块的电源平面网格可以更粗因为平面的电磁场分布变化比较平缓。判断收敛最直接的办法是拿粗细两套网格各跑一次比较指定频点的S21插损差异。差异在0.1dB以内基本收敛了。如果差异超过0.5dB建议检查网格设置而不是急着调别的参数。4.4 叠层材料参数不填等于让工具猜最后一个常见坑是叠层材料参数缺失或者填错。封装基板常用材料BT、ABF、PI这类它们的介电常数在3~5之间、损耗正切在0.01~0.02量级。数值看起来不复杂但对仿真结果的影响是系统性的。记忆比较深的是一个案例叠层图里写着“Dielectric A”但没说具体是什么材料我一时没查资料默认用了FR4的参数。结果整个仿真频段内插损都偏大串扰也异常。后来查了材料手册换了实际Dk和Df参数跑出来的结果跟实测S参数对上了。这类问题在排查链路上经常被遗漏因为工具不报错数据也合规但结果就是跟实测差一截。填材料参数前多做一步确认比事后花两天debug划算得多。5. 交付前验证一份IBIS模型能不能用拿数据说话5.1 用S参数相关性检查给提取结果打分IBIS模型生成之后我习惯了做交叉验证。因为IBIS本质上是对真实互连的等效模型简化是必然的但简化后的行为要跟真实结构的S参数吻合到一定程度才敢交给下游。具体做法是在XtractIM里同时导出S参数文件然后在PowerSI里用同一份封装设计文件做一次完整的三维全波仿真把两者的S21、S11曲线放在一起对比。重点关注目标频段内的插损回损差异。准备交付的IBIS模型应该满足在信号基频及3次谐波频率范围内S21差异控制在0.2dB以内S11的回损谷值趋势一致。如果两者相差过大说明等效RLC电路还没把真实的频变效应抓准需要回XtractIM检查端口定义或网格设置。5.2 在Designer里快速跑一条真实通道验证S参数拟合做得再好最终还是要看电路仿真里的表现。我会把生成的IBIS模型放到Cadence的Designer里搭一个最小通道发送端用IBIS模型经过一段封装级传输线模型或者直接从IBIS里取封装段接到接收端IBIS模型然后跑一个快速眼图仿真。这个验证的要点不是追求跟实测完全一致而是确认几个基本行为正确信号电平摆幅正常、上升沿没有明显畸变、眼图的开启度和抖动在合理范围内。我曾经遇到过一个IBIS文件静态检查完全正常RLC量级也对但放到Designer里发现高电平只有0.9V最后查到是[Pin Mapping]表里的电源引脚映射错了把VDD映射成了signal类型。这类问题只有跑仿真才能暴露出来单独看文件是看不出来的。5.3 交付的时候别只丢一个IBIS文件模型验证通过后交付时最好连带以下几项能省掉接收方大量“考古”的时间。交付物内容说明IBIS文件最终版本附带版本号和生成日期S参数原始数据用于接收方独立做频域对比的底稿提取报告端口定义截图、频率范围、收敛标准、材料参数来源使用说明适用的封装版本、信号速率范围、已知限制比如高频段的误差趋势我看到过太多人交付一个孤零零的IBIS文件接收方拿过来不知道适用范围也不知道这个模型的频率上限最后在某个高频信号上仿真不准回头又找建模的人“吵架”。把提取报告和使用说明一起给出去这件事就不用拉扯了。还有一个小技巧自己维护模型库的时候给每个模型命名加上封装代号和版本号。同一个芯片用过两个封装模型就存在两个版本千万别用“final”这种命名。我吃过这个亏后来养成了“芯片型号_封装型号_模型版本_日期”的命名习惯哪怕是跨了大半年的项目回头翻模型库还是能一眼找对模型。
返回列表