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