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