Chip SpyGlass CDC Resolver
分析 SpyGlass CDC 报告,通过 LLM 与知识库中的 CDC 规则信息,对 RTL 进行分析,给出修改建议或生成 waiver 文件。
When to Use
- 处理
chip-spyglass-cdc-chk生成的 CDC 报告(cdc_summary.log、cdc_verify.log) - 需要分析 CDC 违例的根因并给出 RTL 修改建议
- 需要为可接受的违例生成 waiver 文件
- CDC 签核前的违例清理
核心工作流
0. 加载 Blackbox 模块列表
1. 解析 CDC 报告 → 提取 (rule, severity, file, line, message) 元组
2. 过滤 Blackbox → 模块在 blackbox 列表中的违例自动 waive
3. 按优先级分类违例 → P0~P7
4. 对 P0 违例:必须修复,LLM 分析 RTL 给出修改方案
5. 对 P1~P7 违例:LLM 分析判断是否真问题,修复或 waive
6. 输出:RTL 修改建议 + waiver 文件
Step 0: 加载 Blackbox 模块列表
读取 blackbox-modules.md(本 SKILL.md 同目录),加载 blackbox 模块列表。
判定规则:
- 模块名匹配 blackbox 列表条目,或
- 违例文件路径包含 blackbox 模块名(如
ip/pll_top/pll_clk_gen.v匹配pll_top)
Blackbox 模块典型类型:
- 第三方 IP(非团队所有)
- 已验证 IP(已 tape-out 证明)
- 硬宏或模拟封装
- 明确排除在 CDC 检查范围外的模块
如果 blackbox-modules.md 为空或不存在,跳过此步骤。
Step 1: 解析 CDC 报告
CDC 报告来自 chip-spyglass-cdc-chk 的输出,典型路径:
{module}_work/ds/report/cdc/cdc_summary.log— 汇总报告{module}_work/ds/report/cdc/5_cdc_verify.log— 详细违例{module}_work/ds/report/cdc/4_cdc_verify_struct.log— 结构检查
SpyGlass 日志格式:
Warning [<rule_name>] <file>:<line> <message>
Error [<rule_name>] <file>:<line> <message>
提取:rule_name、severity、file path、line number、violation message。
如果日志格式未知,要求用户粘贴样本或指定格式。
Step 2: 过滤 Blackbox 违例
对每个解析出的违例,检查其模块是否在 blackbox 列表中:
module_name ← 从文件路径提取(如 "pll_top" 从 "ip/pll_top/pll_clk_gen.v")
if module_name in blackbox_list:
→ 标记为 BLACKBOX_WAIVED,跳过优先级分析
所有 blackbox waive 的违例在 waiver 文件中单独一节输出。
Step 3: 按优先级分类违例
查 cdc-rules-reference.md(本 SKILL.md 同目录)中的规则映射表。
rule_name → P0/P1/P2/P3/P4/P5/P6/P7
如果规则不在映射表中:
- 标记为 "unknown rule"
- 提示用户手动分类
Step 4: 执行优先级动作
| 优先级 | 动作 | 输出 |
|---|---|---|
| P0 (Ac_unsync01/02) | 必须修复,禁止 waive。 LLM 分析 RTL,给出同步器添加方案 | RTL 修改建议 |
| P1 (Ac_conv01~05) | 分析判断。 LLM 检查是否真收敛问题。若是 → 用 gray_signals 或异步 FIFO 修复;若否 → waive | 修复或 waive |
| P2 (Ac_glitch*) | 分析判断。 LLM 检查同步器输入是否来自寄存器。若否 → 修复;若是 → waive | 修复或 waive |
| P3 (Ac_cdc01) | 分析判断。 LLM 检查快→慢时钟域信号是否需要脉冲展宽 | 修复或 waive |
| P4 (Ac_datahold01a) | 分析判断。 LLM 检查 qualifier 保护下数据是否稳定 | 修复或 waive |
| P5 (Ac_cdc08) | 分析判断。 LLM 检查多 bit 信号是否需要异步 FIFO | 修复或 waive |
| P6 (Ar_*) | 分析判断。 LLM 检查异步复位是否需要同步释放 | 修复或 waive |
| P7 (Ac_fifo01) | 分析判断。 LLM 确认异步 FIFO 正确性 | 修复或 waive |
关键规则:P0(Ac_unsync01/02)绝对禁止 waive,必须从设计层面修复。
Step 5: 生成输出
5a. RTL 修改建议 (cdc_fix_proposal.md)
# CDC Fix Proposal
## Summary
- Total violations: N
- Blackbox waived: N
- P0 must-fix: N (Ac_unsync01/02)
- P1~P7 reviewed: N
- Fix required: N
- Waived: N
- Unknown rules: N
## P0 — Must Fix (NEVER Waive)
### [P0] Ac_unsync01 — <file>:<line>
**Violation:** <message>
**Root Cause:** <分析>
**Fix:**
```verilog
// Before
<原始代码>
// After — 添加双触发器同步器
<修复代码>
P1~P7 — Reviewed
[P1] Ac_conv01 — :
Violation: Assessment: <真收敛问题 / 误报> Action: Fix / Waive Fix (if applicable): ...
[P6] Ar_unsync01 — :
Violation: Assessment: <需要同步释放 / 已正确处理> Action: Fix / Waive
#### 5b. Waiver 文件 (`{module}.cdc.waiver`)
SpyGlass waiver 文件格式:
```waiver
// Auto-generated CDC waiver file
// Module: {module}
// Date: YYYY-MM-DD
// Generated by chip-spyglass-cdc-resolver
// === Blackbox Module Waives ===
waive -rule <rule> -file <file> -line <line> -message "BLACKBOX: <module> is in blackbox list (<reason>)"
// === P1~P7 Conditional Waives ===
waive -rule <rule> -file <file> -line <line> -message "<reason>"
// === Constraint-based Waives (推荐替代方案) ===
// quasi_static -name "cfg_*" — 准静态信号
// set_case_analysis -value 0 [get_ports test_mode] — MUX 选择端
// cdc_false_path -from src -to dst — 非功能路径
Waive 理由:
- BLACKBOX 模块:
"BLACKBOX: <module> is in blackbox list (<reason>)" - P1~P7 无真实问题:
"Reviewed: no functional impact, <explanation>" - 误报:
"False positive: <explanation>" - 约束可解决:
"Can be resolved by <quasi_static|set_case_analysis|cdc_false_path>"
注意:对于 quasi_static、set_case_analysis、cdc_false_path 可解决的违例,优先建议修改 SGDC 约束而非 waive。
Step 6: Wiki 知识查询
对复杂违例,查询 wiki 获取规则详情:
wiki query: "<rule_name> CDC violation fix"
Wiki 提供:
- 规则定义和原理
- 常见违例模式
- 标准修复方案
- 相关编码规范
利用 wiki 知识提高根因分析和修复建议的质量。
输出文件
| 文件 | 用途 | 位置 |
|---|---|---|
cdc_fix_proposal.md |
RTL 修改建议 | 与 CDC 报告同目录 |
{module}.cdc.waiver |
CDC waiver 文件 | ds/run/ 目录 |
参考文件
| 文件 | 说明 |
|---|---|
cdc-rules-reference.md |
CDC 规则 → 优先级映射(P0~P7)+ 分析指引 |
blackbox-modules.md |
可配置的 blackbox 模块列表(自动 waive) |
常见错误
| 问题 | 处理 |
|---|---|
| 规则不在映射表 | 标记 unknown,提示用户分类 |
| 日志格式未知 | 要求用户粘贴样本 |
| 用户要求 waive P0 | 拒绝,提示 P0 必须修复 |
| wiki 知识不可用 | 使用通用知识继续,标注 "wiki unavailable" |
| blackbox-modules.md 为空 | 跳过 blackbox 检查,处理所有违例 |
| 模块名不明确 | 同时匹配文件路径和模块声明 |
与 chip-spyglass-cdc-chk 的关系
chip-spyglass-cdc-chk → 执行 CDC 检查 → 生成 cdc_summary.log
↓
chip-spyglass-cdc-resolver → 分析违例 → 生成修复建议 + waiver 文件