mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-20 04:43:40 +00:00
Option to include unused bits attribute or not
This commit is contained in:
parent
34e5bc1129
commit
35c19cb391
1 changed files with 15 additions and 7 deletions
|
@ -298,7 +298,7 @@ bool check_public_name(RTLIL::IdString id)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rmunused_module_signals(RTLIL::Module *module, bool purge_mode, bool verbose)
|
bool rmunused_module_signals(RTLIL::Module *module, bool purge_mode, bool unusedbitsattr_mode, bool verbose)
|
||||||
{
|
{
|
||||||
// `register_signals` and `connected_signals` will help us decide later on
|
// `register_signals` and `connected_signals` will help us decide later on
|
||||||
// on picking representatives out of groups of connected signals
|
// on picking representatives out of groups of connected signals
|
||||||
|
@ -485,7 +485,7 @@ bool rmunused_module_signals(RTLIL::Module *module, bool purge_mode, bool verbos
|
||||||
}
|
}
|
||||||
if (unused_bits.empty() || wire->port_id != 0)
|
if (unused_bits.empty() || wire->port_id != 0)
|
||||||
wire->attributes.erase(ID::unused_bits);
|
wire->attributes.erase(ID::unused_bits);
|
||||||
else
|
else if (unusedbitsattr_mode)
|
||||||
wire->attributes[ID::unused_bits] = RTLIL::Const(unused_bits);
|
wire->attributes[ID::unused_bits] = RTLIL::Const(unused_bits);
|
||||||
} else {
|
} else {
|
||||||
wire->attributes.erase(ID::unused_bits);
|
wire->attributes.erase(ID::unused_bits);
|
||||||
|
@ -594,7 +594,7 @@ bool rmunused_module_init(RTLIL::Module *module, bool verbose)
|
||||||
return did_something;
|
return did_something;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rmunused_module(RTLIL::Module *module, bool purge_mode, bool verbose, bool rminit)
|
void rmunused_module(RTLIL::Module *module, bool purge_mode, bool unusedbitsattr_mode, bool verbose, bool rminit)
|
||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose)
|
||||||
log("Finding unused cells or wires in module %s..\n", module->name.c_str());
|
log("Finding unused cells or wires in module %s..\n", module->name.c_str());
|
||||||
|
@ -619,10 +619,10 @@ void rmunused_module(RTLIL::Module *module, bool purge_mode, bool verbose, bool
|
||||||
module->design->scratchpad_set_bool("opt.did_something", true);
|
module->design->scratchpad_set_bool("opt.did_something", true);
|
||||||
|
|
||||||
rmunused_module_cells(module, verbose);
|
rmunused_module_cells(module, verbose);
|
||||||
while (rmunused_module_signals(module, purge_mode, verbose)) { }
|
while (rmunused_module_signals(module, purge_mode, unusedbitsattr_mode, verbose)) { }
|
||||||
|
|
||||||
if (rminit && rmunused_module_init(module, verbose))
|
if (rminit && rmunused_module_init(module, verbose))
|
||||||
while (rmunused_module_signals(module, purge_mode, verbose)) { }
|
while (rmunused_module_signals(module, purge_mode, unusedbitsattr_mode, verbose)) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
struct OptCleanPass : public Pass {
|
struct OptCleanPass : public Pass {
|
||||||
|
@ -643,10 +643,14 @@ struct OptCleanPass : public Pass {
|
||||||
log(" -purge\n");
|
log(" -purge\n");
|
||||||
log(" also remove internal nets if they have a public name\n");
|
log(" also remove internal nets if they have a public name\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log(" -unusedbitsattr\n");
|
||||||
|
log(" add an unused_bits attribute onto wires for bits that are not used\n");
|
||||||
|
log("\n");
|
||||||
}
|
}
|
||||||
void execute(std::vector<std::string> args, RTLIL::Design *design) override
|
void execute(std::vector<std::string> args, RTLIL::Design *design) override
|
||||||
{
|
{
|
||||||
bool purge_mode = false;
|
bool purge_mode = false;
|
||||||
|
bool unusedbitsattr_mode = false;
|
||||||
|
|
||||||
log_header(design, "Executing OPT_CLEAN pass (remove unused cells and wires).\n");
|
log_header(design, "Executing OPT_CLEAN pass (remove unused cells and wires).\n");
|
||||||
log_push();
|
log_push();
|
||||||
|
@ -657,6 +661,10 @@ struct OptCleanPass : public Pass {
|
||||||
purge_mode = true;
|
purge_mode = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (args[argidx] == "-unusedbitsattr") {
|
||||||
|
unusedbitsattr_mode = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
extra_args(args, argidx, design);
|
extra_args(args, argidx, design);
|
||||||
|
@ -675,7 +683,7 @@ struct OptCleanPass : public Pass {
|
||||||
for (auto module : design->selected_whole_modules_warn()) {
|
for (auto module : design->selected_whole_modules_warn()) {
|
||||||
if (module->has_processes_warn())
|
if (module->has_processes_warn())
|
||||||
continue;
|
continue;
|
||||||
rmunused_module(module, purge_mode, true, true);
|
rmunused_module(module, purge_mode, unusedbitsattr_mode, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count_rm_cells > 0 || count_rm_wires > 0)
|
if (count_rm_cells > 0 || count_rm_wires > 0)
|
||||||
|
@ -737,7 +745,7 @@ struct CleanPass : public Pass {
|
||||||
for (auto module : design->selected_whole_modules()) {
|
for (auto module : design->selected_whole_modules()) {
|
||||||
if (module->has_processes())
|
if (module->has_processes())
|
||||||
continue;
|
continue;
|
||||||
rmunused_module(module, purge_mode, ys_debug(), true);
|
rmunused_module(module, purge_mode, false, ys_debug(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_suppressed();
|
log_suppressed();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue