mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/xaig' into xc7mux
This commit is contained in:
		
						commit
						4ca847a217
					
				
					 1 changed files with 27 additions and 29 deletions
				
			
		|  | @ -29,32 +29,30 @@ module \$lut (A, Y); | ||||||
|   input [WIDTH-1:0] A; |   input [WIDTH-1:0] A; | ||||||
|   output Y; |   output Y; | ||||||
| 
 | 
 | ||||||
|   // Need to swap input ordering of wide LUTs, and fix init accordingly, |   // Need to swap input ordering, and fix init accordingly, | ||||||
|   // to match ABC's expectation of LUT inputs in non-decreasing |   // to match ABC's expectation of LUT inputs in non-decreasing | ||||||
|   // delay order |   // delay order | ||||||
|   function [WIDTH-1:0] permute_index; |   function [WIDTH-1:0] permute_index; | ||||||
|       input [WIDTH-1:0] i; |       input [WIDTH-1:0] i; | ||||||
|       integer j; |       integer j; | ||||||
|       begin |       begin | ||||||
|           if (WIDTH == 7) |           permute_index = 0; | ||||||
|               permute_index = { i[5:0], i[6] }; |           for (j = 0; j < WIDTH; j = j + 1) | ||||||
|           else if (WIDTH == 8) |               permute_index[WIDTH-1 - j] = i[j]; | ||||||
|               permute_index = { i[5:0], i[6], i[7] }; |  | ||||||
|           else |  | ||||||
|               permute_index = i; |  | ||||||
|       end |       end | ||||||
|   endfunction |   endfunction | ||||||
| 
 | 
 | ||||||
|   function [2**WIDTH-1:0] permute_init; |   function [2**WIDTH-1:0] permute_init; | ||||||
|  |       input [2**WIDTH-1:0] orig; | ||||||
|       integer i; |       integer i; | ||||||
|       begin |       begin | ||||||
|           permute_init = 0; |           permute_init = 0; | ||||||
|           for (i = 0; i < 2**WIDTH; i = i + 1) |           for (i = 0; i < 2**WIDTH; i = i + 1) | ||||||
|               permute_init[i] = LUT[permute_index(i)]; |               permute_init[i] = orig[permute_index(i)]; | ||||||
|       end |       end | ||||||
|   endfunction |   endfunction | ||||||
| 
 | 
 | ||||||
|   parameter [2**WIDTH-1:0] P_LUT = permute_init(); |   parameter [2**WIDTH-1:0] P_LUT = permute_init(LUT); | ||||||
| 
 | 
 | ||||||
|   generate |   generate | ||||||
|     if (WIDTH == 1) begin |     if (WIDTH == 1) begin | ||||||
|  | @ -63,51 +61,51 @@ module \$lut (A, Y); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 2) begin |     if (WIDTH == 2) begin | ||||||
|       LUT2 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), |       LUT2 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), | ||||||
|         .I0(A[0]), .I1(A[1])); |         .I0(A[1]), .I1(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 3) begin |     if (WIDTH == 3) begin | ||||||
|       LUT3 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), |       LUT3 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), | ||||||
|         .I0(A[0]), .I1(A[1]), .I2(A[2])); |         .I0(A[2]), .I1(A[1]), .I2(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 4) begin |     if (WIDTH == 4) begin | ||||||
|       LUT4 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), |       LUT4 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), | ||||||
|         .I0(A[0]), .I1(A[1]), .I2(A[2]), |         .I0(A[3]), .I1(A[2]), .I2(A[1]), | ||||||
|         .I3(A[3])); |         .I3(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 5) begin |     if (WIDTH == 5) begin | ||||||
|       LUT5 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), |       LUT5 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), | ||||||
|         .I0(A[0]), .I1(A[1]), .I2(A[2]), |         .I0(A[4]), .I1(A[3]), .I2(A[2]), | ||||||
|         .I3(A[3]), .I4(A[4])); |         .I3(A[1]), .I4(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 6) begin |     if (WIDTH == 6) begin | ||||||
|       LUT6 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), |       LUT6 #(.INIT(P_LUT)) _TECHMAP_REPLACE_ (.O(Y), | ||||||
|         .I0(A[0]), .I1(A[1]), .I2(A[2]), |         .I0(A[5]), .I1(A[4]), .I2(A[3]), | ||||||
|         .I3(A[3]), .I4(A[4]), .I5(A[5])); |         .I3(A[2]), .I4(A[1]), .I5(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 7) begin |     if (WIDTH == 7) begin | ||||||
|       wire T0, T1; |       wire T0, T1; | ||||||
|       LUT6 #(.INIT(P_LUT[63:0])) fpga_lut_0 (.O(T0), |       LUT6 #(.INIT(P_LUT[63:0])) fpga_lut_0 (.O(T0), | ||||||
|         .I0(A[1]), .I1(A[2]), .I2(A[3]), |         .I0(A[6]), .I1(A[5]), .I2(A[4]), | ||||||
|         .I3(A[4]), .I4(A[5]), .I5(A[6])); |         .I3(A[3]), .I4(A[2]), .I5(A[1])); | ||||||
|       LUT6 #(.INIT(P_LUT[127:64])) fpga_lut_1 (.O(T1), |       LUT6 #(.INIT(P_LUT[127:64])) fpga_lut_1 (.O(T1), | ||||||
|         .I0(A[1]), .I1(A[2]), .I2(A[3]), |         .I0(A[6]), .I1(A[5]), .I2(A[4]), | ||||||
|         .I3(A[4]), .I4(A[5]), .I5(A[6])); |         .I3(A[3]), .I4(A[2]), .I5(A[1])); | ||||||
|       MUXF7 fpga_mux_0 (.O(Y), .I0(T0), .I1(T1), .S(A[0])); |       MUXF7 fpga_mux_0 (.O(Y), .I0(T0), .I1(T1), .S(A[0])); | ||||||
|     end else |     end else | ||||||
|     if (WIDTH == 8) begin |     if (WIDTH == 8) begin | ||||||
|       wire T0, T1, T2, T3, T4, T5; |       wire T0, T1, T2, T3, T4, T5; | ||||||
|       LUT6 #(.INIT(P_LUT[63:0])) fpga_lut_0 (.O(T0), |       LUT6 #(.INIT(P_LUT[63:0])) fpga_lut_0 (.O(T0), | ||||||
|         .I0(A[2]), .I1(A[3]), .I2(A[4]), |         .I0(A[7]), .I1(A[6]), .I2(A[5]), | ||||||
|         .I3(A[5]), .I4(A[6]), .I5(A[7])); |         .I3(A[4]), .I4(A[3]), .I5(A[2])); | ||||||
|       LUT6 #(.INIT(P_LUT[127:64])) fpga_lut_1 (.O(T1), |       LUT6 #(.INIT(P_LUT[127:64])) fpga_lut_1 (.O(T1), | ||||||
|         .I0(A[2]), .I1(A[3]), .I2(A[4]), |         .I0(A[7]), .I1(A[6]), .I2(A[5]), | ||||||
|         .I3(A[5]), .I4(A[6]), .I5(A[7])); |         .I3(A[4]), .I4(A[3]), .I5(A[2])); | ||||||
|       LUT6 #(.INIT(P_LUT[191:128])) fpga_lut_2 (.O(T2), |       LUT6 #(.INIT(P_LUT[191:128])) fpga_lut_2 (.O(T2), | ||||||
|         .I0(A[2]), .I1(A[3]), .I2(A[4]), |         .I0(A[7]), .I1(A[6]), .I2(A[5]), | ||||||
|         .I3(A[5]), .I4(A[6]), .I5(A[7])); |         .I3(A[4]), .I4(A[3]), .I5(A[2])); | ||||||
|       LUT6 #(.INIT(P_LUT[255:192])) fpga_lut_3 (.O(T3), |       LUT6 #(.INIT(P_LUT[255:192])) fpga_lut_3 (.O(T3), | ||||||
|         .I0(A[2]), .I1(A[3]), .I2(A[4]), |         .I0(A[7]), .I1(A[6]), .I2(A[5]), | ||||||
|         .I3(A[5]), .I4(A[6]), .I5(A[7])); |         .I3(A[4]), .I4(A[3]), .I5(A[2])); | ||||||
|       MUXF7 fpga_mux_0 (.O(T4), .I0(T0), .I1(T1), .S(A[1])); |       MUXF7 fpga_mux_0 (.O(T4), .I0(T0), .I1(T1), .S(A[1])); | ||||||
|       MUXF7 fpga_mux_1 (.O(T5), .I0(T2), .I1(T3), .S(A[1])); |       MUXF7 fpga_mux_1 (.O(T5), .I0(T2), .I1(T3), .S(A[1])); | ||||||
|       MUXF8 fpga_mux_2 (.O(Y), .I0(T4), .I1(T5), .S(A[0])); |       MUXF8 fpga_mux_2 (.O(Y), .I0(T4), .I1(T5), .S(A[0])); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue