Files
IC-Coder-Plugin/tools/waveform_trace/src/README.md
XiaoFeng ada4806493 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: 打包脚本
2026-01-05 18:18:57 +08:00

4.1 KiB
Raw Blame History

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)

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)

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)

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行核心逻辑(不含解析器)