板厂在评审会上甩过来一句话:你们这个 0.2mm 的孔,我们最小只能钻到 0.25mm,要么改孔径、要么换厂。这种场景做硬件的人多少都遇过一两回——要么是 DFM 反馈孔径太小,要么是布线挤不下需要缩过孔,要么是抄别人的参考设计、想统一整板的过孔规格。这时候整板几百上千个过孔都得换一遍,手工一个个点是不现实的。
在 Cadence Allegro 里待久的人会有个共识:Allegro 并没有一个叫"过孔类型"的独立对象,你能操作的只有 Padstack(焊盘堆栈)。所谓"替换过孔类型",本质上是问一个问题——怎么把设计里已经存在的那些 padstack 实例,换成另一个 padstack,同时不把板子搞乱、不把约束搞乱、不把出图搞乱。这个问题看似简单,实际牵扯到约束管理器、Find 筛选、盲埋孔层对、铜皮避让、钻孔表等一长串东西。下面把我在实际改板中摸索出来的一套流程摊开讲,从概念到操作到踩坑,尽量让你照着做就能复现。
1. 过孔在Allegro里到底是什么:Padstack、Via与约束三者的分工
1.1 过孔不是图元,是Padstack的一个实例
很多人第一次在 Allegro 里试图"改过孔"时,会下意识去找类似"属性"或者"编辑尺寸"的入口,结果找了半天没找到。原因是 Allegro 的对象模型里,过孔(Via)只是一个"使用中的 padstack 实例"。真正定义这个过孔长什么样、钻多大、焊盘多大、内层和外层的隔离盘各是多少的,是那个后缀为 .pad 的 Padstack 文件。
一个标准的过孔 padstack 里包含这些内容:Drill 页的钻孔直径、是否金属化(Plated)、钻孔偏移;Layers 页里 BEGIN/END 层和 INTERNAL 层的 Regular Pad、Thermal Relief、Anti Pad;再加上 Soldermask Top/Bottom、Pastemask 等。过孔通常盖油,soldermask 不开窗;如果是需要测试点的过孔,才会单独处理。
所以你在画布上选中一个过孔,右键改它的任何尺寸都是徒劳的——它自己没有尺寸,它只是引用了via8_16这个 padstack。要改,就得改 padstack 定义,或者换一个引用。这也是下一节要讲的核心分歧点。
命名上行业里有个默认习惯:via8_16表示钻孔 8mil、焊盘直径 16mil;换成毫米制就是via0_2_0_4表示钻孔 0.2mm、焊盘 0.4mm。建议在项目里把命名规范定死,别出现via1、via_new、via_test2这种名字,改板的时候你根本不知道哪个是哪个。
1.2 Via List与Physical约束:谁在管"用哪个过孔"
Allegro 里"这一层走线应该用哪些过孔"这件事,是由约束管理器管的。路径是Setup > Constraints > Constraint Manager,进去后看 Physical 那一栏,展开 All Layers,找到 Physical Constraint Set。每个约束集里有一列叫Vias,点开那个小按钮会弹出一个对话框,左边是 Available(库里可用但没启用的过孔),右边是已经放进这个约束集的过孔列表。
这里有个非常关键的细节:右边的顺序就是优先级顺序,也是布线过程中用快捷键(默认是 Shift + 鼠标滚轮)切换过孔时的切换顺序。很多人只知道 Via List 能限制布线用的过孔种类,不知道顺序有用,结果走线的时候切换过孔切得莫名其妙,因为顺序是随手加进去的顺序。
约束集是可以复用和继承的,一个设计里通常会有多个 Physical Constraint Set,按网络类(Net Class)分配。所以"改过孔"这件事如果走约束这条路,影响的只是"以后新布的线",对已经存在的过孔没有任何作用。这是新手最容易误解的一点,我在第 4 节会详细拆。
1.3 两种"替换"的本质区别:换实例 vs 改定义
把所有方法归一下类,其实只有两条路线。
第一条路线是换实例:设计里那 300 个过孔,原本引用via8_16,现在让它们改引用via10_20。padstack 文件本身不动,动的只是"谁在用谁"。这条路线的好处是精确可控,可以只换一部分过孔;坏处是如果设计里有 5 种 padstack 都要换,你得操作 5 次。
第二条路线是改定义:直接把via8_16这个 padstack 文件本身的钻孔和焊盘改掉,那么所有引用它的过孔(还没改之前的全部)会同时变化。这条路线看起来最省事,但风险也最大——如果同一个 padstack 名字被某些引脚(Pin)复用了,那引脚也会跟着变。虽然规范的设计里引脚和过孔不会共用 padstack,但在接手别人做的设计时,你无法保证这一点。
两条路线各有场景。板厂只反馈"孔径不够",且整板只有一种过孔,那改定义最快;如果是要把电源区域的过孔单独放大、把 BGA 区域的过孔缩小,那就只能走换实例这条路,而且要能精确筛选。
| 路线 | 操作对象 | 影响范围 | 典型场景 |
|---|---|---|---|
| 换实例 | 画布上的过孔对象 | 只影响被选中的过孔 | 局部放大电源孔、缩小 BGA 区过孔 |
| 改定义 | Padstack 文件 | 所有引用该 padstack 的对象 | 整板统一调整孔径 |
2. 动手之前:替换过孔必须做的三项准备
2.1 备份与Database Check:一次替换可能牵动整板
在 Allegro 里做批量替换,我个人的习惯是先把当前的 .brd 文件另存一个版本,命名上加日期后缀。原因很直接:批量替换是不可逆的,而且它可能连带触发的连锁反应远超预期——铜皮避让重算、DRC 大面积刷新、钻孔表变化。
备份完成后,先跑一次Tools > Database Check。这个动作有两个作用。第一,如果你的设计里本来就有一些数据库层面的小毛病(比如被强行删除的孤儿对象、失效的 padstack 引用),替换过程中很容易被放大成报错。第二,DBDocotor 跑完之后你心里有底,后面出现的错误一定是刚刚这次替换引起的,排查方向明确。
还有一个常被忽略的准备:确认Setup > Design Parameters里的单位制。Padstack 有自己的单位定义(Mils / Millimeter / Inch),当 padstack 单位和设计单位不一致时,Allegro 会按定义单位换算读入,不会报错。但如果你在 Pad Designer 里改参数的时候脑子用的是另一套单位,做出一个"钻孔 0.2mil"的过孔是完全可能的,而且它在画布上看着就是一个小到几乎看不见的点,不容易发现。统一单位这件事听起来很基础,但返工的时候往往就栽在这。
2.2 Find面板与Selection:连过孔都选不中的原因
"我明明点了那个过孔,为什么没反应?"这是关于 Allegro 过孔操作最高频的疑问,没有之一。答案几乎永远是 Find 面板。
Find 面板(通常在右侧,如果没显示就用Display > Find打开)里有一串对象类型的勾选项:Pins、Vias、Clines、Shapes、Symbols 等等。默认状态下 Vias 常常是没勾的,所以你点上去什么也选不到。要去操作过孔,第一件事就是把Vias勾上。
但这里还有第二层坑。如果你为了选过孔把All On全勾了,那么当鼠标附近同时存在走线和过孔时,Allegro 会按内部的优先级去判定选中谁,实测下来经常选中走线而不是过孔。所以更稳妥的做法是:只勾 Vias,必要时把 Clines、Pins 都取消。如果你需要一次操作多个对象,再按需要逐个勾回。
第三层坑是 Selection 的Temp Group用法。当你想一次选十几个不连续的过孔时,一个一个点很容易点漏。这时可以点 Find 面板上方的Temp Group(在 Edit > Change 这类命令激活状态下会出现),然后把这一批过孔全部点选,最后右键Complete结束选择。这个操作在批量替换时能省掉大量重复劳动。
2.3 把库路径和单位确认清楚,避免"找不到Padstack"
替换过孔的时候,Allegro 会去库搜索路径里找那个新的 padstack。如果库路径没配好,你会得到一个很难理解的提示:Padstack not found或者Not a valid padstack for this design。
库搜索路径在Setup > User Preferences > Paths > Library里配置,也可以在.env文件里通过padpath和psmpath指定。这两个变量的区别值得记一下:padpath指向的是 padstack(.pad 文件)的搜索路径,psmpath指向的是封装符号(.dra/.psm)的搜索路径。替换过孔用的通常是padpath。
实际操作中我建议把项目用到的所有 padstack 复制到一个项目本地目录,然后把padpath指向它,而不是依赖全局的共享库路径。这样做的原因是:共享库经常被别人改动,你今天看到的via10_20和三个月后别人手里的via10_20很可能不是同一个东西,板子改到一半发现库变了,那是很麻烦的。
替换前的一个快速核对清单:
- 新的 padstack 文件确实存在于
padpath覆盖的目录中 - padstack 的钻孔设置里 Plated 是勾选的(过孔必须金属化,除非是纯结构孔)
- padstack 的层对(Start / End Layer)与设计叠层一致
- 单位制与设计一致或换算无误
3. 单个过孔替换:从右键到Replace Padstack的完整链路
3.1 操作步骤与Options面板参数说明
先说最常用的单点替换路径。步骤拆开是这样:
- 打开 Find 面板,只勾
Vias,其余全部取消。 - 在画布上左键点击目标过孔,选中后过孔会被高亮。
- 在选中的过孔上右键,选择
Replace Padstack。部分版本这个菜单项在右键菜单靠下的位置,需要展开。 - 弹出的
Replace Padstack对话框里,会列出当前库里和设计中可用的 padstack 列表,也可以切换筛选条件(按 Library 或按 Design 中已有的)。 - 选中目标 padstack,确认。过孔立即变成新规格。
如果你要替换多个过孔,可以在第 2 步先用Temp Group把这一批过孔全选上,再右键替换。Allegro 会一次性把这些过孔全部换成新 padstack。
实际使用中有个细节值得注意:右键菜单里的Replace Padstack是否出现,取决于你当前是否处于某个命令状态下。如果当前停留在某个正在进行中的命令(比如正在布线),右键菜单会变,找不到这个选项。退出当前命令(按 F2 或者点空白处右键 Done)再操作。
3.2 替换顺序为什么建议"先大后小"
如果是批量替换,尤其是过孔尺寸有增有减的情况,我建议先处理"放大"的那批,再处理"缩小"的那批。理由和铜皮避让有关。
过孔放大时,它占用的空间变大,需要重新向外挤走铜皮、走线可能需要绕;如果此时还有其他过孔还没处理,DRC 会先报一批错误,但那些错误本来就是预期的,你做完缩小操作之后会自动消掉。反过来,如果先缩小再放大,会经历一轮"DRC 全绿"到"DRC 又红一片"的过程,中间状态会干扰你的判断,尤其在有几百个错误的时候,你很难分清哪些是替换本身带来的、哪些是原本就存在的。
另外,如果放大后的过孔会导致走线需要重新绕,那就不是替换过孔能解决的了,得先调整布线。这种情况提前用 DRC 检查一遍更划算。
3.3 替换后必须立刻做的三项检查
替换完不要急着继续下一步,先做三件事。
第一,跑一次Tools > Reports > DRC Report,把错误数量记下来。别只看"有几个错误",要看错误类型的构成。单纯的数量变化说明不了什么,但如果出现了新类型(比如从没有 Line to Line 变成有一堆 Line to Line),那就说明新过孔的间距不够。
第二,用Display > Status或者直接看状态栏,确认飞线、未连接引脚的数量没变。这个检查是为了防止替换过程中因为误操作(比如不小心把过孔删了)导致网络断开。飞线数量突然增加,基本就是有连接被切断了。
第三,把鼠标悬停在替换后的过孔上,或者用Tools > Reports > Selected Objects之类的方式确认新 padstack 名字确实是你要的那个。听着像废话,但在使用Temp Group批量选择的时候,误选到相邻过孔是常有的事。
4. 批量替换:按网络、按区域、按类型的四种打法
4.1 Edit > Change:最快也最容易误伤的一种
Edit > Change是 Allegro 里通用的"改属性"命令,在替换过孔上也能用。当 Find 里勾了 Vias 之后,Options 面板会出现一个Padstack的区域,让你指定目标 padstack。然后用鼠标框选或者点选过孔,就会批量替换。
这条路径的优点是操作连贯、可以用框选,适合"这一片区域的过孔全换掉"这种需求。缺点也很明显:框选的时候如果 Find 里还勾着 Clines 或 Pins,很容易顺手把走线或引脚也一起改了,而Edit > Change对不同类型的对象的行为是不一样的,改了走线可能改的是线宽或者层,后果不可预期。
用这条路我的习惯是:只勾 Vias,框选完成之后先看一眼状态栏或者高亮的对象数量对不对,再确认执行。宁可多花十秒确认,也别一口气改乱了再回退。
Edit > Change还有一个便利是可以配合Find By Name使用。如果你的过孔有属性(Property)标记,或者你想按网络筛选,Find By Name里可以按 Net 名来定位过孔,然后一次选中整条网络上的所有过孔。这个技巧在处理电源网络的时候特别好用——某个电源网络的过孔统一从via8_16换成via12_24,按网络名筛选一次搞定,不用手点。
4.2 Constraint Manager改Via List:只对新布线生效的那半截方案
前面提过,在 Constraint Manager 的 Physical 约束集里改 Via List,只影响新布的线。这个结论必须强调,因为太多人以为改完 Via List 之后已有过孔会自动更新。它不会。
那这个操作有什么用?两个用途。一是配合Edit > Change使用:先把新的via10_20加进物理约束集的 Via List(保证它排在第一位),然后批量替换过孔时就可以直接在 Options 面板里选到它,不用每次去库里翻。二是保证后续新增的布线也会用新规格,避免改完之后新布的线又用回旧过孔,导致板子上两种规格混杂。
顺便说一个使用细节:Via List 的顺序会影响布线时的自动过孔选择。走线过程中在线上双击(或者按默认快捷键)放置过孔时,Allegro 会按 Via List 的顺序取第一个满足当前约束的过孔。所以你把常用的小孔排在前面、大孔排在后面,是一个很顺手的配置。
4.3 Tools > Padstack > Modify Design Padstack:原地改定义
这条路径改的是 padstack 定义本身,属于前面说的"第二条路线"。打开Tools > Padstack > Modify Design Padstack,会弹出一个列表,列出设计里当前用到的所有 padstack。选中一个,可以点Edit用 Pad Designer 打开它改参数(比如把钻孔从 8mil 改成 10mil,焊盘从 16mil 改成 20mil),也可以点Replace把它整体替换成另一个 padstack。
这个对话框里有个必须注意的地方:修改或替换的时候会有"作用范围"的概念,是作用于整个设计、还是只作用于当前选中的那些。在较新的版本里,如果画布上先选中了一批过孔,再进这个对话框,操作范围会跟着变化。行为在不同版本之间有差异,动手之前务必用一个小测试板先验证一遍,或者在替换后立刻检查全板的 padstack 使用情况。
我个人的使用建议是:Modify Design Padstack更适合"整板统一调整"这种明确场景,比如整板孔径全部加大 2mil。局部调整还是老老实实用Edit > Change或者右键替换,可控性更高。另外要注意,这个操作会同步影响用到该 padstack 的引脚——虽然规范设计里过孔和引脚不会共用,但接手别人的图时,先查一遍这个 padstack 到底被哪些对象引用了再动手。
4.4 Skill脚本批量处理:思路与注意事项
如果需要处理的过孔数量很大,而且替换规则比较复杂(比如"所有 8_16 的过孔,如果它连的是电源网络就换成 12_24,否则换成 10_20"),脚本是唯一现实的选择。
Allegro 提供了一组数据库级别的 API。其中axlDBChangeDesignPadstack这个函数可以把设计中某个 padstack 整体替换成另一个,适合"全设计统一换"的场景。函数名和参数在 Cadence 的 SKILL 帮助文档里有明确说明,动手前建议在安装目录下的doc里核对一遍当前版本的签名,因为不同版本之间 API 的返回值和容错行为可能会有调整。下面是一个思路示意,真正的实现需要按你的网络筛选条件补全:
; 批量把设计中的 via8_16 替换为 via10_20(示意,函数细节请核对当前版本 API 文档) (oldPad = "via8_16") (newPad = "via10_20") when(axlDBGetPadstack(oldPad) axlDBChangeDesignPadstack(oldPad newPad) axlMsgPut("替换完成: %s -> %s" oldPad newPad) )如果是"按条件筛选后替换",思路是先遍历设计中的所有过孔对象,对每个过孔读取它所属的网络名或者位置坐标,判断是否满足条件,然后调用替换 API。这种脚本的要点是逐条处理并记录日志,而不是静默执行。一旦某个过孔因为层对不匹配之类的原因替换失败,日志能告诉你失败的是哪一个、在哪一层,否则你面对的就是一个"看起来没生效但也不知道为什么"的局面。
脚本跑完一定要重新打开文件或者跑一次Database Check,确认数据结构的完整性。有些脚本在内存里改了对象但没有触发数据库重建索引,会导致后续操作出现莫名其妙的问题。
5. 通孔换盲埋孔:Cross-Section与层对校验
5.1 盲埋孔的适用场景与成本代价
如果替换的目的是为了做 HDI,把一部分通孔换成盲孔或者埋孔,那事情的性质就变了。盲埋孔的 padstack 里,最关键的参数是层对(Layer Pair),也就是这个孔从哪一层开始、到哪一层结束。
层对信息在叠层设置里维护,路径是Setup > Cross-Section。在叠层表格里,每一层有对应的类型(Conductor / Dielectric / Plane),而盲埋孔的层对就是在建 padstack 的时候指定的 Start Layer 和 End Layer。
这里必须提前想清楚成本。普通的机械通孔,板厂一次钻穿,成本很低;盲孔需要顺序压合,激光孔需要激光钻孔设备,层数越多、压合次数越多,成本上升得越快。一块 6 层的 HDI 板换成带盲孔的方案,价格翻倍是很常见的。所以在决定"把过孔换成盲孔"之前,先问自己:是真的布线挤不下了,还是只是想让板子看起来更高级?
5.2 层对不匹配会报什么错
把通孔替换成盲孔,最常见的报错就是层对不匹配。典型的提示大意是 padstack 使用的层对与当前过孔所在的位置不一致。原因有两种:一是新 padstack 的层对本来就没覆盖原过孔跨的层;二是叠层顺序在改板过程中被调整过,导致原来有效的层对现在失效了。
还有一种更隐蔽的情况:盲孔 padstack 的层对设置是对的,但它的内层 Regular Pad 只在某一层定义了,而实际使用中需要经过的其他层没有定义。这种情况下不会立刻报错,但在出钻孔文件或者出光绘时会出现异常。所以在建立盲孔 padstack 的时候,把涉及到的每一层都检查一遍,别偷懒。
5.3 HDI叠层下的替换顺序
做盲埋孔方案时,替换顺序建议从最内层往外做:先处理埋孔(内层之间的),再处理盲孔(外层到内层的),最后处理剩下的通孔。原因还是和中间状态的可观察性有关——埋孔影响的层数最少,改完之后 DRC 的反馈最干净;盲孔涉及外层,会影响外层铜皮的避让;通孔涉及全层,改一次全板刷一次。
同时强烈建议在替换过程中随时保存不同的版本。HDI 改板一旦出错,退回去重新做的工作量非常大,多个中间版本能让你在发现方向错了的时候迅速回退。
6. 替换完不等于收工:DRC、铜皮、泪滴与出图验证
6.1 DRC与约束的复核清单
过孔换完了,画面上看着挺顺眼,但这不代表板子没问题。约束层面的复核至少要覆盖这几项。
间距类:Line To Line Spacing、Via To Via Spacing、Shape To Via(铜皮到过孔)、Hole To Copper(孔壁到铜)。其中 Hole To Copper 是最容易被忽略的一项,因为它属于制造工艺层面的约束,很多设计的规则文件里根本没配。如果你的规则里配了这项,替换过孔后孔径变化,这一项会立刻响应。
同网络间距:Same Net Spacing 这一类规则在很多项目里是放开的,但过孔放大之后,同网络过孔之间的距离可能小于工艺能够制造的极限。出图之前最好手动核对一遍密集过孔区域。
载流相关:这一项 DRC 不管。换过孔之后如果孔径变小,载流能力会下降,电源网络要单独算一遍。经验上 0.25mm 孔径的过孔大约能过 0.8A 到 1A 左右(具体和铜厚、温升要求、孔长都有关系,不同板厂给的参考值会有出入),0.5mm 孔径能到 2A 左右。这些是粗略的工程参考,重要项目还是要按 IPC 的载流图表核算。
6.2 铜皮与负片层的重新避让
正片铜皮(Positive Shape)对过孔的避让,取决于 padstack 的 Anti Pad 尺寸和 Physical 约束里的 Shape To Via 间距规则,Allegro 取两者中较大的那个值。过孔放大之后,如果 anti pad 也跟着变大,铜皮需要重新避让。
Allegro 的铜皮有 Disabled / Outline / Smooth 三种显示状态。改完过孔后,铜皮有可能停留在 Outline 状态(只显示轮廓),需要用Shape > Manual Update或者进入 shape 编辑模式手动更新到 Smooth。这一步不做,出光绘的时候铜皮就很可能是错的。这是我最想提醒的一条——因为 Outline 状态在屏幕上看是"有东西的",不仔细看根本发现不了。
负片层(Negative Plane)的处理不一样。负片层上的隔离盘是"反着画"的,过孔变大之后,负片层的反焊盘会自动按新 padstack 重算,但热焊盘(Thermal Relief)的连接臂宽和开口需要单独确认。如果你的过孔本来是要和电源平面直连的,替换之后可能变成了热焊盘连接,或者反过来,这一项要专门看一眼。
6.3 光绘、钻孔表与板厂沟通
最后是出图环节。过孔换了之后,至少三样东西需要重新生成。
钻孔表(Drill Legend):Manufacture > NC > Drill Legend。孔径变了,钻孔表的条目和数量都会变,用旧的那份发给板厂,人家按错误的孔表打样,板子直接报废。
钻孔文件(NC Drill):Manufacture > NC > NC Drill。这个是给数控钻机用的实际加工文件,必须重新生成并核对一遍孔径列表。有个习惯值得养成:生成之后打开文件确认一下里面出现的孔径种类,和你预期的是否一致。有一次我替换完只检查了钻孔表,没看 NC 文件,结果发现有一种旧孔径残留了下来,原因是有一批过孔没被选中。
光绘文件(Gerber):Manufacture > Artwork。各层都要重新出。出完之后如果有条件,用 Gerber 查看工具把每一层的过孔画面叠起来看一眼,确认外层焊盘、内层隔离盘、钻孔三者同心,尺寸对应。
跟板厂沟通的时候,把这几项一次性说清楚:最小孔径、最大纵横比(板厚除以孔径,常规工艺建议控制在 8:1 以内,10:1 已经很常见但价格会上浮,超过 20:1 属于特殊工艺)、最小孔环(单边建议不小于 0.1mm,0.05mm 属于极限)、孔到铜的最小距离。把这些数字提前对齐,比改完板再来回沟通效率高得多。
7. 替换之后才暴露的问题:几条实打实的教训
7.1 尺寸放大的连锁反应比想象中大
过孔放大带来的影响不只是"多占一点面积"。它会影响三个层面。空间上,它挤压相邻走线的间距,如果原设计已经贴着规则下限,放大几 mil 就会 DRC 报警。电气上,它对高速信号的影响是可计算的——过孔的寄生电容经验公式是C ≈ 1.41 × εr × T × D1 / (D2 - D1),单位 pF,其中 T 是过孔在板内的长度(英寸),D1 是焊盘直径(英寸),D2 是反焊盘直径(英寸)。取 εr = 4.3、T = 0.06 英寸、D1 = 0.024 英寸、D2 = 0.04 英寸,算出来大约是 0.55pF,这个量级在 5Gbps 以上的链路上是会说话的。
寄生电感也有对应的近似式:L ≈ 5.08 × h × [ln(4h/d) + 1],单位 nH,h 是过孔长度(英寸),d 是孔径(英寸)。同样取 h = 0.06 英寸、d = 0.012 英寸,得到大约 1.2nH。把孔径从 0.3mm 缩到 0.2mm,这个数字会明显变大,对于高速信号的回流路径是要留意的地方。
工艺上,孔径变小会带来纵横比上升,孔壁镀铜的均匀性变差,可靠性风险随之上升。这也是为什么板厂对过小的孔总是很敏感。
7.2 电源过孔不能只按"数量够就行"来算
改过孔的时候,信号孔和电源孔要分开对待。信号孔关心的是阻抗和串扰,电源孔关心的是载流和压降。有些设计里电源过孔是一排十几个小孔并排挤在一起,孔径缩了以后单孔载流下降,加上孔与孔之间的热耦合,温升会比单孔测试值更差。
我的一般做法是:先把电源网络上的总电流估算出来,除以单个过孔的载流能力,得到所需的最小孔数,然后在这个数量上再留 30% 到 50% 的余量。替换过孔之后,如果孔径缩了,孔数不够就得补孔——补孔又需要空间,可能又要重排布线,这是改板时经常出现的循环。所以在决定缩小电源孔的孔径之前,先把载流算清楚,能省掉一轮返工。
7.3 命名混乱导致的返工是可以提前避免的
最后一条是关于工程管理的,但它的实际影响一点不比技术问题小。改板过程中经常出现的场景是:板子做了一半,发现via10_20这个名字下有两个版本,一个是 0.25mm 钻孔的,一个是 0.2mm 钻孔的,来自不同的库路径,谁也不知道当前用的是哪一个。
避免的办法是在项目启动阶段就把命名规则定下来并且写进文档:命名里包含钻孔、焊盘、是否盲埋孔、层对信息。例如via_p0_25_0_50_th表示金属化 0.25mm 钻孔、0.50mm 焊盘的通孔,via_buv_0_10_0_25_l1_2表示 0.1mm 激光盲孔、0.25mm 焊盘、第一到第二层。名字长一点没关系,改板的时候一眼就能看明白,比查半天库文件划算得多。
另外,替换完成后在板子上做一次统计:Tools > Reports里有 padstack 使用情况的报表,跑一遍看看全板还剩几种过孔。正常情况下应该是你预期的那些种类,如果冒出来一个没见过的,那多半是某个角落有漏网之鱼,趁早找出来处理掉,别等出图的时候才发现。
以上这些流程和坑,都是我在反复改板中一个一个撞出来的。刚开始接触 Allegro 的时候我也以为"换个过孔"就是右键点一下的事,真正做到第三次、第四次改板之后才明白,这背后是对象模型、约束体系、制造工艺三条线交织在一起的问题。替换动作本身只占整个工作的两成,剩下八成是替换前后的核对与验证。养成替换前备份、替换后跑 DRC 与钻孔表、出图前核孔径的习惯,能挡掉绝大多数返工。