
上个月帮同事处理一块射频电源板的改版板边需要加两排接地过孔做边缘屏蔽。他打开Edit菜单用老办法复制、粘贴、对齐一颗一颗排快两小时没弄完。我过去看了一眼在Allegro 17.4里调出Via Array面板框选目标区域、设好间距、把网络指向GND五分钟所有过孔整整齐齐一次打完。同事当场愣住问我这是什么功能。这功能就是Allegro 17.4的Via Array藏在Place菜单下面特别不起眼但处理板边和铺铜区的批量过孔阵列时效率高得离谱。这篇我不打算只列步骤会把三种模式怎么选、参数怎么设、哪些地方容易翻车都讲清楚最后给你一组可以直接照抄的参考值。1. 哪些设计任务会用到Via Array以及为什么手动做又慢又错1.1 三个高频使用场景板边屏蔽孔、缝合孔、散热孔Via Array往实际设计里落地最典型的场景有三个分别对应板边、铜皮和器件散热。先说板边屏蔽孔。高速电路板特别是射频板PCB边缘会打一整圈接地过孔孔的间距和位置都有讲究。这些孔不加不行因为板边的电场最强是辐射泄漏的主要通道。一圈接地孔相当于一个法拉第笼把噪声关在层叠内部。这类孔一般沿着板边框分布数量动辄几十上百颗如果靠手动一颗颗打光是对齐边缘就够喝一壶的。然后是铺铜区的缝合孔也叫Stitching Via。多层板里大面积的地铜和电源铜之间需要大量过孔连通返回电流才有低阻抗路径。比如高速信号换层如果周围没有缝合孔返回电流就得绕一个大圈子形成天线把噪声辐射出去。缝合孔的间距在射频设计中甚至有明确的电气要求但它的分布不需要太精确均匀即可这就非常适合阵列生成。最后是功率器件或电源模块下方的散热过孔。这类孔通常整齐地排列在器件底部的铜皮上孔径不能太大防止回流焊漏锡间距也有行业习惯。我见过很多工程师做散热孔时还在用复制粘贴大法其实用Via Array做一个矩形网格一两分钟就能搞定而且后续调整间距只需要改一个数。1.2 手动复制粘贴的暗坑效率低改一次参数全军覆没手动打孔为什么效率低我看过很多小伙伴的操作流程放第一颗孔复制设置x/y增量连续粘贴然后还要检查间距是否一致、是否对齐、有没有重叠。这个过程有一个致命问题——如果做到一半发现间距应该从50mil改成80mil或者板边到孔的距离要调整全部得重来。更难受的是孔太多时容易漏粘、重复粘检查也要花半天时间。Via Array是参数化生成不是复制粘贴。它一次性定义整组规则间距、偏移、行列数、网络属性全部在面板里给定然后一次性生成整组孔。规则定了后面要改间距直接把参数改掉重新生成就行不需要动任何一颗单孔。这一点让它在可维护性上完全胜过手动方式。手动打孔还有一个隐性成本人眼对齐的误差。你觉得自己对齐了放大一看两列孔之间差了0.1mm。对于板边屏蔽孔这种误差可能导致边缘辐射泄漏点不在预期位置对于散热孔不均匀分布会导致局部过热。Via Array是程序按数学规则排布不存在这种问题。2. 17.4里Via Array三种模式的选型逻辑与参数逐个解读2.1 三种模式分别适合什么任务在Allegro 17.4里Place菜单下的Via Arrays有三个子命令Bounding Box、Outline、Edge。很多人一上来就晕不知道选哪个。按我个人的项目经验可以简单分这么三类Edge模式沿PCB板边、板框线段或任意已选线段生成一列或多列过孔。板边屏蔽孔就选它。Bounding Box模式在一个矩形区域内生成规则的二维网格过孔行距和列距单独设置。铺铜区的缝合孔、散热孔都走它。Outline模式沿一个闭合多边形或异形轮廓生成一圈过孔。适合屏蔽罩接地、焊盘围孔、圆形或异形边界的情况。选型的核心逻辑就一句话你要的是一排孔还是一片孔还是一圈孔。一排选Edge一片选Bounding Box一圈选Outline。2.2 参数面板里的每个字段的含义和设置思路三种模式对话框里的参数高度相似理解核心字段基本就能覆盖全部场景。参数名含义设置注意事项Via Type使用的过孔封装类型如Via10d8表示外径10mil内径8mil需要在封装库中已定义否则下拉列表为空Direction阵列排列方向Vertical为竖直单列Horizontal为水平单行Both为双列镜像Edge模式下最常用选错会导致孔朝板外排Origin Offset第一颗孔相对参考点的偏移量设置不当会导致整组孔整体平移Left/Right/Top/Bottom Offset四边到阵列边界的留边距离Bounding Box模式下控制孔区相对框选区域的缩进Via to Via Distance相邻两孔的中心间距这是中心距不是边到边间距设置时容易混淆Net Name生成后分配给所有过孔的网络建议直接填GND省去后续改网络另外一个要注意的是Active Class/Subclass。Edge模式下选边时要确认你选的是BOARD GEOMETRY/OUTLINE层的线段而不是ETCH层的铜皮边缘。选错层的后果是孔的参考基准完全错误生成位置会飘。2.3 动手前必须确认的过孔封装和库路径用Via Array前有一个经常被忽略的前置条件过孔封装必须已经在当前设计库中可用。Allegro的规则是如果库路径里找不到对应Padstack面板里Via Type下拉菜单就是空的或者生成时报错。所以第一步先确认Setup → User Preferences → Design Paths → Library里的padpath和psmpath都指到了正确的库目录。如果是团队协作还要确认大家用的都是服务器上同一版本的库不然同一个Via Type在不同机器上生成出的孔径不一致画板时看不出来出Gerber时就会出问题。我在新项目里还习惯把不需要的过孔类型从padpath里临时移除只留常用的那几种这样Via Type下拉列表干净不容易选错。3. 板边过孔阵列Edge模式的完整操作流程与关键参数校验3.1 选边与多边批量选择的细节以板边屏蔽孔为例打开Place → Via Arrays → Edge后面板里会让你选择线段。这里分两种情况如果你的板框画在BOARD GEOMETRY/OUTLINE层用Pick Segments方式可以点选板框线如果是异形板框还可以在Options面板里把Selected Type设为All segment一次框选一整圈边线。多选边线时最稳定的操作是按住Shift逐段加选或者右键调出Pick Many框选。如果板框不是封闭图形建议先在板框属性里确认闭合再执行阵列否则无法正确判断边的方向。我踩过的第一个坑就在这有次板框是带圆弧段的异形板我选了半圈边线后没注意圆弧的弧长被系统按弦长处理生成的孔间距在圆弧处明显变稀。后来我把弧段单独选中并在参数里把弧长设置打开才对上。所以处理圆弧段时要留意软件是按弦长还是弧长来计算间距。另一个细节如果你不是一次选完整圈边线而是分多次选中每次选中的线段会作为独立组生成阵列。这会带来一个问题——转角处可能会出现两颗孔距离过近的情况。解决方法是选中所有边线后在Options里勾选Unify segments选项让系统把多个线段当成一个连续路径处理重新计算转角处的均匀间距。这个选项默认是关闭的不打开的话转角处基本必然出现重叠孔。3.2 From Edge Distance和Via to Via Spacing的工程取值板边孔的间距和距边距离是两个必须认真取的参数不是随便填个好看的数字就行。From Edge Distance是孔中心到板边的距离。这个值不能只按看起来好看来取要考虑板厂的钻孔公差。常规FR-4制造工艺下孔边到板边的最小距离建议保持在0.3mm以上小于这个值钻孔时薄边容易崩裂。换算成孔中心到板边的距离就得再加上孔径半径。比如用10mil钻孔的过孔中心距板边至少要0.3mm0.127mm约0.43mm按英制大概17mil。实际项目里板边屏蔽孔的From Edge Distance我一般取20mil到40mil再小就看工艺了。如果你拿不准发板之前先跟板厂确认他们的最小孔边距要求别等到样片回来发现边缘破孔才后悔。Via to Via Distance中心距的取值从电磁角度讲边缘屏蔽孔想有效抑制辐射间距需要远小于你关心的最高频波长的1/20。说人话就是频率越高孔要排得越密。如果只是做一般数字板的板边地孔经验值取100mil到150mil问题不大射频板建议60mil到80mil。别一上来就设25mil过密除了好看没额外收益反而增加加工成本和时间。3.3 生成方向与位置偏移修正Edge模式生成后偶尔会出现过孔落在板框外侧或者跑偏的情况这时候先别急着删从这几个方向排查检查Direction设置。如果Direction参数是Vertical而你的边是横向的生成的孔会垂直于边线朝外排看起来就是跑偏。检查Origin Offset。如果正值方向与边线方向相反整组孔会整体位移。边线被选中了两次时会在同一位置生成两列重叠孔。这种情况先选中全部孔右键Delete重新选择一次边线再生成。修正方法其实很快把参数里的Left/Right Offset符号对调或者重新生成前把原有的临时孔全部删除。还有个技巧生成后如果只有个别孔位置不理想不要删孔选中后用右键Exclude功能排除再单独手工放一颗。这样不会破坏整组阵列后续整组调整时这颗特殊位置的孔也不会被误动。3.4 板边孔离边缘太近导致的制造问题这里专门提一下板边孔打太近的后果。我遇到过一版产品改板时把板边孔间距从100mil调到了50mil想着屏蔽效果更好结果加工的样片回来一看板边有条细微的裂纹。板厂反馈说孔边距板边只有0.25mm钻孔应力直接把薄壁挤裂了。这类问题在Via Array里几乎没有预警提示因为DRC的Board Outline间距规则如果没配好根本不会报。所以提醒一句跑完Via Array后务必检查一下板框到孔的间距。用Manufacture → Dimension/Draft的测量工具量一下或者在Constraint Manager里加一条Physical Rule设定Board Outline to Via的最小间距让系统替你把关。4. 铺铜区缝合孔阵列Bounding Box与Outline模式的工程设置4.1 缝合孔的电磁作用与间距设计依据铺铜区的缝合孔很多人的理解就停留在铺铜时打点过孔连接地层。但缝合孔的间距其实是有设计依据的。高速信号换层回流时如果周围没有地过孔返回电流只能往远处找通路这个回路面积一大就成了天线。仿真会发现在信号换层处附近放几个地孔辐射就能明显降下来。经验法则是缝合孔间距不要超过信号在介质中波长的1/20。举个例子2.4GHz的WiFi信号在FR4中的波长大约60mm考虑到介电常数约4.2实际波长约为自由空间波长126mm的一半左右1/20约3mm换成mil大概120mil。也就是说120mil以内的缝合孔间距对这个频段是安全的。如果你的板子只跑低速I2C、GPIO那缝合孔间距大点问题也不大按150mil到200mil做即可。反过来也要提醒一句缝合孔不是越多越好。太密集的孔阵会把电源平面和地平面割成筛子直流载流能力和参考平面完整性反而变差。所以工程上盯住够用两个字按频率要求算一下上限再留点裕量。4.2 Bounding Box模式的参数设置与网格孔生成铺铜区常规缝合孔推荐用Bounding Box。操作逻辑是用鼠标拉一个矩形框系统在这个框内生成网格阵列。具体步骤打开Place → Via Arrays → Bounding Box。在Options面板里选好Via Type填Net Name为GND。设置Row Spacing和Column Spacing即行方向和列方向的中心距。设置Left/Right/Top/Bottom Offset让阵列离矩形框四边各缩进一段距离避免孔落到铜皮边缘外。设置Origin Offset决定第一颗孔从哪个角开始排。回到画布拉框选择铺铜区的矩形范围系统立即生成。举个实际值要给一片30mm×20mm的GND铺铜做缝合孔用10/16mil过孔间距取100mil2.54mm四边缩进1mm。算下来横向约30-2/2.54≈11颗纵向20-2/2.54≈7颗总共约77颗。手动放这些孔至少要半小时Bounding Box一分钟不到就出来了。生成后建议快速目检一遍重点看四边缩进是否均匀、有没有孔落在禁布区或其它器件丝印下。如果元件密集区有丝印被孔穿过用前面说的Exclude方法处理掉个别孔就行。4.3 不规则铺铜区的处理办法不规则铜皮是另一个常见痛点。L形、圆形、带斜边的区域直接用Bounding Box会把孔打在不该打的位置需要手动删除反而更慢。我的办法是分情况处理L形或T形区域拆成两个矩形分别跑Bounding Box。两个矩形角落重叠部分的孔用Exclude方式去掉重复的。圆形或圆弧边界在Via Arrays里选Outline直接选中圆的轮廓线设置From Boundary Distance和间距沿圆周生成一圈孔。完全异形边界先生成一个大矩形网格再用Temp Group选中所有孔配合Shape的边界检查删除外部孔。实测下来比一个个试参数快很多。对了如果是屏蔽罩焊盘内侧的过孔还有一个经验孔不要贴着屏蔽罩的焊盘中心线放往铜皮方向多缩进一点避免上锡时孔内爬锡改变外形。4.4 阵列孔的Net属性处理与铜皮连接验证Via Array生成后的过孔网络属性取决于面板里Net Name有没有填。如果没填生成出来的孔就是空网络的孤儿你在铺铜时选中同一块GND铜皮正常情况下这些孔会被并入GND网络但如果孔旁边有其它网络走线紧挨着就可能出现铜皮没连接上或者报短路。我的建议很简单生成阵列前就把Net Name填上一劳永逸。生成后想验证网络属性选中任意一颗孔右键Properties看一下Net那一栏确认是GND。如果发现个别孔网络不对选中后按Edit → Change把Net改过来就行。这里不建议用全局替换去覆盖整组因为有可能误伤同位置带其他属性的孔。5. 性能对比与实战避坑把Via Array用出最高效率5.1 单位不一致导致的阵列偏位问题Allegro的单位系统坑过不少人。设计文件可能从客户或者其他工具转过来单位是mil还是mm有时候只在右下角状态栏里一个小地方显示。我在Via Array里就翻过一次车参数面板默认单位是mil我把一段本来打算按mm输入的间距填进了mil框出来的阵列间距直接变大了25.4倍整组孔飞到板外去了。所以操作前第一件事看设计单位。输入I键打开Setup确认Units里显示的是Mils还是Millimeter。如果设计是mm你在参数框里输入的数值就会以mm为单位被接受如果设计是mil输入50就是50mil不是50mm。这个坑之所以反复出现是因为很多设计文件是从DXD或PADS转过来的转换过程中单位设置没有同步。我的习惯是接手任何外部设计文件后第一步统一设置单位再做任何阵列或布局操作。5.2 生成后批量修改过孔类型与网络阵列已经生成在板上了但发现孔径不对怎么办不需要重来。选中阵列里任意一颗孔右键Select Similar把同样Via Type的孔全部选中然后Tools → Padstack → Replace选择正确的过孔类型一次替换。网络属性同理选中所有目标孔Edit → Change把Find面板里只勾选Vias在Options里选择Net → GND框选后Apply所有孔的Net就会一次性改过来。这两个操作配合起来基本能处理所有生成之后想改规格的情况。有一点要留意如果这些过孔已经被铺铜覆盖并联通了替换Padstack之后软件要重新动态铺铜时间会明显变长这是正常现象不用以为是卡死。5.3 手动打孔与Via Array的实测数据对比为了说明效率我这里列一组实际项目里记录的数据。任务是在一块120×80mm的板子上完成两件事板边一圈屏蔽地孔共64颗内部GND铺铜缝合孔120颗。操作环节手动方式Via Array方式放置并排列全部孔约50分钟约5分钟对齐与间距修正反复人工调整参数自动保证网络分配逐颗或分批修改面板直接填GND后续改间距/孔径全部重来改参数重新生成实测下来中途如果发现间距要调整手动方式时间还要翻倍Via Array说30秒就30秒。这个对比很能说明问题尤其是一想到后面还有可能改版参数化带来的收益更大。5.4 团队复用与脚本化建议最后聊点让团队整体受益的做法。Via Array的参数其实可以沉淀成规范。我们组在Layout Design Guide里专门加了一节规定板边屏蔽孔孔径10/16mil孔中心距板边25mil孔间距80mil射频板/120mil数字板。铺铜缝合孔孔径10/16mil孔间距100mil四边缩进1mm。散热孔孔径12/20mil孔间距1.0mm阵列覆盖器件中心铜皮。新工程师接手时直接按这个规范设参数不用从零试。更进一步Allegro支持Skill脚本可以把常用阵列参数封装成菜单命令。我们组内写了个简单脚本一键生成板边射频屏蔽孔和GND缝合孔两类任务参数录在脚本里点一下菜单就出结果。脚本化的价值在于两件事消除人为输入参数的错误统一组内工程师风格。即便不做脚本只要每个项目都用Via Array而不是手动复制一致性就已经比很多团队强了。