Add Xilinx RAM64X1D and RAM128X1D simulation models
authorClifford Wolf <clifford@clifford.at>
Wed, 7 Mar 2018 16:31:07 +0000 (17:31 +0100)
committerClifford Wolf <clifford@clifford.at>
Wed, 7 Mar 2018 16:31:48 +0000 (17:31 +0100)
techlibs/xilinx/Makefile.inc
techlibs/xilinx/cells_sim.v
techlibs/xilinx/drams_bb.v [deleted file]
techlibs/xilinx/synth_xilinx.cc

index d4d4bd09af7e9bab4941bcebb58e792e54340607..887ea27d9547e5e516f554c1e4a8c9d2b28ddf19 100644 (file)
@@ -27,7 +27,6 @@ $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/brams_map.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/lut2lut.v))
 
index 1f114a22c76cbb8d8e825bb13d72e9c317b44c7e..eba17ac9cb5b4b581248d1727cf7c507270d828a 100644 (file)
@@ -156,3 +156,33 @@ module FDPE (output reg Q, input C, CE, D, PRE);
   endcase endgenerate
 endmodule
 
+module RAM64X1D (
+  output DPO, SPO,
+  input  D, WCLK, WE,
+  input  A0, A1, A2, A3, A4, A5,
+  input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5
+);
+  parameter INIT = 64'h0;
+  parameter IS_WCLK_INVERTED = 1'b0;
+  wire [5:0] a = {A5, A4, A3, A2, A1, A0};
+  wire [5:0] dpra = {DPRA5, DPRA4, DPRA3, DPRA2, DPRA1, DPRA0};
+  reg [63:0] mem = INIT;
+  assign SPO = mem[a];
+  assign DPO = mem[dpra];
+  wire clk = WCLK ^ IS_WCLK_INVERTED;
+  always @(posedge clk) if (WE) mem[a] <= D;
+endmodule
+
+module RAM128X1D (
+  output       DPO, SPO,
+  input        D, WCLK, WE,
+  input  [6:0] A, DPRA
+);
+  parameter INIT = 128'h0;
+  parameter IS_WCLK_INVERTED = 1'b0;
+  reg [127:0] mem = INIT;
+  assign SPO = mem[A];
+  assign DPO = mem[DPRA];
+  wire clk = WCLK ^ IS_WCLK_INVERTED;
+  always @(posedge clk) if (WE) mem[A] <= D;
+endmodule
diff --git a/techlibs/xilinx/drams_bb.v b/techlibs/xilinx/drams_bb.v
deleted file mode 100644 (file)
index 11168fe..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-module RAM64X1D (
-       output DPO, SPO,
-       input  D, WCLK, WE,
-       input  A0, A1, A2, A3, A4, A5,
-       input  DPRA0, DPRA1, DPRA2, DPRA3, DPRA4, DPRA5
-);
-       parameter INIT = 64'h0;
-       parameter IS_WCLK_INVERTED = 1'b0;
-endmodule
-
-module RAM128X1D (
-       output       DPO, SPO,
-       input        D, WCLK, WE,
-       input  [6:0] A, DPRA
-);
-       parameter INIT = 128'h0;
-       parameter IS_WCLK_INVERTED = 1'b0;
-endmodule
-
index e7ec1e6e86c9b5510fc38d6e38e94e7e8514d6b3..b60295ac0f1bbe9ce903186713a9caab2f0c9fba 100644 (file)
@@ -71,7 +71,6 @@ struct SynthXilinxPass : public Pass {
                log("        read_verilog -lib +/xilinx/cells_sim.v\n");
                log("        read_verilog -lib +/xilinx/cells_xtra.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("\n");
                log("    flatten:     (only if -flatten)\n");
@@ -168,7 +167,6 @@ struct SynthXilinxPass : public Pass {
                        Pass::call(design, "read_verilog -lib +/xilinx/cells_sim.v");
                        Pass::call(design, "read_verilog -lib +/xilinx/cells_xtra.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()));
                }