3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-05-16 20:24:46 +00:00
This commit is contained in:
Catherine 2025-05-08 16:07:26 +00:00 committed by GitHub
commit 7fb21c17f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 40 additions and 18 deletions

View file

@ -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()

View file

@ -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;