mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +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 | ||||
| -   -   292 376 -   -   226 330 | ||||
| -   -   -   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; | ||||
| endmodule | ||||
| 
 | ||||
| (* abc_box_id = 4, lib_whitebox *) | ||||
| module RAM64X1D ( | ||||
|   (* abc_flop_q *) output DPO, SPO, | ||||
|   output DPO, SPO, | ||||
|   input  D, WCLK, WE, | ||||
|   input  A0, A1, A2, A3, A4, A5, | ||||
|   input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5 | ||||
|  | @ -294,12 +295,15 @@ module RAM64X1D ( | |||
|   reg [63:0] mem = INIT; | ||||
|   assign SPO = mem[a]; | ||||
|   assign DPO = mem[dpra]; | ||||
| `ifndef _ABC | ||||
|   wire clk = WCLK ^ IS_WCLK_INVERTED; | ||||
|   always @(posedge clk) if (WE) mem[a] <= D; | ||||
| `endif | ||||
| endmodule | ||||
| 
 | ||||
| (* abc_box_id = 5, lib_whitebox *) | ||||
| module RAM128X1D ( | ||||
|   (* abc_flop_q *) output       DPO, SPO, | ||||
|   output       DPO, SPO, | ||||
|   input        D, WCLK, WE, | ||||
|   input  [6:0] A, DPRA | ||||
| ); | ||||
|  | @ -308,8 +312,10 @@ module RAM128X1D ( | |||
|   reg [127:0] mem = INIT; | ||||
|   assign SPO = mem[A]; | ||||
|   assign DPO = mem[DPRA]; | ||||
| `ifndef _ABC | ||||
|   wire clk = WCLK ^ IS_WCLK_INVERTED; | ||||
|   always @(posedge clk) if (WE) mem[A] <= D; | ||||
| `endif | ||||
| endmodule | ||||
| 
 | ||||
| module SRL16E ( | ||||
|  |  | |||
|  | @ -116,7 +116,7 @@ function xtract_cell_decl() | |||
| 	xtract_cell_decl PS7 "(* keep *)" | ||||
| 	xtract_cell_decl PULLDOWN | ||||
| 	xtract_cell_decl PULLUP | ||||
| 	xtract_cell_decl RAM128X1D | ||||
| 	#xtract_cell_decl RAM128X1D | ||||
| 	xtract_cell_decl RAM128X1S | ||||
| 	xtract_cell_decl RAM256X1S | ||||
| 	xtract_cell_decl RAM32M | ||||
|  | @ -125,7 +125,7 @@ function xtract_cell_decl() | |||
| 	xtract_cell_decl RAM32X1S_1 | ||||
| 	xtract_cell_decl RAM32X2S | ||||
| 	xtract_cell_decl RAM64M | ||||
| 	xtract_cell_decl RAM64X1D | ||||
| 	x#tract_cell_decl RAM64X1D | ||||
| 	xtract_cell_decl RAM64X1S | ||||
| 	xtract_cell_decl RAM64X1S_1 | ||||
| 	xtract_cell_decl RAM64X2S | ||||
|  |  | |||
|  | @ -3655,17 +3655,6 @@ module PULLUP (...); | |||
|     output O; | ||||
| 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 (...); | ||||
|     parameter [127:0] INIT = 128'h00000000000000000000000000000000; | ||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; | ||||
|  | @ -3756,13 +3745,6 @@ module RAM64M (...); | |||
|     input WE; | ||||
| 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 (...); | ||||
|     parameter [63:0] INIT = 64'h0000000000000000; | ||||
|     parameter [0:0] IS_WCLK_INVERTED = 1'b0; | ||||
|  |  | |||
|  | @ -203,9 +203,9 @@ struct SynthXilinxPass : public ScriptPass | |||
| 	{ | ||||
| 		if (check_label("begin")) { | ||||
| 			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 | ||||
| 				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"); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue