aboutsummaryrefslogtreecommitdiffstats
path: root/backends
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2021-07-16 10:27:47 +0000
committerwhitequark <whitequark@whitequark.org>2021-07-16 10:27:47 +0000
commit5b003d6e5cf1790297f5d0f9fdfc95e0b64aa808 (patch)
tree3964fa97bbea08ae4b276c7c3e7518adaeea7b37 /backends
parent10c3214e566d8c763a68b7b18317171b707caca4 (diff)
downloadyosys-5b003d6e5cf1790297f5d0f9fdfc95e0b64aa808.tar.gz
yosys-5b003d6e5cf1790297f5d0f9fdfc95e0b64aa808.tar.bz2
yosys-5b003d6e5cf1790297f5d0f9fdfc95e0b64aa808.zip
cxxrtl: run hierarchy pass regardless of (*top*) attribute presence.
The hierarchy pass does a lot more than just finding the top module, mainly resolving implicit (positional, wildcard) module connections. Fixes #2589.
Diffstat (limited to 'backends')
-rw-r--r--backends/cxxrtl/cxxrtl_backend.cc15
1 files changed, 6 insertions, 9 deletions
diff --git a/backends/cxxrtl/cxxrtl_backend.cc b/backends/cxxrtl/cxxrtl_backend.cc
index eea8103a7..d035dc56b 100644
--- a/backends/cxxrtl/cxxrtl_backend.cc
+++ b/backends/cxxrtl/cxxrtl_backend.cc
@@ -2939,9 +2939,9 @@ struct CxxrtlWorker {
}
}
- void check_design(RTLIL::Design *design, bool &has_top, bool &has_sync_init)
+ void check_design(RTLIL::Design *design, bool &has_sync_init)
{
- has_sync_init = has_top = false;
+ has_sync_init = false;
for (auto module : design->modules()) {
if (module->get_blackbox_attribute() && !module->has_attribute(ID(cxxrtl_blackbox)))
@@ -2953,9 +2953,6 @@ struct CxxrtlWorker {
if (!design->selected_module(module))
continue;
- if (module->get_bool_attribute(ID::top))
- has_top = true;
-
for (auto proc : module->processes)
for (auto sync : proc.second->syncs)
if (sync->type == RTLIL::STi)
@@ -2966,10 +2963,10 @@ struct CxxrtlWorker {
void prepare_design(RTLIL::Design *design)
{
bool did_anything = false;
- bool has_top, has_sync_init;
+ bool has_sync_init;
log_push();
- check_design(design, has_top, has_sync_init);
- if (run_hierarchy && !has_top) {
+ check_design(design, has_sync_init);
+ if (run_hierarchy) {
Pass::call(design, "hierarchy -auto-top");
did_anything = true;
}
@@ -2990,7 +2987,7 @@ struct CxxrtlWorker {
}
// Recheck the design if it was modified.
if (did_anything)
- check_design(design, has_top, has_sync_init);
+ check_design(design, has_sync_init);
log_assert(!has_sync_init);
log_pop();
if (did_anything)