mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Add whitebox support to DRAM
This commit is contained in:
		
							parent
							
								
									4f44e3399b
								
							
						
					
					
						commit
						ae89e6ab26
					
				
					 5 changed files with 26 additions and 24 deletions
				
			
		|  | @ -25,3 +25,17 @@ CARRY4 3 1 10 8 | ||||||
| -   469 548 528 -   205 558 618 | -   469 548 528 -   205 558 618 | ||||||
| -   -   292 376 -   -   226 330 | -   -   292 376 -   -   226 330 | ||||||
| -   -   -   380 -   -   -   227 | -   -   -   380 -   -   -   227 | ||||||
|  | 
 | ||||||
|  | # SLICEM/A6LUT | ||||||
|  | # Inputs: A0 A1 A2 A3 A4 A5 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 WCLK WE | ||||||
|  | # Outputs: DPO SPO | ||||||
|  | RAM64X1D 4 1 15 2 | ||||||
|  | -   -   -   -   -   -   - 124 124 124 124 124 124 - - | ||||||
|  | 124 124 124 124 124 124 - -   -   -   -   -   124 - - | ||||||
|  | 
 | ||||||
|  | # SLICEM/A6LUT + F7[AB]MUX | ||||||
|  | # Inputs: A0 A1 A2 A3 A4 A5 A6 D DPRA0 DPRA1 DPRA2 DPRA3 DPRA4 DPRA5 DPRA6 WCLK WE | ||||||
|  | # Outputs: DPO SPO | ||||||
|  | RAM128X1D 5 1 17 2 | ||||||
|  | -   -   -   -   -   -   -   - 314 314 314 314 314 314 292 - - | ||||||
|  | 347 347 347 347 347 347 296 - -   -   -   -   -   -   -   - - | ||||||
|  |  | ||||||
|  | @ -281,8 +281,9 @@ module FDPE_1 ((* abc_flop_q *) output reg Q, input C, CE, D, PRE); | ||||||
|   always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D; |   always @(negedge C, posedge PRE) if (PRE) Q <= 1'b1; else if (CE) Q <= D; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | (* abc_box_id = 4, lib_whitebox *) | ||||||
| module RAM64X1D ( | module RAM64X1D ( | ||||||
|   (* abc_flop_q *) output DPO, SPO, |   output DPO, SPO, | ||||||
|   input  D, WCLK, WE, |   input  D, WCLK, WE, | ||||||
|   input  A0, A1, A2, A3, A4, A5, |   input  A0, A1, A2, A3, A4, A5, | ||||||
|   input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5 |   input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5 | ||||||
|  | @ -294,12 +295,15 @@ module RAM64X1D ( | ||||||
|   reg [63:0] mem = INIT; |   reg [63:0] mem = INIT; | ||||||
|   assign SPO = mem[a]; |   assign SPO = mem[a]; | ||||||
|   assign DPO = mem[dpra]; |   assign DPO = mem[dpra]; | ||||||
|  | `ifndef _ABC | ||||||
|   wire clk = WCLK ^ IS_WCLK_INVERTED; |   wire clk = WCLK ^ IS_WCLK_INVERTED; | ||||||
|   always @(posedge clk) if (WE) mem[a] <= D; |   always @(posedge clk) if (WE) mem[a] <= D; | ||||||
|  | `endif | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
|  | (* abc_box_id = 5, lib_whitebox *) | ||||||
| module RAM128X1D ( | module RAM128X1D ( | ||||||
|   (* abc_flop_q *) output       DPO, SPO, |   output       DPO, SPO, | ||||||
|   input        D, WCLK, WE, |   input        D, WCLK, WE, | ||||||
|   input  [6:0] A, DPRA |   input  [6:0] A, DPRA | ||||||
| ); | ); | ||||||
|  | @ -308,8 +312,10 @@ module RAM128X1D ( | ||||||
|   reg [127:0] mem = INIT; |   reg [127:0] mem = INIT; | ||||||
|   assign SPO = mem[A]; |   assign SPO = mem[A]; | ||||||
|   assign DPO = mem[DPRA]; |   assign DPO = mem[DPRA]; | ||||||
|  | `ifndef _ABC | ||||||
|   wire clk = WCLK ^ IS_WCLK_INVERTED; |   wire clk = WCLK ^ IS_WCLK_INVERTED; | ||||||
|   always @(posedge clk) if (WE) mem[A] <= D; |   always @(posedge clk) if (WE) mem[A] <= D; | ||||||
|  | `endif | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module SRL16E ( | module SRL16E ( | ||||||
|  |  | ||||||
|  | @ -116,7 +116,7 @@ function xtract_cell_decl() | ||||||
| 	xtract_cell_decl PS7 "(* keep *)" | 	xtract_cell_decl PS7 "(* keep *)" | ||||||
| 	xtract_cell_decl PULLDOWN | 	xtract_cell_decl PULLDOWN | ||||||
| 	xtract_cell_decl PULLUP | 	xtract_cell_decl PULLUP | ||||||
| 	xtract_cell_decl RAM128X1D | 	#xtract_cell_decl RAM128X1D | ||||||
| 	xtract_cell_decl RAM128X1S | 	xtract_cell_decl RAM128X1S | ||||||
| 	xtract_cell_decl RAM256X1S | 	xtract_cell_decl RAM256X1S | ||||||
| 	xtract_cell_decl RAM32M | 	xtract_cell_decl RAM32M | ||||||
|  | @ -125,7 +125,7 @@ function xtract_cell_decl() | ||||||
| 	xtract_cell_decl RAM32X1S_1 | 	xtract_cell_decl RAM32X1S_1 | ||||||
| 	xtract_cell_decl RAM32X2S | 	xtract_cell_decl RAM32X2S | ||||||
| 	xtract_cell_decl RAM64M | 	xtract_cell_decl RAM64M | ||||||
| 	xtract_cell_decl RAM64X1D | 	x#tract_cell_decl RAM64X1D | ||||||
| 	xtract_cell_decl RAM64X1S | 	xtract_cell_decl RAM64X1S | ||||||
| 	xtract_cell_decl RAM64X1S_1 | 	xtract_cell_decl RAM64X1S_1 | ||||||
| 	xtract_cell_decl RAM64X2S | 	xtract_cell_decl RAM64X2S | ||||||
|  |  | ||||||
|  | @ -3655,17 +3655,6 @@ module PULLUP (...); | ||||||
|     output O; |     output O; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module RAM128X1D (...); |  | ||||||
|     parameter [127:0] INIT = 128'h00000000000000000000000000000000; |  | ||||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; |  | ||||||
|     output DPO, SPO; |  | ||||||
|     input [6:0] A; |  | ||||||
|     input [6:0] DPRA; |  | ||||||
|     input D; |  | ||||||
|     input WCLK; |  | ||||||
|     input WE; |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| module RAM128X1S (...); | module RAM128X1S (...); | ||||||
|     parameter [127:0] INIT = 128'h00000000000000000000000000000000; |     parameter [127:0] INIT = 128'h00000000000000000000000000000000; | ||||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; |     parameter [0:0] IS_WCLK_INVERTED = 1'b0; | ||||||
|  | @ -3756,13 +3745,6 @@ module RAM64M (...); | ||||||
|     input WE; |     input WE; | ||||||
| endmodule | endmodule | ||||||
| 
 | 
 | ||||||
| module RAM64X1D (...); |  | ||||||
|     parameter [63:0] INIT = 64'h0000000000000000; |  | ||||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; |  | ||||||
|     output DPO, SPO; |  | ||||||
|     input A0, A1, A2, A3, A4, A5, D, DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5, WCLK, WE; |  | ||||||
| endmodule |  | ||||||
| 
 |  | ||||||
| module RAM64X1S (...); | module RAM64X1S (...); | ||||||
|     parameter [63:0] INIT = 64'h0000000000000000; |     parameter [63:0] INIT = 64'h0000000000000000; | ||||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; |     parameter [0:0] IS_WCLK_INVERTED = 1'b0; | ||||||
|  |  | ||||||
|  | @ -203,9 +203,9 @@ struct SynthXilinxPass : public ScriptPass | ||||||
| 	{ | 	{ | ||||||
| 		if (check_label("begin")) { | 		if (check_label("begin")) { | ||||||
| 			if (vpr) | 			if (vpr) | ||||||
| 				run("read_verilog -lib -D_EXPLICIT_CARRY +/xilinx/cells_sim.v"); | 				run("read_verilog -lib -D_ABC -D_EXPLICIT_CARRY +/xilinx/cells_sim.v"); | ||||||
| 			else | 			else | ||||||
| 				run("read_verilog -lib +/xilinx/cells_sim.v"); | 				run("read_verilog -lib -D_ABC +/xilinx/cells_sim.v"); | ||||||
| 
 | 
 | ||||||
| 			run("read_verilog -lib +/xilinx/cells_xtra.v"); | 			run("read_verilog -lib +/xilinx/cells_xtra.v"); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue