
BGA封装在高速数字电路里几乎成了标配从FPGA到DDR颗粒再到各类SoC动不动就是一颗0.8mm甚至0.5mm球距的大芯片。很多刚接触Cadence Allegro 17.4的工程师最头疼的不是画线而是拿到一颗BGA之后第一步的扇出Fanout就卡住了。扇出做不好后面走线绕到怀疑人生电源平面被割得千疮百孔DRC一跑几百个报错最后还得推倒重来。这篇文章我就结合自己在17.4版本里的实操经验把BGA扇出的参数设置、操作流程和避坑细节一次说清楚。这篇文章适合正在用Allegro 17.4做PCB设计、尤其是第一次独立处理BGA封装的朋友参考。我默认你已经能建好板框、导入网表、打开Constraint Manager但还没太搞明白扇出时那堆参数到底该怎么填以及为什么这么填。文章不涉及Verilog仿真不聊封装库怎么画专注讲清楚从扇出前准备到扇出后检查的一整条链路。1. 动手之前先把BGA扇出的全局思路理顺1.1 BGA扇出到底在干什么BGA扇出的本质是把芯片底部的球形引脚Ball通过走线引导到过孔再从过孔把信号引到其他层去。因为BGA引脚是阵列排列的引脚之间空间极其有限所以单纯靠表层走线根本不可能把所有引脚都引出来必须借助过孔换层。但扇出不是随便打个孔就算完。每一个过孔的位置、每个引脚引出线的方向、线宽线距取值都直接影响后续所有层的走线难度以及电源地平面的完整性。换句话说扇出是整个布线工程的地基地基歪了上面盖的楼全是危房。1.2 决定扇出方案的三个前提我在处理任何一颗BGA之前都会先确认三件事球距Ball Pitch、焊盘直径、以及叠层里过孔的规格。这三者共同决定了扇出的可行性和方式。先说球距。0.8mm球距的BGA相邻引脚中心距大约是31.5mil这个空间相对宽裕用常规10mil钻孔、18mil焊盘的过孔再加上4mil线宽基本能顺畅扇出。0.65mm球距约25.6mil就需要更小的过孔和更精细的线宽对板厂工艺是个考验。0.5mm球距约19.7mil几乎必须上盲埋孔技术通孔方案在这个间距下基本走不通。再说焊盘直径。BGA焊盘通常比球距小不少0.8mm球距对应的焊盘直径往往在12~16mil之间。焊盘越小引脚之间留给过孔和走线的空间就越多。如果封装库里焊盘画得偏大扇出的可用通道会被严重压缩这种情况我建议先回头把封装库修正了再开始布板。最后是过孔。通孔扇出用得最多成本低、工艺成熟但通孔会贯穿所有层对电源平面完整性影响大。盲埋孔能极大改善扇出质量和平面完整性但板子成本会明显上升。到底用哪种取决于产品的成本压力和信号速率这个不存在标准答案必须在项目初期就定下来。1.3 0.8mm间距BGA的实用性参数估算我拿一个常见的0.8mm球距、25x25阵列的BGA来举例给大家一个可直接套用的参数起点。注意这只是参考值实际要结合板厂工艺微调。引脚中心距31.5milBGA焊盘直径14mil过孔钻孔10mil过孔成品焊盘18mil扇出线宽4mil表层过孔到BGA焊盘间距4mil扇出后BGA区域过孔间距按18mil焊盘4mil间距算中心距≥22mil这个组合下两个相邻引脚之间能放得下一个过孔而且过孔和相邻引脚焊盘之间还留出了4mil以上的安全间距基本可以顺畅地逐脚扇出。如果你的板厂能支持8mil钻孔、14mil焊盘那就更宽裕了不过成本和良率要另算。注意以上参数是基于常规FR-4工艺、1oz表层铜厚、普通HDI能力推导的。如果你的板子对阻抗有严格需求线宽和层叠会发生联动变化务必先用SI工具算好阻抗再反推扇出线宽而不是拍脑袋定一个4mil。2. 参数设置把规则建对扇出才不会翻车2.1 物理规则线宽和线距怎么定在Allegro 17.4里扇出参数的核心在Setup → Constraints → Constraint Manager。很多人一上来就点Route → Fanout by Pick结果发现参数全是灰的、命令压根不响应原因就是Physical和Spacing规则没设置好。打开Constraint Manager后找到Physical → All Layers这是定义线宽的主战场。我习惯在这个表里新建一档规则专门命名为BGA_FANOUT然后把线宽最小值设为4mil推荐值设为4mil最大值设为4mil。为什么最大值也锁死因为扇出阶段线宽统一、整齐后面走线阶段再按网络类型切换这样整个BGA区域看起来井井有条过孔间距也均匀后面修线的时候心里不慌。线距方面在Spacing约束里找Same Net Spacing和Different Net Spacing。BGA区域我一般设4mil或4.5mil。如果你的板厂工艺极限是3.5mil那4mil已经留了余量良率和可靠性都有保障。特别要注意的是Same Net Spacing有些版本默认是关的如果不打开过孔和它自己网络的铜皮、焊盘之间可能不会报间距错误等到出Gerber前才发现问题就是返工级别的了。2.2 过孔参数孔盘、钻孔、阻焊全都要管Allegro 17.4的过孔定义在Setup → Constraints → Physical → Vias或者用Padstack Editor单独编辑。BGA扇出用到的过孔关键参数就这么几个钻孔直径Drill Diameter、焊盘直径Regular Pad、反焊盘直径Anti Pad、热焊盘直径Thermal Pad、阻焊开窗Soldermask。以10mil钻孔的过孔为例成品焊盘取18~20mil比较常见反焊盘取22~24mil热焊盘取22~24mil。反焊盘的作用是给过孔和电源平面之间拉开距离防止意外短路热焊盘则是给过孔连接平面层时留出散热通道方便焊接。这些值都不用记死但至少要知道是干什么的。很多新手会在Padstack Editor里把所有层都加上焊盘结果过孔到内层时造成大面积短路。正确的做法是全贯穿通孔一般需要给所有布线层加Regular Pad如果有电源地平面层可以单独把这些层设为Thermal Relief或直接删掉Regular Pad让电源平面和过孔通过热焊盘连接。这个细节直接影响电源平面的完整性和过孔载流能力值得反复检查。2.3 间距规则BGA区域单独建一档Allegro的约束系统支持按区域Region分配不同规则这是BGA扇出必须掌握的技巧。在Constraint Manager里选择Spacing新建一个约束区域然后在PCB编辑器里用Shape → Rectangular或Circular画出覆盖BGA的区域把该区域关联到刚才新建的规则即可。这个区域规则的好处是BGA内部空间紧张用4mil间距BGA外围空间充裕可以用5mil甚至6mil间距两不耽误。如果不做区域规则全局间距设成5mil那BGA内部可能就放不下过孔了全局设成4mil外围又过于保守白白浪费走线空间和成本。实际操作时我习惯把BGA区域画成比封装本体略大一圈的矩形留出大概10~20mil余量让扇出的短线在宽松区域走完。区域边界要略微超出引脚阵列否则最外圈引脚的出线可能会落在规则过渡区造成设计意图不统一。2.4 约束管理器中三个容易漏掉的地方第一个是Via List。如果你定义了各种过孔但Physical规则里的Via List是空的扇出和手动打过孔时会发现压根选不了孔。记得把自己需要用的过孔全部加到规则里。第二个是Minimum Neck。它代表走线局部收窄时的极限值BGA扇出经常需要在线段头尾做过渡如果Neck值设得过宽改线时会很痛苦。我一般把Neck设为3.5mil或4mil和线宽一致或略低即可。第三个是BGA区域和相邻元件的相对位置。有时BGA旁边紧挨着连接器或DDR颗粒这种情况下区域规则之间会相互影响不仅要建BGA规则还得留意全局和局部规则的优先级。在Allegro里区域规则优先级高于网络规则高于全局规则这个层级关系要理顺不然规则冲突时软件按什么执行你可能一头雾水。3. 实操环节Fanout by Pick 一步步做下来3.1 调用扇出命令与基础设置确认约束规则都建好之后就可以正式扇出了。在Allegro 17.4中扇出命令在Route → Fanout by Pick或者直接在命令栏输入fanout。弹出的选项窗口里Options面板是核心里面有多个下拉项需要设置。首先是Via选择一定要选到你想要的那个通孔或盲孔不能让它Auto。其次是Fanout Direction一般选Away from Symbol也就是引脚朝外引出方向偏45度角居多。过孔偏移方向会根据引脚位置自动适应外圈引脚往外走内圈引脚往里走整体分布会很自然。若选Vias In Pads那就是直接在焊盘上打孔这种模式在智能手机主板里很常见但成本和维修难度都高普通项目慎用。然后是Pin Type过滤默认可能全部选中但我建议第一次扇出先把电源地引脚过滤掉只扇出信号引脚。原因很简单电源地引脚往往需要并联旁路电容它们的最佳扇出位置和信号引脚不同需要单独规划。等信号引脚扇出完再手工或单独处理电源地网络这样不会乱。操作顺序上建议先框选整颗BGA点Apply执行扇出。如果报错提示引脚无法扇出不要慌张那是约束规则太紧或者引脚空间不足先放大错误位置看是间距问题还是过孔选择问题。处理完一处再批量跑效率更高。3.2 电源地网络的处理多打孔不是玄学电源地引脚扇出和信号引脚思路完全不同。信号引脚只求把它引出来过孔数量一个就够。电源地引脚要求的是低阻抗和良好的散热通道所以单个引脚打两到三个过孔很常见。我在Allegro里通常的做法是先把电源地网络设为单独的规则允许更大电流线宽然后在电源地引脚周围手动或通过多过孔命令打孔。选中一个电源引脚按CtrlClick添加多个过孔通过走线与引脚焊盘连接。注意这些过孔间距要把隔热间距算进去防止电源平面被这些密集过孔切得太碎。有人会问多打孔会不会影响平面完整性当然会影响但电源地过孔密集区本身就是低阻抗连接的需求区合理的多孔设计是牺牲一部分平面面积换取电流路径和热通道。真正的坑不在于多打孔而在于该多打的没打、不该打的乱打。判断标准很简单从BGA中心往外的每个电源引脚至少保证打到两个孔且分布均匀信号引脚一个就够不要画蛇添足。3.3 内圈引脚与外围引脚的差异化处理一颗大BGA外围两三圈的引脚相对好处理走线距离短出线方向自由度高。真正头疼的是靠近芯片中心的引脚——它们被外圈完全包围如果所有引脚都往同一个方向扇出内圈孔会被外圈的走线完全堵死。解决思路有两类。一类是通过多阶盲埋孔直接把内圈引脚引到内层去比如激光孔打到L2层再在L2层往芯片外围走线。另一类是交错扇出技术——外圈引脚往外扇内圈引脚则通过更深层的过孔向下传再在L3或L4层绕出去。Allegro里实现交错的要点是给不同的引脚定义不同的过孔类型比如外圈用通孔、内圈用盲孔或者外圈用大孔、内圈用小孔。实际操作时我会先给最内圈信号引脚抽查几个位置确认它们扇出后在内层有足够的出线通道。如果最内圈引脚全部用盲孔引到同一层那这一层几乎会变成蜘蛛网后续走线同样会堵死。比较好的策略是把中间的引脚分散到不同的内层去每层只承担一部分内圈引脚的出线任务这样每层走线压力都小很多。3.4 差分对扇出的特殊设置高速信号里常常有USB、PCIe、Ethernet这类差分对BGA扇出时差分对引脚相邻排列如果按普通单端信号的方式逐脚扇出很容易把差分对拉开距离导致阻抗不连续。在Allegro 17.4里差分对的扇出建议在Electrical Constraints里先把差分对规则建好最小线宽、间距和耦合长度定义清楚。然后扇出时选中差分对引脚同时加两个过孔保持两条线并行等长出线。如果要手动微调选中差分对的一个引脚再按住Shift选中另一个引脚使用Route → Fanout by PickAllegro会自动将两个引脚一并处理。差分对扇出还有一个细节过孔位置应尽量对称。如果A脚和B脚的过孔错开太远差分阻抗的突变会明显加大。扇出完成后在板层里检查一下这对线的长度差早期发现早期调整。我见过不少项目扇出阶段不处理差分对后面绕线时才发现组内长度差怎么都绕不回来只能推倒重来。4. 扇出之后的五类典型问题与排查4.1 出线空间不够DRC乱报扇出后跑一遍DRC最常爆出来的就是间距违规和走线违规。很多人第一反应是去推线但在BGA区域线位本来就是排死的推线往往越推越乱。正确的排查顺序是先用标记功能把Error点全部标出来再按区域分析。如果是小片区域的间距违规十有八九是当时的扇出参数偏保守或偏激进。你可以把这片区域的走线删掉重新调整扇出方向或过孔位置再重新扇出。如果大面积违规说明规则和实际的工艺间距不匹配需要回到Constraint Manager把间距调大或调小而不是手工去一点点修。另外有个小技巧扇出完成后把BGA区域整体放大到200%以上用Display → Void/Shape检查铜皮和过孔的相对位置肉眼确认是否有看起来很近但DRC没报的情况。有些内部的电阻焊盘边缘和过孔之间软件默认不检查等做板回来才发现问题就晚了。4.2 电源平面被过孔割裂扇出时如果每个电源引脚都打几个通孔内层的电源平面会被这些孔打成筛子甚至出现断带。内层电源平面的电流路径一旦被割断供电能力大幅下降严重的会让芯片工作不稳定。解决手段首推盲埋孔。如果盲埋孔方案确定不了通孔方案下则要做好平面规划。具体操作是在Allegro里用Display → Shadowing或打开仅当前层显示切换到电源平面层观察被孔围出的区域是否形成了狭窄瓶颈。如果发现某处铜皮宽度明显小到不足以承载预期的电流可以在电源平面的适当位置追加铺铜或者调整部分电源地的过孔位置。还有一种做法是把部分电源引脚的热焊盘连接方式从Thermal Relief改成Direct Connect但要注意焊接散热风险最好和板厂沟通确认。4.3 回流路径不畅导致EMI隐患BGA芯片下方信号过孔穿过电源平面地层时如果旁边没有足够的地过孔提供回流路径高速信号的回流电流就会绕很远形成一个巨大的电流环EMI辐射随之上升。所以在扇出阶段就要养成习惯信号引脚密集打孔的同时要在地引脚旁边多布置几个地过孔。这些地过孔的作用就是为相邻信号换层提供紧邻的回流通道。具体布置没有绝对公式我通常的做法是BGA区域的地过孔数量占该区域总过孔数量的25%~30%并且分布上尽量均匀不要一边打了几十个地孔、一边信号孔周围空空如也。在Allegro里可以用Tools → Padstack → Modify Design Padstack把一些原本做信号用的过孔改成地孔但这只是后补方案。最好的办法还是扇出阶段就把信号孔和地孔的布局一起规划别等到后面EMI测试不过再亡羊补牢。4.4 电容摆放与扇出冲突BGA周围的去耦电容位置不是随便放的。电容离电源引脚越近电源回路阻抗越低抑制噪声越好。但如果你先扇出再放电容经常会发现电容落在了扇出短线的正上方要么盖住了过孔要么挡住出线位置。我的习惯是BGA扇出之前先把去耦电容摆到大致位置再针对电容附近的电源地引脚做定向扇出。电容靠芯片一侧用细线连接引脚过孔另一侧落在较大的平面区域方便接入电源地平面。有些工程师用Allegro的Room功能把BGA区域的电容固定在一个Room内避免后续移动误操作这个习惯很好我也推荐大家养成。电容的尺寸也直接影响扇出空间。0402电容比0603小一圈在BGA四周特别拥挤时能省出的空间相当客观。如果项目允许BGA周围去耦电容优先选择0402和0201别为了省事全用0603后面走线的痛苦只有自己知道。4.5 与板厂工艺能力对齐的检查表扇出完成后真正要和板厂沟通的不只是帮我做块板子而是要把扇出相关的参数明确写进工艺要求里。我给自己总结过一个检查表每次发板前都会过一遍过孔钻孔最小直径是否在板厂能力范围内盲埋孔阶数是否符合板厂主流能力BGA焊盘开窗与阻焊桥是否达标过孔与BGA焊盘之间最小间距是否达到板厂极限以上的余量线宽线距是否在板厂最小线宽以上并留出余量电源地过孔数量是否满足电流和散热需求这些条目不用全部写到图纸上但至少在给板厂的工艺说明邮件里要注明核心几项。很多时候返工不是因为设计错误而是因为设计与工艺能力不匹配沟通不到位。5. 写在最后的实操心得BGA扇出这活儿说难是真难第一次做的时候我也被0.5mm球距的芯片折磨得想辞职。但做多了回头看核心逻辑就一句话规则先行分布均匀换层合理。把约束管理器里的物理规则、间距规则、过孔列表一一理顺让Allegro替你算好哪里能放孔、哪里能走线扇出其实是个半自动化的活。真正考验经验的反而是那些软件不会替你考虑的东西——回流路径是否合理、电源平面是否完整、电容位置和扇出是否配合默契。最后再分享一个小技巧Allegro 17.4的扇出结果可以保存成脚本或Skill脚本把一套调好的参数固定下来下次遇到同类型BGA直接复用。我自己的库里有0.8mm通孔、0.65mm盲埋孔、0.5mm全激光孔三套模板换项目的时候调一下叠层和孔规格就能用省了很多重复劳动。BGA扇出不是一锤子买卖养成积累模板的习惯你会越做越顺。