1. 为什么IC封装库是PCB设计的“地基工程”画PCB这件事很多人把注意力放在布线、阻抗、叠层上但真正让项目翻车的往往是封装库。我见过太多案例板子打样回来芯片焊盘偏了0.2mm整批板子报废或者Pin 1方向搞反飞线飞到怀疑人生。这些问题的根源几乎都指向同一个环节——封装库没做对。Cadence Allegro 17.4作为当前主流的PCB设计平台之一它的封装库体系相对严谨但也因此让不少从其他EDA工具转过来的工程师感到不适应。Allegro的封装不是在一个文件里画完就完事它涉及Pad Stack Editor焊盘编辑器和PCB Symbol Editor封装符号编辑器两个核心工具的配合。很多新手一上来就打开Symbol Editor开始摆焊盘结果发现焊盘尺寸不对、阻焊层缺失、钢网层没加最后只能推倒重来。这篇文章要解决的问题很明确从零开始完整走一遍标准IC封装的制作流程。不管你是刚接触Allegro的新手还是从其他平台转过来、对Allegro封装体系还不熟悉的老手跟着这个流程走一遍至少能保证你做出来的封装是“能用”的——焊盘尺寸合理、层设置完整、Pin 1方向明确、DRC检查通过。需要提前说明的是Allegro的封装制作有一套相对固定的逻辑顺序先做焊盘Pad Stack再做封装符号Symbol。这个顺序不能颠倒因为Symbol Editor在放置引脚时需要调用已经建好的Pad Stack。理解这个依赖关系是后面所有操作的基础。另外关于“cadence和allegro的区别”这个热搜词这里顺带说一句Cadence是公司名Allegro是它旗下的PCB设计工具品牌。就像Adobe和Photoshop的关系。所以严格来说你用的是“Cadence Allegro”这个工具而不是“Cadence”这个工具。这个区分在跟人交流或者搜资料的时候挺重要搜“Cadence封装”出来的结果可能偏向IC设计搜“Allegro封装”才是PCB方向的内容。2. 动手之前Pad Stack Editor焊盘设计全解析2.1 焊盘尺寸怎么算——别凭感觉按公式来焊盘尺寸是封装库最核心的参数也是最容易出错的地方。很多人习惯“差不多就行”但焊盘尺寸偏大可能导致短路偏小则焊接不良。正确的做法是根据datasheet给出的引脚尺寸和公差按照IPC-7351标准来计算。以常见的SOP-8封装为例datasheet上引脚宽度典型值0.40mm公差±0.10mm引脚间距1.27mm。焊盘宽度的计算公式是焊盘宽度 引脚最大宽度 制造公差 装配公差实际工程中常用的简化算法是焊盘宽度取引脚最大宽度的1.2~1.5倍。对于0.40mm±0.10mm的引脚最大宽度0.50mm焊盘宽度取0.60mm左右比较合适。焊盘长度的计算稍微复杂一些需要考虑引脚长度、焊点形成所需的额外延伸量通常叫“跟部延伸”和“趾部延伸”。对于SOP封装焊盘长度一般取引脚长度的1.3~1.5倍。如果引脚长度是1.0mm焊盘长度取1.4mm左右。这里给一个我常用的快速参考表封装类型焊盘宽度系数焊盘长度系数典型间距SOP1.2~1.5倍引脚宽1.3~1.5倍引脚长1.27mmQFP1.2~1.4倍引脚宽1.4~1.6倍引脚长0.5/0.4mmQFN1.0~1.1倍引脚宽1.0~1.2倍引脚长0.5/0.4mmBGA0.8~1.0倍球径0.8~1.0倍球径0.8/1.0mm注意QFN封装的焊盘通常不需要额外延伸太多因为QFN是底部焊接焊盘过长反而容易导致连锡。BGA焊盘一般比球径略小这是为了保证焊接时球体能够自对准。2.2 Pad Stack Editor实操从新建到保存打开Pad Stack Editor第一步是选择焊盘类型。Allegro支持多种焊盘类型Through通孔、Blind/Buried盲埋孔、Single单面、SMD表贴。做IC封装最常用的是SMD类型。新建一个Pad Stack单位选择Millimeter毫米精度建议设为4位小数。精度这个事我建议至少保留3位因为很多芯片的引脚间距是0.4mm、0.5mm这种精度不够会导致累积误差。接下来是设置各层的参数。Allegro的焊盘层结构比很多人想象的复杂一个完整的SMD焊盘至少需要设置以下几层Begin Layer顶层焊盘这是实际焊接的面Soldermask Top阻焊层通常比焊盘单边大0.05~0.10mmPastemask Top钢网层通常与焊盘等大或略小0.02mmRef Des位号层用于放置元件标号阻焊层的设置有个经验值焊盘间距大于0.5mm时阻焊单边外扩0.10mm间距小于等于0.5mm时外扩0.05mm甚至更小。这是因为间距小的时候阻焊桥太窄容易脱落需要适当缩小阻焊开窗来保证阻焊桥的宽度。钢网层的设置相对简单一般与焊盘等大。但对于QFN这类底部散热焊盘钢网需要做网格化处理通常开成60%~70%的面积分成多个小格避免焊接时气泡和偏移。设置完各层参数后点击Save保存。保存路径建议统一管理比如在项目目录下建一个library/padstack文件夹所有焊盘文件都放这里。命名规则也要统一我习惯用“封装类型_引脚间距_焊盘尺寸”的格式比如SOP127P060X140表示SOP封装、1.27mm间距、0.60mm宽、1.40mm长的焊盘。这样一看名字就知道参数后面调用的时候不容易搞混。2.3 热焊盘和散热过孔的处理对于需要接地的焊盘比如QFN的底部散热焊盘或者大功率芯片的接地引脚通常需要做热焊盘Thermal Relief处理。热焊盘的作用是在焊接时减少散热避免因为铜箔散热太快导致虚焊。在Pad Stack Editor中热焊盘的设置主要在Negative层或者通过Shape符号来实现。Allegro 17.4中更推荐的做法是在焊盘上直接放置散热过孔阵列然后在铺铜时通过Thermal Relief连接。散热过孔的参数一般是孔径0.3mm、焊盘0.6mm间距1.0~1.2mm。过孔太多会影响焊接太少则散热不够。我的经验是对于3mm×3mm的散热焊盘放9个过孔3×3阵列比较合适5mm×5mm的放16个4×4阵列。实操心得散热过孔一定要做塞孔处理Via Plugging否则焊接时锡膏会从过孔流走导致焊盘上锡不足。塞孔的方式可以在Pad Stack里设置也可以在PCB加工时备注。3. PCB Symbol Editor把焊盘变成完整封装3.1 新建Symbol与参数设置焊盘做好之后打开PCB Symbol Editor。新建Symbol时Package Symbol类型选择“Package Symbol”单位同样选Millimeter精度保持一致。这里有个细节容易被忽略Origin原点的位置。原点的设置直接影响后续在PCB中放置元件时的坐标。我的习惯是把原点放在封装的几何中心这样放置元件时坐标比较直观。对于不对称的封装原点放在Pin 1的位置也可以但要在文档里标注清楚。设置好之后先别急着放焊盘。第一步应该是画Place Bound放置边界和Silkscreen丝印外框。Place Bound决定了元件在PCB上占用的空间DRC检查时会用到。Silkscreen则是实际生产时印在板子上的白色外框用于标识元件位置和方向。Place Bound的尺寸一般比实际封装大0.2~0.5mm留出焊接和维修的空间。Silkscreen的线宽通常设0.15mm太细了生产时印不出来太粗了影响美观。3.2 放置引脚顺序、间距与Pin 1标识放置引脚是封装制作的核心步骤。在Allegro中通过Layout→Pins命令调出引脚放置界面。这里需要输入几个关键参数Pin Count引脚总数Start Number起始编号通常是1Increment增量通常是1Pin Spacing引脚间距Pad Stack选择之前做好的焊盘对于SOP-8封装引脚间距1.27mm两排引脚。放置的时候先放一排然后用Mirror或者Copy命令做另一排。注意另一排的引脚编号要连续比如第一排1~4第二排5~8而且第二排的引脚方向要旋转180度。Pin 1的标识非常重要。我见过因为Pin 1标反导致整板报废的案例。在Allegro中Pin 1的标识通常通过以下几种方式组合在Silkscreen层画一个圆点或方框在Assembly层标注Pin 1位置在Place Bound层做一个缺角最稳妥的做法是“丝印圆点缺角”双重标识。丝印圆点放在Pin 1附近缺角画在Place Bound的对应角落。这样即使丝印被元件遮挡Assembly层的标识也能帮助确认方向。注意Silkscreen不能压在焊盘上否则生产时丝印会印到焊盘上影响焊接。Allegro的DRC会检查这一点但最好在画的时候就注意避开。3.3 添加位号、元件高度与Assembly层引脚放完之后还需要补充几个信息Ref Des位号在Silkscreen层放置元件标号的位置比如“U1”、“R1”等。位号的位置要放在元件外框附近不能压在焊盘上也不能离得太远。Component Height元件高度在Place Bound层设置元件的最大高度。这个参数在后续做3D检查或者结构干涉检查时会用到。对于普通IC高度一般填datasheet上的最大厚度值。Assembly层Assembly层是给装配图用的通常包含元件的精确外框和Pin 1标识。很多公司要求Assembly层的精度比Silkscreen更高因为装配图是给产线工人看的。User Part Number在Component层填入元件的物料编号或者型号方便后续BOM管理。这些信息看起来琐碎但缺了任何一个封装库就是不完整的。我建议做一个检查清单每做完一个封装就对照检查一遍检查项所在层是否必须焊盘Begin Layer必须阻焊开窗Soldermask必须钢网Pastemask必须丝印外框Silkscreen必须Pin 1标识Silkscreen/Assembly必须放置边界Place Bound必须元件高度Place Bound推荐位号Silkscreen必须物料编号Component推荐3.4 保存与入库文件命名和目录管理封装做完之后保存为.dra文件。但.dra只是可编辑的源文件实际在PCB中调用的是编译后的.psm文件。在Allegro中通过File→Create Symbol命令生成.psm文件。文件命名我强烈建议遵循统一规则。我的习惯是封装类型_引脚数_间距_体宽比如SOP8_127_390表示SOP-8封装、1.27mm间距、体宽3.90mm。这样在PCB中调用的时候一眼就能找到需要的封装。目录结构也要规划好。我通常这样组织project/ library/ padstack/ # 焊盘文件 symbol/ # 封装符号文件 package/ # 编译后的.psm文件 datasheet/ # 芯片datasheet project/ # PCB工程文件在Allegro的User Preferences中把padpath和psmpath指向对应的目录这样在PCB中就能自动搜索到这些封装。4. 从封装到PCB调用、验证与常见坑4.1 在PCB中调用封装并做DRC检查封装做好之后最终要在PCB工程中调用。在Allegro中通过Place→Manually命令调出放置界面在Package Symbol列表中找到做好的封装放到板上。放置之后第一件事是跑DRC。Allegro的DRC会检查封装是否符合设计规则比如焊盘间距是否满足最小间距要求、丝印是否压焊盘、Place Bound是否重叠等。如果DRC报错常见的几类问题和解决方法问题现象可能原因解决方法焊盘间距DRC报错焊盘尺寸偏大或间距设置错误检查Pad Stack尺寸确认间距参数丝印压焊盘Silkscreen线宽太粗或位置偏移调整丝印线宽或移动丝印位置Place Bound重叠封装边界设置过大缩小Place Bound尺寸找不到封装psmpath路径未设置检查User Preferences中的路径配置DRC通过之后建议再用3D视图检查一遍。Allegro 17.4支持3D预览可以直观地看到元件在板上的立体效果确认高度和位置是否正确。4.2 封装库的版本管理与复用封装库不是做完就完了后续的维护和复用同样重要。我踩过的一个坑是同一个封装在不同项目里做了好几遍参数还不一致最后导致BOM混乱。解决方法是建立中央封装库。所有项目共用一套封装库新项目需要新封装时先查库里有没有没有再做做完入库。库的版本用Git或者SVN管理每次修改都记录变更原因和影响范围。对于从其他平台比如AD转过来的工程师可能会想直接下载现成的封装库。网上确实有一些封装库资源但我的建议是关键封装一定要自己画。下载的封装你无法确认它的参数是否准确、层设置是否完整出了问题很难排查。非关键的无源器件封装可以下载但也要做DRC验证。实操心得每次做完一个新封装我都会在库里放一个测试板文件把封装放上去跑一遍DRC和3D检查。这个测试板文件不大但能避免很多低级错误。4.3 常见问题速查与避坑指南问题一焊盘尺寸对了但焊接后连锡这通常不是焊盘尺寸的问题而是阻焊层设置的问题。阻焊开窗太大导致两个焊盘之间的阻焊桥太窄甚至没有焊接时锡膏就连在一起了。解决方法是缩小阻焊开窗保证阻焊桥宽度至少0.10mm。问题二QFN封装焊接后偏移QFN的焊盘设计有个特殊要求焊盘内侧要留出足够的空间给芯片本体外侧要留出足够的空间给焊点。如果焊盘太长芯片放上去后容易滑动。另外底部散热焊盘上的过孔如果没塞孔锡膏会流走也会导致偏移。问题三Pin 1方向搞反这个问题最致命但最容易避免。我的做法是在封装的Silkscreen层用“圆点缺角”双重标识在Assembly层再用一个箭头标注。同时在PCB布局时养成“先确认Pin 1再放置”的习惯。问题四封装在PCB中显示不出来检查三个地方psmpath路径是否正确、.psm文件是否已生成、封装名称是否与文件名一致。Allegro对大小写敏感文件名和封装名必须完全匹配。问题五从AD转过来的封装库怎么处理AD的封装库不能直接用于Allegro需要转换。但转换后的封装往往层设置不完整需要手动补充阻焊层、钢网层和Place Bound。我的建议是只转换引脚位置信息焊盘和层设置重新做。5. 一些提高效率的实操技巧5.1 用Script录制重复操作做封装的时候有很多重复操作比如设置阻焊层参数、画丝印外框、放置引脚等。Allegro支持Script录制可以把这些操作录下来下次直接回放。录制Script的方法File→Script→Record然后正常操作操作完成后Stop。回放的时候File→Script→Play选择录好的脚本文件。对于经常做的封装类型录一个脚本能省不少时间。但要注意Script对坐标和参数是硬编码的如果封装尺寸变了脚本可能不适用。所以Script适合做那些参数固定的操作比如设置层参数、画标准外框等。5.2 用Excel批量生成焊盘参数如果需要做一系列相似封装比如SOP-8、SOP-14、SOP-16可以用Excel先算好所有焊盘参数然后批量在Pad Stack Editor中创建。Allegro支持通过Skill脚本批量创建焊盘但需要一定的编程基础。对于不想写代码的可以手动创建第一个然后用Copy命令复制再修改参数。这样比从头做快很多。5.3 封装库的定期审查封装库用久了难免会有一些废弃的、重复的、参数错误的封装。我建议每半年做一次库审查把不再使用的封装归档把参数有问题的修正把重复的合并。审查的时候重点关注焊盘尺寸是否符合当前工艺能力、阻焊层设置是否合理、Pin 1标识是否清晰、文件命名是否规范。这些工作看起来繁琐但能避免很多生产事故。5.4 与PCB加工厂的沟通要点封装库的最终目的是生产所以做封装的时候要考虑加工厂的工艺能力。比如最小焊盘间距一般加工厂能做到0.10mm但建议设计时留0.15mm余量最小阻焊桥0.08mm~0.10mm低于这个值需要确认加工厂能力最小丝印线宽0.15mm太细了印不出来散热过孔塞孔需要提前和加工厂确认是否支持这些参数在做封装之前就应该确认好而不是等板子做出来才发现问题。6. 从封装库延伸到PCB设计的整体思维封装库看似只是PCB设计的一个环节但它实际上反映了整个设计流程的严谨程度。一个封装库做得规范的项目往往布线、叠层、DFM检查也不会太差。反过来封装库乱七八糟的项目后面大概率会出各种问题。我在带新人的时候通常会让他们先做几个封装练手。不是因为他们需要做很多封装而是通过做封装能快速理解Allegro的层概念、坐标系统、DRC规则、库管理逻辑。这些基础打好了后面学布线、仿真、DFM都会顺很多。另外封装库的积累是一个长期过程。每做一个新项目都会遇到新的封装需求。把这些封装做好、管好、复用起来时间长了就是一笔宝贵的资产。我自己的库里现在有几百个封装覆盖了大部分常用器件新项目基本上不需要从头做封装效率提升非常明显。最后分享一个我个人的习惯每做完一个封装我都会在库文件的备注里写清楚这个封装的来源哪个项目的哪个芯片、关键参数焊盘尺寸、间距、以及任何特殊注意事项比如需要塞孔、需要特殊钢网开窗等。这些备注在半年后自己都忘了的时候能救命。