3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-07-03 03:15:42 +00:00

Merge pull request #5162 from YosysHQ/micko/attrmap

Make attrmap able to alter memory attributes as well
This commit is contained in:
Miodrag Milanović 2025-06-30 15:24:04 +02:00 committed by GitHub
commit 54013c6da7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -263,33 +263,27 @@ struct AttrmapPass : public Pass {
if (modattr_mode) if (modattr_mode)
{ {
for (auto module : design->selected_whole_modules()) for (auto module : design->all_selected_whole_modules())
attrmap_apply(stringf("%s", log_id(module)), actions, module->attributes); attrmap_apply(stringf("%s", log_id(module)), actions, module->attributes);
} }
else else
{ {
for (auto module : design->selected_modules()) for (auto module : design->all_selected_modules())
{ {
for (auto wire : module->selected_wires()) for (auto memb : module->selected_members())
attrmap_apply(stringf("%s.%s", log_id(module), log_id(wire)), actions, wire->attributes); attrmap_apply(stringf("%s.%s", log_id(module), log_id(memb)), actions, memb->attributes);
for (auto cell : module->selected_cells()) // attrmap already applied to process itself during above loop, but not its children
attrmap_apply(stringf("%s.%s", log_id(module), log_id(cell)), actions, cell->attributes); for (auto proc : module->selected_processes())
for (auto proc : module->processes)
{ {
if (!design->selected(module, proc.second)) std::vector<RTLIL::CaseRule*> all_cases = {&proc->root_case};
continue;
attrmap_apply(stringf("%s.%s", log_id(module), log_id(proc.first)), actions, proc.second->attributes);
std::vector<RTLIL::CaseRule*> all_cases = {&proc.second->root_case};
while (!all_cases.empty()) { while (!all_cases.empty()) {
RTLIL::CaseRule *cs = all_cases.back(); RTLIL::CaseRule *cs = all_cases.back();
all_cases.pop_back(); all_cases.pop_back();
attrmap_apply(stringf("%s.%s (case)", log_id(module), log_id(proc.first)), actions, cs->attributes); attrmap_apply(stringf("%s.%s (case)", log_id(module), log_id(proc)), actions, cs->attributes);
for (auto &sw : cs->switches) { for (auto &sw : cs->switches) {
attrmap_apply(stringf("%s.%s (switch)", log_id(module), log_id(proc.first)), actions, sw->attributes); attrmap_apply(stringf("%s.%s (switch)", log_id(module), log_id(proc)), actions, sw->attributes);
all_cases.insert(all_cases.end(), sw->cases.begin(), sw->cases.end()); all_cases.insert(all_cases.end(), sw->cases.begin(), sw->cases.end());
} }
} }