1. Shape调整这件事,为什么值得单独写一篇
先聊个实际感受。很多人在 Allegro 里铺铜、改铜、裁铜,都是“点到哪改到哪”,今天用 Edit Boundary 拉一个角,明天用 Delete 删一块重新铺,循环往复,一个板子改到最后,铜皮上全是补丁和碎块。真正遇到网络要换层、电源分割要重新规划、板框一改整片铜皮报废这些情况时,才发现自己对 Shape 的操作其实是一团乱麻。
这个标题里的关键词,除了 Allegro 本身,最核心的就是Shape和裁剪。Shape 在 Allegro 中泛指所有闭合的二维区域对象,最常见的形态就是铜皮(Copper),但也包括禁布区、Route Keepin、Assembly 外框等。裁剪则是日常改板时频率极高的一类操作:板框缩小了,铜皮要切掉一圈;两个电源域打架了,要把重叠的 Shape 切出一条隔离带;甚至从其他文件借用一块铜皮,也要先裁成想要的外形再贴进来。
这篇文章既适合刚接触 Allegro 的初学者,也适合已经画了几年板子但始终靠“笨办法”处理铜皮的工程师。我不会只罗列菜单路径,而是把“为什么要这样改”“改完会带来哪些连锁反应”讲清楚,再附上我实际画板子时反复踩过的坑和对应的处理方法。
需要先说明一个前提:这篇文章的菜单和命令基于 Cadence Allegro 17.2/17.4 版本界面来写,16.x 和较新的 22.x 界面会有差异,但核心命令和操作逻辑基本一致。文中涉及的命令名尽量保留英文原版,方便你对照自己的菜单或者查找快捷键。
2. Shape基础修改全流程
2.1 先搞明白 Shape 的三种状态和编辑入口
Allegro 和不少 EDA 工具不一样,它把“铺铜”这件事做得非常工程化。你在其他软件里铺铜,可能是画一个矩形再填充;在 Allegro 里,你要先理解三种状态。
Static Shape(静态 Shape):外形和连接关系完全固定,改动需要手动删除重画或者用命令编辑,操作简单直观,但每次修改都要重新处理避让。早年很多人习惯全板用静态铜皮,改版时体力活很重。
Dynamic Shape(动态 Shape):外形是边界,内部金属区域会根据你放置的走线、过孔、器件实时自动避让,改一条走线,铜皮自动重新收敛。这是现代 PCB 设计最常用的形态。我接手的几乎所有新项目,通常都会把主铺铜设为动态。
Unfilled Shape(未填充 Shape):只有边界没有实心铜的区域,通常用于临时规划、出铜皮轮廓图,或者配合其他工具做处理。我经常用它画禁布区草稿,确认位置后再转成正式 Shape。
这三种状态的切换入口在菜单Shape > Convert to Static / Convert to Dynamic。有时候你从别人的文件里拿到一块铜皮,选中后发现它是静态的,想让它跟着走线避让,就通过这个命令转成动态。反过来,如果动态铜皮在某个区域内频繁避让导致外形难看,你可以把那一小块转成静态,手动修边界,避免整板铜皮反复收敛拖慢电脑。
编辑 Shape 的统一入口是Shape > Edit Boundary,命令面板底部会在 Options 里显示当前 Shape 的 Net、层、以及是新建还是编辑状态。多数人不知道的是,Edit Boundary 不仅能改铜皮外形,还能顺便改网络、层、甚至“挖空”区域,所以这是所有 Shape 操作里最值得精通的一个命令。
2.2 修改边界:你正在改的到底是“线”还是“区域”
用 Edit Boundary 拉边界时,很多人会当成画线来处理,其实这个命令的逻辑是“重新定义闭合区域的轮廓”。你点击的第一个点、后续每个点、最后闭合的点,共同决定一个完全新的边界,旧边界直接被替换掉。所以如果你只想动一个角,别重新框一整圈,那样很容易画出和原轮廓相差十万八千里的形状。
实际操作中,正确的“局部修改”思路是:先用Shape > Edit Boundary进入编辑模式,然后利用右键菜单里的Vertex(顶点)功能,选中你要移动的那个角点,直接拖动;或者用右键的Replace Edge把某一小段边界替换成弧线或新折线。这两个选项比整圈重画省事得多,而且保留原有的避让规则设置。
如果只是想把一个矩形铜皮的某个边往里缩 5mil,我的做法是:进入 Edit Boundary 后,右键选择 Cut (与后面的裁剪相关,这里顺手一提),或者干脆用Setup > Application Mode > Shape Edit模式,它会自动打开抓点辅助,配合精确坐标输入,很容易把边线拉到指定位置。注意,抓点模式里要把Snap to Vertex和Snap to Grid同时打开,否则你看着是对齐了,实际有很小的缝隙,铺出来铜皮边缘会有毛刺。
2.3 修改属性:网络、层、动静态一次搞定
很多时候改 Shape 不是为了外形,而是因为它归属错了。比如一块电源铜皮,本来在 3.3V 网络,后来电源方案调整要改成 1.8V。最笨的方法是删掉重铺,但更简单的做法是选中铜皮后在Options面板里直接把 Net 改成新的网络,或者用菜单Edit > Properties,在对话框里把 net 属性替换掉。改完之后,动态铜皮会自动按新网络的规则重新避让,这个特性是静态铜皮做不到的,所以再次提醒优先用动态。
换层操作也类似,选中 Shape 后按 Ctrl + E 或者右键Move to Layer,铜皮会整体平移到目标层,原来层的避让和连接关系全部解除。这里有个容易混淆的地方:如果目标层已经有铜皮,系统会弹出提示,问你是“合并”还是“替换”,默认是替换,操作前千万看清楚,别把另一块铜皮弄丢了。
还有人,尤其是刚接触 Allegro 转过来的用户,会遇到“铜皮只有轮廓没有填充”的问题。这个不一定是你操作错误,更常见的是视图设置问题。在Display > Color/Visibility里,把对应层的Pins、Vias、Etch图标点亮,再看Display > Status里的Shape Fill是否有“No_Fill”标记。如果标记为 No_Fill,右键选择Shape Fill > Fill,或者执行Shape > Fill Auto,铜皮就会重新填充。这个问题会在后面的常见问题章节展开讲。
3. 进阶裁剪技法与实现思路
3.1 用 Edit Boundary 与右键菜单完成“切割”“挖槽”和“合并”
现在进入正题:裁剪。我先说一个通用原则,裁剪并不是“切掉一块铜皮的边角”这个动作本身,而是“为铜皮定义一个新的外边界或内部禁布区”。理解了这一点,很多命令就可以灵活组合了。
场景一:切掉矩形铜皮的一个角
进入Shape > Edit Boundary,点选铜皮,右键菜单选Replace Edge,然后沿着需要保留的边界重新画一遍,最后闭合。画的时候要注意方向:如果逆时针画,新边界内部会被保留;顺时针画,则可能导致区域交换。我吃过这个亏,当时切出来的铜皮反而把要保留的区域裁掉了,原理其实是 Allegro 的边界方向逻辑。所以我的建议是:画完边界后,先看 Options 面板里的预览图,再按右键 Done,不要急着落定。
场景二:在铜皮内部挖出禁布区
这个需求很常见,比如天线底下要禁铜,或者螺丝孔周围要留出安装间隙。可以用Shape > Manual Void > Polygon,直接在铜皮内部画一个闭合区域,Allegro 会把它当作 void(挖空)处理。Manual Void 的另一个好处是:挖空区域与外部边界互不干扰,后续你调整外边界,void 不会跟着消失。
如果你想挖出一个圆孔,用Shape > Manual Void > Circle/Ellipse更快。选中后在 Options 里输入圆心坐标和直径即可。注意,void 区域不能完全切断铜皮成两半,如果挖出一个“葫芦形”导致边缘极窄,Allegro 会报警告,因为孤立铜皮(island)会被自动删除或变形。
场景三:两块铜皮合并
合并最稳妥的方式不是直接拖拽,而是先把两块铜皮都变成动态,然后在Shape > Shape Operations > Merge Shapes中选择两块,系统会把它们融合成一个新的 Shape。合并的时候,两块铜皮必须是同一网络,否则命令会直接报错。如果只是外形上重叠但网络不同,你别想着合并,应该做的是调整间距,或者把重叠区域用 void 挖掉。
3.2 用 Z-Copy 实现“边界复制”与“隔离带生成”
Z-Copy 是裁剪场景里被严重低估的命令。它的名字叫“复制”,实际作用是:把某个 Shape 的边界复制到当前层或指定层,成为一个新的 Shape、Line 或 Void。用它可以实现几个特别实用的效果。
比如,我要在电源铜皮周围生成一圈隔离带。常规做法是画一个比原铜皮大 20mil 的禁布区,再做一个内缩 20mil 的铜皮,这种“双边界”操作如果用画线命令一条条画,效率非常低。用Edit > Z-Copy,选原铜皮作为源,Options 里设置Expand/Shrink值为 20,Copy to layer 选择禁布层,就能一次生成外扩 20mil 的 Route Keepout。反过来,再选原铜皮,设置值为 0,生成内边界线,作为新的铜皮边界参考。
Z-Copy 还有一个妙用:当你从 DXF 或者机械结构图里拿到一条封闭的边界线,想用它来生成铜皮,可以先选这条线,用 Z-Copy 把它复制到布线层并转换成 Shape。这个操作在处理异形板框、不规则禁布区时特别实用,省去了手动描边的痛苦。
3.3 用“画辅助 Shape”的方式间接裁剪
有些场合,铜皮外形太复杂,直接编辑或者挖 Void 都不方便,我会用一个“间接裁剪”的思路。举个例子:左边是地铜皮,右边是 3.3V 铜皮,中间需要有一条 30mil 宽的隔离带。我可以先在隔离带位置画一个很窄的 Shape(比如用 Add Shape 画矩形),然后利用Shape > Shape Operations > Boolean(如果版本支持)或者下面的方法:
- 把隔离带的 Shape 设为禁布层对象(或设置成另一网络);
- 用Shape > Edit Boundary选中地铜皮,右键用 Cut,沿着隔离带边缘把地铜皮切掉一部分;
- 对 3.3V 铜皮做同样的处理。
这个方法的核心是“用辅助 Shape 来定义切割路径”。实际项目里,我会先建一层临时层(例如 Board Geometry/cutline 或一个自定义层),把所有需要切割的路径先用 Line 画好,出图前隐藏该层。这样后期调整隔离带宽度时,不必重画铜皮,只需要移动辅助 Line,然后重新切割即可。
如果版本较老不支持图形化的 Boolean 操作,那就用Shape > Edit Boundary + Replace Edge把切割边一条条描出来,虽然慢,但可控性更高,复杂板上我反而喜欢这种“手描”方式,因为可以逐条检查。
3.4 裁剪之后,别忘了重新运行避让和检查
裁剪铜皮从来不是“切一刀就完事”。裁剪之后,动态铜皮通常会自动更新,但如果你用的是静态铜皮或者手动 void 太多,可能不会自动收敛,这时候需要执行Shape > Fill Auto或Shape > Select Shape on Layer > Fill,手动触发一遍填充。
另外,裁完铜皮后一定要跑一遍Manufacture > Design Rule Check,重点看Shape/Symbol间距和Line to Shape间距。铜皮边界的微小毛刺或角度过尖,DRC 不一定报错,但生产时容易造成蚀刻不净或阻抗突变。我习惯在裁剪完成后,用Shape > Decompose Shape把 shape 转为走线看一下边界形状,再把边界线 Delete 掉,等价于做一次边界检查。
4. Shape 常见问题大合集与排查技巧
4.1 铜皮只有轮廓、没有填充
这个问题几乎每周都有人问。原因通常有三个:
第一,视图模式问题。在 Allegro 中,铜皮有“边界显示”和“填充显示”两种模式。按Display > Status,看 Shape Fill 项是不是 “No Fill”。如果是,选中铜皮右键Shape Fill > Fill,或者执行菜单Shape > Fill Auto全板填充一次。
第二,动态 Shape 设置了 Disable Fill。选中铜皮,右键Parameters,在 Shape Fill 标签页里把Fill改为Solid Fill,不要选 None 或 Hatched。有时候别人拿来的板子,为了运行流畅,会把动态铜皮的平滑度等级设成 Disabled,看起来就是只有边框。你可以用Shape > Global Dynamic Shape Parameters里的Shape Fill > Fill设为Rough或Smooth,并勾选Filled视图。
第三,没有执行填充操作。静态铜皮有时在编辑后不会自动填充,需要手动选中后右键Fill。如果是整板所有 copper 都只有轮廓,多半是全局参数问题,重新填充即可。
这个问题的排查顺序我一直是:先看 Display Status,再看 Global Dynamic Shape Parameters,最后才怀疑文件损坏。按这个顺序排查,99% 都能解决。
4.2 动态 Shape 避让不自动更新
有时候你移动了一条走线,期望铜皮自动缩开,但它纹丝不动,或者避让后留下难看的“海鸥翅膀”。这种情况首先看是不是把铜皮转成了静态。其次看Shape > Global Dynamic Shape Parameters > Void Controls,确认Artwork Format不是 “Gerber RS274X“ 之外的老格式,老格式在动态避让时容易有问题;确认Minimum aperture for artwork fill不要设太大,否则细缝避让不出来。
“海鸥翅膀”其实是避让角太尖锐,通常发生在走线斜着进铜皮时。可以在参数里把Smooth等级调到Smooth而不是 Rough,或者对局部铜皮执行Shape > Smooth Shape手动平滑。前阵子处理一个电源板,过孔密集区域整片铜皮全是锯齿,我直接把动态铜皮的平滑等级改成 Smooth,再把过孔避让形状从八角形改成圆形,板面立刻干净很多。
4.3 裁剪后出现孤岛、碎铜与尖角
裁剪不彻底,很容易留下近圆形碎铜或者一条细长的“铜尾巴”,这些在生产中不是电气问题,就是蚀刻问题。Allegro 提供了两个命令:Shape > Delete Islands可以删掉孤岛;Shape > Check可以检查出边界自交、尖角、细缝等问题。
我的经验是,Delete Islands 之前先确认哪些孤岛是真正无用的。有时候小块铜皮是作为缝合地孔连接用的,删掉反而破坏回流路径。你可以在Shape > Global Dynamic Shape Parameters > Void Controls里设置Island detection最小面积阈值,比如小于 10平方mil 的孤岛自动删除,大于阈值的保留。这样既不会漏掉关键缝合区,也不会让碎铜污染板面。
碰到细长尖角,我常用两个办法:一是Shape > Edit Boundary点什么手动删掉那个尖角顶点;二是直接用 Z-Copy 画一个小的矩形覆盖尖角,然后 Merge 出去,再用切割命令恢复平直边。听起来绕,但实际熟练后二十秒一个。
4.4 换板框之后,铜皮和外框不匹配
改板框是许多项目的家常便饭,但很多人只改了板框,忘了铜皮、Route Keepin 和禁布区也要跟着变。板框图一导入,旧铜皮直接悬在板外或者离板边距离不够,DRC 满屏报错。
此时建议按这个顺序处理:先重画 Route Keepin 和 Route Keepout,再用 Z-Copy 从新的板框边界生成铜皮草稿,最后一步才裁剪内部特殊区域。不要试图去把旧铜皮一点一点拉回新板框,那样既慢又容易留缝隙。我就是用 Z-Copy 直接以新板框为源,复制到布线层,然后用 Merge Shapes 把新旧铜皮合并,再用布尔或者手动编辑把不需要的部分切掉。
4.5 常见命令报错与修复建议
Allegro 里几个和 Shape 相关的报错,先列个速查表给你:
| 现象 | 常见原因 | 处理方法 |
|---|---|---|
| Warning: Shape with no net | 铜皮网络没赋好 | 选中铜皮,Options 里重新指定 Net |
| Error: Shape self-intersect | 编辑边界时画出相交线 | 进入 Edit Boundary,右键 Replace Edge 重画冲突段 |
| Fill failed | 动态 Shape 参数里灌铜最小孔径过大 | 调小 Global Dynamic Shape Parameters 中 Artwork Fill 参数 |
| Void shape too small | Manual Void 挖空尺寸过小 | 删除该 void,改用 Shape > Delete Islands 或重新挖大 |
| DRC: Line to Shape violation | 裁剪后边界与走线间距不足 | 移动走线,或对铜皮执行 Smooth Shape 调整边界 |
这些报错基本都能通过撤销、重进编辑命令、检查参数三步解决。最怕的是报错后不读英文提示直接硬点,越点越乱。我第一次用 Edit Boundary 画出自交形状时,也是一脸蒙,后来养成了“报错就右键 Oops,重新进命令”的习惯,比任何技巧都管用。
5. 效率提升建议:快捷键、自定义层与常用 Skill 配合
5.1 为 Shape 操作设置专用快捷键
Allegro 的 Shape 编辑命令分布在菜单里,频繁切换鼠标点菜单很影响效率。我建议把高频命令映射到键盘上。在env文件(位置通常在用户目录下的pcbenv文件夹)里,可以添加类似语法:
alias SED shape edit boundary alias SMOOTH shape smooth shape alias SF shape fill auto alias ZC edit z-copy我这里只是示例,实际命令名以你安装版本的帮助文档为准。设好之后,不用记菜单,按几下键盘就能完成 80% 的 Shape 编辑。我更推荐的做法是:把 Z-Copy、Edit Boundary、Smooth Shape、Delete Islands 这四个动作固化成习惯,遇到任何铜皮问题都先想这四个动作,再想菜单。
5.2 用图层管理辅助 Shap 裁剪
裁剪异形铜皮或做射频模块时,我会专门设置几个辅助层,比如Board Geometry/CUT_TEMP或者自定义层TEMP_SHAPE,把这些层的颜色调成亮色,用来画辅助切割线。画完后,用 Edit Boundary 和组抓点把铜皮边界吸附到辅助线上。
这个做法有两个好处:一是辅助线可以精确画在任意坐标,不用受限于铜皮现有顶点;二是在出 Gerber 之前,只要隐藏辅助层,生产文件里就不会留下任何标记。如果你还在用“画一个临时 Shape 压上去再 Delete”的老办法,强烈建议改成辅助层方案,灵活度完全不一样。
5.3 Skill 脚本在批量 Shape 处理中的价值
Allegro 的 Skill 脚本生态很成熟。举个场景:一块 12 层板,有 8 层都有整片地铜皮,板框要整体外扩 30mil,并且所有层铜皮同步外扩。手动处理 8 层很痛苦,但用 Skill 可以在几秒内批量执行 Z-Copy 并改边界。
我一般在工程里放几个自用 Skill,比如批量把选中 Shape 转成动态、批量设置 void、批量将某层所有 Shape 的平滑等级调成 Smooth。写 Skill 的门槛并不高,如果不会写,也可以在 Allegro 中文社区或 GitHub 上找到现成脚本。用的时候注意:脚本会直接改数据库,跑之前一定要保存一份.brd备份,特别是批量编辑 Shape 的脚本,一旦边界处理逻辑有误,可能毁掉整板铜皮布局。
5.4 和周边高频操作配套使用:板框、封装、Gerber 输出
改 Shape 不可能孤立于整个流程。很多人改完铜皮后,还要配合替换封装、输出 Gerber,这些操作之间彼此有影响。
- 替换封装之后:旧封装的禁布区可能被新封装覆盖,动态铜皮会自动避让新封装外形,但如果有手动 void 压在旧封装位置,需要重新删除并调整避让。
- 出 Gerber 之前:一定确认所有 Shape 为填充状态,且动态避让已收敛完毕。我一般会在出片前跑一次 Fill Auto,再开一遍所有层看有没有 No_Fill 标记。
- 为外发 CAM 准备文件时:如果对方只能接收 PADS 格式,而你在 Allegro 里已经完成了所有 Shape 裁剪,转换后最常出问题的就是动态铜皮被转成静态后边缘变化。处理办法是先跑 Smooth Shape,再转静态,最后导出。
这些后续环节看着和 Shape 裁剪无关,但实际出问题的概率非常高。我遇到过一个案子,板子改完一切正常,Gerber 出来发现铜皮边缘有一圈细碎毛刺,排查半天发现是动态避让参数里 Smooth 等级设得不够高,出片前没有执行 Smooth,加工厂差点因为“Hole 太近”退单。
6. 关于 Shape 调整,我最后想说的几个习惯
文章写到这儿,该聊的基本都聊完了。最后分享一点我在实际项目中的体会。
Shape 调整这个技能,真正拉开工程师差距的不是会多少个命令,而是对“边界”“避让”“填充”这三个概念的理解深度。命令只是工具,边界是你要实现的物理空间,避让是电气安全的空间分配,填充是最终在制造端被认可的实际铜体。每改一次 Shape,你都要想清楚这三者的关系。
我见过不少工程师遇到铜皮问题,第一反应是删掉重新铺。新铺的铜皮干净是干净,但原来精心设置的 void、避让规则、光滑边界全部丢失。所以我的习惯是:能 Edit Boundary 解决就不删,能用 Z-Copy 复制边界就不重新画,能用 Smooth 解决毛刺就不手动拉顶点。这几个原则看着简单,坚持下去,你改板的速度和板子的质量都会上一个台阶。
另外,如果你在做多层板的大面积电源分割,建一个独立的“Shape 检查清单”很有用:每层网络对不对、边界有没有超框、隔离带宽度够不够、孤岛有没有清理、动态铜皮有没有全部填充。把这个清单固定在每次改板流程里,能帮你省掉至少一次返工。
Shape 调整从来不是一劳永逸的事,但掌握好这些基础套路和裁剪技巧,至少能让这个问题从“麻烦”变成“常规操作”。后续我还会整理一些关于动态铜皮参数细化、射频区域的 void 策略、以及和电源完整性相关的铜皮处理技巧,到时候再继续聊。