| name | bb-trace-signal-path |
| description | 在 AST JSON 上做信号路径追踪:source → sink 提取跨模块层次的传播路径,判定是否跨时钟域。供 CDC violation 根因分析与 critical path 辅助。触发场景:(1) bb-check-cdc 报 violation 需取证;(2) 综合 critical path 分析;(3) 显式 /bb-trace-signal-path。 |
| user-invocable | true |
bb-trace-signal-path
职责
读取 bb-parse-ast 产出的 AST JSON,DFS 跟踪 source 信号到 sink 的赋值/连线链,输出路径节点列表 + CDC 标记。
- 调用者:
bba-guru-synthesis、bb-check-cdc
- 上游:
bb-parse-ast(或 fallback)
- 禁止使用:Task / Agent / Skill
Input Args
| arg | type | required | 默认 | 说明 |
|---|
| ast_path | path | true | — | AST JSON |
| source_signal | string | true | — | 完整 hierarchical path:top.inst.sub.sig 或 模块本地:<module>.<signal>(fix M-11) |
| sink_signal | string | true | — | 同 source_signal 格式 |
| design_name | string | true | — | — |
| max_depth | int | false | 50 | DFS 深度上限(防环) |
| stamp | string | false | <auto> | — |
接受两种 source 格式:
- hierarchical:
top.u_rx.fifo.wr_data — 全局唯一
- module-local:
uart_rx.rx_data — 当跨同名实例时歧义,trace 在歧义时返回多条 path
Output Contract
| field | 值 |
|---|
artifact_path | designs/<name>/ast/signal_path_<stamp>.json |
script_path | designs/<name>/ast/trace_<stamp>.py |
source | str |
sink | str |
path | [{module, signal, line, op}] |
crosses_clock_domain | bool |
valid | bool |
error | string|null |
4-Phase 执行
Phase 1 — render_trace_py
scripts/render_trace_py.py 渲染 Python:
import json
ast = json.load(open(ast_path))
path, cdc = trace(ast, source_signal, sink_signal, max_depth)
json.dump({"path": path, "crosses_clock_domain": cdc}, open(out, "w"))
trace() 实现:以 source 为起点,按 cont_assign / non_blocking_assign / port_connection 边 DFS,记录每跳的 module/signal/line/op。
Phase 2 — run_trace
scripts/run_trace.py:timeout 300 uv run python <script_path> > <log> 2>&1
Phase 3 — parse_trace
scripts/parse_trace.py:
- 输出 JSON 解析;
path == [] → error="path not found"
- 任一跳的
clk_domain 与下一跳不同 → crosses_clock_domain=true
Phase 4 — return
返回 JSON。调用方据 crosses_clock_domain + path 决定开 CDC issue 或调整 RTL。
收敛 / 失败
| 状态 | 行动 |
|---|
| valid=true | 提供详细 path |
path not found | AST 不完整 / 信号名错;切 fallback 重解析 |
| 超 max_depth | error="trace depth exceeded"(疑似环) |
资源索引
scripts/render_trace_py.py、scripts/run_trace.py、scripts/parse_trace.py
lib/cdc_classifier.py — 节点 clock domain 推断
references/ast_traversal_rules.md