mirror of
https://github.com/verilator/verilator.git
synced 2025-01-19 12:54:02 +00:00
60 lines
2.1 KiB
Python
Executable File
60 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
|
#
|
|
# Copyright 2024 by Wilson Snyder. 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-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
|
|
|
import vltest_bootstrap
|
|
|
|
test.scenarios('simulator')
|
|
test.top_filename = "t/t_inst_tree.v"
|
|
|
|
default_vltmt_threads = test.get_default_vltmt_threads
|
|
test.compile(
|
|
verilator_flags2=['--stats', test.t_dir + "/" + test.name + ".vlt"],
|
|
# Force 3 threads even if we have fewer cores
|
|
threads=(default_vltmt_threads if test.vltmt else 1))
|
|
|
|
|
|
def check_relative_refs(mod, expect_relative):
|
|
found_relative = False
|
|
for filename in test.glob_some(test.obj_dir + "/V" + test.name + "_" + mod + "*.cpp"):
|
|
if test.verbose:
|
|
print("FILE " + filename)
|
|
text = test.file_contents(filename)
|
|
|
|
if re.search(r'this->', text) or re.search(r'vlSelf->', text):
|
|
if test.verbose:
|
|
print(" REL " + filename)
|
|
found_relative = True
|
|
|
|
if found_relative != expect_relative:
|
|
test.error(filename + " " +
|
|
("has 'relative'" if found_relative else "has 'non-relative'") +
|
|
" variable references but expected " +
|
|
("'relative'" if expect_relative else "'non-relative'"))
|
|
|
|
|
|
if test.vlt_all:
|
|
# We expect to combine sequent functions across multiple instances of
|
|
# l2, l3, l4, l5. If this number drops, please confirm this has not broken.
|
|
test.file_grep(test.stats, r'Optimizations, Combined CFuncs\s+(\d+)',
|
|
(85 if test.vltmt else 67))
|
|
|
|
# Everything should use relative references
|
|
check_relative_refs("t", True)
|
|
check_relative_refs("l1", True)
|
|
check_relative_refs("l2", True)
|
|
check_relative_refs("l3", True)
|
|
check_relative_refs("l4", True)
|
|
check_relative_refs("l5__P1", True)
|
|
check_relative_refs("l5__P2", True)
|
|
|
|
test.execute()
|
|
test.file_grep(test.run_log_filename, r"\] (%m|.*t\.ps): Clocked")
|
|
|
|
test.passes()
|