verilator/test_regress/t/t_inst_tree_inl0_pub1.py

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()