mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	
							parent
							
								
									2abe38e73e
								
							
						
					
					
						commit
						fcce94010f
					
				
					 2 changed files with 16 additions and 9 deletions
				
			
		|  | @ -363,3 +363,11 @@ module \$__XILINX_MUXF78 (O, I0, I1, I2, I3, S0, S1); | ||||||
|   else |   else | ||||||
|     MUXF8 mux8 (.I0(T0), .I1(T1), .S(S1), .O(O)); |     MUXF8 mux8 (.I0(T0), .I1(T1), .S(S1), .O(O)); | ||||||
| endmodule | endmodule | ||||||
|  | 
 | ||||||
|  | module \$__XILINX_TINOUTPAD (input I, OE, output O, inout IO); | ||||||
|  |   IOBUF _TECHMAP_REPLACE_ (.I(I), .O(O), .T(~OE), .IO(IO)); | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | module \$__XILINX_TOUTPAD (input I, OE, output O); | ||||||
|  |   OBUFT _TECHMAP_REPLACE_ (.I(I), .O(O), .T(~OE)); | ||||||
|  | endmodule | ||||||
|  |  | ||||||
|  | @ -282,6 +282,7 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 
 | 
 | ||||||
| 	void script() YS_OVERRIDE | 	void script() YS_OVERRIDE | ||||||
| 	{ | 	{ | ||||||
|  | 		bool do_iopad = iopad || (ise && !noiopad); | ||||||
| 		std::string ff_map_file; | 		std::string ff_map_file; | ||||||
| 		if (help_mode) | 		if (help_mode) | ||||||
| 			ff_map_file = "+/xilinx/{family}_ff_map.v"; | 			ff_map_file = "+/xilinx/{family}_ff_map.v"; | ||||||
|  | @ -305,6 +306,8 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 			run("proc"); | 			run("proc"); | ||||||
| 			if (flatten || help_mode) | 			if (flatten || help_mode) | ||||||
| 				run("flatten", "(with '-flatten')"); | 				run("flatten", "(with '-flatten')"); | ||||||
|  | 			run("tribuf -logic"); | ||||||
|  | 			run("deminout"); | ||||||
| 			run("opt_expr"); | 			run("opt_expr"); | ||||||
| 			run("opt_clean"); | 			run("opt_clean"); | ||||||
| 			run("check"); | 			run("check"); | ||||||
|  | @ -503,6 +506,9 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("map_cells")) { | 		if (check_label("map_cells")) { | ||||||
|  | 			// Needs to be done before logic optimization, so that inverters (OE vs T) are handled.
 | ||||||
|  | 			if (help_mode || do_iopad) | ||||||
|  | 				run("iopadmap -bits -outpad OBUF I:O -inpad IBUF O:I -toutpad $__XILINX_TOUTPAD OE:I:O -tinoutpad $__XILINX_TINOUTPAD OE:O:I:IO A:top", "(only if '-iopad' or '-ise' and not '-noiopad')"); | ||||||
| 			std::string techmap_args = "-map +/techmap.v -map +/xilinx/cells_map.v"; | 			std::string techmap_args = "-map +/techmap.v -map +/xilinx/cells_map.v"; | ||||||
| 			if (widemux > 0) | 			if (widemux > 0) | ||||||
| 				techmap_args += stringf(" -D MIN_MUX_INPUTS=%d", widemux); | 				techmap_args += stringf(" -D MIN_MUX_INPUTS=%d", widemux); | ||||||
|  | @ -561,15 +567,8 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (check_label("finalize")) { | 		if (check_label("finalize")) { | ||||||
| 			bool do_iopad = iopad || (ise && !noiopad); | 			if (help_mode || !noclkbuf) | ||||||
| 			if (help_mode || !noclkbuf) { | 				run("clkbufmap -buf BUFG O:I ", "(skip if '-noclkbuf')"); | ||||||
| 				if (help_mode || do_iopad) |  | ||||||
| 					run("clkbufmap -buf BUFG O:I -inpad IBUFG O:I", "(skip if '-noclkbuf', '-inpad' passed if '-iopad' or '-ise' and not '-noiopad')"); |  | ||||||
| 				else |  | ||||||
| 					run("clkbufmap -buf BUFG O:I"); |  | ||||||
| 			} |  | ||||||
| 			if (help_mode || do_iopad) |  | ||||||
| 				run("iopadmap -bits -outpad OBUF I:O -inpad IBUF O:I A:top", "(only if '-iopad' or '-ise' and not '-noiopad')"); |  | ||||||
| 			if (help_mode || ise) | 			if (help_mode || ise) | ||||||
| 				run("extractinv -inv INV O:I", "(only if '-ise')"); | 				run("extractinv -inv INV O:I", "(only if '-ise')"); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue