mirror of https://github.com/YosysHQ/yosys.git
muxcover: do not add decode muxes with x inputs
This commit is contained in:
parent
2e3c08adc4
commit
822c7b0341
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue