浅谈Cadence Allegro中的Class与Subclass
有过PADS(Protel/Altium Designer也是类似的)设计经验的工程师都知道,当需要在PCB文件中添加板框、禁布区、2D线、外框等对象时,你需要先选择相应不同的命令进入对象绘制状态,之后才能够进行所需对象的绘制。也就是说,在选择命令的操作中,你已经确定将要绘制对象的类别。但Cadence Allegro不一样,添加前述对象时却使用相同命令,但是最终绘制出来的对象到底是什么呢?取决于Class与Subclass。
Class(大类)与Subclass(小类)是Cadence Allegro PCB设计工具最基本的概念,不少Allegro初学者觉得其中的Class与Subclass太多了,不同Class中还存在相同的Subclass,到底有什么区别呢?一时之间很难分清楚,继而也觉得Class与Subclass比较难以理解,今天咱们就来浅淡一下它们存在的意义。
Cadence Allegro将PCB文件中的所有对象都以Class与Subclass管理,具体怎么管理呢?就像学校学生一样,每个学生都可以归属为某个年级与某个班,那么年级与班分别可以理解为Class与Subclass,每个学生必然有对应的Class与Subclass。Allegro PCB文件中的对象管理与学生是相似的。例如,PCB中所有电气层都各自对应一个Subclass,而所有Subclass又放在名称为“Etch”的Class中管理,如下图所示:
再例如,与PCB板相关对象(例如,板框,丝印,尺寸标注等)都放在名为“Board Geometry”的Class中,而这些对象又细分为多个Subclass来管理,如下图所示:
需要特别注意的是,并不是说:放在Class与Subclass中的对象就成为了Class或Subclass名称的对象。例如,你以为Etch/Top(Class/Subclass)中的对象就一定表示顶层的铜箔(或走线)?NO!NO!NO!Class或Subclass的名称只是名称而已,名称本身没有任何意义,关键在于:当你将对象放入到Class或Subclass中时,Allegro具体如何使用这些Class或Subclass中的对象。
举个例子,为什么通常认为Etch/Top(Class/Subclass)代表顶层的铜箔呢?并不是因为Class与Subclass的名称!因为当你定义叠层时,其中的电气对象会自动加入到顶层光绘文件中(Pin/Top、Via/Top亦是如此),如下图所示。当然,这只是系统默认情况。换句话说,如果你愿意,也可以使用Etch/Bottom(Class/Subclass)或其他代表顶层铜箔,只不过一般不会这么做,因为没有人愿意将简单的问题复杂化。
你可以在必要的情况下创建新的Subclass,但仅限于一些特定的Class,如下图所示。例如,在导入DXF文件时就可以在“Board Geometry”的Class中新建Subclass,这样就能够单独显示与隐藏导入的对象。
未在上图中显示的其他Class由系统自动管理。例如,“Pin”与“Via”两个Class没有显示其中,也就意味着你不能自行更改。当你在PCB文件中导入了PCB封装(或添加了过孔时),这些对象自动会放在相应的Class中管理,因为PCB封装的引脚在创建时就已经赋予了Class。
单击上图中每一项(Class)左侧的小方块,就能够弹出“Define Subclass”对话框,如下图所示,其中就能够增加或删除Subclass,这些更改后的Subclass会同步更新到颜色显示对话框中(当然,也包括其它使用到相应Subclass的地方)。
上图中的“Board Geometry”(Class)及其中的Subclass在颜色对话框中如下图所示,添加的那个名为“Dzzzzcn”的Subclass也在其中。
从数据库管理的角度来讲,PADS/Allegro及所有PCB设计工具管理对象的方式都一样,也就是为对象赋予一些属性(Allegro中就是Class与Subclass),只不过不同工具的操作方式不同而已(操作习惯不一样)。
假设现在需要创建圆柱体之类的对象(铅笔、橡皮、钢材、铁棒),PADS是这么做的:先帮你设计好各种圆柱对象的创建工具(其实就是将属性与工具绑定了),你要创建某个对象就必须先选择相应的工具(与工具绑定的属性自然就赋给对象了)。Allegro是这么做的:你先选择圆柱体创建工具(有默认的属性与之绑定,但可能并不是你想要的),然后需要再把正确的属性赋给工具。很明显,两种方式本质上没有任何区别,只不过属性赋给对象创建工具的形式不同而已。PADS只需要一步即可获得正确的工具(但工具的种类会多一些),而Allegro需要两步才能拿到正确的工具。
总的来说,很多初学者通常会根据Class与Subclass的名称来确定其中对象的类别,这当然是可行的,因为Allegro预定义的名称通常也是有意义的,只是从这个角度相对不容易真正理解Allegro的对象管理机制(遇到奇怪的问题可能就傻眼了)。从实质上来讲,我们应该从“Allegro工具如何使用这些Class与Subclass”的角度理解其真正的意义。