ARTICLE DETAIL

资讯详情

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

从封装版图到IBIS模型:Sigrity XtractIM寄生提取实战指南

从封装版图到IBIS模型:Sigrity XtractIM寄生提取实战指南 做板级信号完整性仿真的人绕不开IBIS模型。以前我还在用器件手册里那份老掉牙的IBIS文件时经常被DDR、PCIe这类高速接口的过冲和振铃问题折腾得够呛后来才明白问题并不全在芯片的I/O结构上很大一部分藏在封装互连的寄生参数里。Sigrity XtractIM就是专门干这个活的工具它能从封装版图里把互连寄生参数提出来再生成可以直接给SystemSI、HyperLynx这类工具用的IBIS模型。这篇文章我会从实际项目出发把XtractIM生成IBIS模型的完整流程拆开讲包括前期准备、参数设置、实际操作以及我踩过的一些坑。如果你刚开始接触封装建模或者已经折腾过但总觉得模型哪里不对这篇内容应该能帮你少走不少弯路。整个流程熟练之后确实可以做到5分钟内完成一次常规封装的模型生成但是前提条件是你对工具的设置和背后的物理概念有清晰理解而不是机械地一路点Next。1. 先搞清楚三件事IBIS、封装寄生、XtractIM各管什么很多做数字电路的朋友听到IBIS就头疼觉得这是模拟工程师才会碰的东西。其实不然IBIS模型几乎是所有板级仿真器的通用输入语言无论是做信号完整性、时序分析还是串扰评估都需要给仿真器提供准确的模型。要理解XtractIM生成IBIS模型这件事首先得把IBIS本身的定位、封装寄生对信号的影响以及XtractIM在工具链中的位置理顺。1.1 IBIS模型到底是谁在用为什么不能直接用SPICEIBIS全称是Input/Output Buffer Information Specification说白了它是一个行为级模型标准。与SPICE模型不同IBIS并不包含芯片内部的晶体管电路层级信息它只是用一张查表的方式来描述芯片引脚在输入和输出时的电气行为比如输出驱动的V/I曲线、上升沿过冲、封装引脚的寄生RCL等。这样的好处非常明显芯片原厂不用担心自己的工艺细节被逆向模型文件体积小仿真速度又远比晶体管级SPICE快。通常板级SI工程师拿到的IBIS文件里会包含[Component]声明、[Pin]列表、[Model]定义和[Package]参数。很多人只知道把文件丢给仿真工具就能跑波形却忽略了最底层的[Package]R_pin、L_pin、C_pin是从哪来的。如果没有准确的封装寄生参数哪怕Buffer模型再精准仿真出来的波形和实际测试也经常对不上。1.2 封装寄生是怎么影响信号质量的芯片从die上的pad到封装引脚之间通常要经过bump、RDL走线、过孔、bond wire、引线框架或者焊球这些结构都有金属电阻、自感和互容。低速的时候这些寄生参数确实可以不看但到了DDR4-2400以上的速率甚至PCIe Gen4/Gen5这类高速接口封装引起的信号延迟差、阻抗不连续和串扰就成了实实在在的问题。我用一个生活化的例子解释你从客厅路由器到卧室电脑拉一根长网线线缆本身的电阻和分布电容就是寄生参数。加密场景下你可能不在意但如果是千兆甚至万兆网络网线质量但凡差一点丢包和降速马上就来了。芯片封装也是同一个道理只是它工作在更高的频率尺度上。XtractIM做的事就是把封装里这些网络之间的寄生参数用电磁场求解的方法算出来并整理成标准的模型格式。1.3 XtractIM在整个流程里的定位和它能输出的东西XtractIM是Cadence Sigrity系列中专门针对封装和互连结构做寄生参数提取的模块。它可以从版图文件里识别网络结构、定义端口和参考地然后通过电场磁场求解得到互连的R、L、C矩阵再把这些参数映射成多种模型格式。对于IBIS模型生成来说XtractIM可以说是流程里最顺手的一环因为它在生成模型之前会先做好寄生提取而不像手动填R_pin那样靠估算。除了IBISXtractIM还能输出HSPICE网表、S参数模型和W-element模型所以它不只服务于IBIS这一个场景。对于单颗芯片封装你可以同时获得SPICE模型用于链路仿真、S参数用于频域分析和IBIS模型用于系统级工具一套提取结果覆盖多种使用场景这是它很实用的一点。2. 开工前准备文件、工具链与5分钟路径的真相很多人一看“5分钟搞定”就冲进来但我要先把丑话说在前面5分钟是熟练工在数据齐全、封装结构清晰的前提下的实际水平。如果你是第一次接触光是配置层叠和网络定义可能就要花上一两个小时这是正常现象。与其急着求快不如先把输入文件和路径理顺。2.1 需要准备的四类关键输入文件用XtractIM做封装寄生提取第一步不是打开GUI而是把输入数据整理好。常用的版图格式包括Cadence的.brd、GDSII的.gds、MCM模块的.mcm以及ASCII互连描述文件。除了几何版图还得有叠层表信息也就是每层介质的厚度、介电常数和损耗角正切。这里要特别强调材料参数直接决定分布电容和时延的准确度。很多封装厂给客户的叠层表里只会简单写个FR4或者ABF但实际上不同厂家的板材Dk和Df差异很大。你如果拿到板子的叠层信息不够细至少也应该从封装厂要到介质层的Dk/Df值否则后续提取的电容参数可能偏得离谱。另外还需要网络的连接关系。通常GDS或者BRD里已经包含了网络信息但最好还是准备一份pin-to-ball的映射表特别是倒装芯片结构里bump和ball分别对应哪一层的net这个很关键。缺少映射表的话XtractIM只能靠版图自动识别一旦有多层RDL交叉容易把bump和ball对应错。2.2 没有原厂模型时怎么下载和选参考模型有时候封装的IBIS模型原厂确实没提供或者只给了老版本的模型不够新封装用。这时候有人会想到直接去网上下一个IBIS模型文件来参考。下载没问题但得有几个原则。首先参考模型只能用来理解文件结构和参数含义不能直接拿来仿真其次是下载的时候注意查看模型的Date、Vendor、Corner描述确认里面包含的封装引脚数量和你用的封装一致引脚名称也要对得上。真正的做法应该是用XtractIM针对你自己的封装版图做提取生成专属于这颗封装的模型。网络上的参考模型可以当作格式模板让你了解一份标准的IBIS文件长什么样但是寄生的RLC只能用准确版图提取。如果封装厂实在连版图都给不了那就只能退一步基于厂商的引脚电容电感参数做一个初值模型但精度上就不要抱有太高期待了。2.3 所谓的5分钟其实是这个状态刚开始你用XtractIM可能光是用画图界面去确认封装结构就花去大半天这很正常。5分钟的前提是你的工程文件里已经有了完整的层叠定义和材料参数甚至可以直接从上一代封装复用一个类似的模板工程。然后你只需要导入新版图、映射一下网络再去跑一次提取。所以如果你刚接触这个流程先别盯着5分钟而是建立一个自己的模板工程。把常用封装类型比如BGA、QFN、WLCSP的层叠和材料参数提前配好有了模板之后新的封装导入进来就是改改厚度和网络名的事效率自然就上来了。3. 核心实操从导入版图到输出IBIS模型的完整流程这部分我会按实际操盘顺序来写每一步在哪里点、怎么设、为什么要这么设一并说清楚。XtractIM的界面不算复杂但有些按钮藏得比较深尤其是生成IBIS模型的向导找起来得花点时间。3.1 新建工程与导入封装版图打开XtractIM之后第一步是新建工程然后在File菜单里选择导入已有的版图文件。如果你手头有Cadence的BRD文件导入过程基本是无缝的如果是GDS文件需要确认一下版图的单位是微米还是米尔否则后面所有尺寸都可能差25.4倍。导入之后可以打开Layer窗口看一下各层是否完整导入比如die顶层、RDL层、介质层、BGA焊球层等。如果版图里有些层是辅助画图用的注释层不会参与实际导体定义建议在导入完成后手动选择参与提取的导电层避免把一些没有电气意义的图形也当成金属来提取。3.2 层叠与材料参数设置最容易被坑的一步版图导入只是几何信息层叠信息通常不会自动出现。必须在工具里手动把每一层的类型、厚度、材料填进去。导电层有top和bottom之分介质层则要区分core和prepreg。设置的时候要注意厚度的单位XtractIM里多数情况默认是um但有的导出版图可能以mil为基准切换时一定要核对一遍。材料上铜的电导率通常取5.5e7 S/m但更严谨的做法还要考虑表面粗糙度。高频下表面粗糙度对导体损耗影响很大。XtractIM里可以定义表面粗糙度模型比较常见的有Hammerstad和Huray模型。如果你在做的是10Gbps以上信号建议开Huray模型并设置一个初始的粗糙度值比如0.5um到1.5um。这里如果偷懒不设置提取出来的导体高频损耗会偏乐观仿真结果会显得比实测好但你自己心里要清楚那是假象。介电常数的设置也有讲究。不同频率下Dk会略有变化XtractIM允许设置一个随频率变化的材料曲线但在常规操作中先填一个常态值比如4.2或者3.8也能得到可接受的结果。关键是Df损耗角不要填零否则介质损耗会被完全忽略。3.3 网络、Pin与端口的定义逻辑层叠设置完之后就要做网络映射。工具会从版图图形上自动提取导体网络但网络名可能带着冗余前缀比如VDD_1P8_C2。最好先做一轮网络名整理把电源、地、高速信号、低速控制区分开。这一步在做IBIS模型时尤其重要因为IBIS里每个网络都要对应一个物理Pin网络名混乱会直接导致模型里引脚定义错乱。端口定义是提取的重点。XtractIM中有一个Generate IBIS Model的流程你可以在流程里指定每个端口对Port Pair一般是从die的bump或者RDL层的一个位置指向封装的球或引脚。这个位置要尽量模拟实际信号走向即从Buffer输出开始经过封装互连到达芯片引脚。所以在定义端口时参考端通常就是地网络信号端是目标网络。对于多引脚封装建议先在版图里高亮查看每条网络的实际走向再批量创建端口。不要手动一个个去拉效率很低而且容易漏掉网络。3.4 运行RLC提取与IBIS模型生成端口定义完成之后就到了仿真提取环节。XtractIM的求解器会做频域的电场磁场求解得到各网络间的RLGC矩阵。频率范围设置上常规做法从1MHz扫到20GHz点数设20到40个对数间隔点就够。如果只是低速接口范围可以缩到5GHz计算更快。提取结束后你可以查看每个网络的R、L、C随频率变化曲线。这里要特别留意低频段的直流电阻值如果看到的R值非常小或者为0说明端口设置可能有问题比如参考地网络连错了。正常来说一条几毫米长的封装走线直流电阻在几十到几百毫欧范围。模型生成的环节则在提取结果的基础上一键完成。XtractIM会读取提取的时间常数和阻抗参数填充到IBIS模板中生成一个后缀为.ibs的文件。生成时你可以选择生成单端模型或者差分模型具体看你需要仿真什么接口。如果是DDR这类单端总线就选单端模型PCIe这类差分接口最好生成差分模型这样后续仿真更准确。生成后的.ibs文件不要直接拿去用仍需要检查里面的[Package]参数是否与提取结果一致。正常情况下R_pin会在0.1到0.5欧姆之间L_pin在0.5nH到3nHC_pin则与走线离地平面的距离相关典型值在0.1pF到1pF之间。如果你看到的数值量级不在这个范围就要回头检查端口参考的设置。3.5 导出后的IBIS文件长什么样一份生成的IBIS文件关键部分是[Component]声明和[Package]参数。[Component]里会有每个Pin的信号名和信号模型对应关系[Package]里则是封装寄生参数的汇总。下面是一段典型的IBIS文件中与封装寄生相关的片段[Component] DDR4_SDRAM_PKG Manufacturer ExampleChip Package BGA96 | pin signal_name model_name R_pin L_pin C_pin [Pin] signal_name model_name R_pin L_pin C_pin A1 DQ0 DQ_MODEL 312.0m 1.812n 0.412p A2 DQ1 DQ_MODEL 298.0m 1.763n 0.401p A3 DQ2 DQ_MODEL 305.0m 1.798n 0.418p ... [Package] | variable typ min max R_pkg 281.0m 220.0m 340.0m L_pkg 1.742n 1.600n 1.890n C_pkg 0.390p 0.350p 0.420p真实工程文件里的数据比这段更规整但意思一致。这里有个细节[Pin]列表里的R_pin、L_pin、C_pin是每个引脚单独的封装寄生而[Package]里的R_pkg、L_pkg、C_pkg是整个封装统计的平均值。在做系统仿真时有些工具优先读[Pin]字段有些则用[Package]字段求平均所以这两个地方都要保证是提取结果填进去的不能一边是提取值一边是模板默认值否则仿真器的表现会不一致。4. 避坑指南我踩过的坑和排查方法模型生成不是点个按钮就完事真正考验功力的是模型质量和异常排查。这部分我把这些年遇到的典型问题整理成清单包括现象、原因和解决办法希望能给你做参照。4.1 版图单位混乱导致的寄生值逻辑异常最常见的坑就是单位。比如GDS版图设计单位是微米你却按mil导入了工具结果所有尺寸自动放大了25.4倍。这样的危害不只是数值不对更麻烦的是连网络重叠关系都有可能错乱本该是同一层的金属图形可能错位到别的层提取出来完全是一堆没有物理意义的数据。解决办法只有一个导入后第一时间在窗口标题栏或单位设置界面核实单位信息。如果你是搞封装设计的也建议把源版图的设计单位写在一旁备注开工前先对一遍再往下走。真遇到单位错乱的图形不要硬着头皮手工改而是返回版图重新导出一次。4.2 参考平面缺失导致电感虚高在定义端口参考的时候如果某条网络没有对应的地网络作为参考XtractIM会自动选择返回路径但这里的返回路径不一定是真实工作状态下的地平面对。这种情况下提取出来的电感经常偏大有时甚至能高一倍。比如全差分对的耦合电感如果参考地选错L值会明显偏离后续做串扰或者时序仿真都会受影响。排查的办法也很直接跑完提取后查看指定网络的L矩阵确认自感量和互感值的相对大小是合理的。如果你心里没底可以先用一条短地和一条信号线做一个最小验证用例确认参考地选对时L值在一个正常区间然后逐步扩大网络集。4.3 Bump和Ball映射错位引起IBIS引脚混乱倒装芯片封装里die上的bump和封装外的ball往往不是直连关系中间有RDL走线转接。PCB工具里用的网络名可能是Bump网络名而IBIS模型里Pin名则需要对应到BGA ball的方向比如A1、B2之类。如果直接拿自动生成的网络名填到IBIS的[Pin]字段里后续在PCB布线工具中做仿真时信号就无法与真实顶层芯片引脚对应上。实操中我习惯先建立一张映射表把每个bump网络名、ball位置、信号功能列出来。然后映射网络时根据这张表做核对确保最终IBIS模型的[Pin]里写的就是PCB封装库使用的引脚名。4.4 模型初值校验的几个快速方法生成IBIS模型后有一种最快速的方法做初值校验那就是用文本编辑器直接打开文件先把模型里的R_pin数量和你预期的pin count对一下。正常情况下IBIS文件中的[Pin]列应该与封装引脚数完全一致多一个少一个都说明网络定义有问题。另外一种校验方式是把提取结果里的阻抗曲线与手工简单估算做对比。比如你知道某根走线是1mm长、30um宽、1um厚的铜线就可以粗略算一下它的直流电阻再利用自由空间电感公式估算自感的数量级。如果提取结果和估算差了一个数量级那一定不是工具算错而是你的输入设置里有什么是错的。这些校验方法不能替代实测但能第一时间过滤掉很多低级错误。4.5 常见问题速查表我把常见问题整理成一张表方便你在项目现场边做边查现象可能原因解决方法R值几乎为0端口参考错误或网络未连通检查参考地网络选择确认导体连接关系L值明显偏大参考返回路径选择不当在端口设置中指定实际地网络作为参考C值忽大忽小层叠介质厚度或材料Dk设置错误核对叠层表逐层确认厚度与材料参数Pin数量对不上Bump和Ball映射混乱建立网络映射表逐项核对IBIS文件仿真报错文件版本与工具不兼容更新IBS版本检查语法是否完整高频损耗偏乐观未设置表面粗糙度模型开启Huray模型设置合适粗糙度参数结语个人体会做封装建模这些年我最大的感触就是工具越强大人的责任越大。XtractIM可以非常快地生成一个看起来完美的IBIS模型但模型的准确性始终取决于你对封装物理结构的理解和对输入数据的把控。每次生成模型之后我习惯把原始的RLC提取结果文件也一起存档这样一旦后面发现仿真异常至少还能回头比对是封装参数的问题还是Buffer模型的问题。最后提醒一句下载任何外部IBIS模型之前先确认它的引脚定义和工艺版本永远不要拿别人的模型冒充自己的封装参数去仿真。希望这篇实战笔记能让你少踩几个坑。
返回列表