Reorder steps in -auto-top to fix synth command, fixes #3261
authorMiodrag Milanovic <mmicko@gmail.com>
Tue, 5 Apr 2022 12:02:37 +0000 (14:02 +0200)
committerMiodrag Milanovic <mmicko@gmail.com>
Tue, 5 Apr 2022 12:02:37 +0000 (14:02 +0200)
passes/hierarchy/hierarchy.cc

index 440881f19cbe5bec20a523a7f020f4d08752adb0..d40d6e59ff7ef921226b58a4df2e00e965e970b2 100644 (file)
@@ -976,6 +976,19 @@ struct HierarchyPass : public Pass {
                                if (mod->get_bool_attribute(ID::top))
                                        top_mod = mod;
 
+               if (top_mod == nullptr && auto_top_mode) {
+                       log_header(design, "Finding top of design hierarchy..\n");
+                       dict<Module*, int> db;
+                       for (Module *mod : design->selected_modules()) {
+                               int score = find_top_mod_score(design, mod, db);
+                               log("root of %3d design levels: %-20s\n", score, log_id(mod));
+                               if (!top_mod || score > db[top_mod])
+                                       top_mod = mod;
+                       }
+                       if (top_mod != nullptr)
+                               log("Automatically selected %s as design top module.\n", log_id(top_mod));
+               }
+
                if (top_mod != nullptr && top_mod->name.begins_with("$abstract")) {
                        IdString top_name = top_mod->name.substr(strlen("$abstract"));
 
@@ -1000,19 +1013,6 @@ struct HierarchyPass : public Pass {
                        }
                }
 
-               if (top_mod == nullptr && auto_top_mode) {
-                       log_header(design, "Finding top of design hierarchy..\n");
-                       dict<Module*, int> db;
-                       for (Module *mod : design->selected_modules()) {
-                               int score = find_top_mod_score(design, mod, db);
-                               log("root of %3d design levels: %-20s\n", score, log_id(mod));
-                               if (!top_mod || score > db[top_mod])
-                                       top_mod = mod;
-                       }
-                       if (top_mod != nullptr)
-                               log("Automatically selected %s as design top module.\n", log_id(top_mod));
-               }
-
                if (flag_simcheck && top_mod == nullptr)
                        log_error("Design has no top module.\n");