diff options
author | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-11-02 12:38:28 +0100 |
---|---|---|
committer | Marcelina KoĆcielnicka <mwk@0x04.net> | 2021-11-02 13:18:15 +0100 |
commit | f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8 (patch) | |
tree | 57e7396364c035e2fbdfc6552ba05e0a9a23ba7a /passes/techmap | |
parent | 9cb5092ad137fc7154912f2e1b488beeeeae4b36 (diff) | |
download | yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.tar.gz yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.tar.bz2 yosys-f346868cccb4bcc9de9c21e6e172a2d1cebf6dc8.zip |
flatten: Keep sigmap around between flatten_cell invocations.
Fixes #3064.
Diffstat (limited to 'passes/techmap')
-rw-r--r-- | passes/techmap/flatten.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/passes/techmap/flatten.cc b/passes/techmap/flatten.cc index 616fee3f5..7e6df5d2c 100644 --- a/passes/techmap/flatten.cc +++ b/passes/techmap/flatten.cc @@ -77,7 +77,7 @@ struct FlattenWorker { bool ignore_wb = false; - void flatten_cell(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Cell *cell, RTLIL::Module *tpl, std::vector<RTLIL::Cell*> &new_cells) + void flatten_cell(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Cell *cell, RTLIL::Module *tpl, SigMap &sigmap, std::vector<RTLIL::Cell*> &new_cells) { // Copy the contents of the flattened cell @@ -165,7 +165,6 @@ struct FlattenWorker for (auto bit : tpl_conn.first) tpl_driven.insert(bit); - SigMap sigmap(module); for (auto &port_it : cell->connections()) { IdString port_name = port_it.first; @@ -218,6 +217,7 @@ struct FlattenWorker log_id(module), log_id(cell), log_id(port_it.first), log_signal(new_conn.first), log_signal(new_conn.second)); module->connect(new_conn); + sigmap.add(new_conn.first, new_conn.second); } module->remove(cell); @@ -228,6 +228,7 @@ struct FlattenWorker if (!design->selected(module) || module->get_blackbox_attribute(ignore_wb)) return; + SigMap sigmap(module); std::vector<RTLIL::Cell*> worklist = module->selected_cells(); while (!worklist.empty()) { @@ -251,7 +252,7 @@ struct FlattenWorker // If a design is fully selected and has a top module defined, topological sorting ensures that all cells // added during flattening are black boxes, and flattening is finished in one pass. However, when flattening // individual modules, this isn't the case, and the newly added cells might have to be flattened further. - flatten_cell(design, module, cell, tpl, worklist); + flatten_cell(design, module, cell, tpl, sigmap, worklist); } } }; |