
BGA 滤波电容放置
liuem2v0.3.1
选中 BGA 芯片和滤波电容后一键自动摆放:按 BGA 焊盘的网络与位置,把电容放到芯片底部通道(节距允许时)或紧贴焊盘阵列的周边环带(背面),并给出每个电源网络的电容数量检查(每 N 个电源焊盘建议 1 颗);可在设置里指定电容的立创 C 号自动补齐差额。提供预览与一键撤销。
详情
更改日志
历史版本
评论
BGA 滤波电容放置
liuem2详情
更改日志
历史版本
评论
lceda-pcb-bga-decouple(BGA 滤波电容放置)
立创 EDA 专业版扩展:选中 BGA 芯片和滤波电容,一键把电容摆到芯片底部的合适位置——按 BGA 焊盘的网络与位置自动分配落位,并给出每个电源网络的电容数量检查。
解决什么问题
FPGA/SoC 等 BGA 器件的电源去耦电容动辄十几颗,手工在芯片底下/周边一颗颗摆位、对齐、避让非常繁琐。本插件按 BGA 焊盘阵列的几何与网络分布自动求解落位:
- 过孔对搭接(盘中孔/狗骨扇出通用,八方向):扇出过孔里存在「电源孔+地孔」对(正交 0°/90° 与斜向 45°/135° 八个方向都搜——0402 焊盘间距 36.2mil 对 0.8mm 节距正交对距 31.5/斜对距 44.5 均能覆盖)时,电容放到芯片正下方、两焊盘直接压在两个孔环上连通,无需额外布线;电容电源焊盘自动对准电源孔(必要时转 180°),搭接孔网络必须与电容网络一致;碰撞按双焊盘方块模型(电容铜=两端焊盘,本体中间无铜——侧邻孔落在本体下方不冲突,与实机 DRC 一致)精确角距判定,搭接位带评分加成(直连优先于更近的环带);无可搭接孔对时退回环带;
- 通道内优先:BGA 行/列节距的净空放得下电容时(如 1.0/1.27mm 节距配 0201/0402),电容长轴顺着通道放在芯片正下方,最靠近电源焊盘;
- 周边环带兜底:节距放不下时(0.8mm 节距是常态),自动退到紧贴焊盘阵列的周边环带,默认放到 BGA 对面(芯片背面),每颗电容落在其电源网络焊盘质心最近的一侧;
- 数量检查:按「每 N 个电源焊盘建议 1 颗」(N 可配,默认 4)给出每个电源网络的建议/已选/差额,可在设置里填立创 C 号(如 0402 100nF 的
C1525)自动创建差额电容并直接摆好(实验功能)。
功能演示
| 步骤 | 说明 |
|---|---|
![]() | ① 在 PCB 中框选/点选 BGA 芯片和滤波电容(支持框选焊盘自动归属器件) |
![]() | ② 菜单「BGA 滤波电容放置 → 自动放置选中电容…」 |
![]() | ③ 预览窗:数量检查表 + 每颗电容的搭接/环带落位明细,逐颗勾选 |
![]() | ④ 点「应用勾选的电容」,自动写入 + 保存 + 鼠线刷新 + DRC 迭代修正 |
![]() | ⑤ 电容全部搭接进 BGA 正下方:两焊盘直接压在电源/地过孔环上,无需布线 |
设置面板(占地来源/目标层/搭接/间隙/DRC 模式等):
| 设置 | 说明 |
|---|---|
![]() | 放置位置与电容占地 |
![]() | 数量检查、DRC 模式与写画布节奏 |
菜单总览:
使用方法
- 在 PCB 中选中 1 个 BGA 器件 + N 颗 2 焊盘滤波电容(点选或框选;框选到的焊盘会自动归属器件;BGA 需焊盘数达到阈值且呈规则行列阵列);
- 菜单「BGA 滤波电容放置 → 自动放置选中电容…」,预览窗展示:
- BGA 阵列信息(行列数/节距/球径/通道净空)与目标放置面;
- 每个电源网络的数量检查表(焊盘数/建议/已选/差额);
- 每颗电容的落位明细(网络、环带边/通道、坐标、旋转、距质心距离);
- 勾选要放置的电容,点「应用」——写入画布、自动保存并重开 PCB 页签刷新;
- 不满意用菜单「撤销上次放置」一键恢复原位/层/旋转(自动创建的电容会被删除)。
电容自身的网络用于归属:一端命中地网络(GND* 等可配),另一端即电源端;按「实测选中电容焊盘」得到占地尺寸(默认),碰撞检查覆盖 BGA 球焊盘、目标层上的焊盘/过孔与彼此间距。
已验证
-
实机全流程(Spartan7 板,15×15 BGA @ 0.8mm + 狗骨扇出 225 过孔 + 15 颗 0402):15/15 颗全部搭接进 BGA 正下方(电源/GND 焊盘全部压准同网络孔、双焊盘模型与其余孔/彼此零冲突,含 45°/135°/225° 斜搭接与极性翻转);分析 ~0.2s、应用 ~3s;撤销完整恢复
-
C 号链路实机验证:
lib_Device.getByLcscIds(返回数组)→pcb_PrimitiveComponent.create→modify翻层+旋转 →delete;端到端 23 项断言全绿。
DRC(默认开启,可忽略)
- 迭代修正:应用后自动真跑 DRC;触发冲突的电容会自动换位——例如换一个相邻的 GND 孔重新搭接、或退到环带空位——最多迭代 3 轮(可配)直至涉及本插件电容的间隙违例全部消除;修正颗数与剩余违例在结果弹窗和预览窗展示
- 预检禁区:摆放前先跑一次 DRC,BGA 附近既有违例的焊盘位置会被避开(不去挤已有的错误点)
- 忽略模式:设置里可改为「忽略」直接放置不检查
- 注意:未布线板上 DRC 的单对象条目(开路/连通类,如「GND: 焊盘未连接」)不是位置问题,换位无法消除,本插件不计入也不修正;全板既有违例(与 BGA 无关的)不受影响
说明与限制
- 只摆放、不布线:电容与电源焊盘/地的连接(含过孔)需手工完成;自动创建的电容未连线,需手工接入网络;
- 0.8mm 节距的通道净空(约 16mil)放不下 0402(宽约 24mil),属物理限制,插件会自动改用环带并说明;
- 扇出后狗骨过孔排会占据第一道环带线,插件自动把电容逐道外移到过孔排外的下一道环带(最多 4 道);障碍包含过孔/目标层焊盘,已布走线不参与障碍估算(走线在阻焊层下穿过电容本体属正常,但请目检电容焊盘不压走线);
- 铺铜/器件本体(非焊盘铜)不参与障碍估算;BGA 旋转角非 0/90/180/270 时按焊盘外接盒计算环带,可能有偏差;
- 写路径为
pcb_PrimitiveComponent.modify(类级,V3.2 实机验证),元件对象 setState_* 在 V3.2 类型中不可用。
开发
node test/run-offline.ts # 离线测试(122 断言)
npx eslint src test config
npx tsc --noEmit -p tsconfig.json
npm run build # 产出 build/dist/lceda-pcb-bga-decouple_vX.Y.Z.eext
node test/verify-pkg.cjs
npm run test:bundle # 构建产物冒烟(27 断言)
node tools/e2e-real.cjs [bridgePort] [ids] # 实机端到端(需桥 + EDA)
License
Apache-2.0
Changelog
0.3.1(2026-09-29)
修复电容焊盘重叠(用户实测反馈):
- 搭接位独立集改为全局(跨网络)配额感知:旧版按网络分别建独立集,不同网络的最优孔对挤在同一处时会同时选中导致焊盘重叠;现按簇大小降序逐网络取位、全局占位互斥、每网络最多取其电容数
- 分配搭接位时用该电容真实焊盘复核占位(独立集用保守焊盘预筛,复核挡住真实焊盘更大/与环带电容挤位的残余情况),冲突则弃位续取或退环带
- refine 增加几何两两重叠预检:同网络焊盘重叠 DRC 不报(间隙检查只看异网络),模型层兜底检测并当作伪违例参与换位修正;DRC 干净时预检仍执行(在提前退出之前)
- livePads 空读防护:器件焊盘读取失败(空占位=任意位置可叠,不可信)时跳过本轮修正而非瞎搬
0.3.0(2026-09-29)
DRC 智能(用户实测驱动):
- 放置后 DRC 迭代修正:真跑
pcb_Drc.check(strict, 无 UI, 详表),解析违例树;涉及本插件电容的间隙类违例(≥2 对象)触发该电容自动换位——重搜搭接孔对(可换相邻 GND 孔)+ 环带,避让其它已放电容真实焊盘/板级障碍/违例对端禁区/自身原位(强制挪动防死循环),最多迭代 N 轮(默认 3)直至干净;结果(轮数/修正颗数/剩余违例)进报告与弹窗 - DRC 模式开关:strict(默认,迭代修正)/ ignore(直接放置不检查)
- 预检禁区:放置前先跑一次 DRC,BGA 相关区域内既有违例的对端焊盘划为禁区(不挤已有错误点;全板违例只取 BGA±300mil 内,上限 200 处)
- 真实逐焊盘矩形建模:电容铜按各焊盘 polygon 外接盒实测(不同封装焊盘大小不同,实机 0402 有 27.4/22.8mil 两种),独立集占位用全组最大焊盘(保守)
- 违例解析只认 ≥2 对象的间隙类:单对象条目(开路/连通类,未布线板常态)不是位置问题,换位修不了——过滤掉,不瞎挪
- 实机:正常流 2 轮修正 6 颗、人造冲突流(clearance=0)3 轮修正 7 颗,均达「涉及本插件电容的间隙类违例全部消除」且保持 15/15 搭接
0.2.0(2026-09-29)
用户实测驱动的三项升级:
- 搭接泛化 + 全量分配:过孔对搜索改为任意角度/任意孔距(0.7~1.5 倍节距,扇出孔各自偏移后非标准几何同样可搭);评分改为「最近同网络焊盘距离(主)+质心决胜」——贴着电源焊盘的孔对优先;分配改为每网络独立集(候选互斥剔除、最大化放进 BGA 正下方的数量),替代逐电容贪心(后者会选中互相挤位的高分孔对把后续电容挤到环带);nearest/centroid 双评分择优
- 速度:应用从 ~40s 降到 ~3s——连续 modify 实测无间隔合并处理(15 颗 <0.1s),去掉成功后的固定间隔(间隔反而逼画布逐笔落盘,15 颗拖到 14.5s);画布刷新默认 fast 模式(鼠线 start/stop,不关开页签,大板省数秒),保留 reopen 兜底选项;读回直接用 modify 返回值
- 修复:搭接位占用与板级障碍分离(防同位叠加);45° 斜搭接的极性翻转(rot+180)
0.1.0(2026-09-29)
首个版本:选中 BGA + 滤波电容一键自动摆放。
- BGA 识别:焊盘数阈值 + 行列阵列检测(节距/球径实测),选中焊盘自动归属器件
- 落位求解(按优先级):过孔对搭接(盘中孔/狗骨通用,八方向含 45°/135° 斜对——电容两焊盘直接压孔环放进 BGA 正下方;电源焊盘极性自动对准电源孔、不对转 180°;搭接孔网络须与电容一致;评分加成 STRADDLE_SCORE_FACTOR=0.5,直连优先于更近的环带)→ 行列通道内(节距净空足够时)→ 周边多道环带(第一道被扇出狗骨过孔排占据时逐道外移);按电源网络焊盘质心最近侧贪心分配;BGA 球焊盘仅同面放置时算障碍(对面放置物理上不冲突)
- 碰撞模型:电容铜=两端双焊盘方块(本体中间无铜,侧邻孔落本体下方不冲突——与实机 DRC 一致);圆形孔/方块/矩形焊盘统一精确角距判定;已放电容占位与板级障碍分离(占位永不豁免,防同位叠加)
- 实机终态:用户狗骨扇出板 15/15 颗电容全部搭接进 BGA 正下方(15/15 电源焊盘压同网络孔、GND 焊盘压 GND 孔、双焊盘模型与其余孔/彼此零冲突,含 C10/C13 经斜向/加成找到的 +1V5 孔对)
- 数量检查:每 N 个电源焊盘建议 1 颗(N 可配),预览窗按网络列建议/已选/差额
- 自动创建(实验):设置立创 C 号(lib_Device.getByLcscIds → pcb_PrimitiveComponent.create)按差额补齐并直接摆好,撤销时删除
- 写路径:pcb_PrimitiveComponent.modify(类级,V3.2 元件对象 setState_* 不可用),支持移动/旋转/翻层;台账先行 + clearSelected + 保存 + 关开页签刷新;一键撤销
- 电容占地默认实测选中电容焊盘(POLYGON 世界外接盒),另有 0201~1206 预设与自定义
- 实机验证:Spartan7 板 U1(15×15 @ 0.8mm)+ 15 颗 0402,扇出前后两轮放置,过孔/走线零净空冲突,撤销完整恢复

暂无数据
类型
PCB
关键词
BGADecouplingCapacitorPlacementPowerFilter
扩展信息
| 版本 | v0.3.1 |
| 发布者 | liuem |
| 发布时间 | 2026-09-29 16:40:26 |
| 名称 | lceda-pcb-bga-decouple |
| UUID | 33c1a437ad2f41efb1f7fafdb8bf4ef4 |
| 适用EDA版本: | ^3.2.0 |
| 报告 | 报告滥用 |







评论