mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-07 01:54:10 +00:00
Added call_on_selection() and call_on_module() API
This commit is contained in:
parent
2e358bd667
commit
8d04ca7d22
|
@ -198,11 +198,11 @@ void Pass::call(RTLIL::Design *design, std::vector<std::string> args)
|
||||||
design->check();
|
design->check();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Pass::call_newsel(RTLIL::Design *design, std::string command)
|
void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command)
|
||||||
{
|
{
|
||||||
std::string backup_selected_active_module = design->selected_active_module;
|
std::string backup_selected_active_module = design->selected_active_module;
|
||||||
design->selected_active_module.clear();
|
design->selected_active_module.clear();
|
||||||
design->selection_stack.push_back(RTLIL::Selection());
|
design->selection_stack.push_back(selection);
|
||||||
|
|
||||||
Pass::call(design, command);
|
Pass::call(design, command);
|
||||||
|
|
||||||
|
@ -210,11 +210,37 @@ void Pass::call_newsel(RTLIL::Design *design, std::string command)
|
||||||
design->selected_active_module = backup_selected_active_module;
|
design->selected_active_module = backup_selected_active_module;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Pass::call_newsel(RTLIL::Design *design, std::vector<std::string> args)
|
void Pass::call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args)
|
||||||
{
|
{
|
||||||
std::string backup_selected_active_module = design->selected_active_module;
|
std::string backup_selected_active_module = design->selected_active_module;
|
||||||
design->selected_active_module.clear();
|
design->selected_active_module.clear();
|
||||||
design->selection_stack.push_back(RTLIL::Selection());
|
design->selection_stack.push_back(selection);
|
||||||
|
|
||||||
|
Pass::call(design, args);
|
||||||
|
|
||||||
|
design->selection_stack.pop_back();
|
||||||
|
design->selected_active_module = backup_selected_active_module;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command)
|
||||||
|
{
|
||||||
|
std::string backup_selected_active_module = design->selected_active_module;
|
||||||
|
design->selected_active_module = module->name;
|
||||||
|
design->selection_stack.push_back(RTLIL::Selection(false));
|
||||||
|
design->selection_stack.back().select(module);
|
||||||
|
|
||||||
|
Pass::call(design, command);
|
||||||
|
|
||||||
|
design->selection_stack.pop_back();
|
||||||
|
design->selected_active_module = backup_selected_active_module;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Pass::call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args)
|
||||||
|
{
|
||||||
|
std::string backup_selected_active_module = design->selected_active_module;
|
||||||
|
design->selected_active_module = module->name;
|
||||||
|
design->selection_stack.push_back(RTLIL::Selection(false));
|
||||||
|
design->selection_stack.back().select(module);
|
||||||
|
|
||||||
Pass::call(design, args);
|
Pass::call(design, args);
|
||||||
|
|
||||||
|
|
|
@ -60,8 +60,11 @@ struct Pass
|
||||||
static void call(RTLIL::Design *design, std::string command);
|
static void call(RTLIL::Design *design, std::string command);
|
||||||
static void call(RTLIL::Design *design, std::vector<std::string> args);
|
static void call(RTLIL::Design *design, std::vector<std::string> args);
|
||||||
|
|
||||||
static void call_newsel(RTLIL::Design *design, std::string command);
|
static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::string command);
|
||||||
static void call_newsel(RTLIL::Design *design, std::vector<std::string> args);
|
static void call_on_selection(RTLIL::Design *design, const RTLIL::Selection &selection, std::vector<std::string> args);
|
||||||
|
|
||||||
|
static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::string command);
|
||||||
|
static void call_on_module(RTLIL::Design *design, RTLIL::Module *module, std::vector<std::string> args);
|
||||||
|
|
||||||
static void init_register();
|
static void init_register();
|
||||||
static void done_register();
|
static void done_register();
|
||||||
|
|
|
@ -338,7 +338,7 @@ struct SubmodPass : public Pass {
|
||||||
if (module == NULL)
|
if (module == NULL)
|
||||||
log("Nothing selected -> do nothing.\n");
|
log("Nothing selected -> do nothing.\n");
|
||||||
else {
|
else {
|
||||||
Pass::call_newsel(design, stringf("opt_clean %s", module->name.c_str()));
|
Pass::call_on_module(design, module, "opt_clean");
|
||||||
log_header("Continuing SUBMOD pass.\n");
|
log_header("Continuing SUBMOD pass.\n");
|
||||||
SubmodWorker worker(design, module, opt_name);
|
SubmodWorker worker(design, module, opt_name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,15 +393,7 @@ struct TechmapWorker
|
||||||
tpl->add(data.wire);
|
tpl->add(data.wire);
|
||||||
|
|
||||||
std::string cmd_string = data.value.as_const().decode_string();
|
std::string cmd_string = data.value.as_const().decode_string();
|
||||||
|
Pass::call_on_module(map, tpl, cmd_string);
|
||||||
RTLIL::Selection tpl_mod_sel(false);
|
|
||||||
std::string backup_active_module = map->selected_active_module;
|
|
||||||
map->selected_active_module = tpl->name;
|
|
||||||
tpl_mod_sel.select(tpl);
|
|
||||||
map->selection_stack.push_back(tpl_mod_sel);
|
|
||||||
Pass::call(map, cmd_string);
|
|
||||||
map->selection_stack.pop_back();
|
|
||||||
map->selected_active_module = backup_active_module;
|
|
||||||
|
|
||||||
keep_running = true;
|
keep_running = true;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue