feat: 集成 waveform_trace 波形调试工具
新增功能: - waveformTracer.ts: 调用 waveform_trace.exe 的工具实现 - toolExecutor.ts: 添加 waveform_trace 工具分发 - types/api.ts: 添加 WaveformTraceArgs 类型定义 工具源码 (tools/waveform_trace/src/): - AST 解析 + BFS 信号追踪 - VCD 波形解析 - 修复通用 testbench 支持 配置文件: - .gitignore: 排除 exe 和打包产物 - .vscodeignore: 发布时排除源码 - build.bat/build.sh: 打包脚本
This commit is contained in:
115
tools/waveform_trace/src/README.md
Normal file
115
tools/waveform_trace/src/README.md
Normal file
@ -0,0 +1,115 @@
|
||||
# AST 波形调试核心代码
|
||||
|
||||
## 文件说明
|
||||
|
||||
| 文件 | 作用 | 核心函数 | TS重写需要 |
|
||||
|------|------|----------|------------|
|
||||
| `ast_node.py` | AST节点定义,遍历建图 | `toplogic_tree_traverse()` | ✅ 已完成 |
|
||||
| `graph_builder.py` | 入口函数,调用解析器 | `generate_top_logic_graph()` | ✅ 已完成 |
|
||||
| `debug_graph_analyzer.py` | BFS回溯控制信号 | `get_k_control_signals()` | ⚠️ 需重写 |
|
||||
| `vcd_waveform_analyzer.py` | VCD波形文件解析 | `parse_mismatch()`, `get_tabular()` | ⚠️ 需重写 |
|
||||
| `waveform_trace_tool.py` | 完整追踪工具封装 | `waveform_trace_tool()` | ⚠️ 需重写 |
|
||||
|
||||
---
|
||||
|
||||
## 调用流程
|
||||
|
||||
```
|
||||
Verilog代码文件
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ graph_builder.py │
|
||||
│ generate_top_logic_graph(filelist) │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ PyVerilog.parse() → AST │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ast.toplogic_tree_traverse() │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ NetworkX 有向图(信号依赖图) │
|
||||
└─────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ debug_graph_analyzer.py │
|
||||
│ DebugGraph.get_k_control_signals() │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ BFS回溯K层,找到控制信号链 │
|
||||
└─────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ vcd_waveform_analyzer.py │
|
||||
│ parse_mismatch() + get_tabular() │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 提取相关信号的波形表 │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心代码位置
|
||||
|
||||
### 1. AST遍历建图 (ast_node.py:32-137)
|
||||
|
||||
```python
|
||||
def toplogic_tree_traverse(self, network_G, rvalue=False, lvalue=False, offset=0):
|
||||
"""
|
||||
递归遍历AST,提取信号依赖关系,填充到NetworkX图中
|
||||
|
||||
关键逻辑:
|
||||
1. 识别 Rvalue(右值)和 Lvalue(左值)
|
||||
2. 递归收集子节点的信号
|
||||
3. 建立边:右值信号 → 左值信号(控制关系)
|
||||
"""
|
||||
```
|
||||
|
||||
### 2. 图构建入口 (graph_builder.py:89-99)
|
||||
|
||||
```python
|
||||
def generate_top_logic_graph(filelist: list[str]):
|
||||
# 1. PyVerilog解析Verilog代码
|
||||
ast, directives = parse(filelist, preprocess_include=[], preprocess_define=[])
|
||||
# 2. 遍历AST,构建信号依赖图
|
||||
return create_graph_from_ast(ast, display=False, display_signal_only=False)
|
||||
```
|
||||
|
||||
### 3. BFS回溯 (debug_graph_analyzer.py:20-66)
|
||||
|
||||
```python
|
||||
def get_k_control_signals(self, target_signals: list[str], k: int, signal_only: bool = False):
|
||||
"""
|
||||
从出错信号出发,BFS回溯K层,找到所有控制信号
|
||||
|
||||
输入:target_signals = ['out'] # 出错的信号
|
||||
输出:control_signals = {'out': (10,10), 'state': (5,8), 'clk': (1,1)}
|
||||
signal_level_tracer = [['clk->state', 'reset->state'], ['state->out']]
|
||||
"""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 依赖库
|
||||
|
||||
```
|
||||
pyverilog # Verilog解析,生成AST
|
||||
networkx # 图数据结构
|
||||
pandas # 波形数据处理(可选)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 如果要用JavaScript重写
|
||||
|
||||
需要重写的核心逻辑:
|
||||
|
||||
1. **Verilog解析器** → 用 ANTLR4 + Verilog.g4 或 tree-sitter-verilog
|
||||
2. **AST遍历建图** → 约100行,参考 ast_node.py:32-137
|
||||
3. **BFS回溯** → 约70行,参考 debug_graph_analyzer.py
|
||||
|
||||
总计约 **200行核心逻辑**(不含解析器)
|
||||
Reference in New Issue
Block a user