ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Cadence Allegro 过孔替换:5种方法、参数核算与避坑指南

Cadence Allegro 过孔替换:5种方法、参数核算与避坑指南 做 PCB 的应该都遇到过这种场面板子已经布线布到八成了结构、成本或者板厂那边突然来一句过孔改成 0.2/0.45原来的 0.3/0.6 太占地方或者这个孔太小不好做统一放大一号。手动一个个改几百上千个孔改到半夜都改不完还容易漏。Cadence Allegro 里替换过孔类型准确说是替换 padstack 里的过孔定义其实有很成熟的路子从全局替换、规则层替换到 SKILL 批量处理一把梭下来的时间成本可以从两小时压缩到两分钟。这篇就把 Allegro 里替换过孔类型的五种做法、替换前必须核算的参数、以及我这些年踩过的坑一次讲透。不管你是刚学 Allegro 的新手还是已经能独立出光绘的老手只要涉及改板、降成本、叠层变更或者高速信号优化这篇都能直接拿去用。1. 先搞清楚过孔在 Allegro 里到底被谁管着很多人替换过孔失败不是因为操作不熟是因为没搞清楚一个基本事实Allegro 里一个过孔同时被三套东西约束着你只改了其中一套另外两套没跟上问题就会在出光绘或者板厂反馈的时候集中爆发。1.1 Padstack 是过孔的实体不是符号过孔在 Allegro 里的本质就是一个 padstack焊盘栈在板上的实例。padstack 里面定义了什么钻孔直径Drill、各层的 Regular Pad、内层的 Thermal Relief 和 Anti Pad、SolderMask Top / Bottom 的开窗、以及最关键的层范围——从哪一层贯穿到哪一层。通孔是 TOP 贯穿到 BOTTOM盲孔是 TOP 到内层某一层埋孔是内层到内层。这个层范围在 Padstack Editor 里通过 Start Layer 和 End Layer 两个下拉框确定。记住这一点后面讲替换失败的原因时你会用到如果原 padstack 是通孔你替换成的新 padstack 是盲孔跨层结构对不上Allegro 会直接拒绝替换或者报错。还有一点新手容易混淆padstack 不是一个元件它是一个数据库对象。你在 Constraint Manager 里写的 via list 只是引用了 padstack 的名字并不是把 padstack 复制过去。所以改了库里的 padstack板上已经存在的过孔不会自动变——这个逻辑和改了封装库板上封装不会自动更新是一样的。1.2 三处独立定义规则里的 via list、库里的 padstack、板上的实例把这三处的关系理顺替换过孔这件事就通透了一半定义位置作用范围改动的实际效果Constraint Manager 的 Physical → Vias影响新走线只决定接下来打孔用哪个板上老孔纹丝不动库文件.pad通过 padpath 搜索影响所有引用它的设计库里改了但板上不刷新等于没改板上过孔实例影响当前这块板这才是最终要出的数据三处之间没有任何自动同步机制。这就解释了最常见的困惑我把 Constraint Manager 里的 via list 改了为什么板子上还是老孔——因为约束管理器只管走线时的默认选择它压根不管已经躺在板上的过孔。反过来也一样。你用 Padstack Replace 把板上的孔全换成了新 padstack但如果约束管理器里 via list 还是老的那一个下一根线打孔的时候又给你打出一个老孔等于白干。所以一套完整的替换流程永远是把规则和实例两个层面都覆盖到。1.3 替换过孔前必须先确认的四个前提动手之前先花五分钟确认下面四件事能省掉后面两小时的返工。第一新 padstack 是否已经在库里且 padpath / psmpath 能搜到。找不到的 padstack 在替换对话框里根本不会出现很多人以为软件坏了其实是路径没配。第二新 padstack 的层跨度是否和原孔兼容。通孔换通孔最省事通孔换盲孔必须确保叠层已经调整过否则替换后 DRC 会报跨层错误。第三新 padstack 有没有定义 SolderMask Top / Bottom。这一步极其容易被忽略——如果你新建 padstack 的时候只填了 Regular Pad忘了 SolderMask替换完之后板厂会发现过孔上面没有开窗直接一个工程问题单打回来。第四先备份 brd。替换类操作是不可逆的Allegro 的 Undo 在这种批量数据库修改上并不总是可靠。存一个xxx_before_via_replace.brd的成本是零收益是保命。2. 替换过孔的五种动手方式按场景选Allegro 提供了不止一种替换过孔的入口它们各自适用的场景完全不同。全局替换快SKILL 灵活手动 Change 精准。下面按从快到细的顺序讲。2.1 方式一Tools → Padstack → Replace 全局替换这是绝大多数情况下应该优先用的方法。菜单路径在 16.6 和 17.x 上略有差异16.6 在 Tools 菜单下面17.x 同样在 Tools 下叫 Padstack但入口名字基本都带 Padstack 和 Replace 字样找不到的话直接在命令框输入padstack也能唤起。打开对话框之后界面上主要是这几项Original Padstack下拉列出当前设计里用到的所有 padstack选你要换掉的那个。Replacement Padstack下拉列出库里所有可用的 padstack选新的。Replace 作用对象的筛选可以限定为 Vias过孔、Pins引脚或者全部。这一项一定要看我见过有人手滑把 Pin 也勾上结果 BGA 的焊盘全被换掉了那真是灾难。Find by可以按 padstack 名称、按 property属性、按 region区域来筛选做局部替换时非常有用。Replace 按钮点击执行。一个实际操作的顺序建议先在下拉框里选 Original点一下某个高亮或者 Count 之类的按钮看看影响范围有多少个对象心里有数了再点 Replace。如果数量是 800 个而你预期只有 50 个说明筛选条件选错了赶紧停下来。替换完成后不要马上关软件用 Tools → Reports 里的 Padstack Usage 报告核对一遍看老的 padstack 使用数量是否归零。如果还剩几个说明有漏网之鱼多半是被锁定或者是某个 Symbol 内置的留到第 4 章专门讲。2.2 方式二约束管理器里改 via list管的是以后进入 Setup → Constraints → Constraint Manager打开 Physical 工作表找到 All Layers 那一行最右边有一列叫 Vias。双击这个单元格会弹出 Via List 对话框。这个列表可以放多个 padstack走线时按从上到下的顺序循环切换。具体切换方式是走线状态下点击 Options 面板里 Via 图标右侧的小箭头或者用键盘快捷键不同版本的默认键位不一样17.x 里可以在快捷键设置里自己绑。多放几个孔在列表里配合快捷键走线时随手切换孔径做 BGA 区域的 fanout 特别顺手。需要注意的是Via List 里第一位的那个是默认过孔如果列表里只放一个那走线时就没有选择余地。做高频板的时候我一般会在列表里放三到四个一个 0.2/0.45 的激光孔用于 BGA 内部 fanout一个 0.3/0.6 的常规通孔用于普通信号一个 0.5/0.9 的大孔用于电源和地缝合。改完 Via List 之后一定要顺便检查一下 Design Rule 里有没有对过孔尺寸的额外约束比如某些网络被单独指定了 allowed via 列表。这类按网络覆盖的规则优先级高于全局规则经常是我明明改了全局为什么这根线还是打老孔的元凶。2.3 方式三手动 Change适合零星几处如果只是三五个孔要改比如某个散热焊盘下面想换成大孔加强导热用 Change 最快。操作流程是先按 Find 面板只勾选 Vias记住把 Pins、Symbols、Shapes 全部取消勾选否则很容易误选然后在板上点中要改的过孔右键 → Change或者在 Options 面板里选择目标 padstack回车确认。这里有个细节值得说多选的时候按住 Shift 可以框选但如果你的过孔分布在一片密集的 BGA 区域里框选很容易连散热孔、测试点一起选中。更稳的做法是先给这些过孔加一个 property比如给它们打一个自定义属性标签然后用 Padstack Replace 对话框里的 Find by Property 功能精准筛选。这个属性驱动的做法在改板场景里极其好用值得养成习惯。2.4 方式四改库 Update Symbols适合统一版本管理有些团队的做法是在库层面维护 padstack 版本。比如把库里的VIA_0_25_0_5更新成新参数然后让所有设计重新引用。这个思路没错但操作上有个陷阱直接改库文件不会让板上的实例自动更新必须走 Tools → Update Symbols 或者刷新 padstack 的动作。而且 Update Symbols 通常针对的是封装Symbol对独立的过孔实例不一定生效。过孔不属于任何一个 Symbol 时Update 是刷不到它的。所以库里改完仍然要回到方式一用 Padstack Replace 把板上的实例换过来。库和板的关系更像模板和已印出来的纸改了模板纸上已有的字不会自己变。我的建议是把库更新和板上替换当成两个动作先更新库再做一次 Padstack Replace中间不要跳过。这样库和板永远一致后面别人接手改板的时候不会因为库不一致而抓瞎。2.5 方式五SKILL 脚本按网络、按区域批量处理当板子大到几千个孔或者需要按网络名、按坐标区域做精细区分时交互式替换就有点力不从心了。这时候上 SKILL。下面这段是一个思路清晰的模板做的事情是遍历板上所有过孔按网络名筛选然后替换指定 padstack。注意不同版本的 axl 函数名有差异16.6 和 17.4 之间尤其明显实际使用前请先在你手上的版本里小范围试跑不要直接对着主文件跑。; via_swap.il 按网络名批量替换过孔 padstack axlCmdRegister(via_swap viaSwap) procedure(viaSwap() let((newPad netFilter sel cnt) ; 提示输入目标 padstack 名和网络名 newPad axlUIWGetString(输入新 padstack 名称: ) netFilter axlUIWGetString(输入网络名(留空全部): ) when(newPad ; 打开 Find 过滤器只选 Vias axlSetFindFilter(?enabled list(vias) ?onButtons list(vias)) axlClearSelSet() axlAddSelectAll() sel axlGetSelSet() cnt 0 foreach(v sel when((netFilter || v-net-name netFilter) ; 替换动作函数名请以本机 axlfunref 文档为准 axlDBReplacePadstack(v newPad) cnt ) ) axlMsgPut(已处理 %d 个过孔 cnt) ) ) )写 SKILL 的时候有几个实用习惯第一永远先axlMsgPut打印影响数量确认无误再执行实际修改第二先在副本上跑第三把axlDBReplacePadstack这行注释掉换成打印过孔坐标验证筛选条件对不对。第二步验证省下来的返工时间远超写这几行脚本的成本。如果不想写脚本还有个零门槛的替代方案利用 Design 里的 Selection Filter 配合 Highlight 功能先把符合条件的过孔高亮出来存成一个 Group再用 Padstack Replace 处理。效率不如脚本但胜在不用懂代码。2.6 推荐的操作顺序别搞反了把上面几种方法串起来一套可靠的替换流程是这样的备份 brd 文件。确认新 padstack 在库里且 padpath 能搜到。先改 Constraint Manager 里的 Via List规则层避免改完实例又被新走的线覆盖。再用 Tools → Padstack → Replace 处理板上实例数据层。跑 DRC重点看过孔相关的环宽、间距、SolderMask 报错。重新生成钻孔表和光绘核对钻孔种类和数量。核对 Padstack Usage 报告确认老 padstack 已经归零。顺序搞反的后果很具体如果先替换实例再改规则你在检查阶段走的每一根测试线都会打出老孔最后统计的时候发现老 padstack 又冒出来了还得再来一遍。3. 替换前的参数核算换多大的孔不是拍脑袋替换过孔从来不是为了换而换背后一定有约束。要么是板厂反馈孔径太小做不了要么是成本要压要么是信号完整性要求变了。所以替换之前你得知道新孔的参数是怎么算出来的。3.1 孔径、盘径与加工能力的对照表机械钻孔和激光钻孔的能力边界差别很大。下面这张表是我在整理多个板厂能力表之后归纳的常用区间具体项目还是要以合作板厂的工艺能力表为准。孔类型钻孔直径成品常规盘径加工方式成本档位常规通孔0.30 mm0.60 mm机械钻基准小孔通孔0.25 mm0.50 mm机械钻略高极限通孔0.20 mm0.45 mm机械钻高纵横比受限偏高激光微孔0.10 mm0.25 mm激光钻高激光微孔0.15 mm0.30 mm激光钻中高盘中孔0.15-0.25 mm0.30-0.45 mm激光或机械 树脂塞孔电镀高这里有个换算关系必须清楚Allegro 的 Padstack Editor 里填的 Drill 尺寸是设计值板厂实际钻出来的成品孔径会受镀铜厚度影响一般成品孔径等于设计值减掉约 0.05 mm视镀铜厚度而定。所以当你看到板厂反馈最小成品孔径 0.20 mm时设计值大概填 0.25 mm 比较稳妥。这个换算搞错了会出现设计上没问题做出来孔太小插不进的尴尬。3.2 环宽、反焊盘与 SolderMask 开窗的连带关系换过孔的时候环宽Annular Ring是最容易出问题的地方。环宽等于盘径减孔径再除以二。比如 0.6 的盘配 0.3 的孔单边环宽就是 0.15 mm。如果你把孔径换成 0.35 而盘径没变环宽就掉到 0.125 mm可能低于板厂的最小环宽要求。行业里通常要求成品环宽不低于 0.05 mm做到 0.10 mm 以上比较保险。注意这是成品环宽要考虑加工偏差和层偏所以设计值一般要在 0.15 mm 以上才踏实。高级别要求的板子环宽要求会更严具体标准参照 IPC 相关规范按产品等级执行。反焊盘Anti Pad的尺寸一般比 Regular Pad 大 0.15 到 0.25 mm作用是保证过孔和平面层之间有足够的电气间隙。替换过孔的时候如果新 padstack 的反焊盘尺寸和其他网络的间距不够DRC 会报一堆净空不足。这个往往不是过孔本身的问题而是新 padstack 建库时参数没核对。SolderMask 开窗这件事前面提过一次这里展开说过孔的定义里SolderMask Top 和 Bottom 通常比 Regular Pad 大 0.05 到 0.1 mm。如果你做的是盖油过孔Tented Via那就需要在 padstack 里把 SolderMask 尺寸设成和 Regular Pad 一样或者干脆不定义。这两种做法对应的光绘输出结果完全不同替换之前一定要和板厂、和硬件确认清楚是盖油还是不盖油。我见过一个项目改板时把带开窗的 padstack 换成了不带开窗的导致一批测试点无法探针接触只能重新投板。3.3 载流与散热什么时候必须换成大孔过孔导通电流的能力取决于孔壁镀铜的截面积。粗略估算的思路是过孔孔壁的横截面积约等于 π × 孔径 × 镀铜厚度。假设镀铜 25 μm孔径 0.3 mm那么单孔壁截面积约为 3.14 × 0.3 × 0.025 ≈ 0.0236 mm²折算下来大致相当于 1 盎司铜厚下一段很窄的走线。所以大电流路径上单个过孔往往是不够的要靠多个并联。实际操作中的经验值电源和地网络上我一般用 0.5 mm 孔径配 0.9 mm 盘径按每孔 1 A 到 1.5 A 估再留一倍余量。如果某条电源路径要过 8 A那就打 8 到 12 个 0.5 的孔并联并且在平面上做足够的铜皮连接。替换过孔时如果原来是 0.3 的孔要改成 0.25电源网络的孔必须单独处理不能一刀切。散热也是同理。芯片底部散热焊盘下面的过孔阵列孔径和数量直接影响热阻。把这类孔换成更小的尺寸散热路径会明显变差。所以用 Padstack Replace 做全局替换时通常要先把散热孔和电源孔排除掉——用 Find by Property 或者 Network 筛选就能做到。3.4 高速信号的过孔 stub 与背钻当信号速率上到几个 Gbps过孔就不只是一个导通结构了它变成一个阻抗不连续的节点。过孔的影响主要来自两个部分孔盘的寄生电容和多余孔壁形成的 stub 电感。经验上过孔的电感大约在每毫米 1 nH 量级孔盘电容在 0.3 到 0.5 pF 量级。stub 是指信号从表层进入内层走线之后过孔孔壁继续延伸到板底的那一段多余尾巴。这段尾巴在低频下可以忽略但在高频下相当于一个谐振腔会在特定频率上把信号吃掉一块。解决办法就是背钻——把多余的那段孔壁钻掉。在 Allegro 17.x 里背钻是通过 padstack 里的 Backdrill 层对来定义的可以设置背钻的直径和深度。所以当你做高速板的过孔替换时如果原来没有背钻现在要加背钻那就不只是换一个 padstack 名那么简单还得重新定义带背钻的 padstack并且重新检查叠层里各信号层的位置关系。这类替换的复杂度比普通通孔替换高一个量级建议单独开一个章节做验证不要和常规孔替换混在一起做。3.5 一张可以直接抄的选型表下面这张表是我自己项目里常用的默认配置按用途区分可以直接拿去改用途孔径 / 盘径说明BGA 内部 fanout0.20 / 0.45 mm需要板厂确认机械钻能力或改激光孔普通信号换层0.30 / 0.60 mm通用性最好成本最低电源、地缝合0.50 / 0.90 mm载流和散热都占优散热焊盘阵列0.30 / 0.60 mm盖油数量优先孔径适中高频差分换层0.25 / 0.50 mm带背钻配合反焊盘优化阻抗这张表里的参数不是标准答案是起点。真正定下来之前一定要发给板厂确认一次尤其是 0.2 这一档。板厂的能做和做好了良率还行是两回事前者是能力上限后者才是你该用的值。4. 常见问题与排查实录这一章是我这些年替换过孔踩过的坑按出现频率排序。4.1 替换完 DRC 爆一堆先看这三条替换过孔之后 DRC 报错是正常的因为新 padstack 的所有参数都变了。但报错的类型能帮你快速定位问题。最多的三类是环宽不足、间距不足和 SolderMask 相关问题。环宽不足的报错检查新 padstack 的盘径和孔径比值间距不足的报错检查反焊盘尺寸特别是和平面层之间的间隙SolderMask 相关的报错检查新 padstack 有没有定义 SolderMask 层以及开窗尺寸是否合理。排查时有个技巧在 Constraint Manager 里临时把报错类别对应的 DRC 开关关掉先看看是不是只有这一个类别在报避免被淹没在几百条错误里。确认问题范围之后再把开关打开针对性处理。4.2 替换不生效、报 cell read-only 或者找不到 padstack三种情况各有原因。替换对话框里选不到新 padstack多半是 padpath 没配。到 Setup → User Preferences → Paths → Library 里检查 padpath 和 psmpath 路径确认新 padstack 所在目录在列表里。改完路径记得重启一下或者在命令里刷新一下缓存有时候路径加了但列表没更新。报 cell read-only 或者类似提示通常是这个 padstack 被某个已经锁定的对象引用或者相关文件属性是只读的。检查文件系统权限同时确认板上有没有被 Fix 锁定的对象引用它。解锁之后重试。替换执行了但板子没变化最常见的原因是 Find 过滤器没选对或者替换对话框里的作用对象没勾上 Vias。还有一个隐蔽原因你替换的那个孔其实属于某个 Symbol 的一部分比如连接器封装自带的地孔Symbol 未解锁时它的内部对象不能单独替换。4.3 有孔漏网锁定、Fanout、散热孔、安装孔全局替换之后用 Padstack Usage 报告核对如果老 padstack 还剩几个大概率是下面这几种被 Fix 锁定的过孔。解锁后再替换。Fanout 生成的过孔。这类孔有时带有特殊属性需要单独筛选处理。Allegro 有专门的 Fanout 相关操作可以在 Fanout 参数里改默认过孔也可以对已有的 fanout 孔做替换。散热焊盘下的过孔阵列。这些孔通常是手动放置或用阵列工具生成的和普通信号孔混在一起但用途完全不同应该单独处理。Symbol 内部的过孔比如屏蔽罩、大连接器封装里自带的接地孔。测试点过孔。测试点有时候用的是专门的 padstack替换成普通信号孔会导致测试点失效。最省事的做法是替换之前先做一次分类按网络、按属性、按区域把孔分成几组一组一组替换。虽然前期多花十分钟但避免了后期反复排查漏网之鱼。4.4 光绘和钻孔表对不上替换完过孔光绘和钻孔数据必须重新生成一遍。这里面有两个容易忽略的点。一是钻孔表。Manufacture → NC → Drill Legend 生成的钻孔表是基于当前设计的钻孔参数自动生成的如果你没重新生成表里还是旧的钻孔种类。换孔之后要重新跑一次核对钻孔种类数量和设计里的实际种类是否一致。二是光绘层里的过孔表现。如果新 padstack 的 SolderMask 定义和原来不同比如从盖油变成开窗光绘上的表现会变。这个变化是预期内的但一定要在出光绘之前和板厂确认避免版图发出去了才发现工艺要求和实际做法不符。4.5 常见问题速查表现象可能原因处理方式替换对话框里找不到新 padstackpadpath 未配置检查 User Preferences 里的库路径替换后板子没变化Find 过滤器或作用对象选错确认只勾选 Vias 并正确选择 Original报 cell read-only对象被锁定或文件只读解锁对象检查文件权限替换后走线仍打老孔Via List 未同步修改到 Constraint Manager 更新 Vias 列DRC 报环宽不足盘径孔径比值过小调整 padstack 参数或换更小的孔部分过孔漏网被锁定、属于 Symbol、Fanout 孔分类后分批替换钻孔表种类对不上未重新生成钻孔数据重新执行 Drill Legend 和 NC Drill过孔上面没有开窗新 padstack 未定义 SolderMask补上 SolderMask 层参数5. 几个用血泪换来的实操心得第一个心得是关于时机的。替换过孔这件事最好在布线完成度 60% 到 80% 的时候做一次而不是等全部布完。原因很简单越早替换DRC 和后续走线的调整量越小等布完了再换一旦有环宽或者间距问题牵动的走线范围会大得多。我在一个八层板上吃过这个亏布完再换孔结果 BGA 区域有三十多根线需要重走白白多花了一天。第二个心得是关于库管理的。项目里用的过孔 padstack 尽量收敛不要一个项目里冒出十几个不同规格的过孔。我的习惯是把常用过孔整理成一个标准清单加上清晰的命名规范比如VIA_0R30_0R60_TH表示通孔 0.3 盘 0.6VIA_0R20_0R45_BD表示带背钻。命名清晰之后替换对话框里的下拉列表一眼就能找到目标也不会出现替换错了孔径却看不出来的情况。第三个心得是关于验证的。替换完不要只看 DRC 通过就算完最好把板子导一次 3D 或者导出 PDF 版图用眼睛扫一遍关键区域看看过孔密度、散热阵列、测试点有没有异常。软件检查的是规则人眼检查的是意图两者互补。第四个心得也是我觉得最值钱的一条替换过孔之前把新旧 padstack 的完整参数列成一个对照表包括孔径、盘径、反焊盘、SolderMask、层跨度、是否盖油这几项逐项确认差异。这个动作只需要五分钟但它能让你在做完替换之后立刻知道该重点检查什么。跳过这一步的人往往是在板厂反馈问题的时候才回头去查参数那时候损失的可就不只是时间了。
返回列表