板子一密起来,Allegro 17.4里的过孔扇出和盲埋孔配置,绝对是最考验基本功的两个环节。很多新人画第一块BGA板时,最怕的不是布线,而是刚一开始就被扇出卡住——引脚之间密密麻麻,怎么走线都跟旁边网络冲突,最后只能硬着头皮上自动布线,结果越绕越乱,DRC还翻车。如果你正在做高密度板、HDI板,或者刚开始用Allegro 17.4处理BGA封装的PCB设计,这篇文章就是我基于实际项目整理的过孔扇出技巧和盲埋孔实战配置,从原理到菜单路径再到常见报错排查,一次性过一遍。
1. 过孔扇出和盲埋孔:高密度板设计绕不开的两个动作
1.1 扇出到底是什么?为什么BGA一定需要先扇出
扇出(Fanout)简单说,就是把器件焊盘上的信号先用一小段走线引到过孔,再通过过孔换到内层或器件外围继续走线。你可以把它理解成城市交通里的“出城匝道”——芯片引脚都在封装底下,内层的路网再宽,引脚也得先经过一个中转站离开当前区域,才能进入四通八达的道路。
BGA封装尤其依赖扇出,原因是BGA焊盘排布太密集,表层根本不可能把所有引线都拉出去。比如一个0.8mm pitch的BGA,引脚中心间距只有0.8mm,表层走线宽度加上安全间距通常要占掉0.3mm到0.4mm,你想想,两排焊盘之间就那么点空隙,全部走表层根本不现实。只有通过过孔换层,把一部分信号放到内层去走,布线通道才会被打通。
实际项目中,扇出还有一个很重要的作用:规划电源地网络。BGA中间通常分布着大量VCC和GND引脚,这些引脚如果扇出得好,可以形成规律的过孔阵列,配合内层电源平面直接完成连接,既降低直流压降,又避免电源信号绕到板边再回来。如果扇出阶段电源地过孔排得乱,后面电源平面被切断、信号回路面积变大,整板信号完整性问题会接踵而来。
1.2 通孔、盲孔、埋孔怎么选:一张表看懂适用场景
在设计高密度板时,过孔类型的选择会直接影响层数、成本和可制造性。先建立基本概念:
| 过孔类型 | 定义 | 工艺特点 | 典型应用 |
|---|---|---|---|
| 通孔(Through Via) | 贯穿整个板厚 | 机械钻孔,成本最低,生产成熟 | 低密度板、平面对连、电源地连接 |
| 盲孔(Blind Via) | 从表层连接到某一内层,不贯穿全板 | 激光钻孔,孔径小、无需背钻,成本中等 | 表层信号进入内层,HDI 高密度互联板 |
| 埋孔(Buried Via) | 只连接内层之间,从板外看不到 | 机械或激光钻孔,在压合前完成,成本较高 | 内层信号互连,解放表层空间 |
通孔看着简单,但高密度板里通孔用多了是个麻烦。一个贯穿全板的通孔会在其他层占用额外空间,如果走线层很紧张,这些“路过”的孔往往会挡住内层通道。盲孔和埋孔则只会出现在特定层对之间,比如L1到L2的盲孔只在表层和L2之间打孔,内层其他层根本不受影响,这就是高密度设计里盲埋孔的最大价值——按需连接,不打扰无关区域。
不过盲埋孔不是随便用的,成本和工艺约束都很严格。盲孔一般用激光钻,孔径能做到0.1mm甚至更小,钻孔深度却有上限,超过一定层数后激光就没办法稳定加工;埋孔在压合前钻孔,对位精度要求高,一阶二阶三阶每加一阶,加工难度和单价都会上一截。所以选通孔还是盲埋孔,本质上是在“布线空间、层数成本、加工难度”之间做平衡,而不是越花哨越好。
2. Allegro 17.4过孔扇出实操:参数设置到一键生成
2.1 扇出前的准备工作:约束规则和过孔库
在Allegro 17.4里点开Route > Create Fanout之前,先得把“地基”打好。上来就扇出,很容易出现后面过孔类型不对、间距超限、DRC满天飞的问题。
第一步是确认单位制。在Setup > Design Parameter Editor里把Display和Design单位统一成mm,精度至少0.01mm或0.005mm,尤其涉及盲埋孔、背钻这些精密工艺时,单位混乱会带来灾难性问题。
第二步是确认过孔库。正常的过孔库至少要有几种标准过孔:比如0.15/0.35mm(钻孔/焊盘)的机械孔、0.1/0.25(钻孔/焊盘)的激光孔,以及0.3/0.6mm的大电流过孔。在工具里双击过孔可以打开Padstack Editor,检查每一层是否有对应的焊盘定义、反焊盘(Anti-pad)大小是否合理,这步不能省,否则盲埋孔定义后走线会报缺少层定义。
第三步是设置物理规则。打开Setup > Constraints > Physical,找到对应的Physical Constraint Set,把默认走线宽度、最小线宽、最大线长这些规则填好,然后在Allowable Vias里把需要用到的过孔型号全部加进去。过孔没有加入Allowable Vias的话,扇出时Allegro根本不会让你使用这个过孔,这是新手最容易踩的坑。
第四步是确认间距规则。在Spacing Constraint Set里检查Same Net Spacing、Pin to Via Spacing等参数。特别是Pin to Via Spacing,BGA扇出时过孔会紧挨着焊盘,这个间距如果设得比板厂工艺极限还小,要么出不了Gerber,要么打样回来良率很差。一般保守设置为0.15mm以上,高密度设计可以结合板厂能力压到0.1mm左右。
这里补充一个常见实践经验:对于0.8mm pitch的BGA,焊盘直径通常是0.3mm左右,要在四个引脚中心放一个过孔。四个引脚中心到目标引脚中心的距离是0.8倍根号2除以2,约0.566mm。如果过孔焊盘直径是0.45mm,间距要求0.2mm,那么过孔中心到BGA焊盘中心至少需要0.3/2加0.45/2再加0.2,等于0.575mm,已经超过0.566mm,放不下。所以这时候要么换0.15/0.35mm的小机械孔,要么直接上0.1/0.3的激光盲孔。这类计算在确定过孔选型时非常有用,建议养成习惯。
2.2 一键扇出实战:Create Fanout对话框参数详解
准备工作做完,就可以开始扇出了。最常用的菜单是Route > Create Fanout,选中封装器件后右键选择Fanout,Allegro会弹出扇出参数对话框。这里我把常用参数解释一遍。
过孔选择(Select Via)是最关键的一项。如果用的是盲埋孔板,这里要按网络需要选择对应的Blind/Buried Via,比如表层信号份胆选择L1_L2盲孔,电源地网络选择L2_L7埋孔。如果只用通孔,就选普通的Through Via。Allegro 17.4支持在扇出时按网络列表筛选,可以灵活地给不同网络分批次扇出。
方向(Direction)有Inward(向器件内部扇出)和Outward(向器件外部扇出)。实践中,BGA中间区域的电源地引脚多用Inward向中心集中,外部信号引脚多用Outward向外扩散,这样内层走线通道可以做到清晰分层。不要把方向全部设成外向,否则内部区域空着,外面反而挤成一团。
Via to Pin Distance(过孔到焊盘中心距离)直接决定了扇出孔离引脚多远。设置太近,加工对位困难,焊接也可能短路;太远,扇出线会绕过旁边引脚,占用额外空间。通常参考值取0.45mm到0.6mm之间,配合0.8mm pitch的BGA,能让过孔正好落在四引脚中心附近。
Fanout Trace Width(扇出线宽)一般按该BGA网络最小规则走,比如0.1mm或0.125mm。注意不要为了省空间把信号线设得过细,否则内层走线时线宽突变会带来阻抗不连续。
设置完参数,可以直接点扇出,Allegro会一次性为该器件所有连接引脚生成过孔和短线。对有多个相同BGA的板子,还可以用Route > Copy Fanout把一个器件的扇出结果复制到另一个相同封装器件,只要引脚位置和电源地网络一致,能省非常多的重复劳动。
实际操作中,我习惯分两波扇出:第一波是GND网络,根据电源平面位置选择合适的过孔,把地引脚全都扇到内部阵列;第二波是VCC网络,同样集中处理;最后第三波才是普通信号。这样做的原因是电源地网络扇出规则和信号网络完全不同,分开设置更清晰,也方便后续布线时快速区分。
2.3 扇出后的清理与检查项
扇出完成后别急着走线,先花几分钟做一次“扇出俯检”。以下是我每次必查的几项:
| 检查项 | 参考标准 | 目的 |
|---|---|---|
| 过孔到BGA焊盘间距 | 满足板厂最小工艺值 | 避免焊盘桥接、钻孔偏移短路 |
| 电源地过孔分布均匀性 | 同一网络过孔尽量规则分布 | 降低平面压降、防止电源塌陷 |
| 差分对扇出对称性 | 差分P/N的过孔和走线长度差尽量小 | 减少共模噪声、保证差分阻抗 |
| 扇出短线是否有直角 | 不允许出现90度以下尖角 | 避免腐蚀残留和信号反射 |
| 是否有孤岛过孔 | 所有过孔都应有明确去向 | 防止扇出了孔却无处可走 |
如果在检查中发现某个引脚没有扇出成功,最常见原因是该网络没有对应的可用过孔,或者约束规则里没有设置正确的Allowable Vias。此时不要手动随便打孔,先回到约束管理器确认规则,再重新执行扇出。手动补扇出往往会导致规则不统一,给后期DRC增加很多麻烦。
3. 盲埋孔实战配置:从叠层设计到Allegro设置
3.1 叠层设计与盲埋孔类型:8层板1阶叠层示例
要说盲埋孔配置,一定离不开叠层设计。没有叠层结构,Allegro里的盲埋孔定义根本没有“层对”可依。我以一个比较常见的8层板为例:
| 层号 | 功能 | 说明 |
|---|---|---|
| L1 | 顶层信号/器件 | 激光盲孔 L1-L2 扇出走线 |
| L2 | GND 平面 | 与L1形成良好参考面 |
| L3 | 信号层 | 内层走线 |
| L4 | 电源平面 | 多路电源分割 |
| L5 | 信号层 | 内层走线 |
| L6 | 电源平面 | GND为主 |
| L7 | GND 平面 | 与L8形成参考面 |
| L8 | 底层信号/器件 | 激光盲孔 L7-L8 扇出走线 |
一阶HDI在这种叠层中的典型配置是:L1-L2激光盲孔、L7-L8激光盲孔,再加上L2-L7机械埋孔,用于连接两个大的GND区域和电源平面。这样表层信号要下到内层,只用走激光盲孔到L2或L7,再通过内层走线完成连接,并不需要打穿整个板子。
二阶HDI通常会在L1-L3加一组激光盲孔,然后配合L2-L3埋孔、L3-L6埋孔、L6-L7埋孔完成中间层互连;三阶就更复杂,L1-L4甚至会出现跨四个层的盲孔。阶数越高,说明板子内部“立体交通”越复杂,加工工序越多,成本成倍上升。因此设计初期就应该问自己:是不是非用二阶、三阶不可?很多设计其实1阶就够了,盲目上高阶只会给板厂和预算增加压力。
3.2 Allegro 17.4里定义盲埋孔的3个关键步骤
在Allegro 17.4中,盲埋孔的配置不是直接在布线时选一个过孔类型那么简单,它需要先定义Blind/Buried Via对。我整理了三个关键步骤。
第一步,在Padstack Editor中建立对应层对的过孔焊盘。命名建议直接带上层对信息,比如L1_L2、L7_L8、L2_L7。注意在这里要分别设置钻孔层、起始层和结束层,并确认每个使用层的焊盘和反焊盘都定义了。很多DRC报错“Missing Package Geometry”或者“No pin defined”都跟这步偷懒有关。
第二步,在Setup > Define B/B Via菜单里,把过孔加到Blind/Buried Via列表。操作界面会要求你选择Start Layer和End Layer,然后把已经建好的Padstack关联进来。比如Start Layer选Top(L1),End Layer选L2,关联L1_L2过孔,就完成了一组L1-L2盲孔的定义。这一组定义完成后,Allegro才会在布线或扇出时允许你在这两层之间使用该过孔。
第三步,回到约束管理器的Physical Constraint Set里,把新建的BB Via加入Allowable Vias。如果漏掉这一步,你会发现布线时命令行一直提示“Via not allowed”,或者扇出时该过孔在列表中灰色不可选。这一步是初学者最容易遗漏的。
整个过程强调一下:定义B/B Via,不是往列表里塞一个名字就完了,它本质上是在告诉Allegro“这个过孔只能用于从哪层到哪层”。只有层对匹配,软件才会在换层走线时自动选择合法过孔。
3.3 盲埋孔扇出与布线策略:和通孔有什么不同
用盲埋孔做扇出,和通孔板最大的区别就是:不能再把所有引脚一视同仁地扇出。因为盲孔只连通特定层对,如果一个信号本来打算走L1到L3,但手里只有L1-L2盲孔+L2-L3埋孔的组合,你就必须规划好换层位置,而不是随意打一个通孔下去。
我的推荐策略是先做网络分组,也就是把BGA上的所有网络按扇出方案分成几类。第一类是电源地网络,直接使用通孔或大尺寸埋孔,形成规则过孔阵列,内层平面通过阵列接入;第二类是表层高频信号,使用L1-L2盲孔直接落到L2参考面附近,然后在内层完成短距离走线;第三类是跨多个内层信号,通常配合埋孔在L2-L3或L3-L6之间换层。
扇出时,我会分三次执行,每次只选一组网络,在Create Fanout的Net Selection里用筛选器把对应网络选出来,再指定对应的BB Via。这样一来,同一颗BGA的电源地过孔、表层信号盲孔、内部埋孔之间互不干扰,DRC检查也不会交叉报错。
布线阶段,我建议的顺序是“先电源地、再表层敏感信号、最后中间层一般信号”。原因是电源地网络固定好平面框架后,其他信号可以参考这个框架来安排回流路径。对于差分对,盲埋孔的扇出尤其要注意P/N过孔位置的对称性,最好让差分对的过孔落在相邻引脚的模式上,并尽量让过孔到差分线的转换段保持等长。
4. 盲埋孔设计与生产常见问题排查实录
4.1 DRC报错的3类高频场景
盲埋孔设计里,DRC报错几乎是每天的日常。我自己遇到最多的是下面三类。
第一类,“Via crosses unplanned layer pair”。意思是你使用的过孔跨越的层对没有被定义。解决办法是在Setup > Define B/B Via里检查这个过孔是否有对应的Start Layer和End Layer配置,同时确认叠层名称是否匹配。如果你定义的是L1-L2,但Spacing或者Physical规则中允许了某个跨L1-L4的过孔,系统就会认为这个层对是“unplanned”。
第二类,报错集中在Padstack缺少定义。比如盲孔焊盘在某个电气层没有Flash符号或者反焊盘尺寸为0,会直接导致DRC报告“Padstack ... has no default internal shape”。这种问题单看板子表面很难发现,最好在Padstack Editor里逐层检查,尤其注意Start/End层中间的若干层是否处于“Not Connected”状态。
第三类是过孔类型没加入Allowable Vias。这类报错最直接的现象是布线时无法选择某种盲埋孔,或扇出时过孔列表为空。回到约束管理器,在Physical Constraint Set的Allowable Vias一栏把需要的BB Via全部勾上,基本可以解决。
排查这些报错时有个小技巧:打开DRC Browser(或使用Display > Highlight),用网络或约束类过滤出报错对象,先看是哪类约束、再定位具体坐标。不要盯着整板红彤彤的标记发懵,要学会按约束类型分组排查,一次只看一类问题,效率会高很多。
4.2 钻孔文件与叠层信息表:交付前一定要核对
盲埋孔板的生产交付,比普通通孔板多出很多容易忽略的细节。最常见的坑是钻孔文件输出不完整。由于盲孔、埋孔、通孔的钻孔尺寸和深度都不同,Allegro的NC Drill通常会在一个文件中输出所有孔,但板厂往往希望按孔径和类型分组,方便分层钻孔和激光钻孔工序排产。
在Manufacturing > NC > NC Drill里,可以按当前使用的钻孔尺寸或层对生成多个钻孔文件。我一般会把所有过孔按Padstack名字分组导出,比如L1_L2、L7_L8各一个文件,L2_L7单独一个文件,并给文件命名时带上层对信息。如果板厂明确要求使用统一的钻孔表,也要确认生成的Drill Legend里有清晰标识。
另外一个常被忽略的事情是盲埋孔板需要额外的叠层说明书。你得在交付文档里写清楚哪个文件是激光钻孔、哪一层到哪一层、是否包含背钻,以及盲孔尽量减少重叠、对位精度要求等信息。很多板厂拿到文件后都会先看叠层图,如果叠层信息和钻孔文件对不上,一场沟通拉锯战是免不了的。
还有一点,如果方案中有背钻需求,比如高速信号通孔需要去掉多余Stub,那么背钻的深度、允许偏差也要在文档中标注清楚。用Allegro 17.4可以在Setup > Cross-Section里设置背钻控制层,并配合NC Back Drill菜单生成背钻文件,不要把这步省略掉。
4.3 Allegro 17.4快捷键设置:把扇出和盲埋孔配置变成肌肉记忆
做PCB设计,效率高低很大程度取决于快捷键配置。Allegro 17.4虽然自带了很多菜单操作,但频繁在菜单里点来点去,手速再快也拖慢节奏。我的习惯是把自己最常用的一批操作绑定成快捷键。
具体方式是在用户环境变量文件env中添加快捷键定义。env文件通常在用户目录下,也可以在Setup > User Preferences里查看env路径。文件里可以这样写:
funckey F4 'route fanout' funckey F5 'done' funckey F6 'save' alias DDN 'add connect'注意不同版本命令名可能略有差异,如果发现某个funckey不生效,在命令行里输入命令前几个字母,让Allegro自动补全提示出完整命令名,照着写上即可。不想折腾env文件的,也可以在菜单栏右键选择Customize,把命令拖到自己的工具栏上,然后用“Keyboard”快捷键绑定到工具栏按钮。
我个人的快捷键习惯是这样的:F4打开扇出操作,F5确认/完成命令(对应done),F6保存,Ctrl+鼠标滚轮用来快速查看层间切换。整套习惯用了很久,做盲埋孔配置时,从定义BB Via到给BGA扇出,基本不需要在菜单里反复找入口。快捷键这玩意没有标准答案,关键是“常去的菜单必须一步到位”。
5. 复盘:成熟的设计习惯比技巧本身更重要
5.1 设计前一定要和板厂确认的5件事
盲埋孔板做多了以后,我最大的感受是:设计前和板厂沟通的认真程度,决定了项目后半段顺利与否。下面这些信息,建议在画板之前就明确:
一是最小激光钻孔孔径和最小机械钻孔孔径。这直接决定你能否用0.1mm激光孔,也决定过孔焊盘需要做多大,从而影响BGA扇出方案。
二是板材厚径比要求。板子总厚度与最小机械钻孔直径的比值如果过大,钻孔和电镀都会困难,板厂可能会要求放大埋孔尺寸。
三是盲孔对位精度和对位能力。一阶板的盲孔是逐层对位的,二阶、三阶则涉及多次压合对位,精度差会带来开短路风险。设计时要控制盲孔尽量在特定区域内对齐。
四是是否有背钻需求以及背钻深度。如果高速信号不能接受长Stub,要在叠层设计阶段预留空间,并和板厂确认背钻公差。
五是表面处理方式和铜箔厚度。大电流设计要搞清楚默认铜厚是多少、过孔铜厚怎么电镀,避免到后面才发现载流能力不够。
这些问题听起来不“技术”,但它们对布局布线的影响非常直接。我在一个电源项目上就吃过亏,板子画完才确认板厂最小埋孔孔径,结果被迫把一批过孔全部改大,重新扇出,耗时两天。
5.2 从失败里沉淀出来的固定流程
踩过几次坑之后,我现在做高密度板基本会走一套固定流程:先分网络,再建约束,然后定义过孔库和BB Via,接着才是扇出。扇出顺序永远是电源地优先,信号在后。扇出完成后先做一轮DRC,再做电源平面连接,最后走信号。这样每一步都站在上一步的结果之上,不会出现走完信号线才发现电源平面被割裂不得不重来的情况。
另外,Allegro 17.4里有个很好用的功能:直接打开DRC的“层次化”显示,把错误按约束类型分类,进行“批量修复”。盲埋孔板尤其适合这种工作方式。如果一上来就盯着某个红点修改,修完这边又冒那边,心态很容易崩。
我个人体会是,过孔扇出和盲埋孔配置这两件事,做完不难,做明白很难。只要愿意在前期多花半小时做约束和叠层规划,后期布线、DRC、出文件都会顺畅很多。做PCB设计很多时候拼的就是“谁把基础动作做得更扎实”。希望这篇文章能帮你少走点弯路,把Allegro 17.4这套工具用得更顺手。