mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge pull request #3646 from YosysHQ/lofty/fix-3591
muxcover: do not add decode muxes with x inputs
This commit is contained in:
		
						commit
						21e87f7986
					
				
					 2 changed files with 41 additions and 4 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue