十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Allegro铺铜后DRC报Soldermask错误?17.4阻焊间距规则设置详解

Allegro铺铜后DRC报Soldermask错误?17.4阻焊间距规则设置详解 铺铜之后 DRC 一片红报错里全是 Soldermask这事儿在 Allegro SPB17.4 里真的太常见了。我见过不少工程师明明布线、平面分割都没问题结果一跑 DRCSoldermask_Spacing违规几十上百个检查半天发现是铜皮和阻焊开窗贴得太近甚至直接搭上。板厂那边问起来答不上来最后只能要么全局放宽规则要么一个个手动修效率极低。这篇东西就是来解决这个问题的从规则层面把 Soldermask 间距彻底搞明白然后用 17.4 的 Constraint Manager 一步步配好让 DRC 不再被这种问题“刷屏”。这篇文章适合谁刚接触 Allegro 的硬件工程师、PCB layout 新手还有被 DRC 折磨到想摔鼠标的老哥们。不需要你有很强的规则管理基础我会从最底层的概念讲起把为什么报错、规则在哪、参数填多少、怎么排查一次说透。1. 为什么铺铜之后 DRC 会报 Soldermask 错误先搞明白一个事Soldermask 到底管的是什么。它就是我们常说的“阻焊层”也就是板子上那层绿色的油墨。这层油墨覆盖在铜皮和走线上面起到绝缘和保护作用但焊盘位置必须“开窗”也就是不盖油墨让铜露出来方便焊接。所以 Soldermask 的本质就是“哪里要露出铜哪里要盖住油墨”的一套定义。铺铜之后 DRC 报 Soldermask 错误核心矛盾就出在铜皮覆盖的区域和阻焊开窗区域之间的间距不够。举个例子你把一个平面的 GND 铜皮铺在底层这块铜皮附近有一个贴片电阻的焊盘。焊盘为了焊接周围会被开一个比焊盘本身大一圈的窗口。如果铜皮离这个窗口太近甚至铜皮边缘挤进了窗口范围那板厂在生产时就会出现一个很尴尬的情况油墨印不上去或者铜皮露出来太多焊接时锡膏一流动就直接把旁边的铜皮也给连上了轻则短路重则整板报废。Allegro 的 DRC 其实就是拿着你设定的“最小可用间距”去卡这些对象之间的几何关系。方向有两个维度一个是铜皮和阻焊开窗之间的“距离”够不够一个是铜皮本身是不是“不应该被开窗”的地方却开了窗。很多新手只盯着布线间距完全忽略 Manufacturing 这一类规则结果铺铜一多报错马上涌现。提示Soldermask 报错并不是“铜皮画错了”绝大多数时候是“规则没定义”或“定义不合理”。不要一上来就删铜皮先看规则。我在实际项目里遇到过最典型的一种情况顶层放了一堆 BGA 扇出孔底层整片铺 GND 铜皮结果 DRC 报出几十个Soldermask_Spacing。点开一看全是过孔焊盘的开窗边缘和底层铜皮在“抢地盘”。这其实是过孔焊盘的 SolderMask 开窗设置偏大导致的跟铜皮本身关系不大。所以排查 Soldermask 问题一定不能只盯着铜皮焊盘、过孔、甚至封装库里的开窗定义每一个环节都可能成为“罪魁祸首”。2. 规则到底在哪Allegro 中 Soldermask 间距规则的完整体系很多人打开 Constraint Manager 就懵左侧一堆目录什么 Spacing、Same Net Spacing、Physical、Design Constraints不知道 Soldermask 藏在哪个犄角旮旯。我先把 17.4 里跟 Soldermask 相关的位置理清楚。在 Allegro 中Soldermask 相关的规则主要分布在两块2.1 Spacing 约束集里的 SolderMask 标签页打开Setup - Constraints - Constraint Manager左侧工作簿找到Spacing下面有一个SolderMask标签页。这一页里的核心字段是SolderMask到Pin、Via、Shape、Cline、Other的间距值通常你看到的是一个矩阵横竖都是对象类型交叉点就是要填的数字。这里控制的就是“阻焊层和哪个对象之间最小要保持多少距离”。默认值往往是 0这就是为什么很多人铺铜后一跑 DRC 就去世——规则是 0等于没设Allegro 只要检测到任何“重叠”或“贴近”就直接报错。注意默认值 0 不代表“不检查”而是“只要碰到就认为非法”。这个坑踩的人特别多建议任何板子开工前先把这里的默认值落实到 4mil 以上。2.2 Design Constraints 里的 Manufacturing 选项如果你用的是传统流程在Constraint Manager左侧找到Design Constraints - Manufacturing里面也有Solder Mask相关设置。这里主要管的是“最小阻焊桥宽度”Solder Mask Bridge这类制造约束以及部分SolderMask间距的兜底值。很多老教程只让你改这里但在 17.4 里我还是建议优先用 Spacing 约束集因为它更灵活能做分网络、分区域的精确控制。Manufacturing 里的设置更像是“全局底线”两个地方可以互相配合不要只改一处。2.3 封装库和焊盘里的 Soldermask 定义第三个层级也是最容易被忽略的单个焊盘自身带有的SolderMask开窗尺寸。在 Padstack Editor 里每个 Pin 或 Via 都有独立的SolderMask层几何通常是比Regular Pad大 4mil 到 6mil 的圆或方形。这里如果设置得特别大比如比焊盘大了 10mil那么即使你的 Spacing 规则设了 4mil旁边铜皮焊盘边缘可能还是会在开窗边缘附近就会报错。所以我的习惯是先查焊盘开窗再查间距规则。先把“物理事实”摆清楚再去调间距不然你在这儿把规则改到天上去焊盘开窗 10mil 大照样报错。检查位置常见默认情况建议Spacing - SolderMask0 或未设置至少 4mil推荐 6milDesign Constraints - Manufacturing各种值为空按板厂能力填Padstack 的 SolderMask 开窗比焊盘大 4~6mil确认不要超过整体开窗限制3. 手把手设置 Soldermask 间距规则好前面铺垫完了现在进入正题。下面这套操作我在 SPB17.4 上跑过很多次按顺序点就行。3.1 打开 Constraint Manager在 Allegro 菜单栏选择Setup - Constraints - Constraint Manager。17.4 打开后默认是一个多标签页的窗口如果没看到左边的工作簿树可以用菜单里的View - Workbook切换回来。左侧工作簿选择Spacing。如果你的设计里有多个 Spacing CSet会看到多个工作表。选当前设计在用的那个通常叫DEFAULT或者你自己的ALL_LAYERS之类的名字。3.2 找到 SolderMask 标签页在 Spacing 工作簿下方有一排标签页分别是All Constraints、Spacing、Same Net Spacing、SolderMask等。点SolderMask。这里你会看到一个矩阵表格行和列都是对象类型包括Pin、Via、Shape、Cline、Other、Bond Finger等。矩阵里每个格子代表“从 SolderMask 到对应对象的间距”。我不建议你只改一个格子比如只改Shape和SolderMask的交叉点。因为实际报错时铜皮可能通过 PIN 边缘、VIA 边缘、甚至走线边缘与阻焊发生关系只改一个格子容易漏。实操建议把整个矩阵里和SolderMask相关的值统一设置。比如全部设为 6mil可以理解为“阻焊油墨距离任何铜质物体的最小边缘距离是 6mil”。 当然某些值可以放宽看板厂能力但先统一设置是最稳妥的做法。3.3 修改默认值或新建规则你可以直接改默认的DEFAULT规则也可以新建一组专用的 CSet。我的习惯是新建一个SM_6MIL之类的规则集在Spacing工作簿左侧的 CSet 列表上右键选择Create - Spacing CSet给规则集命名比如SM_6MIL双击打开这个 CSet 的SolderMask标签页把所有相关值改成你要的数字回到原理图或 PCB 的约束分配界面把默认的DEFAULT规则替换成SM_6MIL或者直接在DEFAULT里改。为什么要新建而不是直接改默认因为很多时候你可能有多个不同叠层或者不同工艺要求的设计区域。比如 DDR 区域需要更高的密度间距只能做到 4mil而电源区域可以放到 8mil。一套默认规则很难覆盖所有场景CSet 就是为这种需求准备的。3.4 设置 Design Constraints 里的 Solder Mask回到Constraint Manager左侧找到Design Constraints - Manufacturing点开Solder Mask相关项。这里重点看Minimum Solder Mask Sliver最小阻焊桥宽度Solder Mask Clearance如果有别名全局的阻焊间距兜底值。这些值建议和板厂的工艺能力对齐。常规 4 层板、6 层板阻焊桥做到 4mil 以上没问题一些高密度板子做到 3mil 也行但不能低于板厂最低要求。我一般直接写 4mil除非是 0.4mm 间距的 BGA那种可能真要 3mil需要和板厂提前确认。提示Design Constraints 里的设置偏向“可制造性检查”Spacing 里的设置偏向“几何间距检查”。DRC 报错时如果类型是 Soldermask_Spacing优先查 Spacing 规则如果是其他 Manufacturing 类报错再看 Design Constraints。3.5 保存并重新运行 DRC设置完规则后别急着关窗口。回到 Allegro 主界面打开Display - Status点击Update DRC或者直接按快捷键T刷新如果你的快捷键没改的话。如果没有自动刷新就运行Tools - Design Rule Check勾选所有检查项点Check。跑完看结果。正常情况下Soldermask 类的报错数量会显著减少。如果还有零星几个多半是特殊对象的问题用Display - Element点一下 DRC 标记看具体报错对象是哪种针对处理。我非常建议在出光绘文件之前再最后跑一次全量 DRC并且把所有 DRC 标记在出图前清完。不要带着红色标记发板。4. 参数到底填多少数值选择依据与工程权衡很多人希望我给一个“万能数字”然后从此不管。很遗憾Soldermask 间距没有万能数字但有合理的取值范围和选择逻辑。4.1 基于板厂工艺能力选初始值常规 PCB 板厂的阻焊工艺能力外层铜厚 1oz 时最小阻焊桥宽一般是 4mil成熟工厂能做到 3mil。如果你的板子对成本敏感选 4mil 起步是行业通用做法。如果板子密度很高比如 0.5mm pitch 的 BGA、0.5mm 间距的连接器那 4mil 可能不够用往往要压到 3mil。同时还要考虑另一个参数阻焊开窗比焊盘大的数值也就是soldermask expansion。常规是 4mil 到 6mil。这个值越大焊接时的可焊区越大但阻焊桥就越窄。很多板厂建议外层开窗比焊盘大 4mil内层如果不需要焊接可以大 6mil 甚至不开窗。这个问题和间距规则是联动关系不能孤立地看。4.2 不同网络等级用不同间距如果是一个混合信号板模拟部分和数字部分离得比较远那整个板子用一个间距值也凑合。但如果板子上同时有 BGA、连接器、高压电源区域我建议拆成多套规则普通信号网络6mil高密度 BGA 区域4mil铜皮覆盖大的电源网络8mil高压区域按安规要求单独定。拆规则的好处是你不必为了一个局部的高密度区域把整板规则放松到很激进也不必为了整板的可靠性让 BGA 区域天天报 DRC。Allegro 的 Spacing CSet 可以按网络、按层、按区域分配灵活得很把规则用完才是对的。4.3 与铜厚、表面处理方式的耦合铜厚对 Soldermask 间距影响很大。板子内层 1oz外层完成铜厚 1.25oz 或 2oz 时阻焊桥能做的宽度要放宽因为铜越厚油墨在铜边缘覆盖的难度越大做窄了容易脱落。2oz 外层时我觉得 5mil 起步比较稳不能再追求 3mil 了。另一个坑是表面处理方式。沉金板、喷锡板、OSP 板对阻焊桥的要求也不同。喷锡板因为焊盘表面有一层锡阻焊桥如果太窄容易在喷锡过程中被热风“冲坏”导致油墨起翘。所以喷锡板我一般比沉金板多加 1mil 余量。4.4 关键阻焊桥BGA 两焊盘之间的油墨的特殊处理BGA 区域的 solder mask bridge是整个板子上最容易被制造端吐槽的地方。0.4mm pitch 的 BGA焊盘直径 10mil 左右焊盘间距约 5.7mil减去两个焊盘各自的 expansion中间剩下的油墨可能只有 1~2mil板厂根本做不出来。这种地方你不能只靠全局间距规则更好的做法是在封装库阶段把 BGA 焊盘的SolderMask开窗尽量做小比如只比焊盘大 2mil甚至 1:1 开窗即阻焊开窗等于焊盘大小。然后在 PCB 设计阶段允许这一组网络的 Soldermask 间距规则放宽到 2mil 或按实际开窗计算结果。这样 BGA 区域既不会 DRC 报错出厂也能做出来。我见过不少工程师BGA 区域 DRC 报错后不查封装直接全局放宽规则结果一整板的阻焊桥都不稳定。这不是改规则这是埋雷。BGA 区域的 Soldermask 问题90% 该从封装开窗阶段解决。5. 常见 DRC 报错场景与排查技巧实录这一部分我按实际项目里频率最高的几种报错场景来写每种都配上排查思路。别只看报错描述Allegro 的 DRC 描述有时候很抽象直接点元素看对象更靠谱。5.1 报错类型Soldermask_Spacing这种报错最常见用的是 Spacing - SolderMask 规则。排错路径点击 DRC 标记使用Display - Element选中违规对象看报告里出现的两个对象是什么一个是SolderMask另一个可能是Shape/Pin/Via/Cline如果是 Shape 和 SolderMask 之间违规进 Constraint Manager 看Spacing - SolderMask里的Shape间距如果是 Pin 和 SolderMask 之间违规检查这个 Pin 的封装焊盘开窗是否过大如果是 Via 和 SolderMask 之间违规检查过孔焊盘和过孔开窗设置。列一个速查表违规对象组合优先检查位置常见原因Shape vs SoldermaskSpacing 规则 / 铺铜边缘铜皮离阻焊开窗太近Pin vs Soldermask封装焊盘开窗封装库开窗设置过大Via vs Soldermask过孔焊盘 / 过孔开窗过孔开窗过大或孔在铜皮中Cline vs Soldermask走线到开窗边缘走线穿过开窗区域5.2 报错类型Soldermask_Over_Shape / Shape Over Soldermask这种报错更“严重”通常意味着铜皮和阻焊开窗发生了实际重叠而不仅仅是距离不够。最常见的原因你在铺铜之前铜皮范围内已经有一个带开窗的焊盘或过孔铜皮没有避让开这个开窗区域你画了一块静态铜皮而静态铜皮默认不会自动避让任何对象包括 SolderMask。排查方法选中违规的 Shape右键Shape - Select Shape然后用Shape - Decompose或者直接看它的属性。如果是静态铜皮建议转成动态铜皮或者手动在Shape属性里设置Clear Soldermask让铜皮自动在开窗区域挖掉一圈。在 Allegro 里动态铜皮默认会自动避让 PIN / VIA / CLINE但对 SolderMask 的避让是独立控制的。选中 shape打开Shape Parameters在Clearances里勾选与 Soldermask 相关的避让选项并设置避让间距。这个操作经常被忽略设置完之后 DRC 报错会瞬间少一大半。5.3 报错类型SolderMask Bridge 不足这类报错在Design Constraints - Manufacturing下的Minimum Solder Mask Sliver检查中出现描述通常是两个焊盘之间剩下的油墨宽度小于最小值。排查路径看违规的两个对象是否属于同一个封装比如 BGA 相邻焊盘或两个独立封装如果是同一个封装回封装里检查Padstack的SolderMask开窗值如果是两个独立封装检查它们的位置是否太近或者板子密度是否已经超过制造极限确认板厂的Minimum Solder Mask Sliver能力值结合铜厚判断是改规则还是改封装。5.4 多块铜皮、多层板规则复杂时怎么查如果板子叠层多内层也有大面积铺铜Soldermask 报错还会出现在内层。很多人想不通内层没有阻焊层为什么要报 Soldermask这就是没理解 Allegro 的规则机制。Allegro 的Spacing CSet默认是在所有层上生效的。即使某个层没有实际阻焊层只要几何对象之间有重叠规则仍会触发。所以内层铺铜时铜皮和过孔开窗、焊盘开窗之间的间距一样会被检查。解决方法有两个方向为内层单独分配一套 Spacing CSet把 Soldermask 相关检查值改大或按需求调整明确哪些对象在哪些层有物理意义用Layer相关的约束分配来控制。我的习惯是叠层多的板子我会针对性地为每个层或层分组建立约束分配Assign避免内层沿用对表层的严苛 Soldermask 要求导致无谓报错。5.5 一个排查实例整板报错最后问题出在过孔某次我处理一块 6 层板顶层铺铜后 DRC 报了一百多个Soldermask_Spacing。我先查了 Spacing 规则已经设了 6mil没毛病又查了铜皮避让也开了Clear Soldermask依然报错。最后点开一个 DRC 标记发现违规对象是一个Via的SolderMask开窗和旁边的Shape。问题出在过孔焊盘的开窗上。我在 Padstack Editor 里给这个过孔设置了比常规大 8mil 的 SolderMask 开窗是为了方便散热但这个过孔偏偏又在 GND 铜皮密集区。铜皮虽然避让了焊盘本身但没有避让那么大的开窗区域。解决办法要么把过孔开窗缩小要么给这组过孔所在的网络单独分配更宽松的 Soldermask 间距规则。最后我把过孔开窗改回标准值DRC 立刻清零。这个例子说明一个道理Soldermask 报错是多个因素叠加的结果单纯改规则不一定能解决要顺着 DRC 标记一路查到最底层的对象定义。6. 进阶玩法分区域、分层、局部特殊处理的规则设计思路如果板子规模不大前面几招够用了。但真正复杂的板子比如服务器主板、FPGA 核心板、混合信号采集板Soldermask 规则必须拆得很细下面分享几个进阶思路。6.1 用区域规则处理局部高密度区Allegro 支持Design Rule Area区域约束。你可以画一个矩形或多边形区域把 BGA 或连接器区域框起来单独分配一套Spacing CSet。这样 BGA 区域可以允许更小的 Soldermask 间距而其他区域保持更可靠的 6mil。具体操作在 Board Geometry 或 Constraint 相关层画一个 Closure区域形状选中这个区域右键Assign to Net或直接在属性里指定约束区域在区域属性中把Spacing CSet Name设为 BGA 专用的规则集。区域规则的优先级高于网络规则网络规则又高于默认规则。这个层次关系是 Allegro 约束体系的核心。理解了优先级你就能在不同区域“因地制宜”。注意区域规则虽然好用但别滥用。区域画得太复杂DRC 计算量增加跑版时容易卡而且后续维护麻烦。只对真正需要特殊处理的地方画区域其余交给默认规则。6.2 指定网络单独设置 Soldermask 间距如果某些网络要求特殊处理比如高压网络需要更大的安全间距可以在 Constraint Manager 里给这个网络单独分配一个 Spacing CSet。操作很简单在Spacing工作簿里右键一个网络选择Assign to CSet然后选你新建的SM_HIGH_VOLTAGE之类的规则集。这种做法特别适合电源网络。电源网络铺铜面积大往往离多个焊盘开窗都很近如果整板规则太严电源区域报错一大片太松信号区域又不安全。给电源网络单独分配 8mil给信号网络保持 4mil两边都舒服。6.3 动态铜皮与静态铜皮的正确用法我还想强调一下动态铜皮在 Soldermask 问题里的角色。动态铜皮会自动避让周围的 PIN、VIA、CLINE也会根据规则避让 SolderMask 开窗。绝大多数新建项目应该用动态铜皮。静态铜皮不会避让任何东西仅仅是一个“实心铜块”。如果你在静态铜皮旁边放一个过孔过孔开窗很大铜皮不会自动缩DRC 直接报错。很多从 PADS 转过来的工程师习惯用静态铜皮。在 Allegro 里我建议尽快转成动态铜皮或者至少明白用了静态铜皮之后所有避让都要手动做Soldermask 也一样。Allegro 里可以通过Shape - Select Shape右键Convert to Dynamic快速转换。6.4 开窗设计思路能不打开就不打开最后讲一个设计理念的问题。我们在做 PCB 设计时对每个层的认识要清晰Top SolderMask和Bottom SolderMask是制造层不是功能层。所有的开窗都应该有明确目的——为了焊接、为了散热、为了接地测试。但实际设计里我看到大量无意义的大开窗比如一个普通的测试点焊盘本来开窗比焊盘大 3mil 就够了有人偏偏把封装的开窗做成比焊盘大 10mil。这样 DRC 报错不说还白白缩小了阻焊桥的宽度制造良率下降。所以从源头控制开窗大小才是治本。原则就是开窗面积以能可靠焊接为首要目标能小则小尤其是高密度区域。开窗大并不代表焊接好很多时候开窗大反而导致锡膏外溢、连锡、或者阻焊桥脱落。6.5 光绘输出前的 Soldermask 检查最后一步出光绘文件之前我会在 Allegro 里做一次针对阻焊层的自查打开Artwork设置确认Top SolderMask/Bottom SolderMask两个图层包含的 object 类型正确用Manufacturing - Artwork生成光绘后在 CAM 工具里打开阻焊层肉眼检查关键区域的阻焊桥宽度对比同一个位置的 TopBottom铜皮层看看开窗是否盖住了不该盖的走线或铜皮。这一步能抓出很多 DRC 查不出来的问题。DRC 查的是规则CAM 检查查的是“实际图形”两个维度都过一遍板子发出去才安心。关于 Soldermask 间距规则我个人最大的体会是它不像线宽线距那样“设个值就完事”而是和封装、过孔、叠层、制造工艺全部耦合在一起。与其每次等 DRC 报错再救火不如在新板子开工前就花 20 分钟把规则体系搭建好把封装和过孔的开窗统一检查一遍。后面铺铜再大面积DRC 也能干干净净。这个前期的 20 分钟往往能帮你省掉后期的一整天。希望这篇东西能帮你在 17.4 里少踩几个坑。
返回列表