ARTICLE DETAIL

资讯详情

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

Allegro Out of date shapes 问题全解析:原理、更新与预防

Allegro Out of date shapes 问题全解析:原理、更新与预防 1. 从一次改板翻车说起Out of date shapes 到底卡在哪如果你用 Allegro 做过几次改板大概率见过这个场景板子改完DRC 一跑满屏的Out of date shapes警告铜皮显示成一层灰蒙蒙的轮廓铺铜和走线的间距检查全部失效导出 Gerber 的时候更是直接报错或者输出一堆空铜。我第一次遇到这个问题是在一个四层板的改版项目里当时只是把几个电容挪了位置重新铺铜之后没在意状态栏的提示结果出 Gerber 时铜皮全是旧数据板厂反馈铜和线短路整批板子报废重做。这个问题的本质其实不复杂Allegro 里的 Shape铜皮、动态铜、静态铜是有版本状态的。当你修改了板框、移动了器件、改了规则约束、调整了走线之后已经存在的 Shape 并不会自动重新计算它会保留上一次生成时的几何数据同时被标记为过期。这个标记就是Out of date shapes。它本身不是错误而是一个提示——告诉你这块铜皮的形状数据已经和当前设计不匹配了需要重新生成。很多人第一次看到这个提示会习惯性地点忽略觉得 DRC 没报错就没事。但问题在于过期的 Shape 在 DRC 检查、Gerber 输出、3D 预览、甚至阻抗计算中都会被当作旧数据处理导致检查结果和实际生产文件不一致。这就是为什么有些板子DRC 全绿但板厂说短路——因为 DRC 检查的是旧铜皮而 Gerber 输出的可能是另一套数据或者干脆输出失败。所以这篇内容主要面向三类人一是刚接触 Allegro、被这个提示搞得一头雾水的 PCB 新手二是做了几年板子但一直靠点一下 Update 就行混过去、没深究过原理的工程师三是需要批量处理老项目、经常遇到改板后铜皮状态混乱的资深设计者。我会从原理讲到操作从单个 Shape 的处理讲到批量脚本把这个问题彻底讲透。2. Shape 的版本状态机制为什么改了板子铜皮不会自动更新2.1 动态铜和静态铜的状态差异Allegro 里的 Shape 分两种动态铜Dynamic Shape和静态铜Static Shape。这两者在过期这件事上的表现完全不同理解这一点是解决问题的前提。动态铜的特点是跟着规则走。你设置了线宽、间距、过孔避让规则之后动态铜会自动根据这些规则重新计算避让。但注意这个自动是有条件的——只有当 Shape 被标记为需要更新、并且你触发了更新动作时它才会重算。如果你只是移动了一个器件动态铜不会立刻重算而是先打上过期标记等你执行Shape Update Shape或者全局的Update DRC时才真正重新生成。静态铜则更死。它一旦生成就固定了几何形状不会随规则变化自动调整。静态铜过期通常是因为板框变了、或者你手动编辑过它的边界导致它和当前设计不匹配。静态铜的更新需要手动执行Shape Manual Update或者把它转成动态铜再更新。这里有个容易被忽略的点动态铜的过期标记是可以累积的。你改一次板子它标记一次再改一次标记还在。如果你一直不处理最后可能积累几十上百个过期 Shape这时候再统一更新计算量会非常大Allegro 可能卡死甚至崩溃。我见过一个六层板项目改版十几次没清理最后 Update 的时候软件直接无响应只能分批处理。2.2 触发 Shape 过期的常见操作不是所有操作都会导致 Shape 过期但以下几类操作几乎必然触发操作类型是否触发过期原因说明移动/旋转器件是器件焊盘位置变了铜皮避让需要重算修改板框 Outline是铜皮边界依赖板框板框变了铜皮必须重生成修改约束规则Spacing/Physical是动态铜的避让逻辑依赖规则规则变了结果就变了添加/删除走线、过孔是铜皮需要重新避让新的走线修改 Shape 自身边界是几何数据直接变了仅修改丝印、文字否不影响铜皮几何修改器件位号否不影响铜皮几何更改层叠结构是参考平面变了铜皮和平面层的关联需要重算这张表建议记一下尤其是修改约束规则这一条。很多人改完规则跑 DRC 发现铜皮没变化以为规则没生效其实是 Shape 过期了没更新。规则改了但 Shape 没更新等于规则白改。2.3 过期状态在 DRC 和 Gerber 中的具体表现过期 Shape 在不同环节的表现不一样这也是为什么很多人搞不清楚问题出在哪DRC 检查阶段Allegro 会跳过过期 Shape 的间距检查或者用旧数据检查。你会看到 DRC 报告里某些网络干净但实际上铜皮和走线已经短路了。Gerber 输出阶段Manufacture Artwork输出时如果 Shape 过期Allegro 会提示Shape out of date, please update before artwork或者直接输出旧铜皮数据。有些版本会强制要求你先更新才能出 Gerber。3D 预览阶段过期的铜皮在 3D 视图里显示为平面轮廓没有厚度和实际形状看起来缺了一块。阻抗计算阶段如果铜皮是参考平面过期数据会导致阻抗计算结果偏差尤其是高频板。提示判断 Shape 是否过期最直接的方法是看颜色。正常动态铜是实心的亮色通常是绿色或铜色过期铜皮会显示为空心轮廓或者灰色半透明。另外状态栏会显示Shapes out of date: NN 就是过期数量。3. 手动更新 Shape 的完整操作链路3.1 单个 Shape 的更新Update Shape 的正确用法处理单个过期 Shape最直接的方式是Shape Update Shape。操作步骤在 Allegro 的菜单栏找到Shape下拉选择Update Shape。鼠标变成十字光标点击你想要更新的那个 Shape 的边界或者内部区域。Allegro 会重新计算这个 Shape 的几何数据几秒钟后铜皮恢复实心显示。这个操作看起来简单但有几个细节决定了它好不好用第一点击位置有讲究。如果你点在了 Shape 内部的走线或者过孔上Allegro 可能会选中那个对象而不是 Shape。正确做法是点在 Shape 的空白铜皮区域或者直接点它的外边界线。第二更新顺序影响结果。如果多个 Shape 相互重叠比如电源层和地层的铜皮有交叠区域更新的顺序会影响最终的避让结果。一般建议先更新底层、再更新顶层或者按照信号流向从源到负载依次更新。我遇到过电源铜皮和地铜皮重叠的情况先更新地铜皮再更新电源铜皮结果电源铜皮把地铜皮吃掉了一块反过来操作就没问题。第三更新后要复查 DRC。更新完 Shape 不要直接出 Gerber先跑一次 DRC。因为更新过程中可能产生新的间距违规尤其是铜皮和板框边缘的间距。3.2 全局批量更新Shape Global Update 的适用场景当过期 Shape 数量超过十个一个个点就太慢了。这时候用Shape Global Update菜单Shape Global Update。弹出的对话框里选择更新范围All Shapes所有、Dynamic Shapes Only仅动态铜、Selected Shapes选中的。勾选Update DRC选项让更新后自动跑一次检查。点击Update等待进度条走完。这个操作的风险在于计算量大。如果板子很大、铜皮很多、规则很复杂Global Update 可能跑十几分钟甚至更久。我的经验是板子超过 8 层或者铜皮超过 50 个分批更新每次选 10-20 个 Shape。更新前先保存 BRD 文件防止软件崩溃导致数据丢失。如果更新过程中 Allegro 无响应不要强制关闭等 5-10 分钟看是否恢复。强制关闭可能导致 BRD 文件损坏。3.3 更新后仍然报错的排查思路有时候你更新了 Shape但状态栏还是显示Out of date shapes或者 DRC 依然报错。这种情况通常是以下几个原因原因一Shape 被锁定Fixed。如果 Shape 属性里勾了Fixed它不会被更新。解决方法是选中 Shape右键Property Editor取消Fixed勾选再更新。原因二Shape 属于某个 Group 或 Module。如果铜皮是某个复用模块的一部分单独更新可能不生效需要进入模块内部更新或者更新整个模块。原因三板框本身有问题。如果板框 Outline 有自交、断线、重复线段Shape 更新会失败。用Display Status检查板框状态或者用Tools Database Check修复数据库。原因四数据库损坏。这是最麻烦的情况。BRD 文件用久了可能出现数据库不一致表现为 Shape 更新后状态不变。解决方法是Tools Database Check勾选所有选项执行一次完整检查。如果还不行导出所有设计数据到新 BRD 文件File Export Design Data在新文件里重新导入。4. 从根源减少 Out of date shapes 的操作习惯4.1 改板流程的顺序优化很多过期 Shape 的产生是因为操作顺序不对。我总结了一套改板顺序能显著减少过期数量先改原理图再改 PCB。器件增减、网络变更在原理图完成PCB 只做同步避免在 PCB 里直接改网络导致铜皮状态混乱。先改板框再铺铜。板框是铜皮的边界依据板框没定就铺铜后面改板框必然导致铜皮过期。先改规则再改走线。规则改了之后先更新一次 Shape再动走线。这样铜皮避让是基于新规则算的不会二次过期。先布局再布线最后铺铜。这是最经典的顺序。铺铜放在最后能避免布局调整导致的铜皮重算。改板时先删铜改完再铺。如果改动量大比如移动了十几个器件与其让铜皮反复过期不如先把铜皮删掉改完布局布线后重新铺。这样虽然多一步但状态最干净。4.2 用 Shape 属性避免不必要的重算Allegro 的 Shape 有一些属性可以控制它的更新行为合理设置能减少过期DynamicvsStatic如果某块铜皮不需要跟随规则变化比如固定形状的散热焊盘设成 Static它就不会因为规则改动而过期。Shape Priority多个铜皮重叠时优先级高的会压住优先级低的。设置好优先级能减少更新时的相互干扰。Clearance Override如果某个 Shape 需要特殊间距单独设置 Override避免改全局规则时它跟着过期。4.3 定期清理和数据库维护老项目改多了BRD 文件会积累很多冗余数据。建议每隔几次改版做一次维护Tools Database Check检查并修复数据库不一致。File Export Design Data再Import相当于另存为一次清理冗余。删除不用的 Shape、走线、过孔减少计算量。用Reports Shape Status查看所有 Shape 的状态提前发现潜在过期。注意Database Check 和 Export/Import 操作前务必备份 BRD 文件。这两个操作有一定概率改变设计数据尤其是 Export/Import 可能丢失某些自定义属性。5. 批量处理脚本与自动化思路5.1 用 Skill 脚本批量更新 ShapeAllegro 支持 Skill 脚本可以写一段代码批量更新所有过期 Shape。以下是一个基础示例; 批量更新所有过期 Shape axlCmdRegister(updateAllShapes updateAllShapes) defun(updateAllShapes () let((shapes shape) shapes axlDBGetShapes(nil) foreach(shape shapes when(shape-isOutOfDate axlShapeUpdate(shape) ) ) axlUIWPrint(nil All out-of-date shapes updated.) ) )这段脚本的逻辑是获取所有 Shape判断isOutOfDate属性如果是过期状态就调用axlShapeUpdate更新。把这段代码保存为.il文件在 Allegro 里用skill load filename.il加载然后执行updateAllShapes命令即可。实际使用中要注意批量更新前先保存文件并且脚本执行时不要操作界面否则可能中断。另外如果 Shape 数量很多建议加一个进度提示避免以为卡死。5.2 导出 Gerber 前的自动检查出 Gerber 是过期 Shape 影响最大的环节。可以在出 Gerber 前加一个检查步骤用 Skill 脚本自动检测并提示; 出 Gerber 前检查过期 Shape axlCmdRegister(checkBeforeArtwork checkBeforeArtwork) defun(checkBeforeArtwork () let((shapes count) count 0 shapes axlDBGetShapes(nil) foreach(shape shapes when(shape-isOutOfDate count count 1 ) ) if(count 0 then axlUIWPrint(nil sprintf(nil Warning: %d shapes out of date. Update before artwork. count)) else axlUIWPrint(nil All shapes are up to date. Ready for artwork.) ) ) )这个脚本不执行更新只做检查提示。把它绑定到出 Gerber 的流程里能避免忘了更新直接出 Gerber的低级错误。5.3 脚本使用的注意事项Skill 脚本虽然方便但有几个坑版本兼容性不同 Allegro 版本的 Skill API 可能有差异16.6 和 17.4 的部分函数名不一样。脚本在 16.6 能跑17.4 可能报错。权限问题某些公司环境限制了 Skill 脚本执行需要管理员权限。误操作风险脚本批量更新时如果逻辑有 bug可能把不该更新的 Shape 也更新了导致铜皮形状异常。建议先在测试文件上验证。性能问题Shape 数量超过 200 个时脚本执行可能很慢建议分批处理。6. 几个真实踩坑案例的完整复盘6.1 案例一改板框后铜皮消失现象一个四层板项目客户要求把板子长度缩短 5mm。我改了板框 Outline 之后发现顶层和底层的铜皮显示为空心轮廓状态栏提示Out of date shapes: 12。执行 Global Update 之后铜皮没有恢复反而部分区域变成了空白。排查过程先检查板框用Display Status看 Outline 状态发现板框有一条线段重复了改板框时复制粘贴导致。删除重复线段重新闭合板框。再次 Global Update铜皮恢复但边缘有毛刺。用Shape Manual Update逐个修整边缘最终正常。根因板框不闭合导致 Shape 更新时边界计算失败铜皮被裁剪掉了。改板框后一定要检查 Outline 是否闭合、有无重复线段。6.2 案例二规则改了但 DRC 不报错现象把线间距规则从 6mil 改成 8mil跑 DRC 发现没有新增违规以为规则没生效。实际上是因为铜皮过期DRC 用的是旧铜皮数据。排查过程检查约束管理器规则确实改了。看状态栏发现Out of date shapes: 8。执行 Global Update 后重新跑 DRC立刻报出十几处间距违规。根因规则改动后没有更新 ShapeDRC 检查的是旧铜皮。改规则后必须更新 Shape 再跑 DRC否则检查结果不可信。6.3 案例三出 Gerber 时铜皮数据缺失现象出 Gerber 时 Allegro 提示Shape out of date但点了忽略继续输出。板厂反馈顶层铜皮缺失只有焊盘没有铺铜。排查过程回看 Gerber 输出日志发现输出时跳过了过期 Shape。重新更新所有 Shape再次输出 Gerber。用 CAM350 检查 Gerber铜皮完整。根因Allegro 出 Gerber 时对过期 Shape 的处理策略是跳过或用旧数据不会自动更新。出 Gerber 前必须确保所有 Shape 都是最新状态。6.4 案例四Database Check 后 Shape 全部过期现象执行Tools Database Check之后所有 Shape 都变成了过期状态数量上百。排查过程这是正常现象——Database Check 会重建数据库索引Shape 需要重新关联。执行一次 Global Update全部恢复。如果更新失败说明数据库有更深层问题需要 Export/Import。根因Database Check 改变了内部数据结构Shape 状态被重置。这是预期行为不是错误更新一次即可。7. 一些提高效率的快捷键和配置建议Allegro 的默认快捷键里没有直接对应更新 Shape的但可以自己配置。在env文件里加一行alias ~U shape update alias ~G shape global update这样CtrlU就是更新单个 ShapeCtrlG是全局更新。比每次点菜单快很多。另外几个相关的实用配置自动保存Setup User Preferences Autosave设置每 10 分钟自动保存防止更新 Shape 时崩溃丢数据。Shape 显示模式Setup User Preferences Display Shape Fill建议设为Solid这样过期 Shape 的空心状态一眼就能看出来。状态栏提示确保状态栏显示 Shape 过期数量View Status Bar里勾选相关选项。提示快捷键配置改的是个人 env 文件不影响其他同事。如果公司有统一的 env 模板建议把这两个 alias 加进去团队统一使用。8. 关于这个问题的个人经验总结做了这么多年 PCB我对Out of date shapes的态度经历了一个变化从最初的看到就烦到后来的看到就点更新再到现在的主动预防。这个问题的核心其实不是技术难度而是流程习惯。我的建议是把更新 Shape当成改板流程的固定环节就像保存文件一样自然。每次改完布局布线先 Global Update 一次再跑 DRC再出 Gerber。这个顺序固定下来基本不会出问题。另外不要迷信 DRC 全绿。DRC 检查的是当前数据库状态如果 Shape 过期检查结果就是假的。先更新再检查最后输出这三步的顺序不能乱。对于老项目建议每隔半年做一次 Database Check 和 Export/Import清理冗余数据。我手上有个项目跑了三年BRD 文件从 8MB 涨到 40MB后来 Export/Import 一次回到 12MB打开和更新速度都快了很多。最后说一个细节如果你用的是 Allegro 17.4 以上版本Shape 更新的性能比 16.6 好很多尤其是大板子。如果公司还在用 16.6更新大板子时耐心一点别频繁点鼠标容易触发无响应。
返回列表