Add fst/saif test
This commit is contained in:
parent
1cbf95ad3a
commit
947683ba2a
|
|
@ -0,0 +1,31 @@
|
|||
$date
|
||||
Tue Mar 24 23:18:44 2026
|
||||
|
||||
$end
|
||||
$version
|
||||
Generated by VerilatedFst
|
||||
$end
|
||||
$timescale
|
||||
1ps
|
||||
$end
|
||||
$scope module $rootio $end
|
||||
$upscope $end
|
||||
$scope module t $end
|
||||
$scope module sub_a $end
|
||||
$var parameter 32 ! ADD [31:0] $end
|
||||
$var wire 32 " cyc [31:0] $end
|
||||
$var int 32 # value [31:0] $end
|
||||
$scope module deep_i $end
|
||||
$upscope $end
|
||||
$upscope $end
|
||||
$scope module sub_b $end
|
||||
$scope module deep_i $end
|
||||
$upscope $end
|
||||
$upscope $end
|
||||
$upscope $end
|
||||
$enddefinitions $end
|
||||
#0
|
||||
$dumpvars
|
||||
b00000000000000000000000000001010 #
|
||||
b00000000000000000000000000000000 "
|
||||
b00000000000000000000000000001010 !
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env python3
|
||||
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of either the GNU Lesser General Public License Version 3
|
||||
# or the Perl Artistic License Version 2.0.
|
||||
# SPDX-FileCopyrightText: 2026 by Wilson Snyder.
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
import vltest_bootstrap
|
||||
import trace_dumpvars_common
|
||||
|
||||
test.scenarios('vlt')
|
||||
|
||||
trace_dumpvars_common.run(test)
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
// Generated by verilated_saif
|
||||
(SAIFILE
|
||||
(SAIFVERSION "2.0")
|
||||
(DIRECTION "backward")
|
||||
(PROGRAM_NAME "Verilator")
|
||||
(DIVIDER / )
|
||||
(TIMESCALE 1ps)
|
||||
(DURATION 0)
|
||||
(INSTANCE $rootio
|
||||
)
|
||||
(INSTANCE t
|
||||
(INSTANCE sub_a
|
||||
(NET
|
||||
(ADD\[0\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[1\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(ADD\[2\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[3\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(ADD\[4\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[5\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[6\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[7\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[8\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[9\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[10\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[11\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[12\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[13\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[14\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[15\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[16\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[17\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[18\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[19\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[20\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[21\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[22\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[23\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[24\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[25\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[26\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[27\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[28\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[29\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[30\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(ADD\[31\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[0\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[1\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[2\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[3\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[4\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[5\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[6\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[7\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[8\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[9\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[10\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[11\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[12\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[13\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[14\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[15\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[16\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[17\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[18\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[19\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[20\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[21\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[22\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[23\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[24\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[25\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[26\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[27\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[28\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[29\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[30\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(cyc\[31\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[0\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[1\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(value\[2\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[3\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 1))
|
||||
(value\[4\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[5\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[6\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[7\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[8\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[9\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[10\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[11\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[12\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[13\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[14\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[15\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[16\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[17\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[18\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[19\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[20\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[21\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[22\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[23\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[24\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[25\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[26\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[27\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[28\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[29\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[30\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
(value\[31\] (T0 0) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
|
||||
)
|
||||
(INSTANCE deep_i
|
||||
)
|
||||
)
|
||||
(INSTANCE sub_b
|
||||
(INSTANCE deep_i
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env python3
|
||||
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of either the GNU Lesser General Public License Version 3
|
||||
# or the Perl Artistic License Version 2.0.
|
||||
# SPDX-FileCopyrightText: 2026 by Wilson Snyder.
|
||||
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||
|
||||
import vltest_bootstrap
|
||||
import trace_dumpvars_common
|
||||
|
||||
test.scenarios('vlt')
|
||||
|
||||
trace_dumpvars_common.run(test)
|
||||
|
|
@ -68,6 +68,16 @@ _DEFINE_ALIASES = {
|
|||
"task2_no_inl": "task2",
|
||||
}
|
||||
|
||||
_ALT_TRACE_FORMATS = {"fst", "saif"}
|
||||
|
||||
|
||||
def _split_format(case):
|
||||
"""Split case into (base_case, trace_format)."""
|
||||
for fmt in _ALT_TRACE_FORMATS:
|
||||
if case.endswith("_" + fmt):
|
||||
return case[:-(len(fmt) + 1)], fmt
|
||||
return case, "vcd"
|
||||
|
||||
|
||||
def _case_name(test):
|
||||
name = os.path.splitext(os.path.basename(test.py_filename))[0]
|
||||
|
|
@ -85,14 +95,15 @@ def _define_name(case):
|
|||
return f"+define+TRACE_DUMPVARS_CASE_{token}"
|
||||
|
||||
|
||||
def _compile_flags(case):
|
||||
def _compile_flags(case, fmt="vcd"):
|
||||
trace_flag = f"--trace-{fmt}"
|
||||
flags = ["--top-module", "t", _define_name(case)]
|
||||
if case == "add_module":
|
||||
flags = ["--binary", "--timing", "--trace-vcd", *flags]
|
||||
flags = ["--binary", "--timing", trace_flag, *flags]
|
||||
elif case in _CPPTOP_CASES:
|
||||
flags = ["--cc", "--exe", "--trace-vcd", *flags, _SHARED_CPPTOP]
|
||||
flags = ["--cc", "--exe", trace_flag, *flags, _SHARED_CPPTOP]
|
||||
else:
|
||||
flags = ["--binary", "--trace-vcd", *flags]
|
||||
flags = ["--binary", trace_flag, *flags]
|
||||
|
||||
if case in _STRUCT_TRACE_CASES:
|
||||
flags.append("--trace-structs")
|
||||
|
|
@ -107,42 +118,50 @@ def _has_golden_trace(test):
|
|||
|
||||
def run(test):
|
||||
case = _case_name(test)
|
||||
if case == "top":
|
||||
base_case, fmt = _split_format(case)
|
||||
|
||||
if base_case == "top":
|
||||
test.passes()
|
||||
return
|
||||
|
||||
test.top_filename = _SHARED_TOP
|
||||
compile_kwargs = {"verilator_flags2": _compile_flags(case)}
|
||||
if case in _CPPTOP_CASES:
|
||||
compile_kwargs = {"verilator_flags2": _compile_flags(base_case, fmt)}
|
||||
if base_case in _CPPTOP_CASES:
|
||||
compile_kwargs["make_main"] = False
|
||||
|
||||
if case in _COMPILE_FAIL_CASES:
|
||||
if base_case in _COMPILE_FAIL_CASES:
|
||||
test.compile(fails=True, expect_filename=test.golden_filename, **compile_kwargs)
|
||||
test.passes()
|
||||
return
|
||||
|
||||
test.compile(**compile_kwargs)
|
||||
|
||||
if case in _EXECUTE_FAIL_CASES:
|
||||
if base_case in _EXECUTE_FAIL_CASES:
|
||||
test.execute(fails=True, expect_filename=test.golden_filename)
|
||||
test.passes()
|
||||
return
|
||||
|
||||
execute_kwargs = {}
|
||||
if case == "nonconst_scope":
|
||||
if base_case == "nonconst_scope":
|
||||
execute_kwargs["all_run_flags"] = ['+LEVEL=0']
|
||||
|
||||
test.execute(**execute_kwargs)
|
||||
|
||||
if case == "add_module":
|
||||
# For format variants, fall back to the base case's golden file
|
||||
if fmt != "vcd" and not _has_golden_trace(test):
|
||||
base_golden = os.path.join(test.t_dir, f"t_trace_dumpvars_{base_case}.out")
|
||||
if os.path.exists(base_golden) and os.path.getsize(base_golden) > 0:
|
||||
test.golden_filename = base_golden
|
||||
|
||||
if base_case == "add_module":
|
||||
test.vcd_identical(test.obj_dir + "/simx0.vcd",
|
||||
test.t_dir + "/t_trace_dumpvars_add_module_0.out")
|
||||
test.vcd_identical(test.obj_dir + "/simx1.vcd",
|
||||
test.t_dir + "/t_trace_dumpvars_add_module_1.out")
|
||||
elif _has_golden_trace(test):
|
||||
if case in _FILE_COMPARE_CASES:
|
||||
if base_case in _FILE_COMPARE_CASES:
|
||||
test.files_identical(test.trace_filename, test.golden_filename)
|
||||
else:
|
||||
test.vcd_identical(test.trace_filename, test.golden_filename)
|
||||
test.trace_identical(test.trace_filename, test.golden_filename)
|
||||
|
||||
test.passes()
|
||||
|
|
|
|||
Loading…
Reference in New Issue