ARTICLE DETAIL

资讯详情

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

BGA扇出参数设置与避坑指南:Allegro 17.4实战详解

BGA扇出参数设置与避坑指南:Allegro 17.4实战详解 干了几年PCB设计的人应该都有同感百来pin的BGA原理图连完、约束规则设好结果卡在扇出这一步死活出不来。不是软件报错而是一扇出就是一串DRC过孔和焊盘打架外层走线挤成一团有些引脚干脆没扇出来。更难受的是遇到中间一大片地引脚的BGA外围信号扇完了电源地引脚却无处下手。这篇文章就以Cadence Allegro 17.4为例把BGA扇出Fanout的参数设置和避坑经验一次讲透适合正在做高速板、通信板、消费电子主板或者被BGA封装折磨过的硬件工程师和PCB Layout新手。内容从底层原理讲起配合具体的参数设置和实测排错过程照着操作就能避开大部分坑。1. 为什么BGA扇出才是真正决定板子成败的一步1.1 不是所有BGA都叫“能扇出”BGA封装把引脚做成焊球阵列分布在封装底面引脚间距常见的有1.27mm、1.0mm、0.8mm、0.65mm、0.5mm等。引脚密度上去了封装尺寸却越来越小这对PCB设计最大的冲击不是“引脚多”而是“引脚之间的空隙根本不够走线”。很多人以为扇出就是把每个引脚拉出来打个过孔实际上没那么简单。比如一颗0.8mm pitch、15×15的BGA焊盘直径约0.35mm相邻焊盘边缘距离只有0.45mm左右折合成mil大约是17~18mil。在这个间隙里你要放一个过孔焊盘、一段引出走线还要保证和相邻焊盘的间距不小于工厂的最小工艺要求这就非常紧张了。更别说0.65mm pitch以下的BGA焊盘之间几乎只剩10mil左右的空隙常规8/16mil过孔根本塞不进去。1.2 扇出的本质从“引脚”到“通道”的转接扇出的本质是把BGA底面阵列排列的引脚通过短走线和过孔转移到表层、底层或内层这些“开阔地带”为后续布线制造逃生通道。扇出的顺序和方向直接决定了内层走线能不能顺畅地“逃”出去。打个比方把BGA比作一个很多房间的楼层引脚是每个房间的门扇出就是给每扇门修一条连到走廊的过道。过道修得乱七八糟后面住的人信号线进出就全堵死了。扇出做得好不好直接影响你能不能用更少的层数完成布线——有些板子层数降不下来追根溯源往往是扇出阶段就没规划好内层通道被堵死不得不靠增多层数来绕线。从制造角度来说扇出还决定了过孔类型的选择。1.0mm pitch以上的BGA用普通机械钻孔就能搞定成本低、工艺成熟0.8mm pitch就开始需要激光钻孔、盲埋孔甚至盘中孔了。这个取舍必须在扇出之前就考虑清楚否则后面改起来牵一发动全身。1.3 扇出失败的真实代价扇出没做好最直接的代价就是后续布线疯狂绕线。信号线绕远了时序余量被吃掉等长绕线工作量暴增内层层数被动增多板子面积和成本全部失控。更隐蔽的问题是扇出时的过孔位置如果和去耦电容的放置位置冲突电源完整性调试阶段会非常痛苦。所以扇出这事儿不能等板子画到一半再回头看。它是一个需要前置思考的工作核心问题只有三个用什么过孔、往哪个方向扇、扇出去之后往哪一层走。把这三个问题想清楚了后面的布线效率会翻倍。2. 扇出前的底子工程封装、过孔与约束规则2.1 封装库检查先确认焊盘和位号没问题Allegro里扇出操作依赖封装库和器件位号如果封装本身有问题扇出肯定出问题。最常见的情况是从第三方或老项目里拿来的BGA封装焊盘编号不连续、有重复位号或者焊盘形状不是标准的圆形/方形。我每次拿到新封装都会用Tools - Reports - Symbol Report先扫一遍焊盘列表确认位号从1到N连续没有重复和缺失。有些封装里会有机械引脚Mechanical Pin或温度引脚Thermal Pin这些在扇出时要排除掉否则会生成无意义的过孔。还要检查封装的Package Outline和Placement Bound是否完整。Allegro的扇出边界默认使用Placement Boundary如果这个边界缺失扇出操作可能无法识别整个器件范围导致扇出范围异常。遇到这种情况就在封装编辑界面里补一个比实体轮廓外扩至少10~20mil的Placement Bound再重新生成封装。2.2 过孔库建立别等到扇出时才想到选viaAllegro 17.4里过孔的管理方式要搞清楚过孔不直接放在PCB板上而是定义在物理库里的Padstack文件通过Setup - Constraints - Physical中的Vias列表绑定到对应的物理规则上。创建BGA扇出专用的过孔时有几点要特别留意钻孔尺寸机械钻一般最小做到8mil约0.2mm激光钻可以做到4~6mil。过孔焊盘尺寸通常取钻孔直径的1.8~2倍。比如8mil钻孔配16mil焊盘这样过孔的抗剥离能力好焊接也更可靠。反焊盘Anti-pad如果过孔要打在电源地平面上BGA内部常常这样反焊盘至少要比过孔焊盘大6~8mil不然阻抗不连续太明显电源平面也被掏得太空。我自己习惯建几组常用过孔模板过孔类型钻孔焊盘适用场景VIA_8_168mil16mil1.0mm及以上BGA扇出VIA_6_126mil12mil0.8mm BGA扇出VIA_4_104mil10mil0.65mm BGA扇出或HDIVIA_3_73mil7mil0.5mm BGA配合盘中孔注意焊盘大小不是越小越好。太小的过孔焊盘在焊接时容易出现“塞孔不饱满”的问题返修也难。工艺允许的前提下尽量按推荐值设计。2.3 间距约束规则先设好扇出才能一次过Allegro的扇出工具在生成过孔和走线时会严格遵守当前约束规则。很多扇出失败根源不是工具不行而是规则没设对。BGA区域重点检查以下几个间距Pin to Via Same Net同一网络的焊盘到过孔间距至少设成6~8mil不然会出现焊盘和过孔太近导致制造偏差。Pin to Via Different Net不同网络的焊盘到过孔间距这个要稍微保守一点建议8~10mil。如果BGA间距太密可能要放宽到5~6mil但一定要确认PCB厂家的工艺能力。Via to Via Same Net和Via to Via Different Net过孔与过孔之间的间距同样要区分同网络和不同网络。同网络过孔间距可以小一点因为不需要电气隔离不同网络至少要满足工艺最小间距。如果用的是Allegro 17.4的Constraint Manager建议在Physical规则里单独建一个名为“BGA_0_8mm”或类似名称的物理规则专门给BGA区域使用。这个规则里设置一套更精细的线宽和过孔列表避免把其他区域的宽松规则带到BGA里导致扇出的过孔过大、挤爆间距。3. Allegro 17.4的Fanout by Pick参数逐个拆解3.1 打开扇出工具的正确姿势Allegro 17.4的扇出入口在Route - Fanout - Fanout by Pick也可以用命令行直接输入fanout回车。点击命令后在右侧Options面板里会出现扇出参数设置窗口然后再去画布上点选需要扇出的BGA器件。顺序非常关键先选参数再点器件。如果你先点了器件再改参数已经扇出的过孔不会自动按新参数更新还得重新清理再扇一次。3.2 核心参数逐项解读Pin Type引脚类型一般勾选SMD PinsBGA几乎全是SMD焊盘。如果有通孔引脚要一起扇出把THT Pins也勾上。但实际项目中BGA很少混合通孔引脚所以默认只勾SMD就行。如果勾上了不存在的引脚类型工具会空跑一遍浪费时间。Direction扇出方向这个参数决定过孔打在焊盘的哪个方位Out向外扇出过孔打在BGA封装外围方向适合外围引脚这样信号可以快速进入外层走线通道。In向内扇出过孔打在BGA封装内部方向适合内部引脚尤其是内核电源、地引脚。Both双向工具自动判断内外方向适合混合场景。Any任意由工具随机选择方向一般不建议因为后续布线会很难预测。实际项目中很多时候我会分两次操作第一次选Both或者默认方向扇出全部信号第二次单独处理电源地引脚的朝内扇出。分步操作比一次到位更可控也方便查错。Via Source过孔来源这个下拉列表会列出当前物理规则下可用的所有过孔。我没记错的话17.4里默认是“Vias in the current etch grid”按照当前布线栅格的过孔。如果你建了BGA专用过孔但没有挂到当前物理规则下它不会出现在这里这也是很多人找不到自己过孔的原因。Include Pins包含引脚范围有几个勾选项需要注意Include Unassigned Pins包含尚未分配网络的引脚。如果你准备边扇出边手工分配网络可以勾上但如果原理图已经全部连好没必要勾。Include Pins with RAT_Ts包含已有鼠线的引脚。这个建议保持勾选因为扇出的目的就是给有鼠线的引脚建立实际走线通道。Allow Guard Pins允许保护引脚也扇出。如果有接地的隔离引脚勾上它会让工具一并处理对屏蔽有帮助。Boundary扇出边界默认使用封装的自带Placement Bound。如果你希望扇出范围向外扩展一点比如给后续走线留更多空间这里可以选Use full device boundary或者自定义一个shape作为边界。Remove Existing First先删除已有扇出这个选项强烈建议勾上。BGA重新扇出前如果不清理旧过孔新老过孔叠在一起DRC会爆炸。勾上它工具会在扇出前自动删除该器件上的旧扇出。Fit to Location指定扇出参照点这个功能用于处理多管脚器件被局部遮挡的情况。选了某个pin作为参照后扇出会从这个pin开始执行。一般常规BGA用不到但遇到大型封装分段扇出时很实用。3.3 实操步骤一次完整的BGA扇出以一块0.8mm pitch、176pin的FPGA为例我的操作顺序如下设置物理规则在Constraint Manager中给这个FPGA建一个独立的Physical Constraint Set设置走线宽度5milVias列表只挂VIA_6_12。设置间距规则给FPGA区域分配Spacing Constraint SetPin to Via设6milVia to Via设8mil。执行Fanout by Pick点Route - Fanout by Pick在Options中设置Direction为BothVia Source选当前规则下的过孔勾选Remove Existing First、Include Pins with RAT_Ts。点选器件鼠标选中FPGA等待工具跑完。检查扇出结果进入高亮模式检查所有引脚是否都有过孔是否有DRC。整个过程如果规则设置合理一般几秒钟就完成。如果跑了几十秒还在转多半是密度过大或者规则过严这时不要强行等待按Esc中断先回Constraint Manager核查间距。4. 不同Pitch BGA的扇出策略与过孔选择4.1 1.27mm及以上间距属于“闭着眼睛扇”的级别1.27mm pitch50mil的BGA引脚之间空间非常充裕焊盘间隙大约有30~35mil。这个间距下用8/16mil的普通过孔甚至可以走两条线。所以这类BGA的扇出策略很随意选Any或Both方向过孔尺寸按常规工艺选扇出后内层的逃逸布线也基本不会被卡住。需要注意的反而不是扇出本身而是扇出后过孔焊盘与BGA焊盘之间的连接线。太长的Stub残余引出线会在高速信号上形成阻抗不连续点一般控制Stub长度在5~10mil以内。4.2 1.0mm间距最常见的BGA标准操作1.0mm pitch约39.4mil是通信板、工控板里最常见的BGA间距。焊盘约0.3mm12mil焊盘边缘到相邻焊盘边缘的距离大约27mil。在这个间隙里放8/16mil过孔加5mil线宽的引出线是没问题的但要注意过孔不能正对着相邻焊盘的中心。标准的扇出方式是外层四排引脚朝外扇内部引脚朝内扇。Direction选Both过孔选8/16mil约束规则里Pin to Via Same Net设6mil。这样扇出来的过孔内层通道可以保证每个通道走一条线交错排列时还能保证相邻层的逃逸方向不同从而给布线层留出更充裕的空间。4.3 0.8mm间距开始考验设计功底的密度0.8mm pitch约31.5mil的BGA焊盘一般0.3mm焊盘间隙只剩约19mil。这时8/16mil过孔就非常危险了——过孔焊盘16mil 线宽5mil 至少5mil间距很容易超出间隙。所以0.8mm BGA通常要换6/12mil、甚至5/10mil过孔。即便过孔变小了走线空间依然很紧张。0.8mm pitch下过孔如果放在四个焊盘的正中心十字交叉点引线很难在不碰到相邻焊盘的情况下绕出去。所以实际工程中更常采用“狗骨头”式扇出过孔不放在四个焊盘中心而是沿着对角线方向偏向引脚一侧。从焊盘引出的短线Stub很短形状像狗骨头所以得名。狗骨头扇出能最大化利用焊盘之间的对角空间同时给内层逃逸留出更规整的通道。在Allegro里实现狗骨头扇出需要在扇出参数中适当控制Stub Length。如果你发现扇出的过孔都堆在焊盘中心检查一下是不是Stub Length参数设置得太大或者Direction没有分清内外方向。0.8mm BGA的内层逃逸布线建议采用“隔列逃逸”的套路第一层逃逸奇数行第二层逃逸偶数行这样每一层的通道密度可以减半布线通过率更高。如果单靠信号层搞不定就要考虑把部分走线换到更内层用4层板甚至6层板承载BGA区域。4.4 0.65mm及以下HDI和盘中孔是绕不开的选择0.65mm pitch约25.6mil的BGA焊盘间隙已经很小了机械孔几乎塞不进去。此时常规做法是激光钻孔Microvia4/10mil或3/7mil的激光过孔可以勉强在0.65mm pitch下扇出。盘中孔Via-in-Pad直接把过孔打在BGA焊盘正中心彻底绕开“焊盘间隙不够”的痛点。盘中孔需要树脂塞孔工艺处理成本比普通过孔高但确实是0.5mm以下BGA的唯一出路。盲埋孔结构采用1-2、2-15、15-16层的盲孔结构让内层逃逸更灵活不需要把所有过孔都打到最底层。0.5mm pitch约19.7mil的BGA焊盘直径约0.25mm10mil焊盘间隙连10mil都不到。这种封装只能盘中孔而且几乎必然要配合HDI叠层。如果你在项目早期评估阶段就发现BGA用到0.5mm pitch务必提前和PCB厂家确认最小激光钻孔直径能做到多少盘中孔能否树脂填平并电镀盖帽BGA区域是否有最小线宽线距限制。这些信息直接决定你的过孔选择和扇出策略千万别等到布局快完成了才去问厂家。5. 扇出方向和逃逸布线从过孔到内层的动线设计5.1 过孔好办了那往哪一层走扇出只是第一步扇出去的过孔必须规划好“往哪个方向逃”。BGA内部引脚密集过孔也密如果所有信号都往同一层逃那一层很快就会爆掉。合理的做法是把信号分散到多个布线层每层只负责一部分通道。我的原则是相邻层逃逸方向错开。比如第1层逃逸横向通道第2层逃逸纵向通道。这样两层的走线交叉最少通道利用率最高。Allegro的层叠管理器里可以给每个层设置不同的布线方向利用这个约束来引导走线。另外BGA区域内部的过孔分布如果过于拥挤还要注意内层电源平面完整性。过孔打太多太密相当于在电源平面上扎了无数个洞电源回流的路径被切割得支离破碎。处理方式是在BGA下方尽量保留一个完整的接地层并将地引脚扇出的过孔均匀分布不要让地过孔集中成一坨。5.2 差分对扇出焊盘配对比过孔大小更关键差分对引脚在BGA里通常是相邻的引脚对。扇出时有两个选择同层内配对扇出把差分对的两个引脚扇出到同一层然后立即并行走线。优点是可直接控制差分阻抗缺点是占用两层信号层的逃逸资源。分层配对扇出两个引脚分别扇出到上下相邻层然后在层间形成“宽边耦合”结构。这种方式可以节省层数但对层叠结构和过孔阻抗要求更高一般不轻易用。实操层面Allegro的Fanout工具并不会自动识别差分对它会按普通信号处理。所以差分对区域的扇出我通常手动调整一下先把这两个焊盘扇出到同一方向确保过孔间隔均匀后续的差分走线才能对称、等长。有一个很坑的细节是差分对两个引脚中间如果正好夹着一个地引脚扇出时地引脚过孔会把差分通道占掉。所以布局阶段就要检查BGA引脚定义尽量把差分引脚安排在相邻位置且中间不夹地扇出成功率大大提升。5.3 电源地引脚扇出别等到最后再处理很多人习惯先把信号引脚全部扇出电源地引脚留到最后处理结果发现电源地引脚全挤在BGA内部外围通道全被信号过孔占了根本打不进去最后只能哭唧唧地手动加过孔。我的建议是信号和电源地一起扇出或者先扇电源地再扇信号。电源地引脚一般集中在BGA中央区域朝内扇出就是它们天生的方向。你可以单独选中所有电源地引脚在Fanout by Pick里只扇出它们Direction选In过孔均匀分布后再用铜皮连接比信号扇出之后再去“塞”电源地过孔顺畅得多。电源引脚扇出后还有一步经常被忽略给这些过孔单独画个Fanout区域或者直接铺一个局部电源铜皮把所有同网络的电源过孔连起来。不要指望后续布线阶段自动连接尽早把它们连成一个网络岛后续的电源布线就能直接从岛里拉出去省大量时间。5.4 扇出后的调线与检查清单扇出完成后我会做这样一轮快速检查DRC清零扇出后的DRC必须清零尤其是Pin to Via、Via to Via这两类有红叉说明间距不够或网络冲突。确认无漏扇引脚执行Display - Highlight输入网络名单观察是否有网络没有任何走线连接或者打开Reports - Unconnected Pins看看未连接引脚数量是否合理。检查过孔背钻区域如果设计中有高速信号要求背钻工艺扇出过孔的位置要离背钻区远一点避免背钻打断扇出走线。检查Stub长度用Allegro的Tools - Padstack - Modify Design Padstack检查过孔的Stub长度对于超过20mil的Stub在高速信号中要先做记录必要时优化。6. 扇出失败最常见的四种症状与根因定位6.1 症状一扇出完成后DRC一片红过孔和焊盘打架这是最常见的失败模式。现象是扇出确实生成了过孔但过孔焊盘和相邻BGA焊盘的间距小于工艺规则DRC直接爆掉。根因基本是过孔尺寸选得太大或者间距规则设置太松/太紧。需要回到物理规则里换小一档的过孔或者在间距规则里把Pin to Via Different Net的间距值调到合理范围。还有一个隐藏原因旧过孔没有清理干净。你之前手动打过一些过孔或者上一次扇出用的是另一种过孔方案新扇出时没有勾选Remove Existing First新旧过孔叠一起DRC必然全红。解决方法勾选Remove Existing First重新扇出或者用Edit - Delete按网络过滤先把旧过孔删干净再重新跑。6.2 症状二扇出半途中断没跑完就停住工具跑到一半卡住或者只扇出了一部分引脚就停了。这种情况常见于BGA内部某个区域存在不可用的引脚比如某个焊盘的网络被锁定了Fixed属性或者被赋予了一个特殊属性导致工具跳过它。某个引脚缺少RAT_T鼠线工具认为它不需要扇出。某些引脚的过孔位置超出了边界。定位方法点击Display - Element逐个查看未扇出引脚的网络属性和锁定状态。如果是网络被Locked在Net Logic里去掉锁定即可。还有一个容易被忽略的有未连接的Shape挡路。BGA内部如果预先铺了一块静态铜皮扇出工具在生成过孔时会和铜皮冲突也会中途停止。解决办法是把BGA区域的静态铜皮先删掉或转成动态铜皮让工具可以自由穿越扇出完成之后再重新铺铜。6.3 症状三扇出方向不对过孔全挤在内部有些BGA的外围引脚应该朝外扇出结果工具的Direction设置成了In过孔全部打在封装内部。内圈引脚还没扇出外圈过孔已经把通道占满了完全没法用。这是方向参数设置的问题在Fanout by Pick的Options里把Direction改成Out或Both重新扇出。比较稳妥的做法是分两步外圈引脚选Out内圈引脚选In中间再加一次Both。虽然麻烦但出来的扇出质量最高。6.4 症状四过孔位置与期望不符Stub太长或过孔偏移狗骨头式扇出中过孔如果离焊盘太远Stub会很长影响信号质量。如果过孔太靠近焊盘又会违反Pin to Via间距规则。这个问题主要靠Stub Length和Via Location参数控制。在Allegro的扇出Options中Stub Length的单位是mil一般设置为8~12mil具体要根据BGA pitch和线宽调整。如果你发现过孔不在焊盘对角线上而是偏向一侧可以检查Direction设置和Fit to Location的参照点是否正确。6.5 症状五扇出后电源地过孔分布不均无法铺铜连接扇出完成后电源地过孔有的在BGA内部有的在边缘形成几个孤立的小岛后续铺铜连接非常麻烦。这种情况是因为电源地引脚扇出时没有单独设置方向跟信号一起用了统一的Direction。建议重新选中所有电源地引脚单独执行一次Fanout by PickDirection选In必要时在Boundary里画一个局部区域限定过孔只能落在区域内。这样出来的电源地过孔会比较规整铜皮连接轻松很多。6.6 症状六为什么清理扇出时旧过孔总删不干净有人问我我用Route - Fanout by Pick重新跑之前想删掉旧的扇出过孔但Delete工具删不干净很多过孔删了又出现。这是因为旧过孔不一定是独立的过孔有可能被布线连接在一起了。如果过孔连了一段走线或铜皮只删过孔不删连接工具会提示冲突。正确做法是在Delete命令下选择Vias和Lines/Cline Segs一起勾选或者用Tools - Delete Unconnected命令。还有一个高级技巧使用Route - Fanout - Cleanup这个命令专门用于清理指定器件的所有扇出走线和过孔一步到位。7. 扇出用顺手之后再分享几个提升效率的习惯文章写到这里核心内容已经讲完了最后补几个我在实际项目里养成的习惯可能对你有帮助。第一个习惯是给不同BGA建不同的物理规则模板。我维护的PCB工程里会固定存放“BGA_1_0mm”“BGA_0_8mm”“BGA_HDI”等几个命名清晰的规则集每次新项目只要导入对应规则扇出参数自动匹配不用每次都重新设间距、线宽、过孔列表效率提升非常明显。第二个习惯是扇出之后立刻截图存档。在Allegro里用File - Plot导出PDF或者直接截屏记录当前版本的扇出策略。后续如果因为改动重新扇出对比存档就能快速找出区域变化排查问题快很多。第三个习惯是利用Skill脚本处理重复性操作。如果你经常要做大量BGA扇出可以尝试在Allegro里加载一些开源的扇出检查Skill自动统计漏扇引脚、高亮Stub过长的过孔。虽然17.4自带的工具已经很完善但脚本能补上“扇出后自动检查”这个环节省掉不少人工核对的时间。最后一个建议BGA扇出前先画一个简单的通道规划图。不用画得多精细拿一张纸或者直接在PCB板上用线框标出“第1层走横、第2层走竖、电源地往中间聚”的整体思路。有了这个大方向再去操作扇出你会发现Allegro的每一个参数都变得非常可控。BGA扇出这个东西看着是工具操作实际上考验的是对板子整体结构的预判能力。
返回列表