From: Clifford Wolf Date: Sat, 28 Dec 2013 09:30:31 +0000 (+0100) Subject: Improved $_MUX_ handling in opt_const X-Git-Tag: yosys-0.2.0~218 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bd39263796fdf4f1c747a4a8449a0a484fdb3026;p=yosys.git Improved $_MUX_ handling in opt_const --- diff --git a/passes/opt/opt_const.cc b/passes/opt/opt_const.cc index 84285567e..0ead97b4e 100644 --- a/passes/opt/opt_const.cc +++ b/passes/opt/opt_const.cc @@ -17,8 +17,6 @@ * */ -#undef MUX_UNDEF_SEL_TO_UNDEF_RESULTS - #include "opt_status.h" #include "kernel/register.h" #include "kernel/sigtools.h" @@ -133,15 +131,16 @@ void replace_const_cells(RTLIL::Design *design, RTLIL::Module *module, bool cons ACTION_DO("\\Y", input.extract(2, 1)); if (input.match(" 0")) ACTION_DO("\\Y", input.extract(2, 1)); if (input.match(" 1")) ACTION_DO("\\Y", input.extract(1, 1)); -#ifdef MUX_UNDEF_SEL_TO_UNDEF_RESULTS if (input.match("01 ")) ACTION_DO("\\Y", input.extract(0, 1)); - // TODO: "10 " -> replace with "!S" gate - // TODO: "0 " -> replace with "B AND S" gate - // TODO: " 1 " -> replace with "A OR S" gate - // TODO: "1 " -> replace with "B OR !S" gate (?) - // TODO: " 0 " -> replace with "A AND !S" gate (?) - if (input.match(" *")) ACTION_DO_Y(x); -#endif + if (input.match("10 ")) { + cell->type = "$_INV_"; + cell->connections["\\A"] = input.extract(0, 1); + cell->connections.erase("\\B"); + cell->connections.erase("\\S"); + goto next_cell; + } + if (input.match("01*")) ACTION_DO_Y(x); + if (input.match("10*")) ACTION_DO_Y(x); } if (cell->type == "$eq" || cell->type == "$ne" || cell->type == "$eqx" || cell->type == "$nex")