mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	Towards DRAM support in Xilinx flow
This commit is contained in:
		
							parent
							
								
									21a1cc1b60
								
							
						
					
					
						commit
						b00cad81d7
					
				
					 5 changed files with 78 additions and 0 deletions
				
			
		|  | @ -27,5 +27,8 @@ $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_init_32.vh)) | ||||||
| $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_init_18.vh)) | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_init_18.vh)) | ||||||
| $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_init_16.vh)) | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_init_16.vh)) | ||||||
| $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_bb.v)) | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_bb.v)) | ||||||
|  | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/drams.txt)) | ||||||
|  | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/drams_map.v)) | ||||||
|  | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/drams_bb.v)) | ||||||
| $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/arith_map.v)) | $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/arith_map.v)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								techlibs/xilinx/drams.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								techlibs/xilinx/drams.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | ||||||
|  | 
 | ||||||
|  | bram $__XILINX_RAM32X1D | ||||||
|  |   init 1 | ||||||
|  |   abits 5 | ||||||
|  |   dbits 1 | ||||||
|  |   groups 2 | ||||||
|  |   ports  1 1 | ||||||
|  |   wrmode 0 1 | ||||||
|  |   enable 0 1 | ||||||
|  |   transp 0 0 | ||||||
|  |   clocks 0 1 | ||||||
|  |   clkpol 0 2 | ||||||
|  | endbram | ||||||
|  | 
 | ||||||
|  | match $__XILINX_RAM32X1D | ||||||
|  | endmatch | ||||||
|  | 
 | ||||||
							
								
								
									
										11
									
								
								techlibs/xilinx/drams_bb.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								techlibs/xilinx/drams_bb.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | 
 | ||||||
|  | module RAM32X1D ( | ||||||
|  | 	output DPO, SPO, | ||||||
|  | 	input  A0, A1, A2, A3, A4, D, | ||||||
|  | 	input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, | ||||||
|  | 	input  WCLK, WE | ||||||
|  | ); | ||||||
|  | 	parameter INIT = 32'h0; | ||||||
|  | 	parameter IS_WCLK_INVERTED = 1'b0; | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
							
								
								
									
										35
									
								
								techlibs/xilinx/drams_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								techlibs/xilinx/drams_map.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | 
 | ||||||
|  | module \$__XILINX_RAM32X1D (CLK1, A1ADDR, A1DATA, B1ADDR, B1DATA, B1EN); | ||||||
|  | 	parameter [31:0] INIT = 32'bx; | ||||||
|  | 	parameter CLKPOL2 = 1; | ||||||
|  | 	input CLK1; | ||||||
|  | 
 | ||||||
|  | 	input [4:0] A1ADDR; | ||||||
|  | 	output A1DATA; | ||||||
|  | 
 | ||||||
|  | 	input [4:0] B1ADDR; | ||||||
|  | 	input B1DATA; | ||||||
|  | 	input B1EN; | ||||||
|  | 
 | ||||||
|  | 	RAM32X1D #( | ||||||
|  | 		.INIT(INIT), | ||||||
|  | 		.IS_WCLK_INVERTED(!CLKPOL2) | ||||||
|  | 	) _TECHMAP_REPLACE_ ( | ||||||
|  | 		.DPRA0(A1ADDR[0]), | ||||||
|  | 		.DPRA1(A1ADDR[1]), | ||||||
|  | 		.DPRA2(A1ADDR[2]), | ||||||
|  | 		.DPRA3(A1ADDR[3]), | ||||||
|  | 		.DPRA4(A1ADDR[4]), | ||||||
|  | 		.DPO(A1DATA), | ||||||
|  | 
 | ||||||
|  | 		.A0(B1ADDR[0]), | ||||||
|  | 		.A1(B1ADDR[1]), | ||||||
|  | 		.A2(B1ADDR[2]), | ||||||
|  | 		.A3(B1ADDR[3]), | ||||||
|  | 		.A4(B1ADDR[4]), | ||||||
|  | 		.D(B1DATA), | ||||||
|  | 		.WCLK(CLK1), | ||||||
|  | 		.WE(B1EN) | ||||||
|  | 	); | ||||||
|  | endmodule | ||||||
|  | 
 | ||||||
|  | @ -70,6 +70,7 @@ struct SynthXilinxPass : public Pass { | ||||||
| 		log("    begin:\n"); | 		log("    begin:\n"); | ||||||
| 		log("        read_verilog -lib +/xilinx/cells_sim.v\n"); | 		log("        read_verilog -lib +/xilinx/cells_sim.v\n"); | ||||||
| 		log("        read_verilog -lib +/xilinx/brams_bb.v\n"); | 		log("        read_verilog -lib +/xilinx/brams_bb.v\n"); | ||||||
|  | 		log("        read_verilog -lib +/xilinx/drams_bb.v\n"); | ||||||
| 		log("        hierarchy -check -top <top>\n"); | 		log("        hierarchy -check -top <top>\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
| 		log("    flatten:     (only if -flatten)\n"); | 		log("    flatten:     (only if -flatten)\n"); | ||||||
|  | @ -84,6 +85,10 @@ struct SynthXilinxPass : public Pass { | ||||||
| 		log("        memory_bram -rules +/xilinx/brams.txt\n"); | 		log("        memory_bram -rules +/xilinx/brams.txt\n"); | ||||||
| 		log("        techmap -map +/xilinx/brams_map.v\n"); | 		log("        techmap -map +/xilinx/brams_map.v\n"); | ||||||
| 		log("\n"); | 		log("\n"); | ||||||
|  | 		log("    dram:\n"); | ||||||
|  | 		log("        memory_bram -rules +/xilinx/drams.txt\n"); | ||||||
|  | 		log("        techmap -map +/xilinx/drams_map.v\n"); | ||||||
|  | 		log("\n"); | ||||||
| 		log("    fine:\n"); | 		log("    fine:\n"); | ||||||
| 		log("        opt -fast -full\n"); | 		log("        opt -fast -full\n"); | ||||||
| 		log("        memory_map\n"); | 		log("        memory_map\n"); | ||||||
|  | @ -160,6 +165,7 @@ struct SynthXilinxPass : public Pass { | ||||||
| 		{ | 		{ | ||||||
| 			Pass::call(design, "read_verilog -lib +/xilinx/cells_sim.v"); | 			Pass::call(design, "read_verilog -lib +/xilinx/cells_sim.v"); | ||||||
| 			Pass::call(design, "read_verilog -lib +/xilinx/brams_bb.v"); | 			Pass::call(design, "read_verilog -lib +/xilinx/brams_bb.v"); | ||||||
|  | 			Pass::call(design, "read_verilog -lib +/xilinx/drams_bb.v"); | ||||||
| 			Pass::call(design, stringf("hierarchy -check %s", top_opt.c_str())); | 			Pass::call(design, stringf("hierarchy -check %s", top_opt.c_str())); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -181,6 +187,12 @@ struct SynthXilinxPass : public Pass { | ||||||
| 			Pass::call(design, "techmap -map +/xilinx/brams_map.v"); | 			Pass::call(design, "techmap -map +/xilinx/brams_map.v"); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		if (check_label(active, run_from, run_to, "dram")) | ||||||
|  | 		{ | ||||||
|  | 			Pass::call(design, "memory_bram -rules +/xilinx/drams.txt"); | ||||||
|  | 			Pass::call(design, "techmap -map +/xilinx/drams_map.v"); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		if (check_label(active, run_from, run_to, "fine")) | 		if (check_label(active, run_from, run_to, "fine")) | ||||||
| 		{ | 		{ | ||||||
| 			Pass::call(design, "opt -fast -full"); | 			Pass::call(design, "opt -fast -full"); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue