
做BGA扇出这件事说难不难说简单也真不简单。尤其到了Cadence Allegro 17.4这套工具链里很多人第一次给0.8mm甚至0.5mm pitch的BGA做扇出时脑子里想的还是“把线拉出来就行”结果拉完一看DRC满屏飘红差分对绕不出去过孔位置还挡住了相邻球的出线通道。我自己早期做第一版0.5mm pitch FPGA板卡时就因为扇出前没想清楚参数硬生生浪费了两天改规则、重扇出后来才总结出一套比较稳的流程。这篇文章就把我在17.4里做BGA扇出的完整思路、参数设置和踩坑经历整理出来希望能让正在做封装库、画板框、规划叠层和布线阶段的你少走点弯路。1. 先搞明白BGA扇出到底在解决什么问题1.1 扇出不是“把线拉出来”那么简单BGA扇出Fanout简单说是把芯片底部的焊球阵列通过走线和过孔引到表层或内层再连接到其他器件。但它真正的目标有两个一是把BGA内部区域的走线通道“解放”出来让后续布线能继续往深处推进二是在信号完整性上给高速信号安排一条阻抗可控、回流路径清晰的通路。如果你只是把BGA当作一个密脚连接器随手拉几根线、打几个过孔后续问题会非常明显。比如中心区域的电源地过孔挤在一起导致最内圈信号线根本没有空间下到内层或者为了躲避过孔信号线被迫绕了一个大圈高速信号反射和串扰直接超标。所以说扇出本质上是布局和布线之间的一个“规划动作”不是单纯的一步操作。1.2 从BGA封装结构反推扇出方案做扇出之前要先把BGA的封装参数看透。一般需要关注四个值焊球间距Ball Pitch单位mm或mil焊盘直径Pad Size/BSO这是BGA焊球的底部焊盘不是封装丝印封装体尺寸Body Size边缘到第一排焊球的距离Edge to Ball。这些参数决定了你能用多大过孔、走多宽线、留多少间距。以0.8mm pitch的BGA为例焊盘直径一般在0.35~0.4mm如果是狗骨头Dog-bone扇出过孔打在焊盘外侧那么相邻焊盘之间能利用的空间非常有限。我习惯先算一个基础公式相邻焊盘中心距 pitch焊盘半径 过孔半径 焊盘到过孔的间距 走线宽度 安全间距这些值加起来必须小于等于pitch才能保证一排焊盘都能独立扇出。比如0.8mm pitch下如果用8mil0.2mm钻头、16mil0.4mm焊盘的过孔焊盘到过孔按4mil间距过孔中心到焊盘中心大约需要0.20.10.10.4mm正好卡在0.8mm的一半那么内圈两排焊盘之间基本勉强能挤出通道但线宽必须压到4mil左右。所以扇出方案不是先从Allegro的菜单开始而是先从“封装几何工艺能力”的这组数字开始。很多后期改来改去的麻烦都是因为第一步没算清楚。2. 动手前必须定好的参数2.1 叠层和线宽线距先定下来不然扇出就是空谈在Allegro 17.4里做扇出前必须先把叠层结构、参考平面、芯板和半固化片厚度确认好。叠层直接影响目标阻抗而目标阻抗又决定线宽线距。如果叠层不固定扇出用的走线宽度就是拍脑袋后面调阻抗时才发现线宽不够或太宽整个扇出区域可能要重画。常规做法是先确定层数和走线层把TOP和BOTTOM作为器件层和扇出层定好单端阻抗如50Ω和差分阻抗如100Ω用叠层计算工具反推线宽线距至少留出一层完整的地平面作为参考平面不要让BGA下方被掏空。叠层具体数值每家板厂略有差异但一定要在扇出前把“目标阻抗-线宽-介质厚度”这条链锁定。锁定了以后你在Allegro约束管理器里设置的Physical规则才是有依据的。2.2 过孔尺寸是BGA扇出的核心参数BGA扇出最常用的过孔就是“盲埋孔”和“通孔”。常规通孔成本低、工艺简单但占用的空间大激光盲孔Microvia适合0.5mm pitch以下的高密度场景但会增加成本和加工复杂度。对于通常的0.8mm~1.0mm pitch板卡我还是推荐先用通孔做扇出配合适当的焊盘尺寸和线宽控制。这里整理一份我常用的选型参考BGA Pitch过孔钻头过孔成品孔过孔焊盘推荐线宽扇出方式1.0mm0.3mm12mil0.25mm0.5mm20mil5~6milDog-bone通孔0.8mm0.25mm10mil0.2mm0.4mm16mil4~5milDog-bone通孔0.65mm0.2mm8mil0.15mm0.35mm14mil4milDog-bone或HDI0.5mm0.15mm6mil0.1mm0.3mm12mil3.5~4milHDI盲孔/盘中孔注意这只是起步参考实际还要结合板厂钻孔能力、成品铜厚、孔壁铜厚来调整。孔径越小成本和加工风险越高不是越小越好。2.3 焊盘与反焊盘参数不能漏建过孔时不要只盯着钻孔直径和焊盘直径反焊盘Anti-pad尺寸和热焊盘Thermal Relief参数同样关键。反焊盘太小过孔在电源/地平面上的阻抗不连续会放大反焊盘太大又容易让平面层被切开影响回流路径。内层反焊盘一般比钻孔直径大0.3~0.5mm视叠层和信号速率来调整。电源层连接方式可以选花焊盘或直连但大电流场景下花焊盘的连接筋宽度一定要够不然过孔载流能力打折。这些小细节做扇出时不会立刻体现但板子跑高速、过大电流时就会暴露出来。3. Allegro 17.4里的扇出实操与命令细节3.1 Padstack Editor里建好“BGA专用过孔”Allegro 17.4里建过孔用的是Padstack Editor我强烈建议单独建一个带BGA后缀的过孔不要直接用普通过孔凑合。这样在扇出时可以精确控制每一个物理参数也方便后续统一修改。具体步骤打开Padstack Editor新建一个Through Hole类型的焊盘定义钻孔尺寸例如Drill diameter填0.25mm设置Start/End层和Default Internal层的Regular Pad尺寸如0.4mm圆形焊盘设置Anti-pad尺寸如0.6mm和Thermal Relief参数保存为类似“VIA_8_16_BGA.pad”的名称方便识别。这里有一个容易忽略的点Allegro里“Regular Pad”影响布线层的连接区域“Thermal Relief”和“Anti-pad”影响平面层。如果你把内层都设成圆形满焊盘平面层就没办法做花焊盘或隔离DRC容易出短路。正确做法是给电源/地层单独设置热焊盘连接别省这一步。3.2 约束管理器里的规则怎么设才不拖后腿Allegro 17.4的Constraint Manager是扇出前的重头戏。做BGA扇出我会优先设置两组规则Physical和Spacing。Physical规则里主要设置最小线宽比如4mil差分对线宽和间距过孔列表把刚才建好的BGA过孔加进去最大走线长度可后续再个别约束。Spacing规则里主要设置线到线、线到过孔、过孔到过孔的最小间距过孔到焊盘、焊盘到焊盘的特殊间距。如果你有多个BGA或者BGA区域内线宽和板子其他区域不一样建议在Constraint Manager里专门建一个Physical Constraint Set和Spacing Constraint Set然后通过“Region”或“Net Class”应用到BGA区域。这样不会影响外围宽松区域的布线密度。我踩过的一个坑是把所有网络的间距都设成了统一的5mil结果外围区域布得很宽松但BGA内部空间根本不够DRC一片红。后来给BGA区域单独建了Region内部间距放宽到4mil尺寸才收敛下来。这个教训说明规则不是越紧越好而是该紧的地方紧、该松的地方松。3.3 给BGA区域设置Routing Region在Allegro里给BGA单独划分一块Routing Region是一个很实用的操作。方法是在Board Geometry或Constraint Region层用Z-Copy画一个矩形再把它分配到对应的约束区域。具体路径Display → Setup Constraints → Constraint Manager → Electrical → Routing → Region然后在板框上创建Region并赋予物理/间距规则。这样做的好处是工具在扇出和布线时能自动遵守区域内的宽度和间距约束你不用手动去逐根线调整线宽。尤其在自动扇出时没有Region约束的BGA出来的线宽五花八门后面整理起来非常痛苦。3.4 手动扇出的常规顺序和命令虽然Allegro有自动扇出功能但在很多复杂BGA场景下我仍然建议至少外圈2~3排采用手动扇出控制因为外圈焊盘还要兼顾连接到外围器件出线方向需要人为判断。手动扇出的思路先用Route → Connect从BGA焊盘拉出一小段走线到过孔位置切换到过孔命令选择合适的BGA过孔打过孔后设置好下层的走线方向用Slide调整走线位置边扇出边按“R”键切换走线拐角模式优先使用45度角方便后续挤线。这里有个实操技巧如果你要从表层往下走建议过孔打在焊盘的“外侧”也就是远离BGA中心的方向。不要打在一个焊盘和相邻焊盘之间否则另一排焊盘想出线就没空间了。还有个小细节使用Route → Connect时鼠标右键可以快速选择“Add Via”并同时选择过孔型号。如果你发现右键菜单里的过孔灰色不可选大概率是Physical规则里没把该过孔加入允许列表回到Constraint Manager里加上即可。3.5 扇出线短的优先级比“整齐”高很多人做扇出时喜欢追求视觉上的整齐把所有走线拉成标准45度角、长短一致。但BGA内部空间本来就紧张过度追求整齐反而会牺牲可布通率。我自己的优先级是先保证每一排焊盘都能顺利扇出不打架再保证关键信号时钟、高速差分、敏感模拟走线尽量短最后才是视觉上的整齐。例如0.8mm pitch BGA内圈焊盘扇出时我往往会让相邻两排走线采用“一长一短”的错位策略因为这样做能有效拉开线与线之间的并行长度减少串扰。虽然看起来没那么规整但信号质量和布通率都更可靠。4. 自动扇出与手动修正的配合4.1 Route → Fanout by Pick到底帮你做了什么Allegro 17.4提供了一套自动扇出命令在Route菜单下可以找到Fanout by Pick和Fanout by Entity。它可以根据你设定的规则自动选择BGA器件批量生成扇出走线和过孔。自动扇出最大的优势是快对标准pitch、器件区域相对规整的BGA特别有效。我在1.0mm pitch、0.5mm pitch的芯片上都试过合理设置后自动扇出能在几分钟内完成几百个焊盘的初步扇出比自己一根根拉省太多时间。但自动扇出的前提是Physical和Spacing规则已经正确配置过孔已经加入允许列表BGA区域约束已经建立器件方向已经锁定不会被误移动。如果这些没准备好自动扇出的结果就是一场灾难有的过孔直接落在焊盘上有的走线长度绕成迷宫有的甚至把信号net连到了错误的位置。4.2 自动扇出之后的必查清单我不管自动扇出跑得多光鲜最后一定会人工检查这几个点过孔是否都在焊盘外侧且没有落在相邻焊盘的正中间每个网络是否只通过一段短走线从焊盘连到过孔而不是莫名其妙绕了一圈关键信号是否没有和高频噪声信号并行走很长距离电源和地过孔是否均匀分布在BGA下方区域而不是集中在一角是否存在“线到线间距局部过小”但DRC没报出来的情况比如0间距或负间距。这里说一个真实经历有一次我用自动扇出一个大封装FPGA刚跑完时DRC是干净的但等到做平面层分割时才发现有一组电源过孔全堆在左下角导致整块电源平面被切出一个大缺口回流路径崩溃。最后只能手动重扇了将近三分之一的过孔。所以自动扇出只是半成品能不能用还得靠人工判断。4.3 手动修正的常用技巧如果自动扇出的过孔位置不合适不用全部删掉重来。我常用这几个修正手段使用Slide命令拖动过孔和走线段Microvia模式下还能自动保持连接使用Delete命令只删除某根扇出走线保留过孔然后重新拉线使用Change命令统一修改线宽适用于发现BGA区域内线宽需要统一调整的场景使用Copy命令复制一组对称区域的扇出走线再翻转放置能节省大量时间。另外一个个人习惯在对BGA扇出做修正时把DRC模式切到“Incremental”或关掉实时DRC避免改线的过程中工具一直报警。但改完一定要跑一次全板DRC别图省事。5. 我踩过的坑和排查思路5.1 焊盘到过孔的间距被DRC反复报错这是最常见的问题。明明按参数表做了结果Allegro还是报“Pad to Via Spacing”错误。原因通常有两个一是约束管理器里的Spacing规则用的是默认值没有把新建过孔加入对应的约束集二是过孔焊盘和BGA焊盘其实已经在空间上重叠了只是肉眼没看出来。排查方法先打开Constraint Manager找Spacing Constraint Set看“Same Net Spacing”有没有把“Pad to Via”的间距设置到位用Show Element命令点一下报错的过孔和焊盘看实际坐标差如果坐标差过小就手动调整过孔位置或更换更小的过孔。很多时候问题不是出在规则上而是你把过孔放在了两个焊盘的几何交集内。这时候最优解不是硬调DRC而是调整扇出策略把过孔往焊盘外侧移。5.2 过孔打在焊盘上后面焊接直接出问题对于普通通孔工艺我不推荐在BGA焊盘上直接打孔Via-in-Pad除非是HDI设计且做了树脂塞孔电镀填平。普通工艺下焊盘上有孔会导致漏锡、空焊、虚焊小批量样板可能发现不了量产后良率直接崩。如果你迫不得已要在盘内打孔那么在Allegro里要设置好“Via at SMD Pad”的约束并且把过孔做成“Tented”或者塞孔处理。但是能做狗骨头尽量狗骨头别给自己挖坑。5.3 扇出时没考虑平面层后面分割电源时欲哭无泪这个坑我在4.2里提过一次这里再展开。扇出时你打下的每一个过孔都会在相邻的电源/地层上形成“孔洞”和“隔离区域”。电源/地过孔分布太集中等于把平面切开了一大块导致某些区域的电流路径变长、阻抗变高电源噪声会明显恶化。所以扇出时要刻意做“均匀化”高速信号过孔尽量分散不要扎堆平行穿过同一块平面电源和地过孔成对出现间距越小越好给回流电流提供紧邻的返回路径大电流的电源过孔数量要够不要为了节约空间少打过孔。我在做DDR4布局时BGA区域的电源地过孔就是按“一信号一地”的规则去设计的实测下来电源纹波和信号眼图都比第一版明显改善。5.4 差分对在BGA区域的间距和线宽被“同化”差分对出BGA时经常遇到一个问题设了100Ω的差分阻抗但BGA内部为了扇出走线间距被压缩到和普通单端线一样结果差分阻抗变成90Ω甚至更低等出了BGA区域又恢复到100Ω。这种阻抗突变会让高速信号反射眼图闭合。解决办法是在BGA区域内设置独立的差分对规则允许宽度和间距与外围不同如果BGA内部实在没有空间满足差分阻抗至少保证差分对内两根线长度匹配、耦合连续不要让差分对内的一根线走在BGA正中心另一根线走在边缘耦合不对称比间距略大影响更严重。5.5 扇出后发现芯片位置要调整结果整片重来BGA扇出是非常依赖位置的一旦芯片移动了哪怕0.1mm所有过孔和走线都可能失去最佳位置。所以在扇出前一定要把BGA的坐标、旋转角度、镜像状态全部确认好并且把位号锁定。如果后期确实要微调芯片位置可以先只移动外圈尚未扇出到内层的焊盘或者使用Allegro的“Symbol Edit”里做封装级调整尽量避免整板布线返工。我在最新一个项目里就把所有BGA器件的Fixed属性全部打开防止误操作。这样即使不小心框选了整块区域也不会导致芯片位置被意外拖动。6. 最后再交代几点经验做BGA扇出做得多了你会发现它其实是一个“算”大于“画”的环节。真正的高手不是鼠标用得有多快而是在打开Allegro之前就已经把pitch、过孔、线宽、间距、叠层这些参数在脑子里过了一遍。参数对了工具只是工具参数错了工具会帮你把错误放大得明明白白。我个人现在的习惯是接到一个带BGA的板子第一天不会急着打开17.4画封装而是先把BGA datasheet翻一遍把pitch、焊盘尺寸、封装体尺寸抄在纸上然后算一下可用过孔和线宽。叠层和阻抗要求确认后再进Padstack Editor建过孔最后才默默打开Constraint Manager。等到这些前置工作做完真正在Allegro里点鼠标的时间反而很短。另外我强烈建议每个做BGA扇出的人都维护一份自己的“过孔/线宽速查表”。不同板厂、不同叠层、不同pitch的BGA参数都会有差异但如果你有一份自己的参考表每次新项目就能快速定位到合理范围而不是从头试错。多用几次你自然会形成对BGA扇出的直觉那时候再复杂的芯片也不至于让人手忙脚乱了。