1. 过孔在Allegro里到底是个什么东西
很多人刚接触Allegro的时候,会把过孔当成一个"画上去的圆"来理解,觉得跟放个焊盘差不多。这个理解在简单双面板上勉强说得通,但一旦进入多层板、HDI板或者高速信号场景,这种认知就会让你在后续操作里反复踩坑。过孔在Allegro的体系里不是一个图形对象,而是一个独立的Padstack(焊盘栈),它有自己的钻孔参数、各层盘径、阻焊开窗、反焊盘尺寸,甚至还有自己的网络属性。你放下去的每一个过孔,本质上都是把一整套叠层参数实例化到了PCB上。
这就解释了为什么很多新手会遇到"过孔放不下去""过孔放上去没有网络""过孔打到pad上不报错"这类问题。因为过孔的行为逻辑跟走线、铜皮、焊盘都不一样,它介于"物理结构"和"电气连接"之间。Allegro16.6作为一款经典版本,至今仍有大量公司在用,它的过孔操作逻辑跟17.x、22.x有一些细节差异,尤其是Padstack Editor的入口和Constraint Manager的联动方式。这篇内容就围绕16.6这个版本,把过孔从创建、放置、替换到规则约束的完整链路讲清楚,适合刚上手Allegro的layout工程师,也适合从PADS或AD转过来、被Allegro这套体系绕晕的朋友。
我个人的判断是:过孔操作是Allegro入门的分水岭。走线谁都会,但能不能把过孔管明白,直接决定了你后面做高速板、做盲埋孔、做阻抗控制时会不会抓瞎。下面按实际操作顺序展开,每一步都说明为什么这么做。
2. 创建过孔Padstack:从钻孔到各层盘径的完整设定
2.1 为什么过孔必须单独建Padstack而不能复用焊盘
在PADS里,过孔可以比较随意地指定一个直径就用了。Allegro不行,它要求过孔必须是一个完整的Padstack文件(.pad),这个文件里定义了钻孔直径、钻孔符号、各层的Regular Pad、Thermal Pad、Anti Pad,以及阻焊和助焊层的开窗。你如果直接拿一个表贴焊盘去当通孔用,DRC会直接报错,因为Padstack的类型不匹配。
打开Padstack Editor的方式在16.6里是:开始菜单 → Cadence Release 16.6 → PCB Editor Utilities → Padstack Editor。注意16.6的Padstack Editor跟17.2以后的界面差别很大,16.6还是老式的分页式布局,左边选Padstack类型,右边填参数。
创建过孔时,Padstack类型选Through(通孔)或者Blind/Buried(盲埋孔)。这里有个细节:16.6里盲埋孔需要先在Cross-section里定义好层对,否则Padstack Editor里选不到对应的层范围。
2.2 钻孔直径与盘径的换算逻辑
这是最容易被忽略的地方。很多人建过孔就是凭感觉填数字,结果做出来的板子要么钻孔太大盘太小导致破环,要么盘太大影响布线密度。行业里有一个基本的经验公式:
- 外层盘径 ≥ 钻孔直径 + 0.2mm(约8mil)
- 内层盘径 ≥ 钻孔直径 + 0.15mm(约6mil)
举个例子,如果你用0.3mm的钻头(约12mil),那么外层盘径至少要做到0.5mm(20mil),内层盘径至少0.45mm(18mil)。这个0.2mm的差值就是所谓的环宽(Annular Ring),它保证了钻孔偏移时铜环不会被钻破。
在Padstack Editor里具体填的位置:
| 参数项 | 填写位置 | 典型值(0.3mm钻) |
|---|---|---|
| Drill Diameter | Drill页 | 0.3mm |
| Regular Pad(Begin Layer) | Layers页 | 0.5mm |
| Regular Pad(Default Internal) | Layers页 | 0.45mm |
| Regular Pad(End Layer) | Layers页 | 0.5mm |
| Anti Pad | Layers页 | 盘径+0.2mm |
| Thermal Pad | Layers页 | 盘径+0.15mm |
Anti Pad是负片层用的隔离盘,Thermal Pad是负片层连接铜皮用的花焊盘。16.6里如果你的板子全是正片,这两个参数影响不大,但只要涉及负片平面层,填错了就会导致短路或隔离失效。
2.3 钻孔符号与钻孔图的关系
Drill页里还有一个Figure(钻孔符号)的设定。这个符号会在钻孔图(Drill Drawing)里显示,用来区分不同孔径的孔。16.6默认给了一堆符号,但实际项目中我建议手动指定,比如0.2mm用圆点、0.3mm用十字、0.5mm用三角。因为自动分配有时候会重复,导致钻孔图上看不出区别。
提示:Padstack建好后,文件名建议带上孔径信息,比如via_0r3_0r5.pad,这样后面在Constraint Manager里选的时候一眼就能认出来,不用一个个点开看。
3. 把过孔放进设计:放置、替换与网络绑定
3.1 手动放置过孔的正确姿势
过孔建好之后,怎么放到PCB上?16.6里最直接的方式是走线过程中打孔。你在走线状态下(Route → Connect),双击鼠标左键或者按快捷键,就会在当前走线位置放一个过孔并切换层。但这里有个前提:你的Constraint Manager里必须已经指定了默认过孔,否则Allegro不知道你要放哪个。
设置默认过孔的路径:Setup → Constraints → Physical → 选中你的网络或Net Class → 在Vias列里勾选可用的过孔。只有勾选过的过孔,走线时才能双击打出来。这个逻辑跟很多人想的不一样——不是所有建好的过孔都能直接用,必须先在约束里"授权"。
如果你只是想单独放一个过孔(不跟走线绑定),可以用Place → Via,然后手动点位置。但这样放出来的过孔默认没有网络,需要后续手动赋网络,比较麻烦。我一般不建议这么干,除非是做散热孔或者安装孔。
3.2 过孔替换:改孔径不用重新布线
项目做到一半,发现过孔孔径选小了,或者公司工艺要求换一种过孔,怎么办?重新布线肯定不现实。16.6提供了过孔替换功能:Tools → Padstack → Replace。选中要替换的过孔(可以框选多个),然后选择新的Padstack,确认后所有选中的过孔会批量替换,走线连接关系保持不变。
这个功能我实测下来非常稳,但有一个坑:如果新旧过孔的钻孔直径差异太大,替换后DRC会报间距错误,因为盘径变了,跟周围铜皮的间距可能不够。所以替换后一定要跑一次DRC,别以为替换完就没事了。
3.3 过孔网络绑定的那些事
过孔的网络属性是自动继承的——你在走线时打的孔,网络跟走线一致。但如果是手动Place → Via放下去的,网络是空的。这时候你可以用Logic → Assign Net或者直接在Find面板里选中过孔,右键Assign Net来绑定。
这里要特别说一个高频问题:"过孔打到pad上为什么不报错"。这个在热搜词里也出现了,说明很多人遇到过。原因是Allegro默认的DRC规则里,Via到Pad的间距检查可能没有开启,或者你的Constraint Manager里Via-to-Pad的Spacing值设成了0。解决方法是去Setup → Constraints → Spacing → 找到Via到Pad的规则,把间距值设成工艺要求的最小值(比如0.15mm)。设完之后再跑DRC,打到pad上的过孔就会报错了。
注意:有些设计是有意让过孔打在pad上的(比如散热焊盘上的散热孔),这种情况下不报错反而是对的。所以关键是搞清楚你的设计意图,而不是盲目追求"报错"。
4. 过孔与约束规则的联动:Physical和Spacing两条线
4.1 Physical规则里过孔是怎么被引用的
Allegro的约束体系分两大块:Physical(物理规则)和Spacing(间距规则)。过孔在Physical规则里的角色是"可用的连接手段"。你在Physical → Vias列里勾选的过孔,就是告诉Allegro"这个网络允许用这些过孔"。
16.6里Physical规则是按Net Class或者按网络来分配的。默认有一个DEFAULT Net Class,你可以给它指定一组通用过孔,然后对特殊网络(比如电源、差分对)单独指定。比如:
- DEFAULT:允许via_0r3_0r5
- POWER:允许via_0r5_0r8(电源孔要大一点,载流能力强)
- DIFF:允许via_0r2_0r4(差分对用小微孔,减少寄生参数)
这种分级管理的好处是,走线时Allegro会自动根据当前网络选对应的过孔,不用你手动切换。
4.2 Spacing规则里过孔间距的设定
Spacing规则管的是过孔跟其他对象之间的最小距离。16.6里需要关注几个关键项:
| 检查项 | 含义 | 典型值 |
|---|---|---|
| Via to Via | 过孔之间的间距 | 0.2mm |
| Via to Line | 过孔到走线 | 0.15mm |
| Via to Pad | 过孔到焊盘 | 0.15mm |
| Via to Shape | 过孔到铜皮 | 0.15mm |
| Hole to Hole | 钻孔到钻孔 | 0.25mm |
Hole to Hole这一项特别重要,它管的是钻孔边缘之间的距离,跟盘径无关。很多板厂会要求这个值不小于0.25mm,否则钻孔时容易断钻头。16.6里这个规则在Spacing → Hole to Hole里设,不在Physical里,别找错地方。
4.3 过孔与铜皮优先级的交互
热搜词里出现了"cadence 铜皮 优先级",这跟过孔有直接关系。当你的过孔穿过一块铜皮时,过孔跟铜皮的连接方式取决于铜皮的属性和过孔的Thermal/Anti Pad设定。如果是正片铜皮,过孔会直接连上去(全连接);如果是负片铜皮,过孔通过Thermal Pad花焊盘连接,或者通过Anti Pad隔离。
铜皮的优先级(Shape Priority)会影响谁覆盖谁。比如你有一块GND铜皮和一块电源铜皮重叠,优先级高的会覆盖低的。过孔穿过这些铜皮时,连接关系会跟着优先级走。实际操作中,我建议把过孔的Thermal Pad设好,然后在负片层里检查一遍,确保该连的连上、该隔离的隔离。
5. 过孔操作里那些没人告诉你但一定会踩的坑
5.1 过孔放不下去的三种常见原因
第一种:Constraint Manager里没勾选过孔。这是最常见的,尤其是新建的Padstack,默认不会自动出现在Vias列表里,必须手动勾。
第二种:当前层对不允许。比如你建的是盲埋孔,但当前走线层不在盲埋孔的范围内,Allegro就不会让你打这个孔。
第三种:Padstack文件路径不对。16.6的Padstack搜索路径在Setup → User Preferences → Paths → Padpath里设。如果你把.pad文件放在别的文件夹,但没加到Padpath里,Allegro就找不到,表现就是"过孔列表里没有这个过孔"。
5.2 过孔替换后走线断开的问题
正常情况下Replace Padstack不会断线,但如果你替换时选错了范围,比如只替换了过孔没替换走线端点,可能会出现走线跟过孔"看着连在一起但实际没连"的情况。判断方法是打开Find面板,只勾Vias,然后看走线端点是否落在过孔中心。如果偏了,用Slide或者Vertex命令把走线拉回去。
5.3 盲埋孔的层对设定顺序
16.6里建盲埋孔之前,必须先在Setup → Cross-section里定义好层对(Layer Pair)。比如你要建一个从TOP到INNER2的盲孔,就得先在Cross-section里把TOP和INNER2设成一个层对。这个顺序不能反,反了Padstack Editor里就选不到。而且层对一旦设定,后面改起来比较麻烦,建议在项目初期就把叠层和盲埋孔方案定好。
5.4 过孔阻焊开窗的取舍
Padstack Editor里Solder Mask层可以设开窗,也可以设成0(不开窗)。过孔要不要开窗?行业里两种做法都有:
- 开窗(Tented off):过孔盖油,阻焊层不开。好处是防止短路、防止锡珠进入,缺点是如果过孔需要测试或者散热,盖油就不行了。
- 不开窗(Tented):过孔裸露。好处是可以当测试点、散热好,缺点是密集区域容易连锡。
16.6里默认是开窗的,如果你要盖油,把Solder Mask的盘径设成0或者比Regular Pad小。我一般建议:普通信号过孔盖油,测试点过孔和散热过孔开窗。
6. 从过孔延伸到叠层与工艺的协同
过孔不是孤立存在的,它跟叠层结构、板厂工艺能力是绑定的。你在Allegro里设的过孔参数,最终要能落到板厂的钻头和沉铜工艺上。举个实际例子:你设了一个0.15mm的钻孔,盘径0.3mm,这个在Allegro里完全合法,但很多板厂的最小钻头是0.2mm,做不了0.15mm的孔,或者做出来良率很低、成本很高。
所以建过孔之前,先跟板厂要一份工艺能力表(Capability Sheet),看清楚最小钻孔、最小环宽、最小孔间距这些参数。然后按板厂的能力来建Padstack,而不是按你的理想值来建。这个习惯能帮你省掉大量后期改板的时间。
另外,过孔的寄生参数在高速信号里不能忽略。一个通孔在1GHz以上会表现出明显的电感效应,影响信号完整性。16.6里可以用Sigrity或者第三方工具做via的S参数提取,但那是另一个话题了。对于普通数字板,只要控制好过孔stub(残桩)长度,一般问题不大。Stub控制的方法是用盲埋孔,或者用背钻(Back Drill)。16.6支持在Padstack里设定背钻参数,但需要板厂配合。
7. 我平时管过孔的几个固定习惯
做了这么多年Allegro,我养成了几个固定习惯,分享出来供参考。
第一,建一个过孔库文件,把所有常用过孔(0.2/0.3/0.4/0.5mm钻)都建好,放在固定路径,Padpath里加上。新项目直接调用,不用每次重头建。
第二,Constraint Manager里按Net Class分配过孔,不要所有网络用同一个过孔。电源、地、差分、普通信号分开,后期改规则的时候一目了然。
第三,每次替换过孔后必跑DRC,而且要看Hole to Hole这一项。很多间距错误是替换后才出现的,不跑DRC根本发现不了。
第四,盲埋孔的层对在叠层确定后就锁定,不要中途改。中途改层对会导致已有的盲埋孔全部失效,得重新建、重新放,工作量巨大。
第五,过孔盖油与否在Padstack里就定好,不要等到出Gerber的时候再改。出Gerber前改阻焊层,很容易漏掉某些过孔,导致板子做出来一半盖油一半不盖。
这些习惯看起来琐碎,但每一个都是踩过坑之后总结出来的。Allegro16.6虽然老,但它的过孔体系跟新版本是一脉相承的,把这套逻辑吃透,换到17.x或者22.x也就是界面差异,核心思路完全一样。