1. 从立创EDA到Cadence:封装迁移这件事到底卡在哪
画过板子的人大概都经历过这种纠结:立创EDA的元件库确实香,拖出来就能用,封装、3D模型、引脚定义一应俱全,但公司或者项目要求用Cadence Allegro出图,于是问题来了——立创EDA的封装怎么搬到Allegro里去?
很多人第一反应是找转换工具,或者直接去网上搜“AD转Allegro”,结果发现大部分教程要么只讲了原理图转换,要么只讲了PCB转换,封装库这一块语焉不详。更坑的是,有些教程让你在AD里导出ASCII格式,但没告诉你哪些选项必须勾、哪些绝对不能勾,照着做出来的封装要么焊盘丢了,要么丝印跑到十万八千里外。
我自己在这个流程上反复折腾过好几轮,从最初的手动重建封装,到后来摸索出一套相对稳定的转换链路,中间踩的坑足够写一本小册子。这篇文章就把整个流程拆开来讲清楚,重点放在AD封装转Allegro封装这个环节,同时把ASCII保存时那些容易翻车的细节一并说透。不管你是刚接触Cadence的新手,还是已经用了一段时间但封装库一直靠手动建的“老油条”,这套方法都能帮你省下大量重复劳动。
先明确一个前提:这里说的“AD封装”指的是Altium Designer格式的PCB封装库(.PcbLib),而立创EDA的封装可以导出为AD格式,所以整个链路是立创EDA → AD格式封装 → Allegro封装。原理图部分(OrCAD Capture)和PCB部分(Allegro)的关联逻辑也会顺带讲清楚,毕竟封装最终是要在Allegro里用的,脱离PCB环境谈封装没有意义。
2. 转换前的底层逻辑:为什么不能直接导入
2.1 两种工具的数据模型差异
Altium Designer和Cadence Allegro虽然都是PCB设计工具,但它们对“封装”这个概念的底层数据组织方式完全不同。AD的封装库是一个独立的二进制文件,里面每个封装包含焊盘、丝印、阻焊、助焊、3D体等信息,焊盘本身又嵌套了Pad Stack的定义。而Allegro的封装(Package Symbol,简称.dra文件)是基于Padstack独立管理的,每个焊盘是一个单独的.pad文件,封装文件通过引用这些.pad来组装。
这就意味着,转换过程不是简单的“文件格式转换”,而是数据模型的重建。AD里一个焊盘的所有参数(形状、尺寸、钻孔、层设置)需要被拆解成Allegro能理解的Padstack结构,丝印和阻焊层需要映射到Allegro对应的Subclass,3D模型基本不用想,肯定丢。
2.2 为什么ASCII格式是唯一可行的桥梁
Allegro本身不认AD的.PcbLib文件,但它认一种中间格式——ASCII格式的封装描述文件。Altium Designer恰好支持将封装库导出为ASCII格式(.txt或.PCBLib的ASCII版本),这个文件里用文本方式描述了封装的几何信息。Allegro的PCB Editor里有一个“Import → CAD Translators → Altium”的功能,可以读取这种ASCII文件并尝试重建封装。
但这里有个关键点:不是所有AD封装都能成功转换。异形焊盘、复杂的嵌入式3D体、自定义的Pad Shape、多层堆叠的焊盘结构,这些在转换过程中大概率会出问题。所以转换前的筛选和预处理非常重要,不能一股脑全导。
2.3 立创EDA封装导出到AD的注意事项
立创EDA专业版支持将元件导出为AD格式,操作路径一般是:选中元件 → 导出 → Altium Designer格式。导出的文件通常是一个压缩包,里面包含.PcbLib和.SchLib。这里要注意几点:
- 立创EDA的焊盘命名规则和AD不完全一致,导出后建议在AD里打开检查一遍,确认焊盘编号和网络名没有乱码。
- 立创EDA的3D模型导出到AD后往往变成一个简单的Extruded Body,这个在转Allegro时会被丢弃,不用太在意。
- 如果立创EDA的封装里用了自定义的焊盘形状(比如圆形焊盘带切角),导出到AD后可能变成多边形近似,转Allegro时容易出错,建议提前在AD里改成标准形状。
3. AD端操作:ASCII保存的每一步都有讲究
3.1 打开封装库并确认焊盘完整性
在AD里打开从立创EDA导出的.PcbLib文件,先别急着导出ASCII。第一步是逐个检查封装,重点看三件事:
- 焊盘编号是否连续且无重复。立创EDA导出的封装偶尔会出现焊盘编号跳号或者重复的情况,这在Allegro里会导致引脚映射错误。
- 焊盘是否都在正确的层上。多层焊盘(Multi-Layer)在AD里是通孔焊盘,转Allegro时会变成Through Hole Padstack;单层焊盘(Top Layer)是表贴焊盘,转成Surface Mount Padstack。如果层设置错了,转换后焊盘会消失。
- 丝印层是否有多余的文本或线条。AD的丝印层(Top Overlay)在Allegro里对应Silkscreen_Top,但AD里的一些设计规则标记、器件高度标注等非丝印元素也会被带过去,建议提前删掉。
3.2 ASCII导出的正确姿势
确认封装没问题后,在AD里选择File → Export → PcbLib,或者直接在PcbLib面板里右键选择Export。关键来了,导出对话框里有一堆选项,哪些必须勾、哪些不能勾,直接决定转换成败。
必须勾选的选项:
- Include Pad Stack Information:这个不勾,焊盘尺寸和钻孔信息全丢,转出来就是一堆没有焊盘的丝印框。
- Include Net Information:虽然封装本身不带网络,但有些封装的焊盘上会残留网络名,勾上可以避免Allegro导入时报网络冲突。
- ASCII Format:这是核心,二进制格式Allegro读不了。
绝对不能勾的选项:
- Include 3D Body Information:勾了会让ASCII文件体积暴增,而且Allegro根本不认AD的3D体,纯属浪费时间。
- Include Design Rule Information:AD的设计规则和Allegro完全不兼容,勾了会导致导入时大量报错。
- Include Embedded Library:这个选项会把整个库的索引信息塞进去,Allegro解析时会混乱。
还有一个隐藏坑点:单位设置。AD默认可能用mil,也可能用mm,导出ASCII时一定要确认单位和你后续Allegro环境的单位一致。我一般统一用mil,因为Allegro的Padstack默认也是mil,省得来回换算。
3.3 导出后的文件检查
ASCII文件导出后,用文本编辑器打开看一眼。文件开头会有版本信息和单位声明,往下翻能看到每个封装的描述块。重点检查:
- 焊盘定义部分是否有
Pad关键字,后面跟着形状和尺寸。 - 丝印部分是否有
Track或Arc关键字,坐标是否合理。 - 文件末尾是否有完整的结束标记。
如果发现某个封装的焊盘定义缺失,或者坐标明显异常(比如全是0),说明导出时出了问题,需要回到AD里重新检查该封装。
4. Allegro端导入:从ASCII到可用的.dra
4.1 导入前的环境准备
在Allegro里导入AD的ASCII文件之前,有几件事必须先做好:
- 设置好Padstack的默认路径。Allegro导入时会自动生成.pad文件,这些文件需要有个存放位置。建议在项目目录下建一个
padstacks文件夹,并在Allegro的User Preferences里把padpath指向这个文件夹。 - 确认Allegro的版本兼容性。AD导出的ASCII格式版本如果太新,老版本Allegro可能读不了。我实测下来,Allegro 17.2及以上版本对AD ASCII的支持比较好,16.6也能用但偶尔会有焊盘丢失的情况。
- 关闭不必要的设计规则检查。导入过程中Allegro会尝试应用默认的DRC规则,如果封装里有不符合规则的元素(比如丝印压焊盘),会弹出一堆警告。建议先在Setup → Constraints里把DRC关掉,导入完成后再手动检查。
4.2 执行导入操作
在Allegro PCB Editor里,选择File → Import → CAD Translators → Altium。弹出的对话框里需要设置几个关键参数:
- Input File:选择AD导出的ASCII文件。
- Output Directory:选择封装文件的输出目录,一般就是你的项目库目录。
- Default Padstack Path:指向刚才建的padstacks文件夹。
- Units:必须和AD导出时的单位一致,选错会导致尺寸放大或缩小。
- Import Options:这里有几个子选项,建议只勾
Create Padstacks和Create Symbols,其他如Import Netlist、Import Rules全部取消。
点击OK后,Allegro会开始解析文件。这个过程可能需要几分钟,取决于封装数量和复杂度。导入完成后,会在输出目录下生成一批.dra文件和对应的.pad文件。
4.3 导入后的验证与修复
导入完成不代表万事大吉,必须逐个打开.dra文件检查。我一般按以下顺序验证:
第一步:焊盘检查。打开封装后,用Tools → Padstack → Modify Design Padstack查看每个焊盘的参数。重点看:
- 焊盘形状是否正确(圆形、矩形、椭圆形)。
- 尺寸是否和AD里一致,误差超过0.05mm就要警惕。
- 钻孔尺寸是否正确,特别是通孔焊盘。
- 焊盘的层设置是否完整,表贴焊盘应该只在Top层有定义。
第二步:丝印检查。Allegro的丝印层是Silkscreen_Top和Silkscreen_Bottom,AD的丝印转换过来后可能跑到其他Subclass上。用Display → Color/Visibility打开所有层,确认丝印线条在正确的层上。如果发现丝印跑到Assembly层或者Place_Bound层,需要手动改层。
第三步:Place Bound检查。Allegro用Place_Bound_Top来定义器件的占位区域,AD的封装转换过来后这个区域往往是空的或者不准确。建议手动绘制一个矩形Place Bound,大小比器件本体略大即可。这个步骤虽然繁琐,但对后续PCB布局时的DRC检查很重要。
第四步:原点设置。AD封装的原点可能在任意位置,Allegro里需要把原点设置在器件中心或者第一脚位置。用Setup → Change Drawing Origin来调整,一般建议放在器件几何中心。
5. 那些教程不会告诉你的避坑细节
5.1 焊盘编号丢失的根因
这是最常见的问题:导入Allegro后,焊盘全在,但编号全变成PAD1、PAD2这种默认名,或者干脆没有编号。根本原因是AD的ASCII文件里,焊盘编号的存储方式和Allegro的解析逻辑不匹配。
AD里焊盘编号是Designator,比如1、2、A1、B2。导出ASCII时,这些编号会被写在Pad描述块里。但Allegro导入时,如果ASCII文件的格式版本不对,或者焊盘描述的顺序有问题,就会导致编号解析失败。
解决办法有两个:一是在AD导出前,把所有焊盘的Designator改成纯数字(去掉字母),这样兼容性最好;二是在Allegro导入后,手动用Tools → Padstack → Rename来重新编号。如果封装引脚不多,手动改反而更快。
5.2 异形焊盘的降级处理
立创EDA里有些封装用了异形焊盘,比如USB Type-C的引脚焊盘是长条形带圆角,或者某些功率器件的焊盘是自定义多边形。这些焊盘在AD里可能显示正常,但导出ASCII时会变成近似多边形,导入Allegro后形状严重失真。
我的处理方式是:在AD里就把异形焊盘替换成标准形状。比如长条形焊盘用Obround(椭圆形),多边形焊盘用Rectangle近似。虽然损失了一点精度,但保证了转换的成功率。如果确实需要异形焊盘,建议在Allegro里手动重建,用Shape工具绘制。
5.3 单位不一致导致的尺寸灾难
这个问题隐蔽性很强。AD导出ASCII时如果单位是mm,而Allegro导入时选了mil,结果就是所有尺寸乘以39.37,焊盘间距变成几十毫米,整个封装完全没法用。
预防措施很简单:在AD和Allegro里统一用mil。AD的默认单位可以在Preferences → PCB Editor → General里改,Allegro的单位在Setup → Design Parameters → Design里改。两边都设成mil后,再执行导出和导入,基本不会出问题。
如果已经导错了,也不用重新来。在Allegro里用Tools → Padstack → Scale功能,把所有焊盘尺寸按比例缩放回来即可。但丝印和Place Bound的坐标需要手动调整,比较麻烦。
5.4 多层焊盘的层映射错误
AD里的多层焊盘(Multi-Layer)在Allegro里应该对应Through Hole Padstack,但导入后有时会变成Single Layer Padstack,导致焊盘只在Top层显示,Bottom层和中间层没有铜。
检查方法是:打开Padstack Editor,看焊盘的层定义里是否有BEGIN LAYER、END LAYER、INTERNAL LAYER。如果只有TOP,说明映射错了。修复方法是在Padstack Editor里手动添加缺失的层定义,或者重新导入并确保AD里焊盘的层设置是Multi-Layer。
6. 转换后的封装在OrCAD与Allegro中的关联使用
6.1 OrCAD Capture里的引脚映射
封装转好了,最终是要在OrCAD Capture里和原理图符号关联的。这里有个容易忽略的点:OrCAD的引脚编号必须和Allegro封装的焊盘编号一一对应。
比如一个SOP-8的芯片,OrCAD符号里引脚编号是1到8,Allegro封装里的焊盘编号也必须是1到8。如果封装里焊盘编号是A1到A8,关联时就会报错。所以前面强调焊盘编号要改成纯数字,就是为了这一步。
在OrCAD里,右键元件 → Edit Part → 在Pin属性里确认Number字段和封装焊盘编号一致。如果不一致,要么改原理图符号,要么改封装焊盘编号,两边必须统一。
6.2 Allegro里的封装调用
在Allegro PCB Editor里,封装通过Netlist导入或者手动Place来调用。导入Netlist时,Allegro会根据OrCAD里指定的封装名去库路径里查找对应的.dra文件。所以需要确保:
- .dra文件放在Allegro的
psmpath指向的目录下。 - .pad文件放在
padpath指向的目录下。 - 封装名和OrCAD里指定的名字完全一致,大小写敏感。
如果Allegro找不到封装,会报Package not found错误。这时候检查库路径设置,或者用Place → Manually手动放置,看列表里有没有目标封装。
6.3 更新封装后的同步问题
有时候封装需要修改,比如焊盘尺寸调整了,或者丝印位置变了。修改完.dra文件后,需要重新生成.psm文件(Allegro的封装索引文件),然后在PCB里用Tools → Update Symbols来更新已放置的器件。
这里有个坑:如果PCB里已经布好线了,更新封装可能会导致走线断开或者DRC报错。建议在更新前先备份,更新后仔细检查连接性。另外,如果封装名变了,更新时会找不到对应关系,需要手动重新关联。
7. 批量转换的效率技巧与常见问题速查
7.1 批量处理多个封装
如果一个项目里有几十个封装要转,逐个操作太慢。我的做法是:
- 在AD里把所有封装放在一个.PcbLib里,一次性导出ASCII。
- 在Allegro里用Import功能批量导入,生成一批.dra文件。
- 写一个简单的Allegro Skill脚本,批量执行原点设置、Place Bound绘制、丝印层检查等重复操作。
Allegro Skill虽然学习曲线陡,但批量处理时能省大量时间。网上有一些开源的Skill脚本可以参考,比如批量改原点、批量生成Place Bound的,稍微改改就能用。
7.2 常见问题速查表
| 问题现象 | 可能原因 | 解决方式 |
|---|---|---|
| 导入后焊盘全部消失 | ASCII未勾选Pad Stack Information | 重新导出,确保勾选该选项 |
| 焊盘尺寸放大39.37倍 | 单位不一致(mm vs mil) | 统一单位后重新导入,或用Scale功能修复 |
| 焊盘编号变成PAD1/PAD2 | AD里焊盘Designator含字母 | 改成纯数字后重新导出 |
| 丝印跑到Assembly层 | 层映射错误 | 手动改层到Silkscreen_Top |
| 通孔焊盘只有Top层有铜 | 多层焊盘映射错误 | 在Padstack Editor里添加缺失层 |
| Allegro找不到封装 | 库路径未设置或封装名不匹配 | 检查psmpath和padpath,确认封装名一致 |
| 更新封装后走线断开 | 焊盘位置或尺寸变化 | 更新后重新布线,或使用Gloss修线 |
7.3 什么情况下建议手动重建
虽然转换流程能解决大部分问题,但以下几种情况我建议直接手动重建封装,反而更快:
- 封装引脚数少于10个,且形状简单。
- 封装包含异形焊盘或复杂机械结构。
- 转换后修复时间超过15分钟。
- 封装对精度要求极高(比如BGA、细间距QFN)。
手动重建虽然费时,但能保证封装质量,避免后续PCB出问题。特别是BGA这种,焊盘间距小、引脚多,转换过程中哪怕一个焊盘偏移0.01mm,都可能导致焊接不良。
8. 个人实操体会:转换不是终点,验证才是
这套流程我用了大概两年多,从最初的每次转换都提心吊胆,到后来形成固定的检查清单,中间最大的体会是:转换工具能帮你省时间,但不能帮你省验证。
每次转换完成后,我一定会做三件事:第一,用Allegro的DRC检查一遍封装,看有没有间距违规;第二,把封装放到一个测试PCB上,和实物器件或者规格书对比尺寸;第三,在OrCAD里关联原理图符号,确认引脚映射无误。这三步做完,才敢把封装放进正式项目库。
还有一个经验:建立自己的封装库版本管理。每次转换或修改封装后,记录版本号和修改内容,避免不同项目用了不同版本的同一个封装导致混乱。我一般用Git管理封装库,每次修改提交一次,方便回溯。
最后说一个容易被忽略的点:立创EDA的封装更新频率很高,有时候同一个元件在不同时间导出的封装会有细微差异。如果项目周期长,建议在项目开始时就把所有封装转换好并冻结版本,不要中途重新导出,否则可能出现封装不一致的问题。