From 911a3ae759ef686f4958d2f5d06b53ad525c4e5d Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:34:48 +1200 Subject: [PATCH] setattr.cc: Use new selection helpers Also test they work as expected. --- passes/cmds/setattr.cc | 34 +++++------------------------- tests/select/boxes_setattr.ys | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 29 deletions(-) create mode 100644 tests/select/boxes_setattr.ys diff --git a/passes/cmds/setattr.cc b/passes/cmds/setattr.cc index 710fa9ab4..f590c2fa9 100644 --- a/passes/cmds/setattr.cc +++ b/passes/cmds/setattr.cc @@ -96,32 +96,16 @@ struct SetattrPass : public Pass { } extra_args(args, argidx, design); - for (auto module : design->modules()) + for (auto module : design->all_selected_modules()) { if (flag_mod) { - if (design->selected_whole_module(module->name)) + if (module->is_selected_whole()) do_setunset(module->attributes, setunset_list); continue; } - if (!design->selected(module)) - continue; - - for (auto wire : module->wires()) - if (design->selected(module, wire)) - do_setunset(wire->attributes, setunset_list); - - for (auto &it : module->memories) - if (design->selected(module, it.second)) - do_setunset(it.second->attributes, setunset_list); - - for (auto cell : module->cells()) - if (design->selected(module, cell)) - do_setunset(cell->attributes, setunset_list); - - for (auto &it : module->processes) - if (design->selected(module, it.second)) - do_setunset(it.second->attributes, setunset_list); + for (auto memb : module->selected_members()) + do_setunset(memb->attributes, setunset_list); } } } SetattrPass; @@ -152,16 +136,8 @@ struct WbflipPass : public Pass { } extra_args(args, argidx, design); - for (Module *module : design->modules()) - { - if (!design->selected(module)) - continue; - - if (module->get_bool_attribute(ID::blackbox)) - continue; - + for (auto *module : design->selected_modules(RTLIL::SELECT_ALL, RTLIL::SB_EXCL_BB_ONLY)) module->set_bool_attribute(ID::whitebox, !module->get_bool_attribute(ID::whitebox)); - } } } WbflipPass; diff --git a/tests/select/boxes_setattr.ys b/tests/select/boxes_setattr.ys new file mode 100644 index 000000000..6a7383d58 --- /dev/null +++ b/tests/select/boxes_setattr.ys @@ -0,0 +1,39 @@ +read_verilog -specify boxes.v + +design -save read +select -assert-none =a:test_attr +select -assert-none =A:test_attr + +# setattr =* affects all modules +setattr -set test_attr 1 =* +select -assert-mod-count 3 =a:test_attr +select -assert-none =A:test_attr + +design -load read +setattr -mod -set test_attr 1 =* +select -assert-none =a:test_attr +select -assert-mod-count 3 =A:test_attr + +# setattr * doesn't affect boxed modules +design -load read +setattr -mod -set test_attr 1 * +select -assert-mod-count 1 =A:test_attr + +# setattr can set and unset whitebox attr +design -load read +setattr -mod -unset whitebox =wb +select -assert-mod-count 2 * +setattr -mod -set whitebox 1 wb +select -assert-mod-count 1 * + +# wbflip works on all non-bb in selection +design -load read +select -assert-mod-count 1 =A:whitebox +wbflip +select -assert-mod-count 2 =A:whitebox +wbflip +select -assert-mod-count 2 =A:whitebox +wbflip =wb +select -assert-mod-count 1 =A:whitebox +wbflip =bb +select -assert-mod-count 1 =A:whitebox