干了几年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 过孔库建立:别等到扇出时才想到选via
Allegro 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_16 | 8mil | 16mil | 1.0mm及以上BGA扇出 |
| VIA_6_12 | 6mil | 12mil | 0.8mm BGA扇出 |
| VIA_4_10 | 4mil | 10mil | 0.65mm BGA扇出或HDI |
| VIA_3_7 | 3mil | 7mil | 0.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 Pins,BGA几乎全是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,设置走线宽度5mil,Vias列表只挂VIA_6_12。
- 设置间距规则:给FPGA区域分配Spacing Constraint Set,Pin to Via设6mil,Via to Via设8mil。
- 执行Fanout by Pick:点Route -> Fanout by Pick,在Options中设置Direction为Both,Via Source选当前规则下的过孔,勾选Remove Existing First、Include Pins with RAT_Ts。
- 点选器件:鼠标选中FPGA,等待工具跑完。
- 检查扇出结果:进入高亮模式,检查所有引脚是否都有过孔,是否有DRC。
整个过程如果规则设置合理,一般几秒钟就完成。如果跑了几十秒还在转,多半是密度过大或者规则过严,这时不要强行等待,按Esc中断,先回Constraint Manager核查间距。
4. 不同Pitch BGA的扇出策略与过孔选择
4.1 1.27mm及以上间距:属于“闭着眼睛扇”的级别
1.27mm pitch(50mil)的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.3mm(12mil),焊盘边缘到相邻焊盘边缘的距离大约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,焊盘间隙已经很小了,机械孔几乎塞不进去。此时常规做法是:
- 激光钻孔(Microvia):4/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.25mm(10mil),焊盘间隙连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 Pick,Direction选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扇出这个东西,看着是工具操作,实际上考验的是对板子整体结构的预判能力。