mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-07 06:33:24 +00:00
Improved log messages generated by hierarchy pass
This commit is contained in:
parent
cc587fb5f3
commit
b11d9408d9
1 changed files with 17 additions and 5 deletions
|
@ -218,24 +218,27 @@ static bool expand_module(RTLIL::Design *design, RTLIL::Module *module, bool fla
|
||||||
return did_something;
|
return did_something;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*> &used, RTLIL::Module *mod, bool is_top = false)
|
static void hierarchy_worker(RTLIL::Design *design, std::set<RTLIL::Module*> &used, RTLIL::Module *mod, int indent)
|
||||||
{
|
{
|
||||||
if (used.count(mod) > 0)
|
if (used.count(mod) > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
log("%s module: %s\n", is_top ? "Top" : "Used", mod->name.c_str());
|
if (indent == 0)
|
||||||
|
log("Top module: %s\n", mod->name.c_str());
|
||||||
|
else
|
||||||
|
log("Used module: %*s%s\n", indent, "", mod->name.c_str());
|
||||||
used.insert(mod);
|
used.insert(mod);
|
||||||
|
|
||||||
for (auto &it : mod->cells) {
|
for (auto &it : mod->cells) {
|
||||||
if (design->modules.count(it.second->type) > 0)
|
if (design->modules.count(it.second->type) > 0)
|
||||||
hierarchy_worker(design, used, design->modules[it.second->type]);
|
hierarchy_worker(design, used, design->modules[it.second->type], indent+4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hierarchy(RTLIL::Design *design, RTLIL::Module *top)
|
static void hierarchy(RTLIL::Design *design, RTLIL::Module *top)
|
||||||
{
|
{
|
||||||
std::set<RTLIL::Module*> used;
|
std::set<RTLIL::Module*> used;
|
||||||
hierarchy_worker(design, used, top, true);
|
hierarchy_worker(design, used, top, 0);
|
||||||
|
|
||||||
std::vector<RTLIL::Module*> del_modules;
|
std::vector<RTLIL::Module*> del_modules;
|
||||||
for (auto &it : design->modules)
|
for (auto &it : design->modules)
|
||||||
|
@ -367,10 +370,13 @@ struct HierarchyPass : public Pass {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_push();
|
||||||
|
|
||||||
if (top_mod != NULL)
|
if (top_mod != NULL)
|
||||||
hierarchy(design, top_mod);
|
hierarchy(design, top_mod);
|
||||||
|
|
||||||
bool did_something = true;
|
bool did_something = true;
|
||||||
|
bool did_something_once = false;
|
||||||
while (did_something) {
|
while (did_something) {
|
||||||
did_something = false;
|
did_something = false;
|
||||||
std::vector<std::string> modnames;
|
std::vector<std::string> modnames;
|
||||||
|
@ -383,10 +389,16 @@ struct HierarchyPass : public Pass {
|
||||||
if (expand_module(design, design->modules[modname], flag_check))
|
if (expand_module(design, design->modules[modname], flag_check))
|
||||||
did_something = true;
|
did_something = true;
|
||||||
}
|
}
|
||||||
|
if (did_something)
|
||||||
|
did_something_once = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (top_mod != NULL)
|
if (top_mod != NULL && did_something_once) {
|
||||||
|
log_header("Re-running hierarchy analysis..\n");
|
||||||
hierarchy(design, top_mod);
|
hierarchy(design, top_mod);
|
||||||
|
}
|
||||||
|
|
||||||
|
log_pop();
|
||||||
}
|
}
|
||||||
} HierarchyPass;
|
} HierarchyPass;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue