Fixed bug in "hierarchy -top" with array of instances
authorClifford Wolf <clifford@clifford.at>
Thu, 27 Nov 2014 11:47:33 +0000 (12:47 +0100)
committerClifford Wolf <clifford@clifford.at>
Thu, 27 Nov 2014 11:47:33 +0000 (12:47 +0100)
passes/hierarchy/hierarchy.cc

index 0ea26eb9e9f6100766de50bff4a782727d783a3d..e070afdd58b21ba1b199ad599e7771765a3a135f 100644 (file)
@@ -259,9 +259,16 @@ void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*> &used, RTL
                log("Used module: %*s%s\n", indent, "", mod->name.c_str());
        used.insert(mod);
 
-       for (auto &it : mod->cells_) {
-               if (design->modules_.count(it.second->type) > 0)
-                       hierarchy_worker(design, used, design->modules_[it.second->type], indent+4);
+       for (auto cell : mod->cells()) {
+               std::string celltype = cell->type.str();
+               if (celltype.substr(0, 7) == "$array:") {
+                       int pos_idx = celltype.find_first_of(':');
+                       int pos_num = celltype.find_first_of(':', pos_idx + 1);
+                       int pos_type = celltype.find_first_of(':', pos_num + 1);
+                       celltype = celltype.substr(pos_type + 1);
+               }
+               if (design->module(celltype))
+                       hierarchy_worker(design, used, design->module(celltype), indent+4);
        }
 }