Changed fsm_expand to merge multiplexers more aggressively
authorClifford Wolf <clifford@clifford.at>
Sun, 24 Mar 2013 16:59:44 +0000 (17:59 +0100)
committerClifford Wolf <clifford@clifford.at>
Sun, 24 Mar 2013 16:59:44 +0000 (17:59 +0100)
passes/fsm/fsm_expand.cc

index df3aec85ad39a50b34957f2c4773a3d4adfc08a2..0446c113d73e4f64f08d11f28107775e354bf679 100644 (file)
@@ -42,6 +42,9 @@ struct FsmExpand
 
        bool is_cell_merge_candidate(RTLIL::Cell *cell)
        {
+               if (cell->type == "$mux" || cell->type == "$pmux" || cell->type == "$safe_pmux")
+                       return cell->connections.at("\\A").width < 2;
+
                RTLIL::SigSpec new_signals;
                if (cell->connections.count("\\A") > 0)
                        new_signals.append(assign_map(cell->connections["\\A"]));
@@ -137,7 +140,7 @@ struct FsmExpand
                input_sig.sort_and_unify();
                input_sig.remove_const();
 
-               assert(input_sig.width <= 4);
+               assert(input_sig.width <= 4 || cell->type == "$mux" || cell->type == "$pmux" || cell->type == "$safe_pmux");
                std::vector<RTLIL::Const> truth_tab;
 
                for (int i = 0; i < (1 << input_sig.width); i++) {