☰
Allegro 17.4 Gerber导出实战:从Artwork设置到报错排查全流程
2026/10/6 12:05:40 网站建设 项目流程

上周四晚上十点,同事给我发来一张截图:板厂拒收Gerber,理由是文件里“Undefined aperture”一堆。他用的就是Cadence Allegro 17.4,明明菜单路径都按教程走了,怎么还会缺D码?这个问题我太熟了。Allegro 17.4的布线体验和规则管理确实稳,但它的光绘输出(Gerber导出)流程,信息密度高、坑还特别多,新手第一次独立出片几乎没有不翻车的。这篇文章我按自己的实际操作顺序,把从设计状态检查、Artwork参数逐项设置、钻孔文件生成,到常见报错排查和发板前自检的完整流程写出来,正好也回应一下最近总有人私信问到的Allegro 17.4出Gerber问题。

1. 出光绘前绕不开的几件事:设计状态、单位、数据库完整性

1.1 铜皮优先级与动态铜皮的“平滑”状态

很多刚接触17.4的人会搜“铜皮优先级”,以为它跟出Gerber有关系。二者确实有一点关系,但不直接。铜皮优先级(shape priority)决定的是同一层不同网络铜皮重叠时谁压谁,它影响的是设计阶段的效果,真正导致光绘异常的是另一件事:动态铜皮没有刷新成平滑状态。

我见过最典型的翻车现场是:板子已经布完线,动态铜皮因为多次调整边界,停留在“未填充/轮廓”状态,直接出Gerber后,板厂收到的铜皮层只有几条空空的边界线,中间全是空铜。这不是Allegro默认设置错,而是你没触发重新填充。我每次出片前都会点一遍Shape菜单里的Update命令,或者在命令行敲update_shapes,把全部动态铜皮重新计算一遍;同时确认Shape Fill设置的是Solid(实心),而不是Outlined或者X-hatch。这一步花不了一分钟,能避免整层铜丢失的大事故。

另外还有一个细节:如果板子上既有动态铜皮又有静态铜皮,建议统一成同一种类型,或者至少确认静态铜皮没有被动态铜皮挡掉。我习惯把所有铜皮都改成动态,再按需求设置优先级,这样后期调整和出光绘都比较可控。

1.2 板框、原点与单位:板厂判断文件的第一依据

板框(Board Geometry/Outline)在Gerber流程里经常被当成“反正板厂能看出来”的东西,实际恰恰相反。板厂开料、拼板、做外形全靠这个层。我建Film时一定会单独建一个OUTLINE光绘,把Board Geometry/Outline和Design Outline都放进去,并且用线宽明确、闭合完整的line/arc去画框,不要用0线宽的线,后面排查D码时我会再讲这个坑。

单位问题我建议出片前和板厂确认一次。Allegro有个很容易踩的规则:光绘单位和钻孔单位默认跟随设计文件,但如果你中途切换过单位(mil和mm之间来回切),或者手工改过某个参数,很容易出现光绘是mil、钻孔是mm的情况。我自己栽过一次:孔位整体偏了40mil,板厂电话过来问,查了半天才发现是钻孔文件用的单位跟光绘不一致。所以我的固定做法是:设计从头到尾用mil,出Gerber用mil,出NC Drill也用mil,除非板厂明确要求公制。

再有就是原点。Artwork控制面板里有一组X/Y Offset,默认是0,我建议保持0。如果非要移动坐标原点来对齐板厂拼板基准,也要在文件说明里写清楚,否则板厂拿到的Gerber所有坐标都带着偏移,拼板对不齐。

1.3 数据库完整性:DBDoctor不是免责工具

Allegro长期编辑后,数据库里会积累一些“奇怪”的东西,比如删铜皮残留的void边界、旧shape symbol记录、重复的板框线条。这些在设计界面看不出来,但出光绘时它们会变成莫名其妙的报错。我出片前的固定动作是先跑一遍Database Check。

17.4里路径是File -> Database Check,命令行直接敲dbcheck也能打开,也就是大家常说的DBDoctor。跑完之后如果有错误,它一般会提示你Update动态形状或者修复符号。修复完记得再存一次盘。另外一个实用命令是recycle,在命令行敲一下,把数据库压缩整理。这两个动作不保证解决所有光绘问题,但能滤掉大量“好像是偶然出现”的报错,属于低成本高收益的预防手段。

也许有人觉得这步多余,但在我接触的案例里,至少有三分之一的“Undefined aperture”在dbcheck加recycle之后就消失了。后面的排查章节里我会再展开。

2. Artwork参数面板逐项拆解:真正的Gerber生成环节

2.1 格式选型:RS274X是保守且正确的答案

在Allegro 17.4里,通过Manufacture -> Artwork打开Artwork Control Form,点Parameters标签。第一栏Device type选择光绘格式。17.4支持Gerber 6x00、RS274X、RS274X X2等几种。

Gerber 6x00是上古格式,D码要单独走D-code文件,多一个文件就多一次漏传的风险,不推荐。RS274X把光圈(D码)直接内嵌进文件里,是当前板厂兼容性最好的格式。RS274X X2多了一层元数据,部分老板厂、老CAM版本不一定能完整解析。所以我的默认选择一直是Gerber RS274X。

下面的Integer places和Decimal places,在单位mil时我习惯设3和5,也就是3位整数、5位小数。这个精度已经能表达0.01mil级别的坐标,Gerber体积也不会失控。如果你的板厂要求别的精度,比如2:5,直接在参数里改,然后重新出片就行。这块没有“唯一的正确答案”,核心是出片前跟板厂确认好,别等文件被打回来再改。

2.2 Film列表怎么建:一层一个胶片,少了谁都不行

Artwork Control Form左边显示的是当前会输出哪些Film。Allegro不像Altium Designer在Outjob里一键勾选,它是让你自己构建每一层光绘的内容。这个差别很劝退从AD转过来的朋友,但理解了逻辑之后反而不容易漏层。

一个常规双面板至少需要这些Film:TOP、BOTTOM、SILK_TOP、SILK_BOT、SOLDER_TOP、SOLDER_BOT、PASTE_TOP、PASTE_BOT、OUTLINE。四层板再加内层GND、VCC。每一层要指定包含的Class/Subclass,以及是在正片还是负片下输出。我按习惯给一个精简版的Film内容参考:

光绘名称包含内容(Class/Subclass)正片/负片
TOPETCH/TOP、PIN/TOP、VIA CLASS/TOP正片
GNDETCH/GND、PIN/GND、VIA CLASS/GND负片或正片(见4.2)
VCCETCH/VCC、PIN/VCC、VIA CLASS/VCC负片或正片
BOTTOMETCH/BOTTOM、PIN/BOTTOM、VIA CLASS/BOTTOM正片
SILK_TOPBOARD GEOMETRY/SILKSCREEN_TOP、REF DES/SILKSCREEN_TOP正片
SILK_BOTBOARD GEOMETRY/SILKSCREEN_BOTTOM、REF DES/SILKSCREEN_BOTTOM正片
SOLDER_TOPPIN/SOLDERMASK_TOP、VIA CLASS/SOLDERMASK_TOP、BOARD GEOMETRY/SOLDERMASK_TOP正片
SOLDER_BOTPIN/SOLDERMASK_BOTTOM、VIA CLASS/SOLDERMASK_BOTTOM、BOARD GEOMETRY/SOLDERMASK_BOTTOM正片
PASTE_TOPPIN/PASTEMASK_TOP、VIA CLASS/PASTEMASK_TOP正片
PASTE_BOTPIN/PASTEMASK_BOTTOM、VIA CLASS/PASTEMASK_BOTTOM正片
OUTLINEBOARD GEOMETRY/OUTLINE、DESIGN_OUTLINE正片

这里有两个容易忽略的点。一是SOLDER层里Vias要不要勾。如果你不想让过孔开窗露铜,就不要把VIA CLASS/SOLDERMASK_TOP勾进SOLDER_TOP;如果希望散热或测试方便,就勾上。二是OUTLINE层务必要勾,很多板厂退回文件的理由就是“没有板框层”。至于PASTE层,那是SMT钢网用的,样板手焊时可以不出,批量板必须出。

2.3 输出目录、命名与线宽兜底

Allegro出Gerber前,最好在工程目录下建一个干净的输出文件夹,比如gerber_out,把旧文件清掉,避免新旧文件混在一起发给板厂。文件名我建议直接用业界通用后缀,板厂一看就知道是什么层:TOP.GTL、BOTTOM.GBL、SILK_TOP.GTO、SILK_BOT.GBO、SOLDER_TOP.GTS、SOLDER_BOT.GBS、PASTE_TOP.GTP、OUTLINE.GKO、GND.G1、VCC.G2,钻孔文件用DRILL.TXT或者DRILL.DRL。

还有一个参数容易被忽略:Undefined line width。Allegro里有些对象线宽是0,比如某些参考丝印、板框线、DXF导入的线条。光绘文件里0线宽对象经常无法正确解释,板厂那边表现为“缺D码”或“对象丢失”。我在参数里通常把Undefined line width设成6mil,给这些对象一个兜底线宽,绝大多数警告就能消掉。这不是万能药,第4章我会专门讲报错排查。

Film列表确认无误后,点右下角Create Artwork,Allegro会按列表依次生成所有层光绘并在日志里打印每层的结果。看到日志里有警告别急着发板,先回到数据库里查清楚。

提示:不同板厂对Gerber后缀有细微差异(比如有的用.GTL,有的用.art),下单前看一眼板厂官网规范,按对方要求改名最省心。

3. 钻孔文件、钻孔符号图与配套说明:别让板厂猜你的叠层

3.1 NC Drill参数:坐标精度和单位必须跟光绘一致

Gerber画的是铜箔图形,孔的位置要单独用钻孔文件告诉板厂。Allegro里路径是Manufacture -> NC -> NC Drill。弹出的NC Drill窗口里,Parameters标签页可以设置Excellon格式的精度和单位。

我习惯把钻孔文件精度设为3位整数、5位小数,单位跟光绘一致用mil,理由跟第2.1节一样:减少小数点取舍带来的坐标误差。很多板厂能接受Enhanced Excellon格式,它比标准Excellon多了一些头信息,槽孔和椭圆孔的表达也更完整。

这里特别提醒:钻孔文件的版本必须和Gerber一致。如果你出完Gerber又改了一个过孔,记得重新跑一遍NC Drill。改孔不改Gerber,或者改Gerber不重新生成钻孔,都是发板事故的经典来源。我见过一个项目,铜皮和焊盘都对,只有孔位差了半个焊盘,板厂拼板后整批报废,最后查出来就是NC文件没重新出。

3.2 NC Legend钻孔符号图:板厂确认孔径的图纸

钻孔符号图(Drill Legend)是板厂核对孔径的重要参考。Allegro里通过Manufacture -> NC -> NC Legend生成,生成后是一个带表格的图形,里面列出每个孔径对应的符号、数量。这个图需要放在版图里某个空余位置,保存后随Design文件一起归档。

如果你的板子面积很小,板框外放不下这张图,也可以放在板内,比如放在DRILL层、且不跟焊盘重叠的区域。我记得第一次出片时忘了一件事:生成了NC Drill,忘了生成NC Legend,以为钻孔文件就够了。其实板厂能在CAM软件里自己核对孔径,但工程审查的人还是喜欢看符号图,省得来回问。所以我之后的流程都是NC Drill和NC Legend一起出,并把Legend放在一层专门的DRILL_LEGEND光绘里,或者并入DRILL_DRAWING胶片。

3.3 槽孔、背钻与金属化属性说明

普通圆孔在Excellon文件里就是坐标加直径,但槽孔(椭圆孔、腰形孔)会以特殊G代码或M指令表达。出完NC Drill后,我建议用文本编辑器打开看一眼,确认槽孔的坐标段确实存在。如果发现槽孔没进去,多半是Padstack里Slot参数没定义好,或者Allegro的格式设置不支持某种槽孔类型,这时候就要回头改Padstack。

背钻(back drill)属于高阶工艺,17.4可以在Pin/Via属性里设置背钻深度,但出片时通常需要单独的背钻文件,做高速板时再跟板厂单独要模板。

另外我还习惯在发板压缩包里附一个stackup.txt,写明板厚、铜厚、层叠顺序、阻抗线的层间距要求、阻焊颜色和表面处理工艺。这些不是Gerber文件本身,但是板厂工程评审时最常问的问题,提前写清楚能省好几轮邮件。

4. 常见错误排查实录:从报错信息倒推根因

4.1 “Undefined aperture / 缺D码”:最经典的翻车现场

前两章里我提过0线宽和DBDoctor,这些其实都跟“缺D码”有关。RS274X格式本身会把D码内嵌,所以正常情况下板厂不该缺D码。但Allegro里某些对象没有合适的光圈描述时,报错就产生了。

我之前排查过这样一个案例:同事的板子所有层都能出Gerber,但板厂打开文件后报“Undefined aperture referenced”,定位点在板框附近。我让他先回到Allegro用Show Element去点板框,发现板框线全是0线宽的line。把线宽改成6mil、重新出OUTLINE光绘后,问题立刻消失。这属于最简单的缺D码。

另一种常见来源是:用户画外形或者画板内禁布区时,用了自定义的Shape Symbol,这个Symbol在Allegro数据库里有Flash定义,但RS274X导出时无法正确关联。处理办法是不要在原位置叠一个形状,而是把禁布区用标准Board Geometry/Outline线画,或者用Z-copy复制的板框。总之,出光绘前把所有非标准shape symbol尽量替换成标准图形,能少掉一大批怪问题。

如果报错信息里有具体坐标,标准排查链路是:先看坐标在哪个层,再放大到那个区域,逐个选中元素看它的Class/Subclass和线宽。不要一上来就怀疑软件坏了,Allegro大多数报错都能在数据库里找到元凶。

4.2 内层变成一大块实心铜或者热焊盘消失

四层板内层(GND/VCC)最常见的问题是:明明设计的是负片电源平面,出完Gerber后在CAM里看,整层是一块实心铜,热焊盘位置也没有十字花。这通常不是Allegro坏了,而是两层原因叠加。

第一个原因:Film的Plot mode选错了。内层如果按负片平面设计,Artwork里这个Film应该用Negative输出;你选成Positive,等于把整个平面区域当成实心铜出出来。第二个原因:Padstack里的Thermal relief没定义,或者Constraint Manager里的Plane Connect策略没设成Orthogonal/Direct with thermal relief。这样就算负片输出,焊盘周围也没有隔离间隙。

我在17.4里的处理原则是:如果内层是完全的平面层(电源/地),用负片并勾上Thermal relief;如果内层是走线分割层(有信号线),一律用正片输出,把平面铜当作普通正片铜皮来设计。判断依据很简单:打开这一层,看它到底是“整片铜加掏空区”还是“铜箔碎片加走线”。前者用负片,后者用正片。

4.3 丝印文字丢失、乱码或者线条忽粗忽细

丝印问题也是高频。一个原因是字体不兼容,Allegro默认的stroke字体出Gerber没问题,但如果你从DXF或者其他EDA导入过TrueType字体、或者用了非标准字体,板厂的CAM系统里可能显示不出来,变成乱码或者直接缺字。我的建议是:板上的文字统一用Allegro自带字体,顶层丝印别用极细的线宽,一般丝印线宽设到4mil以上,字高别小于25mil(具体按板厂能力),不然打出来糊成一团。

另一个原因跟第2.3节一样:0线宽。丝印层某些文字的笔画线宽是0,Allegro用Undefined line width兜底后能正常出。如果改了兜底线宽后丝印还是有问题,就检查是不是文字带旋转角度或镜像,导致某些CAM解析异常,在Allegro里把文字重新对齐一次就行。

4.4 板厂说“没有板框/外形层”

这个我前面反复提过,但还是值得单独列一条。很多设计师画完板子后,板框确实在Board Geometry/Outline里,但他出Film时只勾了ETCH、SILK、SOLDER这三种Class,完全没把OUTLINE加进任何一层,板厂打开Gerber自然是找不到外形。

更隐蔽的情况是:板框由好几段线和弧组成,一部分画在Board Geometry/Outline,另一部分画在Design Outline甚至Manufacturing Tags。出片时你只勾了其中一部分,Gerber里板框缺了一角,板厂照样无法开料。我会在OUTLINE胶片里把Board Geometry/Outline和Design Outline这两个常用层都勾上,并在出片后在CAM350里确认板框是闭合的完整轮廓。

4.5 铜皮只有轮廓没有填充

动态铜皮如果没刷新,或者Shape Fill类型被改成Outlined、X-hatch,Gerber里就只能看到轮廓线。前面1.1节说过刷新方法,这里补充一个检查点:用Show Element选中铜皮,看它的Fill Type。如果是Outlined,改成Solid,再Update。某些情况下还需要检查铜皮是否处于“void opened”状态,我通常直接把这块铜皮删掉重铺,往往比重塑边界更快。

下表把这些问题整理成速查表,发板前对照检查一遍,能省掉很大一部分客诉:

报错/现象常见根因优先处理方式
Undefined aperture / 缺D码0线宽对象、非标准Shape symbol设Undefined line width兜底;替换非标准Symbol;dbcheck加recycle
内层整块实心铜Film选成Positive输出;Thermal relief缺失负片层选Negative;在Padstack Editor里补Thermal relief
丝印丢字/乱码非Allegro字体;0线宽统一改为stroke字体;设兜底线宽
板厂找不到板框Film缺OUTLINE层;板框在多个subclass里新建OUTLINE Film,把常用Outline subclass都勾上
铜皮只有轮廓动态铜皮未Update;Fill Type为Outlinedupdate_shapes;把Fill Type改回Solid

5. 光绘生成后的自检清单:把板厂从“捉Bug的人”变回“生产方”

5.1 用CAM350或谷雨快速预检

Gerber不是出完就能直接发的。我强烈建议在发板前,把Gerber压缩包解压后用CAM工具打开看一眼。国内很多人在用谷雨,国外用户常用CAM350,两个我都用过,预检逻辑一样。

我会按这个顺序看:先把所有层叠在一起,检查层间是否对齐;再单独打开TOP、BOTTOM,看线路和焊盘是否完整;然后打开SOLDER_TOP和SOLDER_BOT,检查不应该开窗的地方有没有意外开窗,特别是过孔;然后把钻孔层叠加到线路层上,数一下孔位和焊盘是否一一对应;最后单独看OUTLINE层,确认板框闭合、原点和设计一致。

这套动作听起来多,实际上十分钟足够。真正出现问题时,它比板厂客诉邮件来得快得多、也省心得多。我身边每位被板厂退过板的朋友,最后都会养成这个习惯。

5.2 打包与命名规范:减少来回沟通的无形成本

给板厂发Gerber的时候,我习惯在压缩包里包含三类东西:光绘文件本身、钻孔文件、stackup.txt说明。光绘文件命名严格用前面说的GTL/GBL/GTS/GTO等后缀,不要用中文名,不要用自定义缩写。我知道同一个人在不同项目里常常随手起名,但板厂CAM工程师每天处理几十个项目,命名规范能直接降低他们看漏的可能。

这里给一个我常用的归档目录示意:

project_20241028/ ├── gerber/ │ ├── TOP.GTL │ ├── GND.G1 │ ├── VCC.G2 │ ├── BOTTOM.GBL │ ├── SILK_TOP.GTO │ ├── SILK_BOT.GBO │ ├── SOLDER_TOP.GTS │ ├── SOLDER_BOT.GBS │ ├── PASTE_TOP.GTP │ ├── OUTLINE.GKO │ ├── DRILL.DRL │ └── DRILL_LEGEND.GDR └── stackup.txt

如果板厂要求测试点文件,还可以再附一个IPC-D-356文件;高频板、背钻板按板厂模板加文件。总之,少让板厂问一句,项目就快一步。

5.3 17.4的效率技巧:快捷键、Skill与参数模板

熟悉之后,出Gerber的步骤是可以半自动化的。17.4的快捷键设置在个人env文件里(通常在用户目录下的pcbenv文件夹),别名alias功能很实用。我习惯把常用命令映射到功能键,比如:

alias F8 artwork alias F9 nc_drill alias F10 nc_legend alias F11 dbcheck

这样就不用每次去菜单里点找半天。设置完重启Allegro就生效。注意env文件改错了可能导致启动异常,修改前先备份一份。

Skill是另一个提效方向。市面上的Allegro Skill工具包,像很多人问的电路精灵,在17.4上如果兼容基本都能用,里面常带一键检查、一键出Gerber的脚本。我个人建议:可以用,但别完全依赖。脚本帮你勾选好Film、生成文件之后,你仍然要把结果导进CAM350自己过一遍。自动化解决的是效率,自检解决的是确定性,两者不能互相替代。

如果你经常做差不多层叠的板子,还可以把Artwork里的Film列表和参数整理成一个自己的模板。有的Skill脚本支持导入导出配置,如果不支持,就把每层对应的Class/Subclass抄到一个笔记里,新项目照着建。这么做的意义在于:出Gerber不是设计里最有创造力的部分,把它变成肌肉记忆之后,你的精力才能真正花在电路本身。

其实出Gerber这件事,熟练之后也就是十分钟的活。我最想提醒的只有一个点:任何自动化和快捷键都省不了最后那遍自检。我的习惯是每次发板前,把Gerber拖进CAM350里,假装自己是板厂工程部的人,从头到尾看一遍,这个动作已经救了我至少三次。希望这篇17.4的实战记录,能让你少走几晚加班路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询