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:
8
tools/waveform_trace/src/pyverilog/Makefile
Normal file
8
tools/waveform_trace/src/pyverilog/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
.PHONY: clean
|
||||
clean:
|
||||
make clean -C ./utils
|
||||
make clean -C ./vparser
|
||||
make clean -C ./dataflow
|
||||
make clean -C ./controlflow
|
||||
make clean -C ./ast_code_generator
|
||||
rm -rf *.pyc __pycache__ *.out parsetab.py *.html
|
||||
1
tools/waveform_trace/src/pyverilog/VERSION
Normal file
1
tools/waveform_trace/src/pyverilog/VERSION
Normal file
@ -0,0 +1 @@
|
||||
1.3.0
|
||||
7
tools/waveform_trace/src/pyverilog/__init__.py
Normal file
7
tools/waveform_trace/src/pyverilog/__init__.py
Normal file
@ -0,0 +1,7 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), "VERSION")) as f:
|
||||
__version__ = f.read().splitlines()[0]
|
||||
@ -0,0 +1,3 @@
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf *.pyc __pycache__ parsetab.py *.out
|
||||
1030
tools/waveform_trace/src/pyverilog/ast_code_generator/codegen.py
Normal file
1030
tools/waveform_trace/src/pyverilog/ast_code_generator/codegen.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,104 @@
|
||||
Source
|
||||
Description
|
||||
ModuleDef
|
||||
Paramlist
|
||||
Portlist
|
||||
Port
|
||||
Width
|
||||
Length
|
||||
Dimensions
|
||||
Identifier
|
||||
Value
|
||||
Constant
|
||||
IntConst
|
||||
FloatConst
|
||||
StringConst
|
||||
Variable
|
||||
Input
|
||||
Output
|
||||
Inout
|
||||
Tri
|
||||
Wire
|
||||
Reg
|
||||
Integer
|
||||
Real
|
||||
Genvar
|
||||
Ioport
|
||||
Parameter
|
||||
Localparam
|
||||
Decl
|
||||
Concat
|
||||
LConcat
|
||||
Repeat
|
||||
Partselect
|
||||
Pointer
|
||||
Lvalue
|
||||
Rvalue
|
||||
Operator
|
||||
UnaryOperator
|
||||
Uminus
|
||||
Ulnot
|
||||
Unot
|
||||
Uand
|
||||
Unand
|
||||
Uor
|
||||
Unor
|
||||
Uxor
|
||||
Uxnor
|
||||
Power
|
||||
Times
|
||||
Divide
|
||||
Mod
|
||||
Plus
|
||||
Minus
|
||||
Sll
|
||||
Srl
|
||||
Sra
|
||||
LessThan
|
||||
GreaterThan
|
||||
LessEq
|
||||
GreaterEq
|
||||
Eq
|
||||
NotEq
|
||||
Eql
|
||||
NotEql
|
||||
And
|
||||
Xor
|
||||
Xnor
|
||||
Or
|
||||
Land
|
||||
Lor
|
||||
Cond
|
||||
Assign
|
||||
Always
|
||||
SensList
|
||||
Sens
|
||||
Substitution
|
||||
BlockingSubstitution
|
||||
NonblockingSubstitution
|
||||
IfStatement
|
||||
ForStatement
|
||||
WhileStatement
|
||||
CaseStatement
|
||||
Case
|
||||
Block
|
||||
Initial
|
||||
WaitStatement
|
||||
ForeverStatement
|
||||
DelayStatement
|
||||
InstanceList
|
||||
Instance
|
||||
ParamArg
|
||||
PortArg
|
||||
Function
|
||||
FunctionCall
|
||||
Task
|
||||
GenerateStatement
|
||||
SystemCall
|
||||
IdentifierScopeLabel
|
||||
IdentifierScope
|
||||
Pragma
|
||||
PragmaEntry
|
||||
Disable
|
||||
ParallelBlock
|
||||
SingleStatement
|
||||
@ -0,0 +1,3 @@
|
||||
|
||||
always @({{ sens_list }}) {{ statement }}
|
||||
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
assign {{ left }} = {{ right }};
|
||||
@ -0,0 +1,5 @@
|
||||
begin{% if scope != '' %} : {{ scope }}{% endif %}
|
||||
{%- for statement in statements %}
|
||||
{{ statement }}
|
||||
{%- endfor %}
|
||||
end
|
||||
@ -0,0 +1 @@
|
||||
{% if ldelay != '' %}{{ ldelay }} {% endif %}{{ left }} = {% if rdelay != '' %}{{ rdelay }} {% endif %}{{ right }};
|
||||
@ -0,0 +1 @@
|
||||
{{ cond }}: {{ statement }}
|
||||
@ -0,0 +1,5 @@
|
||||
case({{ comp }})
|
||||
{%- for case in caselist %}
|
||||
{{ case }}
|
||||
{%- endfor %}
|
||||
endcase
|
||||
@ -0,0 +1,5 @@
|
||||
casex({{ comp }})
|
||||
{%- for case in caselist %}
|
||||
{{ case }}
|
||||
{%- endfor %}
|
||||
endcase
|
||||
@ -0,0 +1 @@
|
||||
{ {% for item in items %}{{ item }}{% if loop.index < len_items %}, {% endif %}{% endfor %} }
|
||||
@ -0,0 +1 @@
|
||||
(({{ cond }})? {{ true_value }} : {{ false_value }})
|
||||
@ -0,0 +1 @@
|
||||
{{ value }}
|
||||
@ -0,0 +1,2 @@
|
||||
{%- for item in items %}{{ item }}
|
||||
{%- endfor %}
|
||||
@ -0,0 +1 @@
|
||||
#{{ delay }}
|
||||
@ -0,0 +1,3 @@
|
||||
{% for definition in definitions %}
|
||||
{{ definition }}
|
||||
{% endfor %}
|
||||
@ -0,0 +1 @@
|
||||
diable {{ name }}
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
@({{ senslist }});
|
||||
@ -0,0 +1 @@
|
||||
{{ value }}
|
||||
@ -0,0 +1 @@
|
||||
forever {{ statement }}
|
||||
@ -0,0 +1 @@
|
||||
for({{ pre }} {{ cond }}; {{ post }}) {{ statement }}
|
||||
@ -0,0 +1,7 @@
|
||||
|
||||
function {{ retwidth }} {{ name }};
|
||||
{%- for s in statement %}
|
||||
{{ s }}
|
||||
{%- endfor %}
|
||||
endfunction
|
||||
|
||||
@ -0,0 +1 @@
|
||||
{{ name }}({% for arg in args %}{{ arg }}{% if loop.index < len_args %}, {% endif %}{% endfor %})
|
||||
@ -0,0 +1,4 @@
|
||||
|
||||
generate {% for item in items %}{{ item }}{% endfor %}
|
||||
endgenerate
|
||||
|
||||
@ -0,0 +1 @@
|
||||
genvar {{ name }};
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
{{ scope }}{{ name }}
|
||||
@ -0,0 +1 @@
|
||||
{% for scope in scopes %}{{ scope }}{% endfor %}
|
||||
@ -0,0 +1 @@
|
||||
{{ name }}{%- if loop != '' %}[{{ loop }}]{%- endif %}.
|
||||
@ -0,0 +1,5 @@
|
||||
if({{ cond }}) {{ true_statement }}
|
||||
{%- if true_statement[-1] != ' ' and true_statement[-1] != '\n' %} {% endif -%}
|
||||
{%- if true_statement.count('\n') == 0 and false_statement != '' %}
|
||||
{% endif -%}
|
||||
{%- if false_statement != '' %}else {{ false_statement }}{% endif -%}
|
||||
@ -0,0 +1,3 @@
|
||||
|
||||
initial {{ statement }}
|
||||
|
||||
@ -0,0 +1 @@
|
||||
inout {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
|
||||
@ -0,0 +1 @@
|
||||
input {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
|
||||
@ -0,0 +1,5 @@
|
||||
{{ name }}{{ array }}
|
||||
({% for port in portlist %}
|
||||
{{ port }}{%- if loop.index < len_portlist -%}, {%- endif -%}
|
||||
{% endfor %}
|
||||
)
|
||||
@ -0,0 +1,12 @@
|
||||
|
||||
{{ module }}
|
||||
{%- if len_parameterlist > 0 %}
|
||||
#({% for param in parameterlist %}
|
||||
{{ param }}{%- if loop.index < len_parameterlist -%},
|
||||
{%- endif -%}{% endfor %}
|
||||
)
|
||||
{%- endif %}
|
||||
{%- for instance in instances %}
|
||||
{{ instance }}{%- if loop.index < len_instances -%},
|
||||
{%- endif -%}{%- endfor -%};
|
||||
|
||||
@ -0,0 +1 @@
|
||||
{{ value }}
|
||||
@ -0,0 +1 @@
|
||||
integer {{ name }};
|
||||
@ -0,0 +1 @@
|
||||
{{ first }} {% if second != '' %}{{ second }} {% endif %}{% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %}
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
{ {% for item in items %}{{ item }}{% if loop.index < len_items %}, {% endif %}{% endfor %} }
|
||||
@ -0,0 +1 @@
|
||||
[{{ msb }}:{{ lsb }}]
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
localparam {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }} = {{ value }};
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
{{ var }}
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1,14 @@
|
||||
|
||||
module {{ modulename }}{% if paramlist != '' %} #
|
||||
(
|
||||
{{ paramlist }}
|
||||
)
|
||||
{%- endif %}
|
||||
(
|
||||
{{ portlist }}
|
||||
);
|
||||
|
||||
{% for item in items %}{{ item }}
|
||||
{% endfor %}
|
||||
endmodule
|
||||
|
||||
@ -0,0 +1 @@
|
||||
{% if ldelay != '' %}{{ ldelay }} {% endif %}{{ left }} <= {% if rdelay != '' %}{{ rdelay }} {% endif %}{{ right }};
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
output {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
|
||||
@ -0,0 +1,5 @@
|
||||
fork{% if scope != '' %} : {{ scope }}{% endif %}
|
||||
{%- for statement in statements %}
|
||||
{{ statement }}
|
||||
{%- endfor %}
|
||||
join
|
||||
@ -0,0 +1 @@
|
||||
{%- if paramname != '' -%}.{{ paramname }}({{ argname }}){%- else -%}{{ argname }}{%- endif -%}
|
||||
@ -0,0 +1 @@
|
||||
parameter {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }} = {{ value }};
|
||||
@ -0,0 +1,2 @@
|
||||
{% for param in params %}{{ param }}{% if loop.index < len_params %},
|
||||
{% endif %}{% endfor %}
|
||||
@ -0,0 +1 @@
|
||||
{{ var }}[{{ msb }}:{{ lsb }}]
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
{{ var }}[{{ ptr }}]
|
||||
@ -0,0 +1 @@
|
||||
{{ name }}
|
||||
@ -0,0 +1 @@
|
||||
{%- if portname != '' -%}.{{ portname }}({{ argname }}){%- else -%}{{ argname }}{%- endif -%}
|
||||
@ -0,0 +1,2 @@
|
||||
{% for port in ports %}{{ port }}{% if loop.index < len_ports %},
|
||||
{% endif %}{% endfor %}
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
(* {{ entry }} *)
|
||||
@ -0,0 +1 @@
|
||||
{{ name }}{% if value != '' %} = {{ value }}{% endif %}
|
||||
@ -0,0 +1 @@
|
||||
real {{ name }};
|
||||
@ -0,0 +1 @@
|
||||
reg {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
|
||||
@ -0,0 +1 @@
|
||||
{ {{ times }}{{ value }} }
|
||||
@ -0,0 +1 @@
|
||||
{{ var }}
|
||||
@ -0,0 +1 @@
|
||||
{% if type != '' %}{{ type }} {% endif %}{{ sig }}
|
||||
@ -0,0 +1 @@
|
||||
{% for item in items %}{{ item }}{% if loop.index < len_items %} or {% endif %}{% endfor %}
|
||||
@ -0,0 +1 @@
|
||||
{{ statement }};
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
{{ description }}
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
"{{ value }}"
|
||||
@ -0,0 +1 @@
|
||||
{% if ldelay != '' %}{{ ldelay }} {% endif %}{{ left }} = {% if rdelay != '' %}{{ rdelay }} {% endif %}{{ right }};
|
||||
@ -0,0 +1 @@
|
||||
${{ syscall }}{% if len_args > 0 %}({% endif %}{% for arg in args %}{{ arg }}{% if loop.index < len_args %}, {% endif %}{% endfor %}{% if len_args > 0 %}){% endif %}
|
||||
@ -0,0 +1,7 @@
|
||||
|
||||
task {{ name }};
|
||||
{%- for s in statement %}
|
||||
{{ s }}
|
||||
{%- endfor %}
|
||||
endtask
|
||||
|
||||
@ -0,0 +1 @@
|
||||
({{ left }} {{ op }} {{ right }})
|
||||
@ -0,0 +1 @@
|
||||
tri {% if signed %}signed {% endif %}{% if width != '' %}{{ width }} {% endif %}{{ name }}{% if dimensions != '' %} {{ dimensions }}{% endif %};
|
||||
@ -0,0 +1 @@
|
||||
({{ op }}{{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ op }}{{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ op }}{{ right }})
|
||||
@ -0,0 +1 @@
|
||||
({{ op }}{{ right }})
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user