mirror of
https://github.com/YosysHQ/yosys
synced 2025-05-16 20:24:46 +00:00
Merge 9cd4b4e72d
into bfbbb8cf98
This commit is contained in:
commit
7fb21c17f5
13 changed files with 40 additions and 18 deletions
|
@ -93,6 +93,22 @@ Pass::~Pass()
|
|||
|
||||
Pass::pre_post_exec_state_t Pass::pre_execute()
|
||||
{
|
||||
if (!abstract_modules_ok) {
|
||||
bool has_top = false;
|
||||
bool has_abstract = false;
|
||||
for (auto mod : yosys_design->modules()) {
|
||||
if (mod->get_bool_attribute(ID::top))
|
||||
has_top = true;
|
||||
if (mod->name.begins_with("$abstract"))
|
||||
has_abstract = true;
|
||||
}
|
||||
if (has_abstract) {
|
||||
std::string command = has_top ? "hierarchy" : "hierarchy -auto-top";
|
||||
log_warning("Pass `%s` does not accept abstract modules; running `%s` first!\n", pass_name.c_str(), command.c_str());
|
||||
run_pass(command);
|
||||
}
|
||||
}
|
||||
|
||||
pre_post_exec_state_t state;
|
||||
call_counter++;
|
||||
state.begin_ns = PerformanceTimer::query();
|
||||
|
@ -385,6 +401,7 @@ Frontend::Frontend(std::string name, std::string short_help) :
|
|||
Pass(name.rfind("=", 0) == 0 ? name.substr(1) : "read_" + name, short_help),
|
||||
frontend_name(name.rfind("=", 0) == 0 ? name.substr(1) : name)
|
||||
{
|
||||
abstract_modules_ok = true;
|
||||
}
|
||||
|
||||
void Frontend::run_register()
|
||||
|
|
|
@ -38,6 +38,7 @@ struct Pass
|
|||
int call_counter;
|
||||
int64_t runtime_ns;
|
||||
bool experimental_flag = false;
|
||||
bool abstract_modules_ok = false;
|
||||
|
||||
void experimental() {
|
||||
experimental_flag = true;
|
||||
|
@ -80,7 +81,11 @@ struct ScriptPass : Pass
|
|||
RTLIL::Design *active_design;
|
||||
std::string active_run_from, active_run_to;
|
||||
|
||||
ScriptPass(std::string name, std::string short_help = "** document me **") : Pass(name, short_help) { }
|
||||
ScriptPass(std::string name, std::string short_help = "** document me **") : Pass(name, short_help) {
|
||||
// Either the script pass will include an explicit `hierarchy` invocation or one of the passes called inside will
|
||||
// trigger the check for abstract modules.
|
||||
abstract_modules_ok = true;
|
||||
}
|
||||
|
||||
virtual void script() = 0;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue