Add whitebox support to DRAM
authorEddie Hung <eddie@fpgeh.com>
Thu, 23 May 2019 15:58:57 +0000 (08:58 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 23 May 2019 15:58:57 +0000 (08:58 -0700)
techlibs/xilinx/abc.box
techlibs/xilinx/cells_sim.v
techlibs/xilinx/cells_xtra.sh
techlibs/xilinx/cells_xtra.v
techlibs/xilinx/synth_xilinx.cc

index 57ea1670c932625bdc5768202bd923b4f6811c1e..92ea5537bb83fb30eb0bb681bd23240ce815e678 100644 (file)
@@ -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 - -   -   -   -   -   -   -   - -
index 9db52b67aaa9d2ace68e12a9540d407203df4509..29c79f68999dbce3b72c43844b59f4bb1ef1501a 100644 (file)
@@ -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 (
index 8e39b440dfbd9a3e1def30b29c9bdd896e19627e..e3b847c3681af80b9b1caebae1416b261566b97a 100644 (file)
@@ -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
index fbcc74682c49e20ecd2b35cf924b3684fd1bba69..0ec3d0df0302b5b8d261f501c089ad862c3f0f07 100644 (file)
@@ -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;
index 3cee81a7b7b1e8b8689c656a38e09368a586c913..ecfb94610c2f9030c37172a9b3b6be463362c64b 100644 (file)
@@ -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");