Cadence Allegro的光绘设置,应该是我见过最多人"每次画板都要重来一遍"的活儿。尤其是8层板,层多、film多、钻孔文件多,稍微漏一个Subclass,板厂就会把邮件甩回来,要么说缺文件,要么说层顺序不对,要么说钻孔偏移。我最早做第一块八层板的时候,导完Gerber用CAM350一看,内层铜皮只有一圈轮廓线,当时差点把电脑砸了。后来我把整套光绘配置整理成模板,配合Script录制重放,现在导出8层板全套Gerber加钻孔,基本上两三分钟搞定,而且极少返工。
这篇文章就围绕一件事:怎么把8层板的光绘设置做成一套可复用的模板,下次新建板子时直接套用,以及当Gerber文件异常时,按照什么顺序排查。内容基于Cadence Allegro 16.6到17.4的常见操作路径,如果你用17.2、17.4或更新的X版本,菜单位置可能略有差别,但原理完全一致。
1. 为什么8层板的光绘设置这么容易翻车:先搞懂板厂到底需要什么
1.1 一套完整的光绘文件包含哪些内容
很多工程师提到"出光绘"就以为是"把每一层的铜导出来",其实板厂拿到的是一整套PCB加工用的图形文件。常规8层板至少需要这些:
- 顶层走线层(Top Copper)
- 内层L2到L7的走线或平面层,注意是每一层单独一个文件
- 底层走线层(Bottom Copper)
- 顶层阻焊(Solder Mask Top)
- 底层阻焊(Solder Mask Bottom)
- 顶层丝印(Silkscreen Top)
- 底层丝印(Silkscreen Bottom)
- 顶层和底层助焊/钢网(Paste Top、Paste Bottom),做SMT时需要
- 钻孔文件(NC Drill)
- 钻孔图(Drill Drawing)和钻孔图例表
这还不算完。所有文件的单位、格式、精度、原点必须一致,否则板厂做CAM处理时,层与层对不齐,轻则板厂帮你修一下,重则整个批次的孔位和铜箔对不上,板子直接报废。
1.2 8层板在光绘输出上的特殊之处
8层板的麻烦在于内层多。内层里既有走线层,也有完整的电源和地平面。平面层通常面积很大,如果处理成一块完整的实心铜皮,光绘数据量会非常大,于是很多工程师习惯用负片(Negative)输出,只画"没有铜的区域",文件尺寸小得多。但这种正负混用的模式,一旦在film设置里搞错,输出结果就是地层图形整体反掉,或者铜皮区域出现莫名其妙的空白。
除此之外,8层板还常见埋盲孔结构。一个埋孔文件和一个盲孔文件,导出顺序、命名规则都影响板厂识别。如果只丢一个NC Drill出去,板厂默认按通孔处理,生产出来的板子孔洞全错。有HDI结构的板子,这步尤其要小心。
1.3 为什么"默认设置直接导出"不行
我见过不少新手直接点Manufacture -> Artwork,发现弹出来的Film Control里只预置了少数几个film,甚至有些是空的。Allegro自带的默认光绘配置,是为了让软件能跑通,不是为了让你直接交给板厂。默认参数里,单位可能是当前设计单位,但格式精度不一定是板厂要求的;Subclass映射不一定全;钻孔输出又是另一套参数,各搞各的。
更关键的是,如果每个项目都从头点一遍配置,漏配置的概率非常高。人的记忆不可靠,但模板文件可靠。就算你这次一个参数一个参数地设对了,下次换个叠层、换个版本,又得重来一遍。与其这样反复消耗时间和精力,不如花半小时把模板搭好,一劳永逸。
2. 搭建可复用的8层板Gerber模板:格式、层映射与关键参数
2.1 全局参数:单位、格式、精度和原点
打开Manufacture -> Artwork后,先点"General Parameters"按钮。这里面有几个参数直接决定Gerber是否可用:
- Device Type:选Gerber RS-274X。这是现代EDA和板厂的主流格式,D码内嵌在文件中,不需要额外提供光圈表。
- Format:指整数位和小数位。我习惯用英制单位(Inches),Format设3:5,也就是最小分辨率0.00001英寸。大多数常规板子3:5足够;如果板上有极细的间距或高密度BGA,建议直接上3:6,文件大小差别不大,但CAM处理时更稳。
- Units:必须和NC Drill保持一致。我建议全流程统一用Inches,除非板厂明确要求公制。
- Leading/Trailing Zero Suppression:通常用前导零抑制。这个选项要和NC Drill里保持一致,前后零抑制不一致会直接导致钻孔文件解析错乱。
一个小技巧:把Film Size Limits的宽度和高度设大一点,比如32x32英寸,避免某些板框超出默认光绘范围导致图形被裁掉。这个参数在板子特别大或者板框坐标有偏移时,是排查"光绘缺边"的重要检查点。
2.2 正片还是负片:内层电源地平面的选择
这是最容易纠结的地方。老工程师以前喜欢把整层内电地层设成负片,因为早期光绘机的数据处理能力有限,负片文件小、绘图快。但现在计算机处理Gerber毫无压力,我个人更推荐全部用正片输出,理由有三:
- 正片直观,用CAM350打开看到什么就是什么,排查问题容易;
- 负片要求Thermal Relief、Flash符号等定义完全正确,一旦某个引脚的热焊盘符号没做对,光绘里就会出现孤立铜皮或缺失连接;
- 板厂CAM处理正片几乎零门槛,负片反而容易在导入时产生误解。
如果你的公司内部规范强制要求内层负片,那在Film Control里把该层的Film类型选为Negative,并且务必检查所有引脚是否定义了正确的Flash。这一步没有捷径,只能逐项核对。从我自己处理过的板子来看,负片导致的返工率比正片高不少,能用正片就别用负片。
2.3 每一层film的Subclass映射清单:别漏了Class和Subclass
在Artwork的Film Control里,选中一个film,点"Subclasses",弹出的窗口就是这层光绘要包含的所有Class和Subclass。
很多Gerber丢东西,问题都出在这里。比如丝印层只勾了Board Geometry/Silkscreen_Top,忘了勾Ref Des/Silkscreen_Top,结果板上的位号全部消失;阻焊层忘了勾Pin/Top和Via/Top,结果焊盘被阻焊盖住,贴片根本没法焊。
我给自己定的"8层板标准映射清单"大致如下:
| Film名称 | 需要包含的主要Class/Subclass | 正负片 | 说明 |
|---|---|---|---|
| ART_TOP | ETCH/TOP, PIN/TOP, VIA/TOP, BOARD GEOMETRY/OUTLINE | 正片 | 顶层走线 |
| ART_GND02 | ETCH/L2, PIN/L2, VIA/L2 | 正片/负片 | 内层L2 |
| ART_SIG03 | ETCH/L3, PIN/L3, VIA/L3 | 正片 | 内层L3 |
| ART_SIG04 | ETCH/L4, PIN/L4, VIA/L4 | 正片 | 内层L4 |
| ART_SIG05 | ETCH/L5, PIN/L5, VIA/L5 | 正片 | 内层L5 |
| ART_SIG06 | ETCH/L6, PIN/L6, VIA/L6 | 正片 | 内层L6 |
| ART_GND07 | ETCH/L7, PIN/L7, VIA/L7 | 正片/负片 | 内层L7 |
| ART_BOT | ETCH/BOTTOM, PIN/BOTTOM, VIA/BOTTOM, BOARD GEOMETRY/OUTLINE | 正片 | 底层走线 |
| ART_SOLD_TOP | BOARD GEOMETRY/SOLDERMASK_TOP, PIN/TOP, VIA/TOP | 正片 | 顶层阻焊 |
| ART_SOLD_BOT | BOARD GEOMETRY/SOLDERMASK_BOTTOM, PIN/BOTTOM, VIA/BOTTOM | 正片 | 底层阻焊 |
| ART_SILK_TOP | BOARD GEOMETRY/SILKSCREEN_TOP, REF DES/SILKSCREEN_TOP | 正片 | 顶层丝印 |
| ART_SILK_BOT | BOARD GEOMETRY/SILKSCREEN_BOTTOM, REF DES/SILKSCREEN_BOTTOM | 正片 | 底层丝印 |
这里把"活动类和子类"的概念说清楚:Allegro的Class是大的对象分类,比如ETCH、PIN、VIA、BOARD GEOMETRY;Subclass是同一类对象在不同层的归属,比如ETCH下面有TOP、L2、L3直到BOTTOM。你在Artwork里勾选Subclass时,实际上是在告诉光绘机"这一层film要画哪些对象"。如果某个对象的Class和Subclass没被任何film包含,它就不会出现在任何Gerber里。
很多工程师在PCB界面里看到某个层的器件、位号都显示正常,就以为Gerber里也会有,其实不对。光绘只看film里勾选的Subclass,PCB显示只是你的查看状态,和最终输出没有直接关系。所以每次Load模板后,一定要逐个film点开Subclasses确认一遍。
2.4 钻孔文件和钻孔图:别等板厂来问你要
Gerber是图形,钻孔是坐标和孔径表,必须单独输出。路径在Manufacture -> NC -> NC Drill。参数设置里,同样要确认:
- 单位与Artwork一致,我统一用Inches;
- 格式里选择与Artwork相同的精度,比如3:5;
- 输出文件命名,建议用板名加-drill后缀,比如board-drill.tap;
- 原点选择:强烈建议用Absolute origin,和Artwork中设置的原点保持一致,否则板厂导入后每层板的坐标基准不同,结果整个钻孔阵列偏移。
通孔一个文件就够;有埋孔、盲孔时,Allegro会按照Via结构拆分出多个NC Drill文件,命名上通常带后缀区分。导出后务必逐个确认数量是否和你的Via结构一致。钻孔图(Drill Legend)则是把孔径符号表放到PCB图上,用Manufacture -> NC -> Drill Legend生成,记得把它放到Board Geometry/DrillLegend子类,再在丝印层的film中把该子类加进去,或者单独输出一个Drill Drawing层。
2.5 保存模板:一个不显眼但救命的功能
所有film配置完成后,在Film Control界面下方有Save和Load按钮。Save会把当前所有film的列表、每个film的Subclass映射、正负片、Mirror、Undefined line width、Film Size Limits等参数全部写进一个.art文件。建新项目时,打开Artwork后点Load,选中这个art文件,所有配置瞬间恢复。
这里我要多说一句:Save时不要保存在项目目录,项目目录会被清理、会被归档,时间一长就忘了。我习惯在D盘根目录建一个allegro_templates文件夹,里面按板层分类放好。每次换电脑第一件事,就是把整个模板文件夹拷过来,然后逐个版本验证一遍。模板只有集中管理才有意义,散落在各个项目里,过半年你自己都找不到。
还有,钻孔参数(NC Drill设置)并不保存在art文件中,它保存在板子的参数里。所以模板只解决"光绘图形"的复用,钻孔参数需要在每个新项目里确认一次。这也是为什么我推荐用Script录制把钻孔导出动作也录进去,因为Script把参数设置过程也固化下来了。
3. 一键导出的实现方式:Script录制、模板加载到Skill自动化
3.1 一套完整的模板化操作流程
既然art文件已经把光绘配置固化了,完整流程其实可以固定成四步:
- 打开叠层完整的8层板brd;
- 进入Manufacture -> Artwork,点Load,加载8L_standard.art;
- 核对Film Control里所有film是否勾选完整,确定无误后右键或点击Create Artwork;
- 进入Manufacture -> NC -> NC Drill,核对钻孔参数,确认原点、单位、精度,输出钻孔文件。
在以上四步里,真正需要人为判断的只有第3步的核对和第4步的参数确认。如果每一步都靠手动点,出错的概率还是存在。所以Script录制才是真正意义上的"一键"。
3.2 Script录制重放:最简单可靠的一键方案
Allegro的Script功能在File -> Script,它能记录你在界面上的所有操作,保存成.scr文本文件。具体做法:
- 打开一个配置好模板的板子;
- File -> Script,输入脚本文件名,比如
export_8l_gerber.scr,开始录制; - 依次执行一次完整的导出:Manufacture -> Artwork -> 在Film Control里确认所有film勾选齐全 -> 点Create Artwork;再Manufacture -> NC -> NC Drill -> 点Drill;如果有Drill Legend,也做一遍;
- 停止录制。
以后任何8层板,只要打开brd,File -> Script,选择这个scr文件,回车,Allegro就会自动把全套Gerber和钻孔文件吐出来。整个过程两三分钟。
这里面有几个坑要注意。第一,Script录制的操作如果涉及弹窗确认,不同版本弹窗可能不一样,重放时可能出现卡住不动,最好在录制时尽量用快捷键或纯命令操作,减少对鼠标点位置的依赖。第二,输出文件名默认取板子名,这个没问题;但如果你在录制时手动改了输出路径,每次重放都会往那个路径写。我建议录制成"输出到当前brd所在目录的gerber子目录",这样最不容易出乱子。
提示:Script文件本身是文本文件,可以用记事本打开查看。你不需要手写它,但看懂里面的命令,遇到重放失败时会更容易定位是哪个菜单操作出了问题。
3.3 Skill脚本再进一步:把重放动作变成菜单或快捷键
如果你对Skill略懂,可以在Script重放基础上再套一层。比如在allegro.ilinit里写一段:
defun(Export_8L_Gerber () axlShell("replay export_8l_gerber.scr") ) axlRegisterAction("export_8l_gerber" 'Export_8L_Gerber)这样在Allegro命令框里输入export_8l_gerber,就等于执行一次完整的Gerber导出。还可以把axlRegisterAction绑到自定义菜单上,连命令都不用敲。
底层原理不复杂:Script重放实际上是让Allegro"执行一遍你录制的GUI操作",Skill的作用只是把"打开Script文件、回车"这个动作再封装一次。相比直接写API遍历film,用Script重放的好处是它对版本差异不敏感,换到17.4或更新的版本,重新录制一次新脚本就能继续用,不需要去适配不同版本的Skill API。
3.4 导出后必做的完整性自检
脚本跑完不等于万事大吉。我强烈建议养成一个5分钟自检习惯:
- 打开输出目录,确认文件数量:8层铜箔8个、阻焊2个、丝印2个、可能还有助焊2个、NC Drill若干,再加上一个Drill Legend,至少十几个文件;
- 用CAM350或免费Gerber Viewer逐个打开,主要看三件事:板框是否完整、铜箔是否有实心填充、丝印文字是否可读;
- 把Top层和Bottom层的丝印叠在一起看,确认Bottom没有反字;
- 把钻孔文件加载到CAM350中,和Top层比对,孔位是否一一对应。
这几分钟能拦截掉90%的交付事故。反正我见过太多"时间来不及了先发板厂再说"的结果,基本都是第二天加急改图,反而更慢。
4. 常见错误与完整排查链路:从现象到根因
4.1 铜皮只有轮廓:Shape fill设置和铜皮优先级
这个坑我在文章开头就提过,也是网上被问烂的"allegro铜皮只有轮廓"问题。现象是:Gerber文件放到CAM350里,铜皮区域只有一个空心的框,中间什么都没有。
排查顺序:
- 先看是不是只在Gerber里这样、在Allegro界面里是正常的。如果是,问题几乎都在Artwork的General Parameters里;
- 打开Manufacture -> Artwork -> General Parameters,找到Shape fill选项,里面有No shape fill、Lines/arcs、Filled shapes三个值;
- 如果选了Lines/arcs,光绘就只输出铜皮轮廓线;改成Filled shapes,重新生成Gerber,问题解决。
顺便说一句,有的朋友会遇到某些铜皮被另一块铜皮"吃掉"一部分,生成的光绘有异常缺口,这块和铜皮优先级(Shape Priority)有关。Allegro里动态铜皮之间通过优先级来决定重叠区域的归属和避让关系,优先级设置不当会导致不同网络的铜皮重叠或互相掏空出奇怪的形状。如果你发现某块地铜和电源铜重叠处出现诡异形状,先别急着怀疑光绘设置,回到PCB里检查两块Dynamic Shape的优先级和Void行为。光绘只是如实反映铜皮的几何图形,PCB里是什么样,导出来就是什么样。
4.2 钻孔文件与Gerber对不上:原点、单位、格式不一致
另一个高频投诉是"钻孔整体偏移"或"钻孔镜像"。这通常是NC Drill和Gerber的坐标系基准不一致。
举个例子:Gerber Artwork里用的原点是绝对原点,也就是图纸左下角或板框原点;而NC Drill设置里如果选了Relative origin,恰好又设置过相对原点,那么钻孔坐标会从另一个基准开始算,结果就是所有孔相对铜箔整体位移一段距离。
排查链路:
- 用CAM350同时加载Top层Gerber和NC Drill文件,看孔位和焊盘是否对齐;
- 如果有一致的偏移量,回Allegro检查Manufacture -> NC -> NC Drill参数,把原点改回Absolute,单位改回Inches,精度改成和Artwork一致;
- 重新导出,再叠一次,确认没有偏移后,才发板厂。
这个坑最阴险的地方在于:单看Gerber是"正常"的,单看钻孔文件也是"正常"的,唯独两个叠在一起就出问题。所以自检阶段千万别只看单独一层。
4.3 Bottom层丝印镜像:Mirror设置乌龙
"底层文字反了"是丝印层最常见的翻车方式。很多人直觉认为"底层从背面看,所以要镜像",然后在Artwork的Film Control里把Bottom丝印的Mirror勾上,结果板厂从正面看Gerber时文字确实反了。
真相是:Allegro的Bottom丝印Subclass(BOARD GEOMETRY/SILKSCREEN_BOTTOM)里面存放的文本,本来就是以"从底面往上看"的视角定义的,光绘时不需要额外Mirror。如果你在Artwork里再勾一遍Mirror,相当于把已经反好的东西又翻了一次,输出到CAM里就是反的。
排查方式很简单:生成Gerber后用CAM350查看,能直接读出位号文字,说明方向正确;读起来像天书,检查Mirror选项。同理,Bottom层铜箔和阻焊也不要画蛇添足地去勾Mirror,除非你做的是复合层film,且明确知道为什么要镜像。
4.4 D码(光圈表)缺失导致异形焊盘丢失或变形
如果你的Artwork里还是传统274D格式,那必须单独提供D码文件。D码就是光圈表,每个数字对应一个形状。只要表不匹配,椭圆焊盘会变成方焊盘,圆孔会变成菱形,板厂看到这种文件基本直接退回。
解决办法是把Device Type改成RS-274X。274X把D码定义直接写进Gerber文件里,板厂导入时不需要额外找光圈表,几乎不会出现D码错乱。这也是我在2.1里建议用274X的原因。
如果你的异形焊盘或者花焊盘在274X下仍然丢失,那多半是封装里Flash符号(Thermal Relief)没有正确赋给引脚,或负片层里引脚的Thermal Pin没有选择Flash。这种情况在正片输出下几乎不会遇到,所以还是那句话:能用正片就不用负片,能上274X就不上274D。
4.5 模板在另一台电脑或另一个版本失效:Subclass映射全没了
模板art文件在A电脑上用了半年没问题,拷到B电脑上一Load,Film里一片空白。这类问题我碰到过,原因基本有两个。
一是art文件里保存的Subclass名称和当前板子的Class/Subclass名称不完全一致。比如你录制模板时用的板子里有一层叫ETCH/GND02,而新板子的内层叫ETCH/L2,名称对不上,film自然加载不出内容。这种情况不是模板坏了,而是项目层叠命名不统一。解决思路是团队内部统一层叠命名规范,或者Load模板后逐层核对Subclass。
二是版本差异。Allegro从16.6到17.4,不少内部命令和菜单路径变了,但art文件的格式大体兼容。不过17.4之后在Subclass命名上也有一些调整,最稳妥的做法是在新版本里打开模板重新Save一份,作为新版本的专用模板,而不是跨版本硬套。
5. 模板复用之外的一些经验:让Gerber交付更省心
5.1 按叠层结构分类维护多个模板
8层板不止一种叠层。常规8层板、含埋盲孔的8层板、HDI一阶或二阶的8层板,每一类的内层Subclass和钻孔文件数量都不一样。放在同一个art文件里,虽然也能用,但每次都要手动勾选不同的孔结构,等于没有完全复用。
我自己的做法是按"叠层+孔结构"建目录:
- 8L_std:常规通孔8层板
- 8L_HDI_1:一阶HDI 8层板
- 8L_HDI_2:二阶HDI 8层板
每个目录下放一个art模板和对应的Script脚本。新建项目时,先确认属于哪一类,然后直接加载对应模板。模板文件名里要写清楚层叠结构,例如8L_std_3-5_inch.art,光看文件名就知道单位、精度和用途。
5.2 从16.6迁移到17.4要注意什么
很多公司现在还在用16.6,但新电脑或新项目可能上了17.4甚至更新的版本。我迁移的时候踩过几个小坑:
- Artwork菜单在16.6和17.4里都在Manufacture菜单下,名字没变,但General Parameters界面里某些下拉项的位置变了;
- 17.4默认对Gerber输出做了些增强,比如支持更精细的圆弧插补,导出的文件大小比16.6大一些,属正常现象;
- 老版本录制的scr脚本,在新版本里重放时偶尔会因为弹窗按钮文字变化而卡住,建议在新版本里重新录制一遍脚本,不要指望老脚本永远好用。
总之,模板可以跨版本迁移,但迁移后一定要在新版本里完整走一遍导出并用CAM查看,不能想当然。
5.3 团队标准化与板厂沟通
模板复用的最大受益者是团队。如果整个PCB组都使用同一套Gerber模板、同一套文件命名规范,那么每个人交付给板厂的文件结构都一样,板厂也省心,审单也快。文件名我建议统一为"项目名_层名_v版本",比如ProjectX_TOP_V1.0.gbr、ProjectX_NCDRILL_V1.0.tap,避免出现"最终版2_final_真的最终版"这种命名灾难。
和板厂沟通时,主动发送一份"光绘输出说明",把你使用的单位、格式、精度、正负片、原点写在邮件里。正规板厂都会按这个参数导入CAM,提前说明能省掉至少一轮确认的来回。设计师最容易犯的错误是想当然地以为板厂能"自动识别"所有Gerber,实际上Gerber只是图形数据,单位、精度不知道,人家一样要猜。
5.4 如果客户只要PADS或Allegro原档,怎么办
标题聊的是Gerber,但实际工作中总有客户或下游厂商说"你直接给我PADS格式"。Allegro不能直接把brd另存为PADS格式,通常需要用转换工具或中间格式处理。这里我多说一句:不管最终要不要转PADS,Gerber模板该复用还是要复用。因为转PADS主要影响的是可编辑性,而板厂加工用的还是Gerber;即使客户要PADS,最终交付制造时也建议配套一份Gerber,方便双方核对。
最后再分享一个小技巧。很多人把模板配置好就再也不管了,但板厂的工艺能力是变化的,从普通FR4到高速材料,从常规线宽到激光钻孔,光绘参数不一定一成不变。我每年会抽时间把手头所有模板重新在最新版本里跑一遍,用CAM350做一次完整检查,确认没有异常后再发布给团队使用。这样的模板,才是真正能让你"一键导出"且睡得着觉的模板。