
简介面向电子设计自动化EDA工程师与PCB设计者这份资源汇集了Cadence软件中常用的原理图符号与PCB封装覆盖从分立器件到集成电路的多种标准元件可无缝对接到原理图绘制与布局布线流程。资源包共2000个文件压缩后约13.98MB核心内容包括428个dra原理图符号、405个psm封装、373个pad焊盘文件另含brd板级设计文件及txt、xml等辅助配置文件结构便于按类型索引。目前已有3283人学习使用适用于需要快速搭建元件库或补充非标封装的工程师。通过配套的库管理技巧与尺寸精度、兼容性、设计规则检查等实践提示能帮助使用者建立可维护的私有库减少因封装缺失或符号错误造成的返工整体提升设计的一致性与可制造性。1. 用别人拷来的Cadence原理图库和PCB封装库画板为什么总在导入时翻车深夜两点你按下Create Netlist等着原理图变网表结果Allegro里弹出一长串“footprint not found”。这不是你的电路有问题而是你手里的Cadence原理图库和PCB封装库本身不配套。很多人以为画板最难的环节是布局布线实际上一旦库文件混乱原理图画得再漂亮也推进不到PCB阶段后面的生产文件更是无从谈起。这篇笔记不聊Cadence的全套操作只聚焦两件事原理图符号库也就是OLB文件怎么建以及PCB封装库怎么同步配套。适合刚接手公司库的新人也适合把个人库整理成团队资产的老手。目标只有一个让你从新建器件到网表导入每一步都能预判结果而不是靠运气。2. 原理图符号库先定OLB文件的组织规则再动手画引脚2.1 库分区别拍脑袋按功能域划分还是按封装域划分在很多项目里原理图库的混乱往往不是符号画得差而是文件组织没有规则。Cadence Capture的原理图库以OLB文件为单元一个OLB文件里可以放多个符号。常见的做法是按功能域划分分立器件一个OLB、电源芯片一个OLB、逻辑芯片一个OLB、连接器一个OLB、特定项目专属器件单独一个OLB。这种划分方式匹配日常选型习惯查找器件时路径清晰多人协作时也不会因为都往同一个文件里写而互相冲突。按封装域划分的方式也有团队在用比如把0603封装的所有电阻电容放同一个OLB把SOP-8封装的芯片放另一个OLB。这种做法的好处是批量更新封装时比较省事但坏处也很明显你找一个传感器芯片得先想它是什么封装再翻对应文件跨封装选型时毫无效率。我见过的项目组里按功能域划分的库维护成本明显更低也更容易让新成员快速上手。文件命名也要提前统一。推荐格式是“分类_厂商_器件型号”比如POWER_TI_TPS54531不要用中文不要用空格不要用-开头。OLB文件名本身建议只到分类维度比如POWER.OLB、LOGIC.OLB器件型号留给符号名体现。这样文件列表固定新增器件只是往对应OLB里加符号不需要频繁新增库文件。2.2 创建原理图符号时引脚编号和电源引脚最容易埋雷用Capture创建新符号时从File - New - Symbol进入弹窗里有几个关键选项Name填器件型号Reference Prefix填U电阻填R电容填CPart Per Package填器件拆分数量。比如一个四运放Part Per Package填4后面在原理图里就能放U1A、U1B、U1C、U1D四个part。引脚编号必须是数据手册上的真实编号不能按封装顺序重新编号。很多人在这一步图省事画完一个16脚芯片后手动排列脚号结果把4脚和5脚对调了原理图能放进去PCB导入后焊盘网络全部错位。你要养成的习惯是先读数据手册的Pin Table原样录入Pin Number和Pin Name再调整引脚摆放位置而不是摆好位置再去改编号。电源引脚建议分成两种情况处理。普通信号芯片的电源脚可以用隐藏引脚方式引脚属性设为PowerPin Name填VCC或GND这样在原理图里不显示但导出的网表会自动连到同名全局电源网络。但如果一个芯片有两个不同电压的电源脚或者有的电源脚要单独滤波就不要隐藏直接把引脚画出来否则两个脚同名网络会连在一起原理图看着干净板子回来后纹波大得你想砸键盘。2.3 多part符号拆分规则按功能拆别按脚数拆多part器件的拆分原则是“按功能块拆”。以双路运放为例一个part放一路放大器的输入输出和反馈脚电源脚放进其中一个part或者两个part都放但隐藏连接。不要把16个引脚平均拆成两个8脚part却没考虑功能边界那样画原理图时信号回路会被割裂读图的人要来回翻part才能理解电路结构。每个part里都要保留Reference Designator和Value属性。Value属性建议填具体规格参数比如10K 1%而不是只填型号。CIS数据库不参与的原理图里Value会直接显示在图纸上填得越具体评审和后续BOM整理就越省心。NC脚空脚一定要在符号上体现可以画显式引脚然后加网络名NC或者在part里加文本标注。省这一步的后果是后来接手的人不知道这个脚能不能接网络为了稳妥只能查手册整个项目都陪着慢。2.4 用CIS数据库把符号、封装和物料信息收进同一个库OLB文件解决的是“画得出符号”的问题CISComponent Information System解决的是“这个符号对应什么物料、什么封装、哪份数据手册”的问题。Cadence Capture CIS可以从Place - Database Part打开数据库浏览器原理是Capture通过ODBC连接外部数据库在原理图里放置器件时自动带出字段。我一般把CIS字段设计成下面这些列字段名作用填写示例Part Number唯一物料编码1003-0012Manufacturer厂商或供应商某半导体公司Description简要描述低噪声运放双通道Value原理图显示的规格值10K 1%FootprintPCB封装名与封装库严格一致R0603Datasheet文件路径或链接datasheet/xxx.pdfPCB Footprint备用封装或误用的纠错字段留空这里最关键的字段是Footprint。CIS里配的封装名必须和Allegro封装库里的.psm文件主名完全一致多一个空格、大小写不同都会导致导入失败。我在某项目上见过有人把封装名填成R0603肉眼看不出来换一台电脑Allegro严格匹配后直接报错排查了半个下午才找到是尾部空格的问题。建议在CIS配置完成后导出全部器件清单用脚本统一检查Footprint列的空白字符和非法字符这个脚本后面第4章会给。3. PCB封装库建设焊盘设计、Footprint制作和命名映射3.1 焊盘选型先于封装绘制SMD与通孔焊盘的决策依据PCB封装库的最小单元不是封装外形而是焊盘。Cadence环境里焊盘由Padstack Editor创建保存为.pad文件。SMD焊盘只需要在Begin层定义顶层焊盘尺寸再配Soldermask_Top阻焊开窗和Paste_Top钢网开窗两层通孔焊盘则需要Begin、Default、End三层分别定义因为钻孔穿过整块板。焊盘尺寸不要从小道消息或别的板子上抄要有依据。最常见的做法是按IPC-7351的计算思路以器件引脚宽度和长度为基础加上制造和贴装余量。比如一个引脚宽度0.3mm的小封装焊盘宽度通常做到0.6mm左右长度比引脚伸出尺寸再加0.5mm以上。这里有一个简化经验焊盘宽度 ≈ 引脚宽度 0.3mm焊盘长度 ≈ 引脚在焊盘上的接触长度 0.4mm然后按封装的实际间距做四舍五入取整到0.05mm。对于有散热需求的焊盘比如电源芯片的裸焊盘Exposed Pad要另外建一个大焊盘并通过热过孔连接到内层铜皮。热过孔的数量和位置要参考数据手册的建议一般放在焊盘中心区域均匀分布孔径0.3mm左右孔心间距0.8mm到1.0mm避免密集打孔导致焊盘吸锡或起泡。3.2 Package Editor里建FootprintOrigin位置有门道Allegro中新建封装要打开PCB Editor选择Package Symbol类型。画封装前第一件事是设置Drawing Options里的精度和尺寸建议单位设为Mil精度至少保留两位这样后面和原理图里的Mil单位换算不会积累误差。Origin原点的放置要制度化。我的建议是放在封装几何中心理由很简单贴片机拾放时以封装中心为参考放在引脚1边缘会导致后续做Pick and Place文件时坐标换算多一道工序还容易算错。对于连接器这种形状不规则的封装可以在数据手册的推荐封装图上找到中心标记以它为原点。封装外框画在Silkscreen_Top层线宽用6mil到8mil线距焊盘边缘至少10mil避免丝印压焊盘影响焊接。引脚1标记要明显可以画一个小圆点或斜线铣在丝印层靠近1脚外侧。位号文本放在Silkscreen_Top和Assembly_Top两层都放字号60mil到80mil内容分别是元件位号如U5和带位号的装配说明。Assembly_Top上的文本可以放大一些便于产线人工核对。每个封装必须画Place_Bound_Top层形状覆盖全部焊盘并外扩15mil到25mil这是Allegro布局DRC的判定依据。没有Place_Bound的封装在放置检查里过不了板子做出来没问题评审环节却要反复解释很消耗信任。3.3 封装命名规则和文件目录结构要提前锁定封装名的规范决定了整个库能不能被自动化和重复使用。我常用的格式是类型_主尺寸_引脚间距例如SOP-8_1.27、QFN-32_0.5、C0603。不要用“芯片型号封装”的方式命名因为一个封装会被多种器件共用名称绑死了型号后面换料就要重做封装库会越来越臃肿。库的目录结构也要固定。一个推荐的做法是库根目录下设.lib用途就是存放CIS配置与说明、symbolsOLB文件、footprintsDRA和PSM文件、padsPAD文件、datasheets手册、reports导出检查报告。这个结构的好处是把源文件和中间产物分开备份时只需要打包全部目录不会漏文件。3.4 批量计算SMD焊盘尺寸的脚本让初算不再靠手感当器件型号多、引脚尺寸杂的时候手工一个个查手册算焊盘太慢也容易出错。我经常用一段Python脚本做焊盘初算按引脚宽度和间距批量输出建议值。脚本里用的是经验公式适用于常规小封装不替代数据手册的最终确认。def smd_pad_pitch(lead_width, lead_len, pitch, gap0.3): 简化计算SMD矩形焊盘宽度和长度。 lead_width: 引脚宽度 mm lead_len: 引脚在焊盘上的接触长度 mm pitch: 相邻引脚中心距 mm gap: 焊盘间距经验余量 mm pad_w lead_width gap # 焊盘宽度略宽于引脚 if pad_w pitch * 0.8: # 防止焊盘太宽导致桥连 pad_w pitch * 0.8 pad_l lead_len gap # 焊盘长度方向同样加余量 courtyard pitch 0.1 # 占位区域略大于引脚间距 return round(pad_w, 3), round(pad_l, 3), round(courtyard, 3) if __name__ __main__: parts [ (SOT-23, 0.30, 0.40, 0.95), (SOP-8, 0.25, 0.60, 1.27), (QFN-32, 0.25, 0.40, 0.50), ] for name, width, length, pitch in parts: w, l, c smd_pad_pitch(width, length, pitch) print(f{name}: pad_w{w}mm pad_l{l}mm courtyard{c}mm)脚本里gap这个参数是经验余量取值0.3mm在常规FR4工艺下基本都成立设计到高密度板或0.4mm以下引脚间距时要把gap调小到0.2mm并加一项检查如果焊盘间距小于0.15mm钢网开窗需要单独评审。脚本输出的只是初算值画封装前仍然要对着数据手册的推荐焊盘尺寸核对一遍尤其是那些手册里直接给出推荐焊盘图形的器件以手册优先。4. 让符号和封装真正对上网表生成、映射路径与一致性检查4.1 Capture到Allegro的封装映射机制是怎么工作的原理图符号不会直接变成PCB上的封装中间靠的是Footprint属性。Capture里每个符号的Footprint属性值就是Allegro封装库里的PSM文件名。生成网表时Capture把Footprint属性和网络连接关系写进网表文件Allegro导入网表时按照库路径设置去查找对应的.psm文件找到就放置找不到就报错。这里面有个常见配置误区。Allegro查找封装不是自动搜全盘而是看Setup - User Preferences - Design Paths里的PSMPATH这个路径列表要把你所有放置PSM的目录都包含进去。我在公司里接手过的某台电脑库路径里只配了C:\cadence\share\local\pcb自己的私有库目录根本没加成每次导入网表都全红这是最常被忽视的“库不存在”原因。还有一个坑是符号属性里存在多个Footprint字段。CIS配置不当或者从旧库迁移的符号有时会有Footprint和PCB Footprint两个属性Allegro以Footprint为准另一个字段不生效。看起来好像设置对了实际导入后封装对不上。解决办法是统一只保留Footprint一个字段CIS里的备用字段全部删掉或改名为Alt_Footprint避免命名混淆。4.2 网表导入失败时的排查顺序先查属性再查路径最后查文件网表导入Allegro时弹出错误对话框不要急着猛改原理图按顺序排查更快。第一步看原理图里这个器件符号的属性窗口确认Footprint字段存在且值非空。很多符号创建时根本没填这个字段尤其是从旧项目拷贝来的器件属性里只有Value和Reference Designtor没有Footprint。这种情况直接在属性编辑器里补值不用改符号。第二步检查这个封装名在封装库里是否存在。打开Allegro的File - Open把封装名输进去看能不能打开对应的DRA文件。打不开说明封装库里没有这个PSM可能是漏建了封装也可能是封装文件路径不对。第三步确认PSMPATH里包含了这个DRA文件所在目录。这三步走完90%的导入失败都能定位到具体原因。4.3 用Python检查BOM里的Footprint属性批量发现缺漏当一个库里有几百个器件时靠肉眼逐个查属性不现实。我习惯在出BOM后跑一段脚本检查Footprint字段是否为空、是否含空格、是否与封装库中的PSM文件对应。下面这个示例读取导出的CSV格式BOM并检查一个指定目录下是否存在对应的PSM文件。import csv, os, re, sys csv_path bom.csv # 从Capture导出的BOM要求包含Footprint列 fp_lib_dir lib/footprints # Allegro封装库目录 bad_chars re.compile(r[\s/-]) # 空格、斜杠、连字符视为非法封装名 def check_bom(fp_lib): with open(csv_path, encodingutf-8-sig) as f: reader csv.DictReader(f) for row in reader: name (row.get(Footprint) or ).strip() ref (row.get(Reference) or ).strip() if not name: print(f[MISSING] {ref}: 缺少Footprint属性) continue if bad_chars.search(name): print(f[INVALID] {ref}: 封装名含非法字符 - {name!r}) continue if not os.path.exists(os.path.join(fp_lib, name .psm)): print(f[NOT FOUND] {ref}: 封裝 {name}.psm 不在库目录中) print(check done) if __name__ __main__: check_bom(fp_lib_dir)脚本里对非法字符的判断很严格空格和斜杠在Allegro文件系统里可能会引发误匹配宁可多报几个也不能漏。跑完脚本后输出的三类问题分别处理缺属性的去原理图补名字非法的去符号属性里改规范名封装不在库目录的去建库或拷文件。把这段脚本放进日常出BOM的流程库的干净程度会肉眼可见地提升。5. Cadence库建设避坑清单现象、原因、解决方案5.1 焊盘中心和引脚中心错位贴片后器件整体偏移现象回流焊后器件不在焊盘正中间有的焊盘一端露铜另一端多锡看起来像贴片机偏了但调整贴片坐标后没有改善。原因封装绘制时焊盘放置参考了错误的原点。常见情况是画封装时没把原点设在几何中心而是随手放在了引脚1位置导致所有焊盘相对中心都偏移。还有一种情况是直接从旧板子导出的封装封装里的焊盘坐标本身就不对称。解决打开封装DRA文件用Setup - Change Drawing Origin重新设定原点再把全部焊盘选中按新原点重新放置。检查方法是在DRA里显示坐标把鼠标移到四个角的焊盘上看对称位置是否关于原点对称。大批量修改时可以用脚本统一处理但最稳妥的还是新库从头规范原点旧封装逐个修正后在库里做标记。5.2 位号丝印压在焊盘上成品板看不到编号现象PCB实物上丝印字符部分被焊盘覆盖或者字符离焊盘太近焊接后字符被锡膏污染放大镜下才能勉强辨认。原因画封装时把Ref Des文本放在了Silkscreen_Top层但文本外框超出了封装边界直接压在了焊盘区域。有些封装是从其它EDA工具转过来的文本位置继承原坐标没有重新调整。解决所有丝印文本与焊盘的净距至少10mil推荐20mil以上。整理库里每一个封装手工移动Ref Des文本到封装空白区域同时把文本高度统一设置为60mil到80mil笔画线宽8mil。改完后在Allegro里跑一遍Silkscreen DRC确认没有文本到焊盘的距离报错。5.3 封装没有Place_Bound层布局阶段DRC大面积报错现象元件可以放置但每次跑布局DRC时同一批器件反复报Place_Bound冲突而且报错位置在器件外围看不出实际原因。原因封装的Place_Bound_Top层缺失或者画的形状没有覆盖全部焊盘。Allegro在检测器件间距时依赖Place_Bound数据没有它就无法正确计算占位范围导致器件之间判断为距离不足。解决进入封装DRA在Place_Bound_Top层为每个封装画一个矩形或多边形覆盖范围是所有焊盘外扩15mil到25mil。对于有伸出引脚或异形边的连接器要把外扩区域沿引脚方向单独加大保证实际贴装时的吸取误差不会被误判为碰撞。保存后重新加载封装再跑DRC。5.4 通孔焊盘过孔上锡不足波峰焊后虚焊现象插件元件在波峰焊后偶发引脚和焊盘之间没有形成完整填充整排引脚里有一两个虚焊补焊后恢复正常后续批次又出现。原因通孔焊盘的孔径和引脚直径匹配不当。孔径太紧引脚插入困难且助焊剂无法充分进入孔径太松焊料通过孔洞流走焊盘上留不住锡。另外封装里的通孔焊盘如果Default层设置成了非金属化Non-Plated焊料不会润湿孔壁也会虚焊。解决核对数据手册的引脚直径孔径一般比引脚直径大0.2mm到0.3mm具体和板厂工艺能力相关。在Padstack Editor里检查通孔焊盘的Default层是否设置了Plated必须选择金属化。波峰焊接的板子焊盘外径按IPC标准再放大一点确保焊料填充充分。5.5 大电流焊盘只给了细热焊盘电源芯片过流熔断现象某电源芯片在工作电流接近额定值时报过温拆下芯片后看到PCB焊盘有发黄痕迹实测焊盘到内层铜皮的连接宽度严重不足。原因大面积铺铜焊盘为了便于手工焊接设计时用了热焊盘Thermal Relief但热连接桥的宽度按常规信号电流设计只开了0.3mm左右大电流通过时发热严重。解决对电源芯片和功率连接器热焊盘的连接桥宽度按载流需求计算常见做法是每A电流至少0.5mm桥宽并在焊盘下方铺多个过孔连接内层。如果使用回流焊而不是手工焊接可以不用热焊盘直接全连接散热和载流都更好。库建立时在封装说明里标明这个焊盘是否按大电流设计避免后续被当成普通封装复用。6. 把库从“个人工具”变成“团队资产”版本管理、自动检查和变更记录库文件也是代码必须纳入版本管理。我见过太多团队拿U盘和网盘传库文件结果某个人改了一个焊盘尺寸整个项目组的封装就悄悄变了板子做出来才发现尺寸不对这种返工代价极高。具体做法是在库根目录初始化版本仓库按版本分支管理。正式发布的库打一个稳定标签所有修改都先在实验分支进行经过评审和检查后再合并到主分支。每次修改必须提交变更记录至少写清楚改了哪个封装、为什么改、是否影响现有设计。我建议在库根目录放一个CHANGELOG.txt格式固定为“日期/修改人/器件名/变更内容”。自动化检查要成为习惯。前面第4章给的Python脚本可以在每次版本合并前跑一遍检查所有BOM的Footprint字段和库文件是否一一对应。更进一步还可以在修改封装后自动导出Gerber做对比但这一步耗时较长我一般只对关键封装做全检查其它封装做属性级检查。最后说一个自己踩过的坑。某次更新库有人把某个SOP封装里的Assembly_Top层文本误删了PR审核只看外形没注意到文本层结果产线装配时发现位号缺失几十片板子靠手写编号才勉强完成追溯。从那以后我给自己定了一条规矩任何封装修改后至少打开DRA文件把每个层逐层过一遍并生成一份包含全部层的PDF图纸作为检查附件。这个习惯看起来笨却救过我好几次。希望帮到你。本文还有配套的精品资源点击获取