Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库

Ultra Librarian / Altium 元器件包 → Cadence SPB 16.6 CIS 入库全流程

定位 :本文档是"从厂商/立创/LCSC 下载的元器件数据包 → 本机 CIS 库可放置元器件"的完整作业指导书。

由 RTL8367N-VB-CG(UL 包,2026-09-23)和 RTL8367RB-CG(Altium 包,2026-10-03)两次全流程实战写成。


0. 环境事实(勿重新探索)

项 值
Cadence 安装 D:\Cadence\SPB_16.6(仅 16.6,无 17.x)
allegro.exe D:\Cadence\SPB_16.6\tools\pcb\bin\allegro.exe
create_sym.exe 同目录(只能在真控制台跑,见 FAQ-5)
Capture/tclsh D:\Cadence\SPB_16.6\tools\capture\Capture.exe;tools\tcltk\8.4\bin\tclsh84.exe(跑 Dbo Tcl 前把 tools\capture 加进 PATH)
符号库 D:\CIS_LIBRARY\SCH\*.OLB
焊盘/封装库 D:\CIS_LIBRARY\PCB\pad\*.pad、D:\CIS_LIBRARY\PCB\symbol\*.dra/.psm/.ssm
CIS 数据库 D:\CIS_LIBRARY\CIS\Trent_CIS_2022.mdb(Access,pyodbc + {Microsoft Access Driver (*.mdb, *.accdb)})
生效 ini D:\Cadence\SPB_Data\cdssetup\OrCAD_Capture\16.6.0\Capture.ini(Part Management→DBC;Part Library Directories→SCH;Allegro Footprints→PCB)
关键环境变量(用户级) CDSROOT=D:\Cadence\SPB_16.6、CDS_LIC_FILE=D:\Cadence\LicenseManager\license.dat、HOME=D:\Cadence\SPB_Data、PATH 含 tools\pcb\bin
YC CODE IC 表前缀 60501(另有 60510 段在用),Oscillator=60602;取同前缀 MAX+1,insert_part.py 自动做

1. 输入:认识三种原料

来源 特征 内容
Ultra Librarian 包 文件名 ul_*.zip,立创/LCSC 页 "Ultra Librarian" 按钮下载 AllegroV17_2\*.xml(封装几何)、OrcadCaptureXML\*.xml(符号引脚)、*.step(3D)、builder.ile(17.2 专用,16.6 无用)
Altium 包 Altium_*.zip,同页面 Altium 按钮下载 *.schdoc(符号,ASCII 记录流)、*.pcbdoc(封装,ASCII 记录流)
只有 PDF 手册 最苦的情况 手工按 Land Pattern 画(走 cadence-new-part skill 路线 B)

选型建议:优先下载 UL 包(格式结构化最好);只有 Altium 包也行(本文档 §3 有转换器)。

2. 文件格式要点

2.1 UL Allegro XML(目标格式,一切以它为准)

xml 复制代码
<Footprint name="封装名">
  <Units type="mils" precision="3" />
  <Extents minX minY width height />
  <Padstack name="..." type="single">
    <Layers>
      <Layer name="TOP|PASTEMASK_TOP|SOLDERMASK_TOP">
        <Pad shape="rectangle|square|circle|oblong|octagon" width height />
  • 等宽高焊盘必须 shape="square"(含散热盘 EPAD)------rectangle 等宽高会被 axl 拒绝(FAQ-9)
  • <Pin number padName originX originY rotation>:坐标已相对封装原点,单位 mil
  • <Layer name="PACKAGE GEOMETRY/SILKSCREEN_TOP|ASSEMBLY_TOP|PLACE_BOUND_TOP" packageHeight>
    • Path type="line"=线段(lineWidth 宽度);≥3 点闭合折线→按 shape 处理
    • <Label textBlock angle x y text justify>=文字
  • 层名对照:Altium TOPOVERLAY→SILKSCREEN_TOP;MECH7(courtyard)→PLACE_BOUND_TOP;本体→ASSEMBLY_TOP

2.2 Altium schdoc/pcbdoc(ASCII 记录流)

  • 文件头 |HEADER= 或 |RECORD=,记录间以 \x00 或下一条 |RECORD= 分隔
  • 属性 |KEY=VALUE 竖线分隔;坐标带单位后缀如 3028.7400mil
  • pcbdoc 关键记录:Component(原点=PATTERN 中心)、Pad(NAME/X/Y/XSIZE/YSIZE/SHAPE/ROTATION)、Track(X1 Y1 X2 Y2/LAYER/LINEWIDTH)、Region(VXn/VYn 顶点)
  • schdoc 引脚:RECORD=2 记录里 DESIGNATOR=脚号、NAME=脚名
  • 转换器:python altium2ul_xml.py <pcbdoc> <schdoc> <out.xml> <footprint_name>(在 workspace,可挪进 skill scripts)

2.3 Generate Part 的 PSpice Model(做 .olb 的唯一可行路线)

复制代码
.subckt <PartName> 脚名1 脚名2 ...     ← 每行约6个,续行以 "+ " 开头
.ends <PartName>
  • 不要用 Actel Pin File:格式不公开、HEADER 规则踩不出来(FAQ-7)
  • 生成器:python pins_pspice_lib.py <capture_xml> <PartName> <out.lib>(UL 包直接用;Altium 包从 pins.json 取名)

3. 完整操作流程(六步)

第 1 步 · 备料

解压到独立构建目录(如 D:\Desktop\rb_build,目录名不能含空格以外的中文也可,但路径里别有空格更稳)。

  • UL 包:直接用 AllegroV17_2\*.xml
  • Altium 包:先 altium2ul_xml.py 转成 UL 格式 XML;核验输出行 pads=N、pins in sch but not pcb: [](引脚数与名称两边一致才算过)

第 2 步 · 生成 SKILL 构建脚本

bash 复制代码
python "C:\Users\38101\.agents\skills\cadence-ul-import\scripts\gen_dra_skill.py" <build_dir> <xml...>

产物:ul_build.il(数据内联的 SKILL)、build.scr.txt、template.dra(空 Package 绘图模板,skill 核心资产,勿删)。

第 3 步 · Allegro 批量构建 .dra/.pad

bash 复制代码
cd <build_dir> && ("<allegro.exe>" -s build.scr.txt > allegro_run.log 2>&1 &)
  • 启动必弹 Product Choices 对话框 → computer-use:选 Allegro PCB Librarian XL → OK(每次都弹,没有免弹配置)
  • 轮询 allegro.jrl 里的 ULBUILD 行,验收标准 :
    • drawing opened type=PACKAGE
    • pins created=N failed=0(N=总脚数含散热盘)
    • <name> saved
  • 结束后:记 PID 精确杀会话(taskkill /PID <pid> /F,严禁 /IM ,会误杀用户开的工程!),rm -f *.lck
  • 产物:<name>.dra + pad*.pad

第 4 步 · 编译 .psm(用户手工,1 分钟)

把 skill\scripts\make_psm.bat 复制到构建目录,让用户双击,黑窗里依次输入:

复制代码
Symbol Drawing (*.dra): → <name>.dra
Package Symbol (*.psm): → <name>.psm

看到 'xxx' saved to disk. 即成功。

第 5 步 · 生成 .olb(用户在 Capture 里点,共 5 次点击)

先备料:python pins_pspice_lib.py ... <PartName>.lib(Altium 包从 pins.json 生成同名 .lib)。

用户在已打开的 Capture 里:

复制代码
Tools → Generate Part...
  Netlist/source file:       <build_dir>\<PartName>.lib   ← 文件名框手敲完整路径
  Netlist/source file type:  PSpice Model                 ← 改路径后会自动重置,必须重选!
  Part name:                 <PartName>
  Destination part library:  D:\CIS_LIBRARY\SCH\<短名>.OLB
  → OK

生成后 .OLB 落在源 .lib 旁边 → 拷进 D:\CIS_LIBRARY\SCH\。

第 6 步 · 入库登记 + 四查(全自动)

bash 复制代码
# 拷贝正本
cp <name>.dra <name>.psm <name>.step → D:\CIS_LIBRARY\PCB\symbol\
cp pad*.pad → D:\CIS_LIBRARY\PCB\pad\        # 大小写与登记名统一
cp <PartName>.OLB → D:\CIS_LIBRARY\SCH\<短名>.OLB

# 验证符号名(输出 PART: 行,逐字符用于登记)
PATH=".../tools/capture:$PATH" tclsh84.exe dump_olb.tcl "D:/CIS_LIBRARY/SCH/<短名>.OLB"

# 写库(自动备份 mdb + 分配 YC CODE + 回查)
python insert_part.py parts.json     # cadence-new-part skill scripts 下

parts.json 字段(IC 表示例):

json 复制代码
[{"table":"IC","Part Type":"Transceiver","Value":"RTL8367RB-CG",
  "Description":"Realtek RTL8367RB 5口千兆交换 LQFP-128 0.4mm",
  "Schematic Part":"RTL8367RB-CG",          ← dump_olb 输出的符号名,一字不差
  "Allegro PCB Footprint":"QFP128_RTL8367RB", ← = .psm 文件名,一字不差
  "Manufacturer Part Number":"RTL8367RB-CG","Manufacturer":"Realtek"}]

Part Type 必须复用表内已有词汇 (SELECT DISTINCT [Part Type] FROM [IC]:ADC/DAC, Amplifier, Clock, Logic, MISC, Power, Processor&Controller, Programmable IC, Storage, Transceiver)。

四查(全过才算完)

  1. dump_olb 输出含目标符号名
  2. insert_part.py 回查行内容正确
  3. ls PCB\symbol\<footprint>.* 同时有 .dra 和 .psm
  4. ini 三项指向 D:\CIS_LIBRARY

放置验证(教用户)

Capture 原理图页右键 → Place Database Part → 搜 Value → 双击放置。

CIS Explorer 是登记前开的话要重开才刷新。

4. 常见问题清单(全部实战踩过)

# 报错/现象 根因 解决
1 UL 官方 .bat 弹 "Allegro 17.2 or later is required" builder.ile 检查版本,16.6 不支持 放弃官方流程,用 gen_dra_skill.py 自建
2 阿狸狗降版本工具无法使用 它只转 17.x 二进制(.dra/.psm/.brd),UL 包里只有 XML 源数据 同上,XML 直接生成 16.6 数据,无需降版本
3 allegro -s 启动后一直卡住不动 每次启动必弹 Product Choices 对话框等人工点 computer-use 点掉(选 Librarian XL → OK)
4 pins created=0 failed=N + "can only be applied to symbol drawings" 打开的是 BOARD/SHAPE 绘图;axlSetSymbolType/axlSetDesignType/newdraw/newsym/gensym 在 16.6 全都不可用 用 skill 的 template\probe_pkg.dra + axlOpenDesignForBatch;库里 flash*.dra/c1r20_d/aspad20 都是 SHAPE 类型不能当模板
5 Unable to start program; create_sym allegro 会话内拉不起子进程(补齐 CDSROOT/PATH 也无效) 用 make_psm.bat 在真控制台编译 .psm
6 axlSaveDesign 后没有 .psm 16.6 保存只写 .dra 正常,走 FAQ-5 的 bat
7 Generate Part 报 ORCAP-1541/1516(Actel Pin File) Actel 格式不公开,HEADER 规则构造不出 换 PSpice Model 路线(.subckt 端口=引脚),实测稳定
8 Generate Part 的 Browse 看不到 .lib/.txt 文件类型过滤 文件名框手敲完整路径;且每次改路径后 type 会自动重置,必须重选 PSpice Model
9 WARNING(SPMHA1-102): Illegal figure size(焊盘建不出) RECTANGLE 图形等宽高被拒,等宽高必须用 SQUARE gen_dra_skill.py 已内置转换(rectangle 等宽高→SQUARE);手写 XML 时注意
10 (axlDBCreatePin): Invalid Text Block - 17 模板绘图没有 17 号文字块 引脚号文字块统一用 3
11 WARNING(SPMHA1-102) 连带 ERROR(SPMH1-161) dbdoctor 焊盘失败后的连锁反应 修根因(多半是 FAQ-9)即可消失
12 ERROR(SPMHDB-184): Unfilled SHAPE may not exist on PLACE_BOUND_TOP place bound 用了不填充的 shape OpenShape 第二参传 t(填充)
13 WARNING(SPMHA1-108): Illegal line segment ... end points XML 里有起止点相同的零长度退化线段 生成器已过滤连续重复点
14 保存时卡 "Do you want to save the changes ... unnamed?" 会话退出前的保存提示 computer-use 点"否"(产物已单独存过)
15 启动弹 "...is being edited by user... override the lock?" 上次强杀进程留下 .lck rm -f *.lck 后重试
16 误杀用户的 Allegro 工程 用了 taskkill /IM allegro.exe 铁律:只允许 taskkill /PID;启动会话先记 PID
17 SKILL sprintf 崩溃 too many format specs 生成器把 %%s 按字面写入 SKILL 里 % 是字面量不需转义;修生成器(已修)
18 sprintf 报 argument incompatible SKILL 的 %d/%g 对浮点/整数挑剔 调试消息统一用 %L(打印任意 Lisp 数据)
19 Capture 16.6 找不到 XML 导入 该功能 16.6 没有(olb.xsd 无脚本引用) 走 Generate Part(FAQ-7 路线)
20 写 mdb 报锁定失败 Capture/Access 开着库文件 关 CIS 浏览窗/Access 再写

5. 硬性规矩(违反会翻车)

  1. 杀进程只按 PID(见 FAQ-16)。
  2. 写 mdb 前必备份(insert_part.py 自动做,别绕过它手写 SQL)。
  3. Schematic Part 与 OLB 内符号名一字不差 ;Allegro PCB Footprint 与 .psm 文件名一字不差(变体后缀 -M/-L 放 Alt_Symbols 或 Description,不放主名)。
  4. Capture 运行中不改 Capture.ini(退出时会覆盖你的修改)。
  5. 调试产物只放构建目录;入库正本只认 D:\CIS_LIBRARY 里的拷贝。
  6. template\probe_pkg.dra 是唯一可用的 Package 模板来源,删了就要用 UI 手工重建(File→New→Package symbol→命名→Ctrl+S)。

6. 两次实战记录(可对照排错)

RTL8367N-VB-CG RTL8367RB-CG
原料 ul_*.zip(UL 格式) Altium_*.zip(schdoc+pcbdoc)
封装 QFN88_RTL8367_RTK,89 脚(88+EPAD) QFP128_RTL8367RB,129 脚(128+EPAD 5.6mm)
YC CODE 605010018 (待登记)
特有坑 FAQ-4/5/7/8/10/16 FAQ-9(SQUARE)+ Altium 格式转换

7. 增补 FAQ(2026-10-03 RB 实战第二轮)

# 报错/现象 根因 解决
21 Generate Part 后同会话 Place Database Part 报 ORCIS-6085 生成的 OLB 被自动挂进当前工程(工程树 Library 下出现该 olb),Capture 持有 .OLBlck 锁,CIS 读取冲突 工程树右键该 olb → Remove From Project 释放锁;锁文件消失后重开 CIS Explorer 放置
22 .psm 也能全自动编译 bash 管道喂 stdin 会触发 create_sym 批处理模式(SPMHUT-39) PowerShell Start-Process cmd /c make_psm.bat 开真控制台 + computer-use 键盘输入两行文件名
23 Generate Part 对话框可远程驱动 活动文档是**项目管理器(.opj)**时 Tools 菜单项才可用(原理图页激活时全灰) computer-use:AXExpand Tools → AXPress Generate Part...;对话框字段用 setValue 按 window_id 固定绑定填写
24 符号太丑(Generate Part 单列长条) 自动生成的固有布局 抄参考设计:课程/同事的 .dsn 用 export_to_olb.tcl 抽符号(路线 A),名字一致则数据库零改动直接换 OLB 文件

RB 实战结论 :参考工程 02_千兆5口交换机项目\01-工程文件\SCH\RTL8367RB_5PORT_SWITCH.DSN

一次抽出 15 个可用符号(RTL8367RB-CG、RJ45_053_5、HX5084NL、TMI3253SH、XTAL2 等),

换入 D:\CIS_LIBRARY\SCH\RTL8367RB.OLB(原自动版备份为 _auto_backup.OLB)。

相关推荐
AI 编程助手GPT1 小时前
GPT-6 Luna (Batch) 批量处理性能与质量深度评测
数据库·gpt·batch
quweiie1 小时前
Neo4j Community 安全访问配置总结
数据库·centos·neo4j
hahaha60162 小时前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
꯭自꯭闭꯭2 小时前
DM7主备升级方案
linux·服务器·数据库
ebiobiz2 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
蜗牛互联网2 小时前
MongoDB Atlas Agent Engine之后,如何用版本门禁防止陈旧写入
java·数据库·人工智能·后端·mongodb
IvorySQL3 小时前
PostgreSQL 日报 |PostgreSQL 19 Beta 4 发布(9 月 25 日)
数据库·postgresql
科技研学社3 小时前
绿色合规时代,碳足迹与ESG倒逼服装工厂工序升级
数据库·人工智能
小神兵3 小时前
对电压源与电流源的的简单理解
单片机·嵌入式硬件·物联网