diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-07-18 10:28:45 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-07-18 10:28:45 +0200 |
commit | 309ae98246cf9ff115b7d95ae14991faf72a5a38 (patch) | |
tree | 381bb0d7ca956d943d9b5002fe85d2b14e83f00c | |
parent | 2d69c309f9d4d3093eead620684a59e3804b3894 (diff) | |
download | yosys-309ae98246cf9ff115b7d95ae14991faf72a5a38.tar.gz yosys-309ae98246cf9ff115b7d95ae14991faf72a5a38.tar.bz2 yosys-309ae98246cf9ff115b7d95ae14991faf72a5a38.zip |
Apply opt_reduce WR_EN opts to the whole mux tree driving the WR_EN port
-rw-r--r-- | passes/opt/opt_reduce.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/passes/opt/opt_reduce.cc b/passes/opt/opt_reduce.cc index 1e91d1601..a0c7a027f 100644 --- a/passes/opt/opt_reduce.cc +++ b/passes/opt/opt_reduce.cc @@ -266,6 +266,21 @@ struct OptReduceWorker mem_wren_sigs.add(assign_map(cell->connections["\\D"])); } + bool keep_expanding_mem_wren_sigs = true; + while (keep_expanding_mem_wren_sigs) { + keep_expanding_mem_wren_sigs = false; + for (auto &cell_it : module->cells) { + RTLIL::Cell *cell = cell_it.second; + if (cell->type == "$mux" && mem_wren_sigs.check_any(assign_map(cell->connections["\\Y"]))) { + if (!mem_wren_sigs.check_all(assign_map(cell->connections["\\A"])) || + !mem_wren_sigs.check_all(assign_map(cell->connections["\\B"]))) + keep_expanding_mem_wren_sigs = true; + mem_wren_sigs.add(assign_map(cell->connections["\\A"])); + mem_wren_sigs.add(assign_map(cell->connections["\\B"])); + } + } + } + while (did_something) { did_something = false; |