sync: HP_BOWEI 2026-10-15

This commit is contained in:
Myfro9
2026-10-15 01:59:40 +08:00
parent 771acd4171
commit a0a3445bfd
21 changed files with 3042 additions and 16 deletions
+140 -4
View File
@@ -132,7 +132,9 @@ payload 的 `retry` 和 `sim_results` 告诉你上一轮发生了什么,**把
> 典型应用电路或参考设计保持一致,便于逐项比对、便于照抄取值,也便于后面 `n101`
> 导入 PCB 后直接沿用这层就近关系。
`batch_add_and_connect` / `batch_add_components` / `batch_connect` 比逐个加快得多。
首选 `scripts\schgen` 脚本库生成(见 schgen/README.md,示例 `E:\Kicad_design\DVBS2_dmod\carrier\gen\gen_sch.py`):
自带重叠/越界、子电路、ERC、网表器件数检查,封面框图由 `schgen.diagram` 渲染、`schgen.root` 嵌入。
零星修改才用 MCP 的 `batch_add_and_connect` / `batch_add_components` / `batch_connect`。
这是三条回环的汇合点,payload 会告诉你这轮为什么回来:
- `fix_plan` 非空 → `d22` 判了不符合需求,**逐条按方案返工**
@@ -207,6 +209,10 @@ STM32 可用 cubemx MCP 的 `get_pin_functions` / `get_pinout` 交叉验证。
2. 按型号或 datasheet 从网上下载并安装
3. 按型号或 datasheet 自己画(`create_footprint`)
脚本化做法:`schgen.fplib.FpLib`(KiCad 自带 python 跑)按位号从参考 `.kicad_pcb` 提取封装,
自画件直接写 `.kicad_mod`;原理图生成脚本里用 `fp_resolver` 按数值查表。
验收:`python -m schgen.check <根图>` 的"封装"一行必须是"全部 N 个器件有封装且引脚/焊盘一一对应"。
`search_footprints` / `list_library_footprints` 找库内现成的,
`search_jlcpcb_parts` 可顺带确认可采购性。
@@ -304,9 +310,139 @@ STM32 可用 cubemx MCP 的 `get_pin_functions` / `get_pinout` 交叉验证。
### `n101_import_to_pcb`(101)— 导入 PCB
`sync_schematic_to_board` 把原理图导入 PCB(器件带封装落板)。导入后确认器件数与
网表数与原理图一致(`get_component_list`、`get_nets_list`)。
**用 `schgen.pcbimport`,不要用 MCP 的 `sync_schematic_to_board`**(G-0039):后者自报 success,
实测 ipots 载板 338/327 封装、191/426 网;DVBS2_dmod 26/60 网(`Net-(...)` 无名网全丢、
多出一个 PWR_FLAG 网、U4 一串焊盘没网)。
PCB 的布局/布线/DRC **不属于本流程**,导入成功即收工。
```powershell
cd $env:USERPROFILE\.claude\skills\kicad-flow\scripts
& <KICAD_PYTHON> -m schgen.pcbimport <根图.kicad_sch> <工程>\<prj>.kicad_pcb [--layers 4]
```
它从 kicad-cli 网表建一块新板(封装按页排在停车场、挂网),再重新载入**逐焊盘**比对网表,
末行"验收:… 问题 0"才算成功。每次都是重建整块板,布局开始后别再跑。
导入成功后直接进入阶段五(PCB)。
回填:`--set pcb_path="<.kicad_pcb 路径>" --set imported=true`
---
## 阶段五:PCB —— 布局要求 → 布局 → 为布线调整原理图 → 关键线布线
PCB 段在 PR00.drawio 右侧,cell id 形如 `T50IymjQljGLdgGnkx4X-109`,下面只写末尾数字。
**原理图调整是「先试后落」的**:`d140` 只提方案、不动原理图;方案依次过 FPGA
(`d116`→`n118`→`d123`)和 MCU(`d128`→`d132`)两道校验,全过才算通过
(`adjust_status=accepted`),**由 `n183` 真正改原理图并更新到 PCB**。任一道不过即
「调整被拒绝」→ `d148` 想新方案;总尝试次数由 `d144` 卡在 `max_adjust_retry`(默认 3),
超了或想不出新方案都是「放弃调整」(`adjust_status=abandoned`),**按原原理图继续布线,
不是 safety_end**。
### `n109_prompt_pcb_rules`(109)— **要用户**给布局要求 md
**必须拿到用户本人的回答**,不能替他编要求。md 放 `<工程>\Notes\` 根目录(用户手写),
至少覆盖:① 板层设置(层数/叠层/各层用途);② 阻抗线、差分线、等长线的要求;
③ 线宽、过孔的要求。回到这里时 payload 的 `missing` 是上轮查出的缺项,照着问。
回填:`--set pcb_rules_md="<md 绝对路径>"`
### `d176_pcb_rules_complete`(176)— 布局要求完整吗
逐项核对,而且每项都要是**能直接落成设计规则的数值**(目标阻抗 + 按叠层算出的线宽/间距、
差分对与等长组成员及容差、最小线宽/过孔孔径与焊环)。「按常规」「尽量短」不算。
> false 回 `n109` 再问用户,上限 `max_pcb_rules_retry`(默认 3),超限 safety_end。
回填:`--set pcb_rules_complete=true` 或 `--set pcb_rules_complete=false --json '{"missing":["等长容差"]}'`
### `n110_place_components`(110)— 评估难度并布局
先把板框、叠层、网络类设进 PCB,再评估布局布线难度(BGA/细间距扇出与层数、关键信号走向
与长度、大电流路径、接口器件的板边约束),然后在满足用户要求的前提下**以最有利于布线**
的方式摆件。用 `schgen.pcbplace`(KiCad 自带 python),`check()` 到 0 重叠/出板,
`render()` 出正反面 PNG 目视。难度评估与布局理由写成一份 md。
回填:`--set placement_report="<md 路径>" --set placed=true`
### `d140_need_sch_adjust`(140)— 要不要为布线调整原理图连线
看飞线:FPGA 同 bank 内换脚、MCU 功能换到另一组可复用引脚、连接器/排阻换序、差分对 P/N 对调
这类**只改连接、不改功能**就能明显省层/省过孔/解交叉的地方。**此时先别动原理图**。
回填:`--set need_sch_adjust=false`,或
`--set need_sch_adjust=true --json '{"adjust_plan":[{"ref":"U1","change":"LED0: A5→B6","why":"省两个过孔"}]}'`
### `d144_adjust_over_limit`(144)— 无 interrupt
图自己计数:放行一次 `adjust_retry` +1;已达 `max_adjust_retry` 就判「已超过三次,放弃修改」
直接去 `n159`。
### `d116_need_fpga_pin_change`(116)/ `d128_need_mcu_pin_change`(128)— 方案动没动管脚
只看当前 `adjust_plan`。板上没有 FPGA / MCU 直接回 false。
**`d128` 回 false 就等于本轮方案通过**(FPGA 那道要么没涉及、要么已经过了),下一步 `n183` 落地。
回填:`--set need_fpga_pin_change=true` / `--set need_mcu_pin_change=false`
### `n118_rebuild_vivado_probe`(118)— 按新管脚重建验证工程
优先在 `n14` 建的工程上改 XDC。检查项与 `n14` 相同:管脚分配、供电 bank、时钟与 PLL
(时钟仍在 CC 脚)、差分对;Zynq 另查 MIO/EMIO、QSPI/eMMC/JTAG。
回填:`--set vivado_prj_dir="<工程目录>"`
### `d123_swap_bitstream_ok`(123)— 新管脚下出得来 bitstream 吗
> **false 不回 `n118` 重试**,而是本轮方案被拒 → `d148`。别在这里反复改 Vivado。
回填:`--set bitstream_ok=true` 或 `--set bitstream_ok=false --json '{"errors":["时钟不在 CC 脚"]}'`
### `d132_swap_mcu_io_ok`(132)— 调整后的 MCU IO 对吗
判据同 `d17`(专用脚复用、上拉/开漏、电平域、启动引脚),STM32 可用 cubemx 交叉验证。
**与 `d17` 不同:false 不退回 `n10`**,只是本轮方案被拒 → `d148`。
回填:`--set mcu_io_ok=true` 或 `--set mcu_io_ok=false --json '{"violations":["PB3:JTDO 被占"]}'`
### `d148_have_new_adjust`(148)— 被拒了,还有新方案吗
payload 的 `rejections` 最后一条是被拒原因。避开它能给新方案就回 true 并带新 `adjust_plan`;
想不出就 false —— 放弃调整。
回填:`--set have_new_adjust=false`,或 `--set have_new_adjust=true --json '{"adjust_plan":[...]}'`
### `n183_apply_sch_adjust`(183)— 修改原理图并更新到 PCB 中
只有方案通过(`d128` 否 / `d132` 正确)才会到这里。
1. 按 `adjust_plan` 改原理图连线。schgen 生成的原理图就**改生成脚本重出图**,别手改
`.kicad_sch` 之后又被脚本覆盖。
2. 更新到 PCB:PCB 已经布局,**绝对不要重跑 `schgen.pcbimport`**(它重建空板,布局全丢),
只改受影响焊盘的网络并保持器件位置。
3. FPGA 的 XDC 以 `n118` 通过的那版为准。
4. kicad-cli 导出网表与 PCB 逐焊盘核一遍,改过的网络全部一致才回 true。
回填:`--set applied=true --set note="<改了哪些网络>"`(路径变了再加 `schematic_path` / `pcb_path`)
### `n159_collect_critical_nets`(159)— 统计阻抗/差分/等长需求
payload 的 `adjust_status`:
- `accepted` → 方案已由 `n183` 落地,以更新后的网络为准。
- `abandoned` → 原理图不动;若为验证改过 Vivado 工程的 XDC,退回 `n14` 那版。
- `none` → 没调整,直接统计。
然后对照原理图、datasheet 与布局要求 md 统计**所有**阻抗线、差分线、等长线,并在 PCB
里建好对应网络类/差分对规则。
回填:`--json '{"critical_nets":[{"group":"USB","kind":"diff","nets":["USB_DP","USB_DN"],"rule":"90R 5/5mil"}]}'`
### `n167_route_critical_nets`(167)— 关键线布线(流程终点)
按用户布线原则把 `critical_nets` 全部布完(kicad MCP 的 `route_differential_pair` /
`route_trace` 等):差分对全程耦合、换层配回流过孔、等长组绕到容差内。布完跑 DRC,
关键线相关违规清零,逐组记录实测长度/偏差写进布线报告。普通信号不在本步范围。
图随后写最终报告并结束。
回填:`--set routed=true --set route_report="<md 路径>"`