mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Fix spacing in opt_share tests, change wording in opt_share help
This commit is contained in:
		
							parent
							
								
									c075486c59
								
							
						
					
					
						commit
						280c4e7794
					
				
					 11 changed files with 160 additions and 161 deletions
				
			
		|  | @ -2,6 +2,7 @@ | |||
|  *  yosys -- Yosys Open SYnthesis Suite | ||||
|  * | ||||
|  *  Copyright (C) 2012  Clifford Wolf <clifford@clifford.at> | ||||
|  *                2019  Bogdan Vukobratovic <bogdan.vukobratovic@gmail.com> | ||||
|  * | ||||
|  *  Permission to use, copy, modify, and/or distribute this software for any | ||||
|  *  purpose with or without fee is hereby granted, provided that the above | ||||
|  | @ -308,17 +309,20 @@ void remove_multi_user_outbits(RTLIL::Module *module, dict<RTLIL::SigBit, RTLIL: | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| struct OptRmdffPass : public Pass { | ||||
| 	OptRmdffPass() : Pass("opt_share", "merge arithmetic operators that share an operand") {} | ||||
| struct OptSharePass : public Pass { | ||||
| 	OptSharePass() : Pass("opt_share", "merge arithmetic operators that share an operand") {} | ||||
| 	void help() YS_OVERRIDE | ||||
| 	{ | ||||
| 		//   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
 | ||||
| 		log("\n"); | ||||
| 		log("    opt_share [selection]\n"); | ||||
| 		log("\n"); | ||||
| 		log("This pass identifies arithmetic operators that share an operand and whose\n"); | ||||
| 		log("results are used in mutually exclusive cases controlled by a multiplexer,\n"); | ||||
| 		log("and merges them together by multiplexing the other operands.\n"); | ||||
| 
 | ||||
| 		log("This pass identifies mutually exclusive $alu arithmetic cells that:\n"); | ||||
| 		log("    (a) share an input operand\n"); | ||||
| 		log("    (b) drive the same $mux, $_MUX_, or $pmux multiplexing cell allowing\n"); | ||||
| 		log("        the $alu cell to be merged and the multiplexer to be moved from\n"); | ||||
| 		log("        multiplexing its output to multiplexing the non-shared input operands.\n"); | ||||
| 		log("\n"); | ||||
| 	} | ||||
| 	void execute(std::vector<std::string>, RTLIL::Design *design) YS_OVERRIDE | ||||
|  | @ -454,6 +458,6 @@ struct OptRmdffPass : public Pass { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } OptRmdffPass; | ||||
| } OptSharePass; | ||||
| 
 | ||||
| PRIVATE_NAMESPACE_END | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| module opt_share_test( | ||||
|                input [15:0]  a, | ||||
|                input [15:0]  b, | ||||
|                input 				 sel, | ||||
|                output [15:0] res, | ||||
|                ); | ||||
| 	input [15:0] 	a, | ||||
| 	input [15:0] 	b, | ||||
| 	input 				sel, | ||||
| 	output [15:0] res, | ||||
| 	); | ||||
| 
 | ||||
|   assign res = {sel ? a + b : a - b}; | ||||
| 	assign res = {sel ? a + b : a - b}; | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,15 +1,15 @@ | |||
| module opt_share_test( | ||||
|                input [15:0]  a, | ||||
|                input [15:0]  b, | ||||
|                input [15:0]  c, | ||||
|                input [15:0]  d, | ||||
|                input 				 sel, | ||||
|                output [63:0] res, | ||||
|                ); | ||||
| 	input [15:0] 	a, | ||||
| 	input [15:0] 	b, | ||||
| 	input [15:0] 	c, | ||||
| 	input [15:0] 	d, | ||||
| 	input 				sel, | ||||
| 	output [63:0] res, | ||||
| 	); | ||||
| 
 | ||||
|   reg [31: 0] 							 cat1 = {a+b, c+d}; | ||||
|   reg [31: 0] 							 cat2 = {a-b, c-d}; | ||||
| 	reg [31: 0] 	cat1 = {a+b, c+d}; | ||||
| 	reg [31: 0] 	cat2 = {a-b, c-d}; | ||||
| 
 | ||||
|   assign res = {b, sel ? cat1 : cat2, a}; | ||||
| 	assign res = {b, sel ? cat1 : cat2, a}; | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,22 +1,22 @@ | |||
| module opt_share_test( | ||||
|                input [15:0] 		 a, | ||||
|                input [15:0] 		 b, | ||||
|                input [15:0] 		 c, | ||||
|                input [15:0] 		 d, | ||||
|                input 						 sel, | ||||
|                output reg [47:0] res, | ||||
|                ); | ||||
| 	input [15:0] 			a, | ||||
| 	input [15:0] 			b, | ||||
| 	input [15:0] 			c, | ||||
| 	input [15:0] 			d, | ||||
| 	input 						sel, | ||||
| 	output reg [47:0] res, | ||||
| 	); | ||||
| 
 | ||||
|   wire [15:0] 									 add_res = a+b; | ||||
|   wire [15:0] 									 sub_res = a-b; | ||||
|   wire [31: 0] 									 cat1 = {add_res, c+d}; | ||||
|   wire [31: 0] 									 cat2 = {sub_res, c-d}; | ||||
| 	wire [15:0] 			add_res = a+b; | ||||
| 	wire [15:0] 			sub_res = a-b; | ||||
| 	wire [31: 0] 			cat1 = {add_res, c+d}; | ||||
| 	wire [31: 0] 			cat2 = {sub_res, c-d}; | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = {cat1, add_res}; | ||||
|       1: res = {cat2, add_res}; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = {cat1, add_res}; | ||||
| 			1: res = {cat2, add_res}; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,21 +1,21 @@ | |||
| module opt_share_test( | ||||
|                input [15:0] 		 a, | ||||
|                input [15:0] 		 b, | ||||
| 							 input [15:0] 		 c, | ||||
| 							 input [1:0] 			 sel, | ||||
| 							 output reg [15:0] res | ||||
|                ); | ||||
| 	input [15:0]			 a, | ||||
| 	input [15:0]			 b, | ||||
| 	input [15:0]			 c, | ||||
| 	input [1:0]			 sel, | ||||
| 	output reg [15:0] res | ||||
| 	); | ||||
| 
 | ||||
|   wire [15:0] 							 add0_res = a+b; | ||||
|   wire [15:0] 							 add1_res = a+c; | ||||
| 	wire [15:0] 			add0_res = a+b; | ||||
| 	wire [15:0] 			add1_res = a+c; | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = add0_res[10:0]; | ||||
|       1: res = add1_res[10:0]; | ||||
|       2: res = a - b; | ||||
|       default: res = 32'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = add0_res[10:0]; | ||||
| 			1: res = add1_res[10:0]; | ||||
| 			2: res = a - b; | ||||
| 			default: res = 32'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,19 +1,18 @@ | |||
| module opt_share_test( | ||||
| 											input signed [7:0] 			 a, | ||||
| 											input signed [10:0] 		 b, | ||||
| 											input signed [15:0] 		 c, | ||||
| 											input [1:0] 						 sel, | ||||
| 											output reg signed [15:0] res | ||||
| 											); | ||||
| 	input signed [7:0]			 a, | ||||
| 	input signed [10:0]			 b, | ||||
| 	input signed [15:0]			 c, | ||||
| 	input [1:0]							 sel, | ||||
| 	output reg signed [15:0] res | ||||
| 	); | ||||
| 
 | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = a + b; | ||||
|       1: res = a - b; | ||||
|       2: res = a + c; | ||||
|       default: res = 16'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = a + b; | ||||
| 			1: res = a - b; | ||||
| 			2: res = a + c; | ||||
| 			default: res = 16'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,22 +1,21 @@ | |||
| module opt_share_test( | ||||
| 											input [15:0] 			a, | ||||
| 											input [15:0] 			b, | ||||
| 											input [15:0] 			c, | ||||
| 											input [2:0] 			sel, | ||||
| 											output reg [31:0] res | ||||
| 											); | ||||
| 	input [15:0]			a, | ||||
| 	input [15:0]			b, | ||||
| 	input [15:0]			c, | ||||
| 	input [2:0]				sel, | ||||
| 	output reg [31:0] res | ||||
| 	); | ||||
| 
 | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = {a + b, a}; | ||||
|       1: res = {a - b, b}; | ||||
|       2: res = {a + c, c}; | ||||
|       3: res = {a - c, a}; | ||||
|       4: res = {b, b}; | ||||
|       5: res = {c, c}; | ||||
|       default: res = 32'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = {a + b, a}; | ||||
| 			1: res = {a - b, b}; | ||||
| 			2: res = {a + c, c}; | ||||
| 			3: res = {a - c, a}; | ||||
| 			4: res = {b, b}; | ||||
| 			5: res = {c, c}; | ||||
| 			default: res = 32'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,25 +1,25 @@ | |||
| module opt_share_test( | ||||
| 											input [15:0] 			a, | ||||
| 											input [15:0] 			b, | ||||
| 											input [15:0] 			c, | ||||
| 											input [15:0] 			d, | ||||
| 											input [2:0] 			sel, | ||||
| 											output reg [31:0] res | ||||
| 											); | ||||
| 	input [15:0]			a, | ||||
| 	input [15:0]			b, | ||||
| 	input [15:0]			c, | ||||
| 	input [15:0]			d, | ||||
| 	input [2:0]				sel, | ||||
| 	output reg [31:0] res | ||||
| 	); | ||||
| 
 | ||||
|   wire [15:0] 													add0_res = a+d; | ||||
| 	wire [15:0] 			add0_res = a+d; | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = {add0_res, a}; | ||||
|       1: res = {a - b, add0_res[7], 15'b0}; | ||||
|       2: res = {b-a, b}; | ||||
|       3: res = {d, b - c}; | ||||
|       4: res = {d, b - a}; | ||||
|       5: res = {c, d}; | ||||
|       6: res = {a - c, b-d}; | ||||
|       default: res = 32'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = {add0_res, a}; | ||||
| 			1: res = {a - b, add0_res[7], 15'b0}; | ||||
| 			2: res = {b-a, b}; | ||||
| 			3: res = {d, b - c}; | ||||
| 			4: res = {d, b - a}; | ||||
| 			5: res = {c, d}; | ||||
| 			6: res = {a - c, b-d}; | ||||
| 			default: res = 32'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,24 +1,23 @@ | |||
| module opt_share_test( | ||||
| 											input [15:0] 			a, | ||||
| 											input [15:0] 			b, | ||||
| 											input [15:0] 			c, | ||||
| 											input [15:0] 			d, | ||||
| 											input [2:0] 			sel, | ||||
| 											output reg [15:0] res | ||||
| 											); | ||||
| 	input [15:0]			a, | ||||
| 	input [15:0]			b, | ||||
| 	input [15:0]			c, | ||||
| 	input [15:0]			d, | ||||
| 	input [2:0]				sel, | ||||
| 	output reg [15:0] res | ||||
| 	); | ||||
| 
 | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = a + d; | ||||
|       1: res = a - b; | ||||
|       2: res = b; | ||||
|       3: res = b - c; | ||||
|       4: res = b - a; | ||||
|       5: res = c; | ||||
|       6: res = a - c; | ||||
|       default: res = 16'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = a + d; | ||||
| 			1: res = a - b; | ||||
| 			2: res = b; | ||||
| 			3: res = b - c; | ||||
| 			4: res = b - a; | ||||
| 			5: res = c; | ||||
| 			6: res = a - c; | ||||
| 			default: res = 16'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,22 +1,21 @@ | |||
| module opt_share_test( | ||||
| 											input [15:0] 			a, | ||||
| 											input [15:0] 			b, | ||||
| 											input [15:0] 			c, | ||||
| 											input [2:0] 			sel, | ||||
| 											output reg [15:0] res | ||||
| 											); | ||||
| 	input [15:0]			a, | ||||
| 	input [15:0]			b, | ||||
| 	input [15:0]			c, | ||||
| 	input [2:0]				sel, | ||||
| 	output reg [15:0] res | ||||
| 	); | ||||
| 
 | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = a + b; | ||||
|       1: res = a - b; | ||||
|       2: res = a + c; | ||||
|       3: res = a - c; | ||||
|       4: res = b; | ||||
|       5: res = c; | ||||
|       default: res = 16'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = a + b; | ||||
| 			1: res = a - b; | ||||
| 			2: res = a + c; | ||||
| 			3: res = a - c; | ||||
| 			4: res = b; | ||||
| 			5: res = c; | ||||
| 			default: res = 16'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
|  | @ -1,19 +1,18 @@ | |||
| module opt_share_test( | ||||
|                input [15:0] 		 a, | ||||
|                input [15:0] 		 b, | ||||
|                input [15:0] 		 c, | ||||
|                input [1:0] 			 sel, | ||||
|                output reg [15:0] res | ||||
|                ); | ||||
| 	input [15:0] 			a, | ||||
| 	input [15:0] 			b, | ||||
| 	input [15:0] 			c, | ||||
| 	input [1:0] 			sel, | ||||
| 	output reg [15:0] res | ||||
| 	); | ||||
| 
 | ||||
| 
 | ||||
|   always @* begin | ||||
|     case(sel) | ||||
|       0: res = a + b; | ||||
|       1: res = a - b; | ||||
|       2: res = a + c; | ||||
|       default: res = 16'bx; | ||||
|     endcase | ||||
|   end | ||||
| 	always @* begin | ||||
| 		case(sel) | ||||
| 			0: res = a + b; | ||||
| 			1: res = a - b; | ||||
| 			2: res = a + c; | ||||
| 			default: res = 16'bx; | ||||
| 		endcase | ||||
| 	end | ||||
| 
 | ||||
| endmodule | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue