muxcover: do not add decode muxes with x inputs

This commit is contained in:
Lofty 2023-01-25 09:26:58 +00:00
parent 2e3c08adc4
commit 822c7b0341
2 changed files with 41 additions and 4 deletions

View File

@ -179,7 +179,7 @@ struct MuxcoverWorker
int prepare_decode_mux(SigBit &A, SigBit B, SigBit sel, SigBit bit) int prepare_decode_mux(SigBit &A, SigBit B, SigBit sel, SigBit bit)
{ {
if (A == B || sel == State::Sx) if (A == B || A == State::Sx || B == State::Sx || sel == State::Sx)
return 0; return 0;
tuple<SigBit, SigBit, SigBit> key(A, B, sel); tuple<SigBit, SigBit, SigBit> key(A, B, sel);
@ -197,9 +197,6 @@ struct MuxcoverWorker
if (std::get<2>(entry)) if (std::get<2>(entry))
return 0; return 0;
if (A == State::Sx || B == State::Sx)
return 0;
return cost_dmux / GetSize(std::get<1>(entry)); return cost_dmux / GetSize(std::get<1>(entry));
} }

View File

@ -508,3 +508,43 @@ design -import gate -as gate
miter -equiv -flatten -make_assert -make_outputs -ignore_gold_x gold gate miter miter -equiv -flatten -make_assert -make_outputs -ignore_gold_x gold gate miter
sat -verify -prove-asserts -show-ports miter sat -verify -prove-asserts -show-ports miter
## implement a mux6 as a mux8 :: https://github.com/YosysHQ/yosys/issues/3591
design -reset
read_verilog << EOF
module test (A, S, Y);
parameter INPUTS = 6;
input [INPUTS-1:0] A;
input [$clog2(INPUTS)-1:0] S;
wire [15:0] AA = {{(16-INPUTS){1'b0}}, A};
wire [3:0] SS = {{(4-$clog2(INPUTS)){1'b0}}, S};
output Y = SS[3] ? (SS[2] ? SS[1] ? (SS[0] ? AA[15] : AA[14])
: (SS[0] ? AA[13] : AA[12])
: SS[1] ? (SS[0] ? AA[11] : AA[10])
: (SS[0] ? AA[9] : AA[8]))
: (SS[2] ? SS[1] ? (SS[0] ? AA[7] : AA[6])
: (SS[0] ? AA[5] : AA[4])
: SS[1] ? (SS[0] ? AA[3] : AA[2])
: (SS[0] ? AA[1] : AA[0]));
endmodule
EOF
prep
design -save gold
simplemap t:\$mux
muxcover
opt_clean -purge
select -assert-count 1 t:$_MUX8_
select -assert-none t:$_MUX8_ %% t:* %D
techmap -map +/simcells.v t:$_MUX8_
design -stash gate
design -import gold -as gold
design -import gate -as gate
miter -equiv -flatten -make_assert -make_outputs -ignore_gold_x gold gate miter
sat -verify -prove-asserts -show-ports miter