mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge pull request #928 from litghost/add_xc7_sim_models
Add additional cells sim models for core 7-series primitives.
This commit is contained in:
		
						commit
						db1a5ec6a2
					
				
					 3 changed files with 60 additions and 41 deletions
				
			
		|  | @ -30,10 +30,15 @@ module GND(output G); | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module IBUF(output O, input I); | module IBUF(output O, input I); | ||||||
|  |   parameter IOSTANDARD = "default"; | ||||||
|  |   parameter IBUF_LOW_PWR = 0; | ||||||
|   assign O = I; |   assign O = I; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module OBUF(output O, input I); | module OBUF(output O, input I); | ||||||
|  |   parameter IOSTANDARD = "default"; | ||||||
|  |   parameter DRIVE = 12; | ||||||
|  |   parameter SLEW = "SLOW"; | ||||||
|   assign O = I; |   assign O = I; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | @ -41,6 +46,42 @@ module BUFG(output O, input I); | ||||||
|   assign O = I; |   assign O = I; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | module BUFGCTRL( | ||||||
|  |     output O, | ||||||
|  |     input I0, input I1, | ||||||
|  |     input S0, input S1, | ||||||
|  |     input CE0, input CE1, | ||||||
|  |     input IGNORE0, input IGNORE1); | ||||||
|  | 
 | ||||||
|  | parameter [0:0] INIT_OUT = 1'b0; | ||||||
|  | parameter PRESELECT_I0 = "FALSE"; | ||||||
|  | parameter PRESELECT_I1 = "FALSE"; | ||||||
|  | parameter [0:0] IS_CE0_INVERTED = 1'b0; | ||||||
|  | parameter [0:0] IS_CE1_INVERTED = 1'b0; | ||||||
|  | parameter [0:0] IS_S0_INVERTED = 1'b0; | ||||||
|  | parameter [0:0] IS_S1_INVERTED = 1'b0; | ||||||
|  | parameter [0:0] IS_IGNORE0_INVERTED = 1'b0; | ||||||
|  | parameter [0:0] IS_IGNORE1_INVERTED = 1'b0; | ||||||
|  | 
 | ||||||
|  | wire I0_internal = ((CE0 ^ IS_CE0_INVERTED) ? I0 : INIT_OUT); | ||||||
|  | wire I1_internal = ((CE1 ^ IS_CE1_INVERTED) ? I1 : INIT_OUT); | ||||||
|  | wire S0_true = (S0 ^ IS_S0_INVERTED); | ||||||
|  | wire S1_true = (S1 ^ IS_S1_INVERTED); | ||||||
|  | 
 | ||||||
|  | assign O = S0_true ? I0_internal : (S1_true ? I1_internal : INIT_OUT); | ||||||
|  | 
 | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module BUFHCE(output O, input I, input CE); | ||||||
|  | 
 | ||||||
|  | parameter [0:0] INIT_OUT = 1'b0; | ||||||
|  | parameter CE_TYPE = "SYNC"; | ||||||
|  | parameter [0:0] IS_CE_INVERTED = 1'b0; | ||||||
|  | 
 | ||||||
|  | assign O = ((CE ^ IS_CE_INVERTED) ? I : INIT_OUT); | ||||||
|  | 
 | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
| // module OBUFT(output O, input I, T); | // module OBUFT(output O, input I, T); | ||||||
| //   assign O = T ? 1'bz : I; | //   assign O = T ? 1'bz : I; | ||||||
| // endmodule | // endmodule | ||||||
|  | @ -98,6 +139,22 @@ module LUT6(output O, input I0, I1, I2, I3, I4, I5); | ||||||
|   assign O = I0 ? s1[1] : s1[0]; |   assign O = I0 ? s1[1] : s1[0]; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | module LUT6_2(output O6, output O5, input I0, I1, I2, I3, I4, I5); | ||||||
|  |   parameter [63:0] INIT = 0; | ||||||
|  |   wire [31: 0] s5 = I5 ? INIT[63:32] : INIT[31: 0]; | ||||||
|  |   wire [15: 0] s4 = I4 ?   s5[31:16] :   s5[15: 0]; | ||||||
|  |   wire [ 7: 0] s3 = I3 ?   s4[15: 8] :   s4[ 7: 0]; | ||||||
|  |   wire [ 3: 0] s2 = I2 ?   s3[ 7: 4] :   s3[ 3: 0]; | ||||||
|  |   wire [ 1: 0] s1 = I1 ?   s2[ 3: 2] :   s2[ 1: 0]; | ||||||
|  |   assign O6 = I0 ? s1[1] : s1[0]; | ||||||
|  | 
 | ||||||
|  |   wire [15: 0] s5_4 = I4 ? INIT[31:16] : INIT[15: 0]; | ||||||
|  |   wire [ 7: 0] s5_3 = I3 ? s5_4[15: 8] : s5_4[ 7: 0]; | ||||||
|  |   wire [ 3: 0] s5_2 = I2 ? s5_3[ 7: 4] : s5_3[ 3: 0]; | ||||||
|  |   wire [ 1: 0] s5_1 = I1 ? s5_2[ 3: 2] : s5_2[ 1: 0]; | ||||||
|  |   assign O5 = I0 ? s5_1[1] : s5_1[0]; | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
| module MUXCY(output O, input CI, DI, S); | module MUXCY(output O, input CI, DI, S); | ||||||
|   assign O = S ? CI : DI; |   assign O = S ? CI : DI; | ||||||
| endmodule | endmodule | ||||||
|  |  | ||||||
|  | @ -28,12 +28,12 @@ function xtract_cell_decl() | ||||||
| 	# xtract_cell_decl BUFG | 	# xtract_cell_decl BUFG | ||||||
| 	xtract_cell_decl BUFGCE | 	xtract_cell_decl BUFGCE | ||||||
| 	xtract_cell_decl BUFGCE_1 | 	xtract_cell_decl BUFGCE_1 | ||||||
| 	xtract_cell_decl BUFGCTRL | 	#xtract_cell_decl BUFGCTRL | ||||||
| 	xtract_cell_decl BUFGMUX | 	xtract_cell_decl BUFGMUX | ||||||
| 	xtract_cell_decl BUFGMUX_1 | 	xtract_cell_decl BUFGMUX_1 | ||||||
| 	xtract_cell_decl BUFGMUX_CTRL | 	xtract_cell_decl BUFGMUX_CTRL | ||||||
| 	xtract_cell_decl BUFH | 	xtract_cell_decl BUFH | ||||||
| 	xtract_cell_decl BUFHCE | 	#xtract_cell_decl BUFHCE | ||||||
| 	xtract_cell_decl BUFIO | 	xtract_cell_decl BUFIO | ||||||
| 	xtract_cell_decl BUFMR | 	xtract_cell_decl BUFMR | ||||||
| 	xtract_cell_decl BUFMRCE | 	xtract_cell_decl BUFMRCE | ||||||
|  | @ -92,7 +92,7 @@ function xtract_cell_decl() | ||||||
| 	# xtract_cell_decl LUT4 | 	# xtract_cell_decl LUT4 | ||||||
| 	# xtract_cell_decl LUT5 | 	# xtract_cell_decl LUT5 | ||||||
| 	# xtract_cell_decl LUT6 | 	# xtract_cell_decl LUT6 | ||||||
| 	xtract_cell_decl LUT6_2 | 	#xtract_cell_decl LUT6_2 | ||||||
| 	xtract_cell_decl MMCME2_ADV | 	xtract_cell_decl MMCME2_ADV | ||||||
| 	xtract_cell_decl MMCME2_BASE | 	xtract_cell_decl MMCME2_BASE | ||||||
| 	# xtract_cell_decl MUXF7 | 	# xtract_cell_decl MUXF7 | ||||||
|  |  | ||||||
|  | @ -30,29 +30,6 @@ module BUFGCE_1 (...); | ||||||
|     input CE, I; |     input CE, I; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module BUFGCTRL (...); |  | ||||||
|     output O; |  | ||||||
|     input CE0; |  | ||||||
|     input CE1; |  | ||||||
|     input I0; |  | ||||||
|     input I1; |  | ||||||
|     input IGNORE0; |  | ||||||
|     input IGNORE1; |  | ||||||
|     input S0; |  | ||||||
|     input S1; |  | ||||||
|     parameter integer INIT_OUT = 0; |  | ||||||
|     parameter PRESELECT_I0 = "FALSE"; |  | ||||||
|     parameter PRESELECT_I1 = "FALSE"; |  | ||||||
|     parameter [0:0] IS_CE0_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_CE1_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_I0_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_I1_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_IGNORE0_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_IGNORE1_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_S0_INVERTED = 1'b0; |  | ||||||
|     parameter [0:0] IS_S1_INVERTED = 1'b0; |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| module BUFGMUX (...); | module BUFGMUX (...); | ||||||
|     parameter CLK_SEL_TYPE = "SYNC"; |     parameter CLK_SEL_TYPE = "SYNC"; | ||||||
|     output O; |     output O; | ||||||
|  | @ -77,15 +54,6 @@ module BUFH (...); | ||||||
|     input I; |     input I; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module BUFHCE (...); |  | ||||||
|     parameter CE_TYPE = "SYNC"; |  | ||||||
|     parameter integer INIT_OUT = 0; |  | ||||||
|     parameter [0:0] IS_CE_INVERTED = 1'b0; |  | ||||||
|     output O; |  | ||||||
|     input CE; |  | ||||||
|     input I; |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| module BUFIO (...); | module BUFIO (...); | ||||||
|     output O; |     output O; | ||||||
|     input I; |     input I; | ||||||
|  | @ -2420,12 +2388,6 @@ module LDPE (...); | ||||||
|     input D, G, GE, PRE; |     input D, G, GE, PRE; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module LUT6_2 (...); |  | ||||||
|     parameter [63:0] INIT = 64'h0000000000000000; |  | ||||||
|     input I0, I1, I2, I3, I4, I5; |  | ||||||
|     output O5, O6; |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| module MMCME2_ADV (...); | module MMCME2_ADV (...); | ||||||
|     parameter BANDWIDTH = "OPTIMIZED"; |     parameter BANDWIDTH = "OPTIMIZED"; | ||||||
|     parameter real CLKFBOUT_MULT_F = 5.000; |     parameter real CLKFBOUT_MULT_F = 5.000; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue