Allegro覆铜异常:Unassigned与Out of Date Shapes排查

发布时间:2026/9/24 9:59:58
Allegro覆铜异常:Unassigned与Out of Date Shapes排查
做PCB设计的人几乎都见过Allegro右下角弹出来的那个状态条或者打开Display - Status时看到一排带颜色的标记。其中“Unassigned Shapes”和“Out of Date Shapes”这两项算是相伴相生的“老熟人”了。很多人一看到这两个提示第一反应就是删了重铺或者对着板子反复点Update to Smooth结果点了几次那个数字还是稳稳地停在那里让人非常烦躁。今天这篇就集中解决这两类覆铜问题。先说清楚它们到底是什么、为什么会冒出来再给出完整的处理流程和我在实际项目里常用的排查套路。不管你是刚切到Cadence Allegro的新手还是已经用了几年的工程师如果经常被这两个状态提示搞得头大这篇文章能帮你省下不少折腾时间。1. Unassigned与Out of Date先分清两个“病根”1.1 从Status对话框里看到的那两行在Allegro中Display - Status弹出的对话框里颜色状态分好几类。Unassigned Shapes和Out of Date Shapes通常就在覆铜相关的状态栏里但它们的含义完全不同。Unassigned Shapes是指当前数据库中存在着“没有分配网络”的铜箔图形。说得直白点就是这块板子上有一块铜Allegro不知道它属于哪个网络它就那么孤零零地放在那里。这类shape虽然有时候肉眼能看出来但更多时候藏在底层或者其他不常用的信号层里等你出光绘或者跑DRC时才突然跳出来给你添堵。Out of Date Shapes则是指动态铜箔Dynamic Shape的“状态”已经过时了。Allegro里的动态铜箔不是一画出来就把铜箔图形和连接关系完整算好的它更像一个“待重算的草稿”。只要周边走线、过孔、器件位置、规则或网络属性发生了变化这个草稿就和当前数据库不一致于是被标记为out of date等着你去更新。说白了一个问题是“不知道这块铜归谁”另一个问题是“知道归谁但图形还没按最新数据重算”。这是两个完全不同层面的问题解决办法当然也不一样。1.2 Unassigned Shapes是怎么来的很多人以为Unassigned Shapes只会出现在从其他EDA工具导入的文件里其实不对Allegro自己画图的过程中也很容易造出来。我总结了几类高频来源手工画shape时没有指定网络。比如你在某个内层放了一块铺铜区画完直接点Done但没有在Options面板里选中某个网络这块铜就成了“黑户”。从DXF或其它格式导入图形后图形被转换成了shape但没有网络属性。用“Z-Copy”创建了一些铜箔边界但生成时没有选网络只复制了外形。在Module复用、复制粘贴、移动某一部分电路时个别shape脱离了原本的铜箔体系变成独立且没有net的碎片。部分去死铜操作后残留的小铜皮失去了原来的归属。这里有一个容易被忽略的场景很多人会把某个区域的shape删掉后重新画但如果只是删除了其中一块铜旁边还有一小段被断开的shape碎片这块碎片很可能依旧带着网络也可能变成unassigned。两种状态处理方式完全不同。1.3 Out of Date Shapes又是怎么回事Allegro的动态铜箔在设计过程中默认处于“动态”状态你可以把动态铜箔理解成一种“按需计算”的图形它会在你移动元器件、改线宽、调整规则后重新计算边界、热焊盘连接和死铜情况。但它不是实时计算而是先标记为out of date等手动或者自动触发更新后才完成填充和避让计算。所以Out of Date Shapes并不是错误它只是告诉你“这里有动态铜箔需要重新计算”。遇到它不用恐慌但也不能无视。如果不更新就直接出光绘铜箔图形可能还是旧的边界、旧的避让结果或者缺失了部分连接关系非常容易造成板子上的网络连接和设计预期不一致。另外在Allegro里还有一种静态铜箔Static Shape。静态铜箔不会出现out of date状态因为它不会自动跟随周边变化。如果你把动态铜箔转成静态铜箔它会定格在当前状态后续修改走线、移动器件都不会让它自动更新。很多项目里为了保证最终出图不变量会在最后阶段把关键区域的动态铜箔转成静态但这对前期设计来说操作成本很高所以我个人不推荐一开始就画大量静态铜箔。1.4 两种异常的本质对比用一张表把它们的区别说清楚对比项Unassigned ShapesOut of Date Shapes核心含义铜箔没有网络归属动态铜箔需要重算状态来源手动绘制、导入、复制模块等走线/器件/规则变化后未更新常见表现Status中数量固定或反复出现运行Update后数字减少又变多典型处理分配网络 Assign Net执行Update to Smooth/Rough是否影响DRC会可能造成未连接或短路风险会影响连接关系和光绘结果是否影响光绘会未分配网络铜箔可能导致意外铜皮会旧图形可能与实际连接不一致看到这里你对这两个问题应该有一个基本定位了Unassigned要“认领”Out of Date要“刷新”。2. 先从机制上理解覆铜的“状态机”2.1 动态铜箔与静态铜箔的选择在谈操作之前我想先把Allegro里覆铜的底层层逻辑讲一下因为很多人在操作时栽跟头就是没搞懂动态和静态的区别。动态铜箔Dynamic Shape是Allegro默认推荐的设计方式。它的好处在于自动化程度高当你推挤走线、移动过孔、改变间距规则时铜箔会自动“避让”新的元素。但这种自动避让并不是实时完成Allegro为了性能考虑会用一种“边界框加规则”的方式把你最后一次的编辑结果记录下来等到你主动触发更新时它才真正重新计算填充。静态铜箔Static Shape则相反。你画的时候是什么样它就保持什么样。它不会避让新加进来的走线也不会因为你改了间距规则而变化。你可以手动编辑它的顶点、挖空区域但一切都要手动维护。静态铜箔在高压板、特殊射频板里偶尔有用但在绝大多数数字电路板设计中我建议还是默认用动态铜箔。为什么有人会遇到“Out of Date Shapes怎么更新都不消失”大部分情况下是板子里还残留了旧的动态铜箔或者某些区域被锁定了。比如你从别的版本、别的工程师那里接手一个板子对方可能用了不同版本的Allegro铜箔状态被锁定为“待更新”但由于缺少对应的Shape优先级设置更新逻辑根本没有被触发。2.2 shape优先级、网络分配与图形层的关系Allegro里的动态铜箔有一个优先级属性Shape Priority。为什么需要优先级因为同一个层上可能有多个相互重叠的铜箔当它们重叠时Allegro必须决定“谁压住谁”也就是哪个铜箔拥有这块区域。这个优先级和Unassigned Shapes并非直接相关但会影响你对“无归属铜箔”的处理。举例来说你从别的PCB工具转过来的文件里两块外形重叠的铜箔都没有分配网络即使你选中它并Assign Net如果优先级设置不当两块铜箔依然会出现你意想不到的挖空或覆盖效果。尤其在内层电源分割时这种问题特别明显。所以处理Unassigned Shapes时我习惯先打开Display - Status确认问题所在层然后用Shape - Select Shape on Layer去逐层找把无网络的铜箔单独显示出来。必要时再用Options面板把“Net”下拉菜单选好分配网络。另外铜箔的网络分配和图形所在层是两个不同维度的属性。一块铜箔在L2层被分配了GND网络这只说明它附着于GND网络和它在哪个层没有关系。很多人以为“在GND层画的铜就是GND”这话在逻辑上是对的但Allegro不是靠层名识别网络的它靠的是Net属性。所以你在任何一层画shape如果不指定net它就是unassigned哪怕它所在层叫“GND”。2.3 为什么Allegro设计成“延迟更新”很多初学者会问为什么Allegro不能像某些其他工具一样边画边计算非要搞一个out of date状态出来原因很简单性能。一块中等复杂度的PCB上可能有几十块甚至上百块铜箔每块铜箔都要和成千上万的走线、过孔做碰撞检测和避让计算。如果每次鼠标移动都实时重算整个软件会卡到没法用。所以Allegro选择了一种“先标记、后重算”的方式你在操作期间铜箔显示为一个大概的边界框或者按Rough状态显示当你放下手里的活儿主动执行Update to Smooth时它才认认真真把所有避让、热焊盘连接、死铜标记都算一遍。理解了这一点你就明白Out of Date Shapes不是一个应该害怕的报错而是一个“待办事项”。它提醒你你还有一批铜箔没有最终成型出图前一定记得更新别忘了。3. 实操彻底清除Unassigned Shapes3.1 先定位再看数量处理Unassigned Shapes的第一步不是直接去Assign Net而是定位。在Allegro中我常用的方法打开Display - Status看Unassigned Shapes这一行的数值。在Find面板中只勾选Shapes然后点击左侧的“All Off”再选“Shapes”。打开Options面板在“Net”类型中选择“(Unassigned)”或者手动查看属性为空的shape。还有一种更直接的方法用右键菜单的“Select Shape on Layer”指定到问题层后命令栏会提示你当前层上有多少块shape其中哪些没有网络。配合颜色显示你可以快速锁定它们。我个人的习惯是在处理之前先全局打开所有层单独给unassigned shape设置一种醒目的临时颜色比如亮黄色然后全板飞一圈。有时这些铜箔会藏在器件底下、板框外面甚至机械层里只用Status看数量很容易看漏。3.2 给孤立的铜箔分配网络Assign Net当你找到一块未分配网络的铜箔操作其实很简单执行菜单Shape - Assign Net或者直接选中shape后右键选择Assign Net。在弹出的对话框中从网络列表里选择它应该归属的网络比如GND。点击OK命令栏会提示分配成功。这里要特别提醒如果这块铜箔是作为电源平面或者地平面的一部分请确认它和旁边的同网络铜箔是否有重叠。如果两块铜箔同网络且重叠Allegro是可以把它们合并的但如果你只是简单Assign Net没有做后续MergeDRC里还是可能出现重叠铜箔造成的间距报错。3.3 善用Shape Select与Bulk操作如果你这个板子是从第三方工具转过来的Unassigned Shapes的数量可能不是一两块而是几十块。这时候一块块去Assign Net效率太低了。推荐流程执行Shape - Select Shape on Layer在Options面板里选择目标层。通过Find面板的“Shapes”、并勾选“Unassigned”筛选条件把该层上所有未分配网络的铜箔全选。使用Shape - Assign Net统一分配到一个网络下。需要注意的是批量Assign Net时要确保你选中的所有铜箔确实应该属于同一个网络。如果你硬把不同区块的铜箔统一分配到一个网络上后面DRC会有一堆连接问题。批量操作之前最好先用颜色区分每一块独立铜箔再逐一确认归属。3.4 合并同网络的碎片铜箔Merge Shapes在实际项目中Unassigned Shapes和碎片化铜箔经常一起出现。尤其是从其他工具导入或者在你反复删改铜箔边界之后会出现同一网络的铜箔被切成了很多小块。它们可能都被正确分配了网络但DRC里仍然会有“同一网络铜箔间距”的报错因为Allegro把每一块独立铜箔都当成独立图形铜箔之间的间距规则依然生效。这时就要用到Shape - Merge Shapes。操作方法是选择需要合并的铜箔按住Ctrl键逐个选中。执行Shape - Merge Shapes。在弹出的对话框中指定合并后保留哪个网络的属性通常选择“Merge to first shape”或者按需指定。合并完以后原来分离的铜箔会变成一个整体铜箔之间的间距规则不再产生影响DRC也会干净很多。3.5 无法确定网络的Unassigned Shape怎么办有些铜箔你确实不知道它应该属于哪个网络。这种情况多半发生在以下场景你从别的工程师手里接了一个半成品板对方在某个内层画了一些实验性质的铜箔但没写文档或者从某个机械结构软件导入的DXF里带了一些填充区域这些区域本来是作为螺丝孔加强圈或者屏蔽罩的安装区域并不是电气网络。我的建议是如果它在电气层上且周围有明确的地孔或电源过孔优先考虑分配到GND网络。如果它在非电气层比如机械层、装配层你可以直接把它删除或移动到Outlined层不让它进入电气DRC范围。如果不确定它是否会影响电气性能建议先把它改为静态铜箔再删除或者隔离到板框外并做一次Database Check确认连接性。切忌“看着像GND就乱分配”。一块无网络的铜皮如果被错误分配到了某个敏感的模拟电源网络上轻则DRC报错重则影响板子实际工作性能。3.6 注意的坑不要用Delete硬删容易漏掉弱连接我在初学Allegro时踩过一个坑看到板上有一块不需要的铜箔直接选中Delete然后心里觉得干净了。结果发现下方还藏着一小块停靠在底层走线上的小铜皮因为只选中了上层大铜皮没注意到底层还有一块被压住的碎片。最终光绘里多了一小块不该出现的铜板上还差点短路。所以删除铜箔前一定要把视图切成3D或者把层透明度调低确认当期铜箔的完整边界。或者用Shape - Select Shape on Layer把目标层全部选中再看命令栏里提示的数量和你预期是否一致。4. 实操强制更新Out of Date Shapes4.1 更新入口在哪在Allegro中更新动态铜箔的入口有多个菜单栏Shape - Update to Smooth将铜箔按完整避让计算更新为平滑填充状态。菜单栏Shape - Update to Rough只按粗略边界更新填充为粗糙显示状态。右键菜单选中任意动态铜箔后右键可以直接调出Update to Smooth或Update to Rough。一般来说我们日常更新的目标是Smooth状态。Rough状态只是临时显示用方便你在操作阶段快速浏览布局不会用于最终光绘。4.2 Update to Smooth、Update to Rough区别很多人不理解为什么一个Smooth一个Rough到底用哪个简单解释Rough用较快的算法把铜箔边界显示成带有锯齿的轮廓但不做热焊盘和完整避让的精细计算。它适合在设计过程中临时看效果速度快但不适合出图。Smooth会把铜箔的所有避让边界、热焊盘连接、隔离间距、热释放都精细计算出来。它生成的结果是最终光绘中看到的铜箔形态。实际项目里我通常建议“布局布线过程中用Rough发板前用Smooth”。如果板子规模很大为了避免卡顿也可以把动态铜箔的全局更新关掉只在检查时执行Smooth更新。4.3 为什么有时点了Update还是没反应这个问题很经典。很多人执行Update to Smooth后Status里的Out of Date Shapes数量纹丝不动。常见原因有三个第一动态铜箔被设置成了“Manual Update”模式。在Allegro的User Preferences中有一个和Shape update相关的选项部分版本默认不自动更新。如果你改过配置需要在Preferences里把自动更新选项打开否则每次都要手动触发。第二铜箔所在的层被“屏蔽”了。如果你把某一层设置为No Etch或者该类铜箔被排除在DRC之外Update操作可能不会对其生效。第三还有一小类情况是铜箔被锁定Locked。当动态铜箔被锁定后你无法更新还会出现“Shape is locked”之类的提示。这种问题在接手别人板子时很常见需要对目标铜箔执行Unlock后再更新。排错思路先确认是否锁住再检查User Preferences最后把显示层打开确保铜箔所在层是可见的因为如果层不可见Update时甚至会忽略它。4.4 批量刷新与局部刷新操作技巧在Allegro 17.x版本之后覆铜更新的菜单已经相对顺手了。你可以执行Shape - Update to Smooth然后在Options面板里选择“All”或“By Layer”。如果只是某几个层有动态铜箔建议按层刷新而不是全部刷新。比如内层电源层和底层地的覆铜规则可能不一样分开刷新能避免不必要的计算等待。还有一个技巧是用查找过滤器Find只选中当前视图范围内可见的shape然后局部更新。如果你设计的是高密度BGA板动不动几百块铜箔全板刷新可能要好几分钟而局部刷新能让你更精准地处理问题区域。4.5 把动态铜箔转静态再转回来的危险操作有一种操作非常容易引出问题先把动态铜箔转换成静态铜箔去手动编辑然后再转回动态。这个操作在你极度需要手工修铜箔边界的场景下确实有用但它有代价转换过程中可能丢失部分动态关联关系尤其是网络连接和避让参数容易造成不可预期的形状变化。如果在转回动态后发现Out of Date Shapes一直存在多半就是这种转换带来的残留状态。更好的做法是保留动态铜箔本身通过编辑Shape Boundary或追加Vertex来实现边界修改而不是反复在动态和静态之间横跳。5. 一套组合拳从布满报错到干净状态5.1 标准处理流程下面是我在项目中最常用的一套清理流程基本覆盖了Unassigned和Out of Date同时存在的场景。第一步数据库检查。执行File - Properties或使用Database CheckDBCheck检查整个数据库是否存在基本错误。这一步能提前发现破损的铜箔图形。第二步执行Shape - Update to Smooth先把所有动态铜箔更新到最新状态。如果有异常命令栏会提示更新失败的shape数量。第三步打开Display - Status记录Unassigned Shapes和Out of Date Shapes的数字。第四步处理Unassigned Shapes。使用Shape - Select Shape on Layer逐层检查未分配网络的铜箔完成Assign Net、Merge Shapes或删除操作。第五步再次执行Shape - Update to Smooth。因为你在上一步分配了网络某些铜箔的网络连接关系发生了变化需要重新计算边界和热焊盘。第六步打开Display - Status确认Unassigned Shapes归零Out of Date Shapes归零。第七步不要急着结束。执行Tools - DRC检查是否有新增的间距或连接报错。很多时候给一块铜箔分配网络之后会和旁边原本不相干的铜箔产生新的间距检查这部分需要特别留意。第八步处理后再次执行一次Update to Smooth把可能因为DRC修改而变dirty的铜箔重新刷新。这套流程看起来简单但每一步都有坑。我遇到过不少工程师在第一步直接跳过虽然Unassigned处理好了但板里还有其他数据库层面的错误最后出光绘时暴雷。DBCheck多花几十秒值得。5.2 罗氏线圈等特殊版图对覆铜的要求有一个场景值得单独提一下罗氏线圈这类高精度电流检测板。这种板子的线圈绕组往往要求极高的对称性和一致性对覆铜/铺铜边界特别敏感。在这种设计里Unassigned Shapes的后果可能比普通数字板严重得多。因为线圈区域的铜箔哪怕有一小块形状不规范、边界多了个齿都会影响线圈的高频特性和检测精度。所以我在做这类板子时会额外注意线圈区域尽量使用静态铜箔或者使用动态铜箔后锁定边界避免误操作导致shape边界偏移。铺铜边缘的避让间距设置一致不使用多套规则混用。每一层线圈图形的Unassigned状态必须清零因为未分配网络的铜箔可能在层间造成意外的寄生电容。5.3 配合自动化的Allegro Skill处理思路如果你经常需要处理大批量铜箔状态问题使用Allegro Skill做自动化是一个非常高效的选择。网上有不少开源的skill脚本可以做“自动寻找unassigned shape并分配网络”的操作但使用前必须搞清楚脚本逻辑。我的习惯是先写一个检查脚本扫描全板输出每个unassigned shape所在层、包围盒、顶点数量等信息。用一个简单的规则引擎把这些shape按“是否与GND过孔重合”“是否在特定区域内”分类。再执行批量Assign Net。这样做的好处是可控性强。我不建议直接拿一个“全自动全板分配”的脚本就跑因为脚本无法理解设计意图。它可能把你故意留下的机械铜箔也分配上了网络到时候查DRC更痛苦。关于Skill如果你不熟悉可以先从简单的菜单录制宏开始Allegro本身支持一定程度的操作回放。但是要做到批量定位、批量分配还是得用Skill。6. 常见问题排查与经验速查表6.1 Status里总有“Unassigned Shape”但图上找不到这是最让人抓狂的情况之一。Status明明显示有2个Unassigned Shapes但你在图上怎么翻都找不到。我的排查步骤打开所有层包括机械层、装配层、反标注层等非电气层用全透明显示模式看。使用Find - Shapes在菜单Commands中执行“Select All”看命令栏提示选中了几块shape。如果你选中后看不到任何高亮说明它们可能在板框外非常远的地方。执行Zoom Fit然后按“F5”刷新有时候会发现一个极小铜箔毛刺留在板外几十毫米处。还有一种可能是shape被放在了“Undefined”层或“Board Geometry”层。虽然这些层通常不参与电气连接但Status依然会统计。这个问题我遇到过好几次最后都是靠“全选shape并执行Move”来定位把所有shape移到板内某个固定位置就看到那些看不见的铜箔冒出来了。6.2 “Out of Date Shapes”数量越更新越多正常情况下更新一次Smooth数量应该归零。如果越更新越多说明你的设计里存在“动态铜箔不断被修改”的因素。最常见的元凶是某些规则比如spacing规则在更新过程中被触发而触发之后铜箔又反过来影响了走线或器件的位置导致它们再次触发更新。这种循环常见于有自动调线或自动居中功能的高级约束里。排查步骤关闭所有自动布线相关功能。把所有动态铜箔按层单独更新观察是哪一层在反复变脏。检查该层是否有大量被锁定的碎片铜箔或者是否和另一块动态铜箔存在重叠关系。如果实在找不到原因可以把该层铜箔先转为静态铜箔出图前再评估是否能接受。6.3 Shape只有轮廓没有填充这个问题也经常和Out of Date挂在一起。你在屏幕上看到铜箔只有一圈紫色边框里面空空如也。大概率是因为当前铜箔处于Rough或Out of Date状态显示模式没有触发完整填充。解决办法执行Shape - Update to Smooth。检查Display - Color/Visibility里对应铜箔层的填充颜色是否被关闭。如果Update to Smooth之后还是没有填充就要考虑是不是该铜箔被设为了Static Shape但它内部又没有任何有效图形。这时候用它右键的Edit Properties看一下必要时删除重画。6.4 热焊盘/花焊盘连接异常很多人更新完动态铜箔后发现某个器件的GND焊盘没有热焊盘连接或者连接方式不对。这个问题的根源往往是该焊盘的Pin属性和铜箔的Thermal Relief设置不匹配。比如某个Pin被设置成Isolate那么即使铜箔已经通过Smooth计算它也会被完全隔离。或者铜箔的Connect风格被设置成“None”导致焊盘没有连接。处理方式打开Setup - Constraints - Physical检查默认的Copper连接方式。检查Pin属性确认它没有设置Isolate或Thermal Relief override。重新Update to Smooth让修改生效。6.5 从其他EDA导入后的铜箔问题这个场景值得单列因为很多Unassigned Shapes都是从PADS、Altium或者其他工具转过来后留下的遗产。从别的工具转Allegro时铜箔常被转化为静态铜箔有时还保留着原工具的网络属性有时则完全丢失。再加上优先级、层名称映射的差异你会在转过来的板子里看到一堆unassigned和out of date混合出现的奇怪现象。我的建议是转换后不要直接开始布线先花半小时做一次覆铜清理。用Shape - Convert to Dynamic把静态铜箔批量转成动态铜箔然后重新分配网络。检查所有层的net属性把电源和地网络逐一对应上。执行一次全板Update to Smooth再跑DRC。6.6 数据库修复DBDoctor最后一个救急手段是Allegro自带的数据库修复工具DBDoctor。当板子里的铜箔状态非常混乱怎么更新都报错时先关掉设计文件用DBDoctor跑一遍数据库检查。DBDoctor的具体操作路径在不同版本里略不一样一般位于安装目录下可以通过Start Menu快捷方式进入。跑完DBDoctor后再重新打开板子很多顽固的Out of Date和Unassigned问题会自然消失因为数据库本身已经修复了。但这里要说句实在话DBDoctor不是万能药。如果是设计逻辑层面的问题比如规则冲突、铜箔优先级设置错误DBDoctor是查不出来的。它更擅长处理文件损坏、图形数据不一致这类底层问题。所以不要依赖它而是要从设计源头上规范操作习惯。我在实际项目里一般把Unassigned Shapes和Out of Date Shapes的检查固定在出光绘前的标准动作里。先跑一次全板更新再查unassigned处理完再更新一次然后跑DRC。这个过程看着麻烦但一旦变成习惯你会发现后期改板子的时间反而少了。最后再分享一个小技巧在设计中途我会定期按层执行“Update to Rough 局部查看”而不是等全部布完线才做一次大更新。这样随时能发现铜箔异常避免把它们留到最后集中爆发。希望这篇内容能帮你减少一点和Status窗口“战斗”的时间。