mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 09:05:32 +00:00
abc9: make re-entrant (#2993)
* Add testcase * Cleanup some state at end of abc9 * Re-assign abc9_box_id from scratch * Suppress delete unless prep_bypass did something
This commit is contained in:
parent
65316ec926
commit
96b6410dcb
3 changed files with 29 additions and 9 deletions
|
@ -289,8 +289,10 @@ struct Abc9Pass : public ScriptPass
|
|||
run("scc -specify -set_attr abc9_scc_id {}");
|
||||
if (help_mode)
|
||||
run("abc9_ops -prep_bypass [-prep_dff]", "(option if -dff)");
|
||||
else
|
||||
else {
|
||||
active_design->scratchpad_unset("abc9_ops.prep_bypass.did_something");
|
||||
run(stringf("abc9_ops -prep_bypass %s", dff_mode ? "-prep_dff" : ""));
|
||||
}
|
||||
if (dff_mode) {
|
||||
run("design -copy-to $abc9_map @$abc9_flops", "(only if -dff)");
|
||||
run("select -unset $abc9_flops", " (only if -dff)");
|
||||
|
@ -450,6 +452,9 @@ struct Abc9Pass : public ScriptPass
|
|||
run("design -delete $abc9_unmap");
|
||||
if (saved_designs.count("$abc9_holes") || help_mode)
|
||||
run("design -delete $abc9_holes");
|
||||
if (help_mode || active_design->scratchpad_get_bool("abc9_ops.prep_bypass.did_something"))
|
||||
run("delete =*_$abc9_byp");
|
||||
run("setattr -mod -unset abc9_box_id");
|
||||
}
|
||||
}
|
||||
} Abc9Pass;
|
||||
|
|
|
@ -432,6 +432,8 @@ void prep_bypass(RTLIL::Design *design)
|
|||
}
|
||||
}
|
||||
unmap_module->fixup_ports();
|
||||
|
||||
design->scratchpad_set_bool("abc9_ops.prep_bypass.did_something", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -942,15 +944,8 @@ void prep_box(RTLIL::Design *design)
|
|||
{
|
||||
TimingInfo timing;
|
||||
|
||||
std::stringstream ss;
|
||||
int abc9_box_id = 1;
|
||||
for (auto module : design->modules()) {
|
||||
auto it = module->attributes.find(ID::abc9_box_id);
|
||||
if (it == module->attributes.end())
|
||||
continue;
|
||||
abc9_box_id = std::max(abc9_box_id, it->second.as_int());
|
||||
}
|
||||
|
||||
std::stringstream ss;
|
||||
dict<IdString,std::vector<IdString>> box_ports;
|
||||
for (auto module : design->modules()) {
|
||||
auto it = module->attributes.find(ID::abc9_box);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue