
1. 过孔放置这件事为什么值得单独拿出来讲画PCB的人都有一个共识布局布线是脑力活过孔放置是体力活。尤其是板子一复杂电源网络、地网络、BGA出线、散热焊盘到处都要打过孔一个一个点点到手抽筋。更麻烦的是过孔放置不只是打个洞这么简单它牵扯到载流能力、回流路径、散热效率、生产良率甚至EMC表现。放得好板子稳如老狗放得随意调试阶段各种莫名其妙的问题就来了。我用Cadence SPB17.4这套工具有些年头了Allegro在过孔处理上的功能其实相当扎实但很多功能藏得比较深新手或者从其他EDA工具转过来的人往往不知道。比如阵列过孔、过孔替换、过孔阵列跟随铜皮、按网络批量放置过孔这些操作一旦掌握效率提升不是一点半点。这篇内容就是把我自己在实际项目中反复用到的过孔放置方法整理出来从最基础的单孔放置到阵列、批量、规则约束下的高效操作尽量把每一步的意图和背后的逻辑讲清楚。不管你是刚接触Allegro的新手还是已经画了几年板子但想提升效率的老手下面这些内容应该都能找到对你有用的部分。我尽量不堆术语用实际操作的视角来讲每个功能都会说清楚什么时候用怎么用用了之后要注意什么。2. 单孔放置看似最简单其实细节最多2.1 手动放置过孔的三种入口在Allegro里放一个过孔最直接的方式是在布线过程中按快捷键或者双击结束走线时自动放置。但如果你要单独放一个过孔比如给散热焊盘打孔或者在某些特殊位置补一个过孔常用的入口有三个。第一个是菜单栏的Place Via这个最直观点完之后鼠标上会挂一个过孔在需要的位置单击即可放置。第二个是工具栏上的过孔图标效果一样。第三个是直接在命令窗口输入add via适合习惯键盘操作的人。这里有个细节值得注意当你执行Place Via的时候Allegro会使用当前激活的过孔类型。如果你没有提前设置好过孔列表它可能会用一个默认的或者上次用过的过孔。所以放置之前最好先确认一下当前选中的过孔是不是你想要的。2.2 过孔类型的选择逻辑过孔类型的选择不是随便挑一个就行。在Allegro里过孔是在Constraint Manager的Physical规则里定义的每个过孔对应一组参数孔径、焊盘尺寸、是否盲埋孔、所属的过孔列表等。实际操作中我通常会把过孔分成几类来管理信号过孔孔径小一般8-12mil用于普通信号换层。电源过孔孔径大一些12-20mil甚至更大根据载流需求决定。地过孔通常和电源过孔同级别或者稍小用于提供回流路径。散热过孔孔径中等但数量多阵列排列在散热焊盘上。在Allegro里切换当前过孔的方式很简单在Options面板里有一个Via列表下拉选择即可。如果你发现Options面板里没有Via选项检查一下是不是当前命令不支持过孔选择比如你正在执行Move命令那就不会显示过孔选项。提示建议在项目开始阶段就把过孔类型在Constraint Manager里定义好并且给每个过孔起一个有意义的名字比如VIA_SIG_8_16、VIA_PWR_16_30这样在后续操作中一眼就能认出该用哪个。2.3 放置时的对齐与栅格设置单孔放置最容易忽略的是对齐问题。尤其是当你需要在某个焊盘旁边放一个过孔或者需要在两个焊盘中间放一个过孔时如果栅格设置不合理放出来的位置总是差那么一点。我的习惯是在放置过孔之前先把栅格切换到比较小的值比如1mil或者0.5mil这样微调起来方便。Allegro的栅格设置在工具栏上有快捷入口也可以按F10调出Grid对话框。放完之后再切回正常栅格避免后续操作误移。另外Allegro有一个很实用的功能叫Snap to Grid在放置过孔时如果开启过孔会自动吸附到最近的栅格点上。这个功能在需要精确对齐的时候很有用但在需要自由放置的时候反而碍事所以要根据场景灵活开关。2.4 过孔放置后的检查动作放完过孔不是就完了。我每次放完一批过孔之后至少会做三个检查第一确认过孔没有和走线、焊盘、铜皮发生短路。Allegro的DRC会帮你检查但DRC有时候不是实时刷新的所以手动跑一次DRC比较稳妥。第二确认过孔的焊盘没有超出板框或者压到禁布区。这个在密集区域特别容易发生尤其是靠近板边的位置。第三确认过孔的网络属性正确。有时候你放了一个过孔但它默认没有网络或者网络不对这会导致后续铺铜时连接不上。在Allegro里过孔的网络属性是自动继承的——如果你在某个网络上放置过孔它会自动分配该网络。但如果你是单独放置的可能需要手动指定。3. 阵列过孔从手动一个个点到批量生成3.1 什么时候需要阵列过孔阵列过孔最典型的应用场景就是散热焊盘。比如QFN封装底部的大焊盘、BGA封装下方的散热区域、电源模块的散热焊盘这些地方通常需要打几十甚至上百个过孔来帮助散热和提供接地回流路径。另一个场景是电源平面的连接。当你在电源层和地层之间需要大量过孔来降低阻抗时阵列过孔比手动放置快得多。还有一种场景是屏蔽腔体的接地过孔阵列沿着屏蔽框一圈放置密集的过孔形成类似过孔墙的效果用来隔离不同电路区域。3.2 用Via Array功能批量生成Allegro有一个专门的功能叫Via Array在Place Via Array菜单下。这个功能允许你按照指定的行列数和间距自动生成过孔阵列。操作步骤大致是这样的先确认当前过孔类型是你想要的在Options面板里选好。执行Place Via Array。在弹出的对话框中设置行数、列数、行间距、列间距。在PCB上点击一个起始位置Allegro会自动生成整个阵列。这里有几个参数需要特别注意。行间距和列间距的设置要考虑到过孔焊盘之间的间隙不能太密导致焊盘重叠也不能太疏导致散热效果打折扣。一般来说过孔中心间距至少是焊盘直径的1.5倍以上具体要看生产工艺能力。注意Via Array生成的是独立过孔它们不会自动分配网络。如果你是在散热焊盘上放置需要确保这些过孔的网络和焊盘一致否则铺铜时会出现连接问题。3.3 利用Copy和Paste实现快速复制除了Via Array功能我常用的另一个方法是复制粘贴。先手动放好一个过孔选中它CtrlC复制然后CtrlV粘贴。Allegro支持在粘贴时指定偏移量如果你需要等间距排列可以连续粘贴多次每次偏移相同的距离。这个方法看起来笨但在某些不规则排列的场景下反而比Via Array更灵活。比如你需要在一个圆形区域内放置过孔Via Array只能生成矩形阵列这时候就只能手动或者用其他方法。3.4 用Skill脚本实现自定义阵列如果你对Allegro的Skill语言有一定了解可以写一个简单的脚本来实现更复杂的阵列放置。比如沿圆形路径均匀放置过孔、沿任意多边形边界放置过孔、按照自定义规则生成非均匀阵列等。Skill脚本的门槛不算高基本的语法和C语言类似。网上有不少现成的过孔阵列脚本可以参考改一改就能用。我自己写过一个沿圆形放置过孔的脚本用于某个圆形散热焊盘的项目大概几十行代码就搞定了比手动放快了一个数量级。不过Skill脚本需要一定的学习成本如果你只是偶尔用一次可能不值得花时间去写。但如果你经常遇到类似需求投资时间学一下Skill是划算的。4. 过孔替换与批量修改改一个和改一百个4.1 单个过孔替换的快捷方式项目做到一半突然发现某个过孔的孔径不对或者需要从通孔换成盲孔这时候就需要替换过孔。Allegro里替换单个过孔很简单选中过孔右键选择Replace Via然后在弹出的列表里选择新的过孔类型即可。但这里有个坑替换过孔之后过孔的位置可能会发生微小偏移。这是因为不同过孔的焊盘尺寸不同Allegro在替换时会以过孔中心为基准重新计算焊盘位置。如果原来的过孔位置是精确对齐的替换后可能需要重新微调。4.2 批量替换过孔的两种思路当你需要替换大量过孔时一个一个改显然不现实。Allegro提供了两种批量替换的思路。第一种是用Edit Find面板先按过孔类型或者网络筛选出所有需要替换的过孔然后统一执行替换操作。具体操作是打开Find面板勾选Vias设置筛选条件然后在PCB上框选或者全选最后右键选择Replace Via。第二种是通过Constraint Manager修改过孔列表的映射关系。这种方法适合整个项目统一更换过孔类型的场景。比如你原来用的是8/16的过孔现在想全部换成10/20的可以在Constraint Manager里修改Physical规则中的过孔列表Allegro会自动更新所有使用该规则的过孔。第二种方法的风险在于它会影响所有使用该规则的网络如果你只想改一部分就不能用这个方法。所以用之前一定要确认影响范围。4.3 替换过孔时的网络保持问题替换过孔时最让人头疼的是网络丢失。尤其是批量替换的时候如果操作不当过孔的网络属性可能会被清空导致后续铺铜时出现大量孤岛或者连接断开。我的经验是在批量替换之前先备份一份PCB文件。替换完成后立即检查过孔的网络属性是否保持正确。检查的方法可以是跑一次DRC看看有没有网络连接相关的报错也可以用Report功能生成一份过孔列表对比替换前后的网络信息。如果发现网络丢失可以尝试用Logic Assign Net功能重新分配网络。但这个操作比较繁琐所以最好的策略还是预防——在替换之前确认操作方式不会影响网络属性。5. 过孔与铜皮的配合优先级和连接方式5.1 过孔在铜皮中的连接方式过孔和铜皮的关系是Allegro使用中一个容易出问题的地方。默认情况下过孔和铜皮之间是全连接Solid Connect也就是说过孔的焊盘和铜皮完全融合在一起。但在某些场景下你可能需要改成花焊盘连接Thermal Relief比如需要控制焊接时的热传导或者需要避免过孔从铜皮上吸走太多热量。在Allegro里过孔和铜皮的连接方式是在Constraint Manager的Physical规则里设置的具体在Shape Global Shape Parameters或者每个网络的规则里。你可以为不同的网络设置不同的连接方式比如地网络用过孔全连接电源网络用花焊盘连接。这里有一个实际经验对于散热焊盘上的过孔阵列我通常会用全连接因为散热焊盘本身就需要良好的热传导。而对于普通的信号过孔如果它恰好落在铜皮上我会用花焊盘连接避免焊接时出现虚焊。5.2 铜皮优先级对过孔的影响Allegro的铜皮有优先级的概念。当两个铜皮重叠时优先级高的铜皮会覆盖优先级低的。这个机制对过孔的影响在于如果一个过孔同时落在两个不同优先级的铜皮上它只会和优先级高的铜皮连接。这个特性在某些场景下很有用。比如你有一个电源铜皮和一个地铜皮在同一个区域重叠你可以通过设置优先级来控制过孔和哪个铜皮连接。但如果不注意也可能导致过孔和预期的铜皮没有连接上。我的做法是在铺铜之前先规划好每个铜皮的优先级并且在放置过孔时留意它落在哪个铜皮范围内。如果发现连接不对优先检查铜皮优先级设置。5.3 过孔避让铜皮的场景有时候你需要过孔避开铜皮比如在某些敏感信号区域过孔的存在可能会影响阻抗或者引入寄生电容。这时候可以通过设置禁布区Keepout来阻止过孔进入特定区域。Allegro的禁布区功能很灵活你可以设置禁止过孔、禁止走线、禁止铜皮等不同类型的禁布区。设置方法是在Setup Areas Keepout里定义区域和禁止类型。提示禁布区的设置要考虑到实际生产的需要。比如在某些区域禁止过孔是为了保证阻抗一致性但如果禁布区设置得太大可能会导致布线困难。所以设置之前最好和硬件工程师确认一下具体的约束条件。6. 电源过孔与散热过孔的特殊处理6.1 电源过孔的载流计算电源过孔不是随便放的它的数量和孔径需要根据载流需求来计算。一个常见的经验公式是对于1盎司铜厚的PCB一个直径10mil的过孔大约可以承载1A的电流。但这个数字受很多因素影响包括铜厚、温升要求、过孔长度等。更准确的计算方法是查IPC标准里的载流表或者用一些在线的过孔载流计算工具。我通常会在设计初期就估算好每个电源网络的最大电流然后根据电流大小决定过孔的数量和孔径。举个例子如果一个电源网络需要承载5A电流按照1A/过孔的经验值至少需要5个过孔。但考虑到余量和温升我通常会放8-10个。如果空间允许用更大的孔径比如16mil或者20mil可以减少过孔数量。6.2 散热过孔的排列策略散热过孔的排列方式直接影响散热效果。一般来说过孔越密集散热效果越好但也要考虑到生产工艺的限制和焊接时的热流失问题。我的经验是对于QFN底部散热焊盘过孔按照网格排列间距在1.0mm到1.2mm之间比较合适。过孔孔径用8-12mil太小了散热效果不好太大了焊接时焊料容易从过孔流走。对于BGA下方的散热过孔排列要避开BGA的焊球位置通常是在BGA的四个角或者中心区域放置。过孔的数量根据BGA的功耗来决定功耗大的BGA可能需要几十个散热过孔。6.3 过孔与焊盘的连接全连接还是花焊盘散热焊盘上的过孔连接方式是一个需要权衡的问题。全连接散热效果好但焊接时热量散失快可能导致焊接不良。花焊盘连接焊接性能好但散热效果打折扣。我的做法是对于需要回流焊的板子散热焊盘上的过孔用花焊盘连接花焊盘的辐条宽度设置在0.2mm到0.3mm之间数量4-6根。对于需要波峰焊的板子可以用全连接因为波峰焊的热量补充更充分。另外如果散热要求特别高可以考虑在散热焊盘上先铺一层铜皮然后在铜皮上放置过孔阵列过孔和铜皮之间用全连接。这样既保证了散热效果又通过铜皮分散了热量对焊接的影响相对小一些。7. 过孔放置的常见问题与排查思路7.1 过孔放不下去或者放上去就消失这是新手经常遇到的问题。原因通常有几个一是当前层不对比如你在顶层操作但过孔需要从顶层贯穿到底层如果底层被隐藏了过孔可能看起来消失了。二是过孔类型没有正确设置比如你选的过孔是盲孔但当前层不在盲孔的范围内。三是DRC规则太严格过孔放上去之后被DRC标记为错误显示上可能被隐藏了。排查方法先检查当前层设置确保所有相关层都可见。然后检查过孔类型是否匹配当前操作。最后跑一次DRC看看有没有报错信息。7.2 过孔网络不对或者没有网络过孔网络不对的原因通常是放置过孔时没有在正确的网络上操作或者过孔被放置在了没有网络的区域。Allegro的过孔网络是自动继承的如果你在某个网络的走线上放置过孔它会自动分配该网络。但如果你是单独放置的可能需要手动指定。解决方法选中过孔右键选择Assign Net然后选择正确的网络。如果是批量问题可以用Find面板筛选出所有无网络的过孔统一分配。7.3 过孔和铜皮连接不上这个问题通常和铜皮优先级或者连接方式有关。先检查过孔是否在铜皮的范围内然后检查铜皮的优先级设置最后检查过孔和铜皮的连接方式是否设置为全连接或者花焊盘。还有一个可能的原因是铜皮没有重新铺。Allegro的铜皮是静态的修改过孔之后需要重新铺铜才能更新连接关系。所以每次修改过孔之后记得执行Shape Fill或者全局重新铺铜。7.4 过孔导致DRC报错过孔相关的DRC报错常见的有过孔间距太小、过孔和走线间距不够、过孔和焊盘间距不够、过孔超出板框等。这些报错通常是因为设计规则设置得太严格或者过孔放置位置确实有问题。排查方法先看DRC报错的具体内容然后根据报错信息定位到具体的过孔。如果是规则太严格可以适当放宽规则如果是放置位置问题需要移动过孔或者调整周围元素。8. 提升过孔放置效率的几个实战技巧8.1 快捷键设置Allegro支持自定义快捷键把常用的过孔操作绑定到顺手的键位上效率提升很明显。比如我会把Place Via绑定到数字键1把Replace Via绑定到数字键2把Via Array绑定到数字键3。这样操作的时候左手按键盘右手握鼠标不用在菜单里翻来翻去。快捷键的设置方法是在Setup User Preferences Aliases里或者直接修改env文件。env文件里可以定义功能键和字母键的映射比如alias 1 add via。8.2 利用Options面板快速切换过孔类型Options面板是Allegro里使用频率最高的面板之一。在放置过孔时Options面板会显示当前可选的过孔列表。你可以通过下拉菜单快速切换过孔类型而不需要去Constraint Manager里修改。我的习惯是把常用的几种过孔都放在列表里按照使用频率排序。这样切换的时候一眼就能找到想要的。8.3 用Find面板精准筛选过孔当板子上的过孔数量很多时找到特定的过孔或者统计过孔数量就变得困难。Find面板可以帮你按类型、按网络、按区域筛选过孔。比如你想知道某个电源网络上有多少个过孔可以打开Find面板勾选Vias然后在Find By Name里输入网络名称Allegro会高亮显示所有匹配的过孔并在状态栏显示数量。8.4 过孔统计与报告生成在设计后期经常需要统计过孔的数量和类型用于生成BOM或者和生产部门沟通。Allegro的Report功能可以生成过孔统计报告在Tools Reports里选择Via Report可以输出所有过孔的详细信息包括位置、网络、类型等。我通常会在设计完成前生成一份过孔报告检查一下有没有异常过孔比如没有网络的、位置重叠的、类型不对的。这个习惯帮我避免了好几次潜在的生产问题。8.5 复用已有设计的过孔配置如果你经常画类似类型的板子可以把过孔配置保存成模板。Allegro支持导出和导入Constraint Manager的规则你可以把过孔列表、DRC规则等保存成一个规则文件在新项目里直接导入省去重新配置的时间。具体操作是在Constraint Manager里选择File Export Constraints导出成.dcf文件。新项目里用File Import Constraints导入即可。9. 我踩过的那些过孔相关的坑说几个我自己在实际项目中踩过的坑都是血泪教训。第一个坑有一次做一个电源板散热焊盘上放了过孔阵列用的是全连接。板子回来之后发现散热焊盘焊接不良虚焊率很高。后来分析原因是过孔太多太密回流焊时热量从过孔迅速散失导致焊盘温度不够。后来改成花焊盘连接问题解决。这个教训是散热和焊接是一对矛盾不能只顾一头。第二个坑批量替换过孔的时候没有备份替换之后发现部分过孔的网络丢了导致铺铜后出现大量孤岛。花了半天时间手动修复。从那以后任何批量操作之前我都会先存一个备份版本。第三个坑在一个高速信号区域放置过孔时没有注意阻抗匹配过孔的寄生电容导致信号完整性出了问题。后来在过孔旁边加了伴随地过孔并且调整了过孔的孔径和焊盘尺寸问题才解决。这个教训是高速信号区域的过孔不能随便放要考虑阻抗和回流路径。第四个坑过孔放置时栅格设置太大导致过孔位置偏移和焊盘之间的间距不够DRC报错。后来养成习惯放置过孔之前先检查栅格设置放完之后再切回正常栅格。这些坑说起来都是小事但在实际项目中一旦踩到轻则返工重则影响交期。所以过孔放置这件事值得花时间认真对待。10. 从单孔到阵列核心思路总结过孔放置的效率提升核心思路其实就两条一是把重复性的操作批量化二是把规则性的约束自动化。批量化方面Via Array、Copy Paste、Skill脚本都是有效的手段。自动化方面Constraint Manager的规则设置、过孔列表的映射、铜皮优先级的配置都能帮你减少手动操作。但工具只是工具真正决定过孔放置质量的还是设计者的判断。什么地方该放过孔、放多少个、用什么类型、怎么连接这些决策依赖于对电路原理、生产工艺、信号完整性的理解。工具能帮你更快地执行但不能替你做决策。所以我的建议是先把基础的单孔放置练熟理解每个参数的含义然后掌握阵列和批量操作提升效率最后在实际项目中不断积累经验形成自己的过孔放置策略。这个过程没有捷径但每一步的积累都会在后续的项目中体现价值。