还在手绘FPGA封装?PolyLibs 帮你一键生成 Xilinx FPGA 的符号与封装

还在手绘FPGA封装?PolyLibs 帮你一键生成 Xilinx FPGA 的符号与封装

原创 · 樱木花道长 · FPGAer Zone ·

由于Xilinx官方并不提供现成的库文件,仅提供pinout文件,工程师需要重头开始建库、校对;FPGA器件动辄大几百、好几千个pin,一条一条的手动绘制、核对,工作量巨大,稍有不慎就会引入设计bug,影响项目周期,这也令很多工程师对Xilinx望而却步。

PolyLibs 这个开源项目解决了这个脏活:选好型号,一键生成 KiCad / Cadence
格式的符号库和封装库,焊盘坐标精确到球号解码,缺省焊盘自动留空。内置 Xilinx 全系列(7series / UltraScale /
UltraScale+ / Versal / Zynq),实测 88 个测试用例全绿,Cadence SPB 17.2 上 2577 球的
FLGA2577 封装交互验收通过。


一、PolyLibs 是什么

PolyLibs 是一个 Xilinx FPGA 原理图符号与 PCB 封装自动生成工具。输入是官方的 pinout CSV 文件,输出是 KiCad 或 Cadence 可用的符号库和封装库。

不是那种「帮你画个框然后自己填引脚」的半自动工具。PolyLibs 自动处理:

-符号生成:按引脚功能自动分组(电源、地、IO Bank、MGT、配置),生成左右分区式符号图

-封装生成:按球号精确解码坐标,支持缺省焊盘(depopulation),输出丝印框、装配框、占地区

-多格式输出:KiCad(.kicad_sym + .kicad_mod)、Cadence(OrCAD XML + Allegro SKILL 脚本)

内置器件覆盖 Xilinx 当前主流系列:

厂商系列说明
Xilinx7seriesA7 / K7 / V7 / S7 等全系
XilinxultrascaleKU / VU / 系列
Xilinxultrascale_plusVU+ / AU+ / ZU+ 等
XilinxversalVC / VE / VM /以及Versal Gen2系列
Xilinxzynq7000Zynq-7000 全系
Xilinxzynq_us_plusMPSoC/RFSOC

需要新厂商或新系列,照着 manifest.yaml 模板填上就完事。框架不绑死 Xilinx。


二、为什么选择 KiCad 和 Cadence 双版本?

PolyLibs 同时支持 KiCad 和 Cadence 两种输出格式,各有各的定位:

KiCadCadence
授权完全开源免费商业 EDA(需 License)
适用场景个人项目、开源硬件、教学、爱好者企业级 专业EDA产品
开发程度支持Python接入,适合AI自动化处理相对封闭
输出格式.kicad_sym + .kicad_modOrCAD Library XML + Allegro SKILL
上手难度低,社区资源丰富专业工具,学习曲线陡峭
验证方式kicad-cli 可做自动化验证交互验收(无自动化 CLI 验证)

KiCad 是推荐的默认格式——免费、开源、零门槛;

Cadence 版本面向已有 License 的专业用户,帮各位硬件大佬一键生成大型 BGA 封装,免去手动建库的体力活。

⚠️ Cadence
License 免责声明: PolyLibs 不提供 Cadence SPB / OrCAD / Allegro 的商业
License。本工具生成的仅为中间格式文件(XML / SKILL 脚本),需在已合法授权的 Cadence
环境中使用。商业用途请务必自行购买 Cadence License。 未授权使用可能导致法律风险,开发者不承担任何责任。


三、为什么手写 BGA 封装是个坑

有过建库经验的同学对下面这些坑应该不陌生:

  1. 引脚数量多:一个 FPGA芯片,引脚数动辄 484/676 起,更大的芯片甚至能到 2000+ 球。逐一手填,眼睛都花了。
  2. 球号编码容易搞错:BGA 球号字母跳过了 I、O、Q、S、X、Z,AA 之后是 AB 不是 BA。手工写脚本的人经常在这里翻车。
  3. 缺省焊盘:有些球位有焊盘位置但没有引出信号,CSV 里根本没有这个球号。不处理的话生成的封装要么多焊盘要么少焊盘。

PolyLibs 的解法是:一切坐标来自球号解码,不靠几何推测;缺省信息完全从原始 CSV 承载,不自己猜。


四、焊盘坐标是怎么算的(设计原理)

这部分简短聊聊底层是怎么做的,对于理解输出精度很有帮助。

球号解码

每个焊盘的物理坐标由球号直接算出:

  • 数字 → 列(X 方向),字母 → 行(Y 方向)

  • 以阵列中心为原点:

    x = (col - col_center) × pitch,y = (row_center - row) × pitch
    

缺省焊盘(depopulation)

生成器只为 pinout CSV 中存在的球号放焊盘。CSV 上没有的阵列位置自然留空,不推测、不插值。缺省信息完全来自原始数据。

实例:UVBA494封装,29 列 × 18 行 = 522 个阵列位置,但只有 494 个有效焊盘,缺的 28 个集中在第 5、25 两列,与实物封装 depopulation 图一致。
在这里插入图片描述

封装数据库 pkg_db.json

只提供几何参数(pitch、本体尺寸、焊盘/阻焊/钢网直径),不含阵列规模或缺省表。新封装只需补一条 JSON:

”fgg484”: {
 ”body_size_x”: 23.0,
 ”body_size_y”: 23.0,
 ”pitch_mm”: 1.0,
 ”pad_diameter_mm”: 0.45,
 ”mask_opening_mm”: 0.5,
 ”paste_diameter_mm”: 0.4
}

五、安装与运行

系统要求

  • Windows 10/11
  • Python 3.10+
  • 可选:kicad-cli(用于 KiCad 导出验证)/Cadence

三步跑起来

第一步:克隆

git clone https://github.com//PolyLibs.gitcd PolyLibs

第二步:双击polylibs.bat

首次运行自动创建虚拟环境、安装依赖,然后启动 GUI。什么都不用管。

第三步:选型号,点生成

GUI 选厂商 → 系列 → 型号 → 封装 → 勾选 KiCad / Cadence → 生成。

输出在 output/ 目录下,自动按型号组织。

不想捣腾源码的,推荐直接使用单 exe的版本,依赖库和Xilinx Pin文件都集成一体化,可以直接分发Polylibs.exe分享给身边的同事:

在这里插入图片描述


六、使用示例

  1. 启动 polylibs.bat或Polylibs_Vxx.exe

  2. 选:Xilinx → ultrascale_plus → xczu1eg → ubva494

  3. 勾选 KiCad + Cadence

  4. 点生成

几秒钟后 output/xczu1egubva494/ 下就有完整的符号和封装文件。
在这里插入图片描述

Cadence 输出怎么用

生成后,cadence/ 目录下有:

<PACKAGE>.il — Allegro 封装构建脚本

\_load.txt il脚本加载说明(复制文本内的Skill命令到Allegro粘贴即可,免去手动敲)

<DEVICE>\_library.xml — OrCAD Capture 符号库。

Allegro 封装(.il → .dra)

  1. 打开 Allegro PCB Editor,File > New > Package Symbol,名称任意,进入编辑界面

  2. 在下方 SKILL 命令行输入:粘贴\_load.txt里的Skill命令

  3. 脚本自动创建 padstack、全部焊盘、外形框与 A1 标记;File > Save.dra

  4. 若提示 padstack 已存在的 WARN,属正常(复用已有盘)

OrCAD 符号(.xml → .olb)

  1. 打开 Capture,File > Import > Library XML

    选择 <DEVICE>\_library.xml

  2. 导入后得到 .olb,打开核对引脚数量与名称

目前是基于 Cadence SPB 17.2手动验证了多个系列的多个型号,但是没有覆盖全部型号, 建议在不低于17.2的版本上运行,有bug欢迎反馈。

KiCad 输出

生成后在 KiCad 中直接使用:符号添加到原理图库,封装添加到PCB 库目录。
在这里插入图片描述


七、验证情况

这是真跑过的,不是「理论上没问题」。

以大型器件XCVU13P-FLGA2577为例:
在这里插入图片描述

原理图封装分页太多,就以KiCAD为例展示个列表:
在这里插入图片描述

自动化测试:88 passed

cd PolyLibs.venv/Scripts/python -m pytest -q
88 passed in 0.52s

覆盖了 12 个测试文件,从引脚分类到端到端生成:

Manifest 库验证

.venv/Scripts/python -m polylibs library validate --root ..
OK: library\xilinx\7series\manifest.yaml
OK: library\xilinx\ultrascale\manifest.yaml
OK: library\xilinx\ultrascale_plus\manifest.yaml
OK: library\xilinx\versal\manifest.yaml
OK: library\xilinx\zynq7000\manifest.yaml
OK: library\xilinx\zynq_us_plus\manifest.yaml

7 个 manifest(含 example 示例)全部验证通过。

Cadence SPB 17.2 实测(重点)

针对XCZU1EG-UBVA494(494 球,29×18 阵列,0.5mm pitch)做了完整的交互验收:

  1. OrCAD 符号(Library XML → .olb)——通过
  • 生成 XCZU1EGUBVA494_library.xml(494 引脚)
  • Capture 交互 GUI → File → Import → Library XML → 导入成功
  • 得 XCZU1EGUBVA494_LIBRARY.OLB(45 KB),画布目视确认器件本体、左右引脚列、引脚名与球号均正确
  1. Allegro 封装(.il → .dra)——通过

过程中发现并修复了 3 个问题(SKILL 语法适配、图形创建判空、图纸类型前置检查),修复后:

  • 脚本零报错执行,DRC 干净
  • axlPinExport 导出 494 pin,编号、坐标与预期零偏差
  • Padstack 报表确认:TOP/SOLDERMASK/PASTEMASK 三层圆形焊盘 0.2500/0.3000/0.2000 mm,与 pkg_db.json 规格一致
  • 图形验证:PLACE_BOUND/SILKSCREEN/ASSEMBLY 三个矩形框、REF* 文字、A1 圆圈经代码验证与画布目视确认

生成器输出一致性验证

以 KiCad 封装为例,使用 verify_footprint.py 比对:

python verify_footprint.py <封装>.kicad_mod

检查:焊盘跨度 ≤ 本体尺寸,且四边留白大致对称。

Xilinx所有器件的pin_out file可通过以下路径下载,下载完后可与PolyLibs生成的库文件进行核对:

https://www.amd.com/en/developer/resources/adaptive-socs-and-fpgas/package-pinout-files.html


八、技术边界(当前版本的限制)

诚实地说一下现在还处理不了的场景:

  • 焊盘阵列中心相对本体中心有偏移(整行/整列缺省导致中心偏移半个 pitch)
  • X/Y 方向不等 pitch(当前 schema 仅支持单一 pitch_mm)
  • 非矩形本体(开槽、切角、裸焊盘 EPAD)
  • 非 BGA 编号(QFN/QFP 纯数字引脚)

需要这些特性的同学可以提 issue 或 PR,框架支持扩展。也可以自己从github/gitee下载研究交流。


九、新增器件教程(60 秒版)

想加一个新系列?三步:

  1. 放原始 CSV
pinout_file/<Vendor>/<Series>/<daughter_series>/part_name.csv
  1. 写 manifest

```bash

```javascript
vendor:
 id: xilinx
 name: Xilinx
series:
 id: my_new_series
 name: MyNewSeries
 classification: classification_rules.yaml
column_map:
 pin_name: Pin
 ball: Ball
 pin_function: ”IO Type”
data_dirs:
 - pinout_file/xilinx/my_new_series/data

  1. 验证
.venv/Scripts/python -m polylibs library validate --root ..

OK 后 GUI 里就能看到新系列。


十、总结

PolyLibs 解决的是一个具体而高频的痛点:FPGA 库文件建库。

不搞大而全,只做 BGA 符号与封装生成这一件事。

几个亮点:

  • 一键生成:双击运行,选型号,点生成。没有复杂的命令行配置
  • 坐标精确:球号解码方案,不依靠启发式猜
  • 实测验证:88 测试全绿,Cadence SPB 17.2 交互验收通过
  • 双工具输出:KiCad + Cadence,一套配置同时出两套库
  • 开源可扩展:Apache 2.0 协议,代码在 GitHub,欢迎 PR

项目地址:

关注公众号,发送 Polylibs 或 01;获取项目链接。

如果你也受够了手填几百个 BGA 焊盘的体力活,可以试试看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值