# waveform_mcp **Repository Path**: courageheart/waveform_mcp ## Basic Information - **Project Name**: waveform_mcp - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-28 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Waveform Analysis MCP ## 文件结构 ``` waveform_mcp/ ├── config.py ← ★ 所有路径/文件名常量,换项目只改这里 ├── server.py ← MCP 主入口 ├── custom_patterns.yaml ← 工程师自定义报错格式(不改代码,改此文件) ├── requirements.txt └── src/ ├── vcd_parser.py ← VCD 纯 Python 解析 ├── fsdb_parser.py ← FSDB 信号值查询(libnffr.so) ├── fsdb_signal_index.py← FSDB 信号路径搜索(scope 树索引,GB 级友好) ├── log_parser.py ← VCS+Xcelium assertion fail + UVM_ERROR/FATAL └── analyzer.py ← log + 波形联合分析 ``` --- ## 安装 ```bash pip install mcp pyyaml --user ``` 验证 Verdi 库可以加载: ```bash source ~/.bashrc python3 -c " import ctypes, os d = os.environ['VERDI_HOME'] + '/share/FsdbReader/linux64' ctypes.CDLL(d + '/libnsys.so', ctypes.RTLD_GLOBAL) ctypes.CDLL(d + '/libnffr.so') print('Verdi 库加载 OK') " ``` --- ## Claude Code 全局配置 编辑 `~/.claude.json`,添加 mcpServers 段: ```json { "mcpServers": { "waveform": { "command": "python3", "args": ["/home/robin/Projects/waveform_mcp/server.py"], "env": { "VERDI_HOME": "/tools/synopsys/verdi/O-2018.09-SP2-11", "VCS_HOME": "/tools/synopsys/vcs/O-2018.09-SP2-11", "XLM_ROOT": "/tools/cadence/XCELIUM1803", "PATH": "/tools/synopsys/verdi/O-2018.09-SP2-11/bin:/tools/synopsys/vcs/O-2018.09-SP2-11/bin:/tools/cadence/XCELIUM1803/tools/bin:/usr/local/bin:/usr/bin:/bin" } } } } ``` > 必须在 env 里显式写环境变量,Claude Code 不会自动 source ~/.bashrc 配置后验证: ```bash claude mcp list # 应显示 waveform (connected) ``` --- ## Claude Code 自主 debug 工作流 当你说:**"帮我开发 case0,自主 debug 直到通过"** Claude 会自动执行以下循环: ``` 1. 读 eda-environment skill → 知道工具路径 2. 读 design/ 下 RTL 代码 → 理解设计逻辑 3. 读 vplan → 知道 case0 验证目标 4. 生成 testcase/case0.sv 5. 调用 bash: make SV_CASE=case0 6. 调用 MCP: get_sim_paths(verif_root, "case0") → 拿到 log/波形路径 7. 调用 MCP: parse_sim_log(irun.log) → 提取所有报错 8. 调用 MCP: search_signals(top_tb.fsdb, "s_bits") → 找完整信号路径 9. 调用 MCP: analyze_failures(log, fsdb, signals) → 波形 + 报错联合分析 10. 根据分析结果修改 case0.sv 或 RTL 11. 重新执行 make,回到步骤 6 直到 parse_sim_log 返回 total_errors = 0 ``` --- ## 工具速查 | 工具 | 典型使用场景 | |------|-------------| | `get_sim_paths` | 第一步,拿所有标准路径 | | `parse_sim_log` | 快速看有没有报错 | | `search_signals` | 从 RTL 信号名找波形完整路径 | | `analyze_failures` | 核心:报错 + 波形联合分析 | | `get_signal_at_time` | 查特定时刻单个信号值 | | `get_signal_transitions` | 查信号完整跳变历史 | | `get_signals_around_time` | 查多个信号在某时刻的快照 | | `get_waveform_summary` | 查波形文件基本信息 | --- ## 添加自定义报错格式 编辑 `custom_patterns.yaml`,在 `patterns:` 下追加: ```yaml patterns: - name: my_bus_checker severity: ERROR description: "自定义总线协议 checker" regex: 'BUS_ERROR\s+\[(?P[^\]]+)\]\s+@\s+(?P