
1. 为什么 Allegro 的层叠管理让人一头雾水我刚接触 Cadence Allegro 的时候最懵的不是布线不是建封装而是打开 Cross Section 对话框后那一排排的英文术语。什么 TOP、BOTTOM、SOLDERMASK_TOP、PASTEMASK_TOP、SILKSCREEN_TOP……名字长得差不多功能却完全不一样。更让人崩溃的是当你开始建封装时又冒出一堆叫 PACKAGE GEOMETRY、ETCH、PLACE_BOUND_TOP 的东西。很多人学 Allegro 学到一半放弃就是卡在这里——不是不会操作而是搞不懂这些层级关系到底是什么逻辑。如果用一句话说清楚Allegro 里所有对象都归属于某个 Class大类Class 下面再细分 Subclass子类。这个结构有点像你的电脑文件系统——Class 是文件夹Subclass 是子文件夹而具体的数据焊盘、走线、文字、外形就是存在里面的文件。理解了这套逻辑你后面学 Allegro 的所有功能都会顺畅很多。无论是画封装、调层叠、出光绘还是做阻抗计算本质上都是在对不同的 Class / Subclass 做操作。反过来如果你没搞懂这个体系哪怕照着教程抄步骤也很容易在某个环节突然卡死因为你不知道为什么要选那一项。2. Class 和 Subclass 的本质一个贯穿整个 Allegro 的树形分类体系2.1 先搞懂 Class 是什么Class 是 Allegro 里最高层级的分类它定义的是对象的性质而不是对象所在的位置。什么意思呢比如ETCH所有导电的东西比如走线、铜皮。PACKAGE GEOMETRY封装上的所有几何形状信息。BOARD GEOMETRY板卡上的全局几何信息。MANUFACTURING制造用的标识和辅助信息。COMPONENT VALUE元件的数值信息。你可以把 Class 理解成这个对象是干什么的。一个丝印文字和一个走线铜皮它们虽然都在板子上但身份完全不一样所以归属于不同的 Class。2.2 Subclass 又是什么Subclass 是在 Class 下面的二级分类它描述的是这个对象位于哪一层或者对应什么工艺阶段。仍以 PACKAGE GEOMETRY 为例SILKSCREEN_TOP顶层丝印。SILKSCREEN_BOTTOM底层丝印。ASSEMBLY_TOP顶层装配层。PLACE_BOUND_TOP顶层占位区域。PASTEMASK_TOP顶层钢网层。所以当你创建一个封装时要画丝印线就应该把线画在 PACKAGE GEOMETRY 这个 Class 下的 SILKSCREEN_TOP 这个 Subclass 上。如果你画到了 ASSEMBLY_TOP 上那它在板子上显示的位置和用途就完全错了。2.3 一个类比Class 和 Subclass 就像你家的收纳系统我经常跟朋友这样解释你把家里所有东西分成几大类——衣物、厨具、书籍、电子产品。这是 Class。然后每一类再细分——衣物下面分上衣、裤子、袜子厨具下面分锅具、餐具、刀具。这是 Subclass。你要找一条袜子绝不会去锅具抽屉里翻——Allegro 的逻辑一模一样。你打开 Allegro 的 Options 面板在 Active Class and Subclass 那里选来选去其实就是在告诉系统我现在要往哪个类别的哪个子类别里放东西。你选好了画出来的线、放上去的文字、贴上去的铜皮就会自动归入那个类别。这个体系最大的好处是不同类别的数据可以叠加显示在同一块板子上互不干扰。走线、丝印、阻焊、外形、标注都叠在一起但每个数据都有自己明确的归属档案随时可以单独拎出来看也可以整体关掉。这在出光绘文件时尤其关键——你的铜箔层、丝印层、阻焊层每个光绘文件本质上就是导出某一个 Subclass 的数据。2.4 Class / Subclass 和物理层叠Cross Section的关系这里很多新手会搞混必须单独拎出来说清楚。物理层叠Cross Section管的是板子有几层铜比如四层板就是 TOP、GND、POWER、BOTTOM 四层铜箔。而 Class / Subclass 管的是每层铜箔上可以放什么性质的数据。举个例子一块四层板你有 TOP 和 BOTTOM 两层可以走线。在 Allegro 里这意味着在 ETCH 这个 Class 下至少存在 TOP 和 BOTTOM 这两个 Subclass。如果你的板子是六层ETCH 下就会出现 TOP、GND、POWER、BOTTOM 等多个 Subclass。换句话说物理层叠定义了 ETCH 这个 Class 下有哪些 Subclass 可用。你新建层叠时Allegro 会自动帮你把对应层的 ETCH Subclass 建立好不需要你手动去加。但其它 Class 下也有 TOP / BOTTOM 这样的 Subclass比如 SOLDERMASK_TOP、SILKSCREEN_TOP这些不是物理铜箔层而是工艺层的标识。它们不会出现在 Cross Section 的层叠表里但会在出光绘时对应到相应的工艺文件里。3. 两个最关键的 ClassBOARD GEOMETRY 和 PACKAGE GEOMETRY在 Allegro 的日常操作里接触最多的是两个 Class一个是板级相关的 BOARD GEOMETRY一个是封装相关的 PACKAGE GEOMETRY。很多人分不清这两者的边界我详细拆解一下。3.1 BOARD GEOMETRY板卡级别的公共画布BOARD GEOMETRY 管的是整块 PCB 板级层面的数据和具体元件无关。常用的 Subclass 有Subclass 名称用途OUTLINE板框也就是整块 PCB 的外形边界SILKSCREEN_TOP / BOTTOM板级丝印比如板名、Logo、接口标识ASSEMBLY_TOP / BOTTOM板级装配信息PLACE_BOUND_TOP / BOTTOM板级占位区域COMPONENT_VALUE元件位号和数值的板级标注举个例子你要画一块异形板框那条外形线就应该画在 BOARD GEOMETRY 下面的 OUTLINE 这个 Subclass 上。如果你误画到了别的 SubclassAllegro 识别不了板框你后续做板框切割、出外形光绘时就会出问题。3.2 PACKAGE GEOMETRY元件封装的私人档案PACKAGE GEOMETRY 管的是单个封装内部的几何数据。你在做封装时画引脚焊盘、画丝印外框、画占位区域全都是画在 PACKAGE GEOMETRY 下的不同 Subclass 上。我也整理一下常用的Subclass 名称用途SILKSCREEN_TOP / BOTTOM封装丝印外框、极性标识ASSEMBLY_TOP / BOTTOM装配外形供贴片机识别PLACE_BOUND_TOP / BOTTOM封装占位区域用于干涉检查PASTEMASK_TOP / BOTTOM钢网开口区域COURTYARD布线禁布区域老版本常用区别核心你在 PCB 版图上直接画的板框、标注属于 BOARD GEOMETRY你在封装编辑器PCB Editor 的 Package Symbol 模式里画的封装信息属于 PACKAGE GEOMETRY。两者不能混用。你在封装编辑器里画了一个丝印框它会被存进这个封装的 PACKAGE GEOMETRY / SILKSCREEN_TOP放到 PCB 板上后它依然属于这个封装自身的数据而不是板级数据。3.3 一个容易踩的坑封装放到板上后Subclass 没对应上我在实际项目里就吃过亏。某个封装建好之后我画的丝印线放在了 PACKAGE GEOMETRY / ASSEMBLY_TOP 上而板子上的丝印层显示逻辑只开启 SILKSCREEN_TOP。结果就是封装放到 PCB 上之后丝印死活不显示。查了半天才发现是 Subclass 搞错了。这还算好更坑的是如果你把占位区域画到了 SILKSCREEN_TOP 上那别人看你的丝印层会看到一团巨大的矩形框完全莫名其妙。所以做封装前建议先在纸上列清楚哪些线要放哪个 Subclass。养成习惯后面能省大量返工时间。4. 光绘文件生成时Class / Subclass 是如何被使用的4.1 一个光绘文件 一个 Subclass 的数据如果你之前用别的 EDA 软件比如 Altium Designer它把层和对象类型揉在同一个面板里你在机械层画板框、丝印层画标注概念上是直觉式的。但 Allegro 的逻辑不太一样画板框要先选 Class 为 BOARD GEOMETRY再选 Subclass 为 OUTLINE。为什么因为在出光绘文件时你配置的每一个光绘层实际都是在指定某一个 Class 的某一个 Subclass。比如常见的顶层丝印光绘层它的配置是光绘层名称SILKSCREEN_TOP包含的数据BOARD GEOMETRY / SILKSCREEN_TOP同时包含PACKAGE GEOMETRY / SILKSCREEN_TOP可能还包含MANUFACTURING / AUTOSILK_TOP也就是说这个光绘文件会把板级丝印、封装丝印、自动生成的丝印全部合成一张图。如果你在 PACKAGE GEOMETRY 下用的是 SILKSCREEN_BOTTOM 而不是 SILKSCREEN_TOP那顶层丝印光绘里自然就少了这个元件的信息。4.2 用 Class / Subclass 控制光绘输出的实战逻辑出光绘之前你要打开 Artwork 控制面板逐个检查每个光绘层包含了哪些 Subclass。这是很多人的噩梦——因为默认设置不一定满足你的项目需求。我的习惯是先问自己三个问题这层光绘要表达什么工艺信息这些信息分别储存在哪些 Class 的哪些 Subclass 里有哪些不需要的 Subclass 混进来了需要排除举个例子铜箔层光绘除了要包含 ETCH / TOP 和 ETCH / BOTTOM 的走线铜皮往往还要包含 PIN 和 VIA 的铜皮数据——它们不在 ETCH 这个 Class 下而是在 PIN / VIA 这两个 Class 下。而这些数据通常默认会被包含进光绘但你得知道它们的存在否则出图后铜皮缺失你根本无从排查。4.3 为什么说 Class / Subclass 体系是一劳永逸的Allegro 之所以坚持用这种分类体系是因为它的底层数据模型足够严谨。在数据库里任何一个对象都带两个标签Class 和 Subclass。这就保证了你随时可以通过 Class 过滤某个类别的所有对象。你可以通过 Subclass 快速定位某一层的数据。你的光绘配置可以精细化到只要这个 Subclass而不要那个 Subclass。用 Altium 或其他软件的人可能会觉得这种多一步的选择很繁琐但真正做复杂板卡、多层板、高速板的时候这种严格分类带来的确定性无比珍贵。你不会出现明明画了线导出 Gerber 却没有这种尴尬情况——如果出现了也一定能在几分钟内通过排查 Subclass 配置定位到原因。5. 实战操作如何在 Allegro 中查看、切换和新建 Class / Subclass5.1 查看所有 Class / Subclass 清单在 Allegro PCB Editor 中点击菜单Setup → Subclasses会弹出一个表格。这个表格列出了当前设计数据库里所有的 Class以及每个 Class 下面已经存在的 Subclass。你可以在这里看到哪些 Subclass 存在、哪些不存在。如果你想看某个对象属于哪个 Class / Subclass最简单的方式是选中它然后看左下角的 Options 面板或者 Find 面板上面会直接显示当前对象的 Class 和 Subclass 信息。5.2 切换当前绘制层绘制任何对象之前都要先确定当前的 Class 和 Subclass。在 Allegro 界面的右侧 Options 面板里有 Active Class and Subclass 两个下拉菜单。先选大类再选子类然后你的鼠标就处于准备向这个层级写入对象的状态。举个例子你想在板框层画一条线选择 Add → Line。在 Options 面板里把 Active Class 选为 BOARD GEOMETRY。把 Active Subclass 选为 OUTLINE。然后在绘图区点击画出来的线就归属到 BOARD GEOMETRY / OUTLINE 了。如果不小心选成了 BOARD GEOMETRY / SILKSCREEN_TOP那你画的线就会变成丝印线而不是板框线后面出外形图就有问题。5.3 新建 Subclass 的正确方法某些项目可能需要自定义 Subclass。比如你想加一层内部走线标注层现有的 Subclass 都无法满足需求。Allegro 是允许你自定义的。操作方式菜单 Setup → Subclasses。在弹出的对话框中找到你想添加 Subclass 的 Class比如 BOARD GEOMETRY。右键选择 Add Subclass输入一个名称比如 MY_NOTES_TOP。点击 OK 保存。注意不是所有 Class 都允许你添加 Subclass。ETCH 这种和物理层叠强绑定的 Class一般不能随意添加 Subclass因为每一层铜都要和 Cross Section 里的物理层对应。但 BOARD GEOMETRY、PACKAGE GEOMETRY、MANUFACTURING 这些辅助性 Class 是可以自由扩展的。5.4 在封装编辑器里如何操作 Class / Subclass封装编辑器和 PCB 编辑器的操作逻辑是一样的只是初始打开的 Class / Subclass 集合略有不同。在 Package Symbol 模式下你默认看到的是 PACKAGE GEOMETRY 下的各 Subclass、PIN、ETCH 等。画封装丝印时一定要先确保当前是 PACKAGE GEOMETRY / SILKSCREEN_TOP再开始画。我见过最典型的新手错误在封装编辑器里画引脚焊盘时把焊盘画在了 ETCH / TOP 上而没有使用 Padstack 工具来调用焊盘。这样虽然在视觉上看到了一个铜皮形状但它在电气上完全无效——这个焊盘既不能连接走线也不能参与 DRC 检查。6. 高频坑点我把多年来踩过的相关坑都列在这里6.1 坑一在 PCB 编辑器里直接画铜皮但忘记选对 ETCH Subclass多层板上画铺铜时Options 面板里 Active Subclass 如果停留在 TOP你画的铜皮就会铺在顶层。如果你是想铺底层但你忘了切换那么你实际铺了一块顶层铜皮出来。视觉上你没察觉因为板子是透明的铜皮可以从顶层透到底层方向看到等你出光绘时才发现底层少了一块铜。我的做法每次铺铜前习惯性看一眼右下角的层颜色状态栏确认当前激活的是哪一层。同时在铺完铜后用高亮命令选中铜皮检查它的 Class / Subclass 属性。6.2 坑二板框画好后出外形光绘时什么都出不来板框画在 BOARD GEOMETRY / OUTLINE 上但是光绘配置里忘记把 BOARD GEOMETRY / OUTLINE 勾选进去或者错误地勾了别的 Subclass。结果就是加工厂拿到没有外形的 Gerber一脸茫然。我的检查步骤出光绘前打开 Artwork 表单逐个点开每一层光绘的 Include 列表拿着放大镜核对一遍。外形层重点确认是否包含了 BOARD GEOMETRY / OUTLINE阻焊层确认是否包含了 SOLDERMASK_TOP / BOTTOM助焊层确认是否包含了 PASTEMASK_TOP / BOTTOM。6.3 坑三封装里的 PLACE_BOUND 和实际器件干涉PLACE_BOUND_TOP 的作用是让 Allegro 在摆放元件时进行占位检查。如果你把占位区域画得比实际封装小很多那么两个相邻元件之间的距离检查就会失效实际生产焊接时可能顶在一起。我的建议占位区域应该基于元件本体最大尺寸再加一点安全余量来画。对于连接器这种长条形元件最好在 PLACE_BOUND 里画一个包含整个连接器主体的矩形而不要只画引脚部分的轮廓。6.4 坑四修改封装后 Class / Subclass 没对上使用别人给的封装库时经常遇到封装内部的丝印全在 ASSEMBLY_TOP 上或者 PLACE_BOUND 丢失。这类封装放到板子上后显示、装配、干涉检查全都乱套。我的处理方式拿到任何外部封装库先打开封装编辑器用 Setup → Subclasses 检查一下封装里用到了哪些 Subclass。如果发现丝印不在 SILKSCREEN_TOP 上就需要手动把图形改到正确的 Subclass 上。这个操作可以用 Allegro 的 Change 命令配合 Class / Subclass 过滤来实现虽然繁琐但必要。7. 理解 Class / Subclass 后Skill 脚本和二次开发也好学了很多人学到后面会接触 Allegro Skill也就是用脚本来自动化操作。Skill 编程的核心之一就是操作对象而操作对象的前提就是告诉 Skill 你要操作哪一类的对象。你会发现 Skill 里常见的函数调用比如 axlDBGetShapes通常需要指定所在的层而这个层正是通过 Class / Subclass 的字符串来过滤的。举个简单例子。你想写一个 Skill 脚本自动把所有在 BOARD GEOMETRY / SILKSCREEN_TOP 上的文字改成某个字体大小脚本逻辑上需要先遍历所有文字对象再判断它们的 Class 是否为 BOARD GEOMETRY、Subclass 是否为 SILKSCREEN_TOP然后才能执行修改。如果你不懂 Class / Subclass 结构连过滤条件都不知道怎么填。反过来当你把 Class / Subclass 体系理解透彻之后你去看那些网上的 Skill 代码会发现它们并不神秘——无非就是在高频地操作这些层级关系里的数据。7.1 用 Color/Visibility 面板快速验证你的理解有一个小技巧值得单独说。Allegro 的 Color/Visibility 面板快捷键通常是 CtrlF5 或者通过 Display → Color/Visibility 打开里左侧列出的就是各个 Class右侧就是每个 Class 下的 Subclass 复选框。你想看某层数据就勾上对应 Subclass不想看就取消勾选。这个面板是理解 Class / Subclass 最好的可视化工具。你可以随手打开一个已经完成的 PCB 工程逐个勾选、取消勾选不同的 Subclass观察绘图区里哪些对象消失、哪些对象出现。玩上半小时比看一整天教程都管用。8. 从 Class / Subclass 到其他 EDA 工具的认知迁移学完 Allegro 的 Class / Subclass 体系后你会发现它其实是一种通用的层-类别设计思想。Altium Designer 里的 Layer 和 Object Class 也有类似逻辑KiCad 里的 Layer 和 Drawing Sheet 的区分也有点像。只不过 Allegro 把这种二元分类表达得更严格、更细分。我个人的体会是一旦你在 Allegro 里把这种树形分类思维刻进脑子里再回去用其他 EDA 工具反而会更容易理解它们的设计逻辑。因为所有工具最终都要解决同样的问题板子上有太多不同类型的对象怎么把它们有序地组织、过滤、输出。Allegro 给出的答案就是 Class / Subclass这个答案很简单但足够严谨。8.1 不要试图跳过这一步有些朋友跟我交流时说我不用懂这些我就照着菜单点也能把板子画出来。我承认简单的双面板、低速电路确实可以照着抄。但稍微复杂一点的板子比如四层以上、有盲埋孔、有差分对、有阻抗控制你就不可避免地要去修改层叠、去配置光绘。到那时Class / Subclass 就是你绕不开的基本功。提示如果你现在正卡在 Allegro 的某个操作上先别急着搜某某功能怎么用先停下来问自己三个问题——我要操作的对象属于哪个 Class在哪个 Subclass我当前激活的 Class / Subclass 是否和它一致80% 的操作问题都能在这三个问题里找到答案。9. 最后分享一个我在实战中养成的习惯我每个新项目开始的第一步不是急着画板框、摆元件而是先花十分钟审视整个工程的 Class / Subclass 清单。我会删掉用不到的默认 Subclass添加适合这个项目的自定义 Subclass给板框、标注、干涉检查区域分别规划好位置。这个习惯看起来很琐碎但真的能避免后续大量的混乱。还有一个细节命名规范。如果公司有统一的 Subclass 命名规范严格跟着走如果没有自己定义一套比如用自定义标注统一加前缀 NOTES_用结构标识统一加前缀 MECH_。命名清晰了光绘配置、Skill 脚本、多人协作时都会省很多口舌。最终你会发现Allegro 的 Class 和 Subclass 并不仅仅是一个图层管理功能它实际上是整个工具的数据组织哲学。你越早接受这套哲学越早按照它的规则来做事情后面走得就越顺。反过来如果你一直用其他软件的思维来套 Allegro每个操作都会觉得别扭。这就像换一座城市生活——地图不一样路牌不一样但只要你理解了这座城市的规划逻辑去哪儿都不会迷路。