From: Clifford Wolf Date: Thu, 27 Nov 2014 11:47:33 +0000 (+0100) Subject: Fixed bug in "hierarchy -top" with array of instances X-Git-Tag: yosys-0.5~268 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=51cfcd8331bb06b1fea3ec62a48fcbb092e7df70;p=yosys.git Fixed bug in "hierarchy -top" with array of instances --- diff --git a/passes/hierarchy/hierarchy.cc b/passes/hierarchy/hierarchy.cc index 0ea26eb9e..e070afdd5 100644 --- a/passes/hierarchy/hierarchy.cc +++ b/passes/hierarchy/hierarchy.cc @@ -259,9 +259,16 @@ void hierarchy_worker(RTLIL::Design *design, std::set &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); } }