xilinx: Add support for UltraScale[+] BRAM mapping
authorDavid Shah <dave@ds0.me>
Fri, 18 Oct 2019 12:24:19 +0000 (13:24 +0100)
committerDavid Shah <dave@ds0.me>
Wed, 23 Oct 2019 10:47:37 +0000 (11:47 +0100)
Signed-off-by: David Shah <dave@ds0.me>
techlibs/xilinx/Makefile.inc
techlibs/xilinx/cells_xtra.py
techlibs/xilinx/synth_xilinx.cc
techlibs/xilinx/xc7_brams.txt [deleted file]
techlibs/xilinx/xc7_xcu_brams.txt [new file with mode: 0644]
techlibs/xilinx/xcu_brams_bb.v [new file with mode: 0644]
techlibs/xilinx/xcu_brams_map.v [new file with mode: 0644]
techlibs/xilinx/xcu_cells_xtra.v

index 3354605efc7a5d4e38d0f0e32aca7e3c0a1f82b2..6fc41f591a1f4b97fd3badd8cf827703477cb311 100644 (file)
@@ -32,9 +32,11 @@ $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xcu_cells_xtra.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams.txt))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams_map.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc6s_brams_bb.v))
-$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_brams.txt))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_xcu_brams.txt))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_brams_map.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xc7_brams_bb.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xcu_brams_map.v))
+$(eval $(call add_share_file,share/xilinx,techlibs/xilinx/xcu_brams_bb.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/lutrams.txt))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/lutrams_map.v))
 $(eval $(call add_share_file,share/xilinx,techlibs/xilinx/arith_map.v))
index 9a4747ff37e4d3e26da85370f97366d3c30e7bd2..7cf1162bdda84c088f445c95f8a57b2770e3644f 100644 (file)
@@ -228,8 +228,8 @@ XC6V_CELLS = [
     # Cell('FDSE'),
     Cell('IDDR', port_attrs={'C': ['clkbuf_sink']}),
     Cell('IDDR_2CLK', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
-    Cell('LDCE'),
-    Cell('LDPE'),
+    Cell('LDCE'),
+    Cell('LDPE'),
     Cell('ODDR', port_attrs={'C': ['clkbuf_sink']}),
 
     # Slice/CLB primitives.
@@ -378,8 +378,8 @@ XC7_CELLS = [
     # Cell('FDSE'),
     Cell('IDDR', port_attrs={'C': ['clkbuf_sink']}),
     Cell('IDDR_2CLK', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
-    Cell('LDCE'),
-    Cell('LDPE'),
+    Cell('LDCE'),
+    Cell('LDPE'),
     Cell('ODDR', port_attrs={'C': ['clkbuf_sink']}),
 
     # Slice/CLB primitives.
@@ -435,8 +435,8 @@ XCU_CELLS = [
     # Blockram.
     Cell('FIFO18E2', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
     Cell('FIFO36E2', port_attrs={'RDCLK': ['clkbuf_sink'], 'WRCLK': ['clkbuf_sink']}),
-    Cell('RAMB18E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
-    Cell('RAMB36E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+    #Cell('RAMB18E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
+    #Cell('RAMB36E2', port_attrs={'CLKARDCLK': ['clkbuf_sink'], 'CLKBWRCLK': ['clkbuf_sink']}),
     Cell('URAM288', port_attrs={'CLK': ['clkbuf_sink']}),
     Cell('URAM288_BASE', port_attrs={'CLK': ['clkbuf_sink']}),
 
@@ -491,6 +491,12 @@ XCU_CELLS = [
     Cell('PLLE3_BASE'),
     Cell('PLLE4_ADV'),
     Cell('PLLE4_BASE'),
+    # the "E2" variants are not strictly speaking UltraScale[+] cells
+    # but are automatically upgraded for backwards compatibility purposes
+    Cell('MMCME2_ADV'),
+    Cell('MMCME2_BASE'),
+    Cell('PLLE2_ADV'),
+    Cell('PLLE2_BASE'),
 
     # Configuration.
     Cell('BSCANE2', keep=True),
@@ -562,8 +568,8 @@ XCU_CELLS = [
     # Cell('FDSE'),
     Cell('HARD_SYNC', port_attrs={'CLK': ['clkbuf_sink']}),
     Cell('IDDRE1', port_attrs={'C': ['clkbuf_sink'], 'CB': ['clkbuf_sink']}),
-    Cell('LDCE'),
-    Cell('LDPE'),
+    Cell('LDCE'),
+    Cell('LDPE'),
     Cell('ODDRE1', port_attrs={'C': ['clkbuf_sink']}),
 
     # NOTE: not in the official library guide!
index 6566da832d330c2be9fac8b1647bde8c16ca85fc..825addf84f651d40de30e0b65a70432d067c3d58 100644 (file)
@@ -305,6 +305,8 @@ struct SynthXilinxPass : public ScriptPass
                                run("read_verilog -lib +/xilinx/xc6s_brams_bb.v");
                        } else if (family == "xc6v" || family == "xc7") {
                                run("read_verilog -lib +/xilinx/xc7_brams_bb.v");
+                       } else if (family == "xcu" || family == "xcup") {
+                               run("read_verilog -lib +/xilinx/xcu_brams_bb.v");
                        }
 
                        run(stringf("hierarchy -check %s", top_opt.c_str()));
@@ -417,8 +419,11 @@ struct SynthXilinxPass : public ScriptPass
                                        run("memory_bram -rules +/xilinx/xc6s_brams.txt");
                                        run("techmap -map +/xilinx/xc6s_brams_map.v");
                                } else if (family == "xc6v" || family == "xc7") {
-                                       run("memory_bram -rules +/xilinx/xc7_brams.txt");
+                                       run("memory_bram -rules +/xilinx/xc7_xcu_brams.txt");
                                        run("techmap -map +/xilinx/xc7_brams_map.v");
+                               } else if (family == "xcu" || family == "xcup") {
+                                       run("memory_bram -rules +/xilinx/xc7_xcu_brams.txt");
+                                       run("techmap -map +/xilinx/xcu_brams_map.v");                                   
                                } else {
                                        log_warning("Block RAM inference not yet supported for family %s.\n", family.c_str());
                                }
diff --git a/techlibs/xilinx/xc7_brams.txt b/techlibs/xilinx/xc7_brams.txt
deleted file mode 100644 (file)
index f116111..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-
-bram $__XILINX_RAMB36_SDP
-  init 1
-  abits 9
-  dbits 72
-  groups 2
-  ports  1 1
-  wrmode 0 1
-  enable 1 8
-  transp 0 0
-  clocks 2 3
-  clkpol 2 3
-endbram
-
-bram $__XILINX_RAMB18_SDP
-  init 1
-  abits 9
-  dbits 36
-  groups 2
-  ports  1 1
-  wrmode 0 1
-  enable 1 4
-  transp 0 0
-  clocks 2 3
-  clkpol 2 3
-endbram
-
-bram $__XILINX_RAMB36_TDP
-  init 1
-  abits 10     @a10d36
-  dbits 36     @a10d36
-  abits 11     @a11d18
-  dbits 18     @a11d18
-  abits 12     @a12d9
-  dbits  9     @a12d9
-  abits 13     @a13d4
-  dbits  4     @a13d4
-  abits 14     @a14d2
-  dbits  2     @a14d2
-  abits 15     @a15d1
-  dbits  1     @a15d1
-  groups 2
-  ports  1 1
-  wrmode 0 1
-  enable 1 4   @a10d36
-  enable 1 2   @a11d18
-  enable 1 1   @a12d9 @a13d4 @a14d2 @a15d1
-  transp 0 0
-  clocks 2 3
-  clkpol 2 3
-endbram
-
-bram $__XILINX_RAMB18_TDP
-  init 1
-  abits 10     @a10d18
-  dbits 18     @a10d18
-  abits 11     @a11d9
-  dbits  9     @a11d9
-  abits 12     @a12d4
-  dbits  4     @a12d4
-  abits 13     @a13d2
-  dbits  2     @a13d2
-  abits 14     @a14d1
-  dbits  1     @a14d1
-  groups 2
-  ports  1 1
-  wrmode 0 1
-  enable 1 2   @a10d18
-  enable 1 1   @a11d9 @a12d4 @a13d2 @a14d1
-  transp 0 0
-  clocks 2 3
-  clkpol 2 3
-endbram
-
-match $__XILINX_RAMB36_SDP
-  min bits 4096
-  min efficiency 5
-  shuffle_enable B
-  make_transp
-  or_next_if_better
-endmatch
-
-match $__XILINX_RAMB18_SDP
-  min bits 4096
-  min efficiency 5
-  shuffle_enable B
-  make_transp
-  or_next_if_better
-endmatch
-
-match $__XILINX_RAMB36_TDP
-  min bits 4096
-  min efficiency 5
-  shuffle_enable B
-  make_transp
-  or_next_if_better
-endmatch
-
-match $__XILINX_RAMB18_TDP
-  min bits 4096
-  min efficiency 5
-  shuffle_enable B
-  make_transp
-endmatch
-
diff --git a/techlibs/xilinx/xc7_xcu_brams.txt b/techlibs/xilinx/xc7_xcu_brams.txt
new file mode 100644 (file)
index 0000000..f116111
--- /dev/null
@@ -0,0 +1,105 @@
+
+bram $__XILINX_RAMB36_SDP
+  init 1
+  abits 9
+  dbits 72
+  groups 2
+  ports  1 1
+  wrmode 0 1
+  enable 1 8
+  transp 0 0
+  clocks 2 3
+  clkpol 2 3
+endbram
+
+bram $__XILINX_RAMB18_SDP
+  init 1
+  abits 9
+  dbits 36
+  groups 2
+  ports  1 1
+  wrmode 0 1
+  enable 1 4
+  transp 0 0
+  clocks 2 3
+  clkpol 2 3
+endbram
+
+bram $__XILINX_RAMB36_TDP
+  init 1
+  abits 10     @a10d36
+  dbits 36     @a10d36
+  abits 11     @a11d18
+  dbits 18     @a11d18
+  abits 12     @a12d9
+  dbits  9     @a12d9
+  abits 13     @a13d4
+  dbits  4     @a13d4
+  abits 14     @a14d2
+  dbits  2     @a14d2
+  abits 15     @a15d1
+  dbits  1     @a15d1
+  groups 2
+  ports  1 1
+  wrmode 0 1
+  enable 1 4   @a10d36
+  enable 1 2   @a11d18
+  enable 1 1   @a12d9 @a13d4 @a14d2 @a15d1
+  transp 0 0
+  clocks 2 3
+  clkpol 2 3
+endbram
+
+bram $__XILINX_RAMB18_TDP
+  init 1
+  abits 10     @a10d18
+  dbits 18     @a10d18
+  abits 11     @a11d9
+  dbits  9     @a11d9
+  abits 12     @a12d4
+  dbits  4     @a12d4
+  abits 13     @a13d2
+  dbits  2     @a13d2
+  abits 14     @a14d1
+  dbits  1     @a14d1
+  groups 2
+  ports  1 1
+  wrmode 0 1
+  enable 1 2   @a10d18
+  enable 1 1   @a11d9 @a12d4 @a13d2 @a14d1
+  transp 0 0
+  clocks 2 3
+  clkpol 2 3
+endbram
+
+match $__XILINX_RAMB36_SDP
+  min bits 4096
+  min efficiency 5
+  shuffle_enable B
+  make_transp
+  or_next_if_better
+endmatch
+
+match $__XILINX_RAMB18_SDP
+  min bits 4096
+  min efficiency 5
+  shuffle_enable B
+  make_transp
+  or_next_if_better
+endmatch
+
+match $__XILINX_RAMB36_TDP
+  min bits 4096
+  min efficiency 5
+  shuffle_enable B
+  make_transp
+  or_next_if_better
+endmatch
+
+match $__XILINX_RAMB18_TDP
+  min bits 4096
+  min efficiency 5
+  shuffle_enable B
+  make_transp
+endmatch
+
diff --git a/techlibs/xilinx/xcu_brams_bb.v b/techlibs/xilinx/xcu_brams_bb.v
new file mode 100644 (file)
index 0000000..f3e43d0
--- /dev/null
@@ -0,0 +1,405 @@
+module RAMB18E2 (...);
+    parameter CASCADE_ORDER_A = "NONE";
+    parameter CASCADE_ORDER_B = "NONE";
+    parameter CLOCK_DOMAINS = "INDEPENDENT";
+    parameter integer DOA_REG = 1;
+    parameter integer DOB_REG = 1;
+    parameter ENADDRENA = "FALSE";
+    parameter ENADDRENB = "FALSE";
+    parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [17:0] INIT_A = 18'h00000;
+    parameter [17:0] INIT_B = 18'h00000;
+    parameter INIT_FILE = "NONE";
+    parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
+    parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
+    parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
+    parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
+    parameter RDADDRCHANGEA = "FALSE";
+    parameter RDADDRCHANGEB = "FALSE";
+    parameter integer READ_WIDTH_A = 0;
+    parameter integer READ_WIDTH_B = 0;
+    parameter RSTREG_PRIORITY_A = "RSTREG";
+    parameter RSTREG_PRIORITY_B = "RSTREG";
+    parameter SIM_COLLISION_CHECK = "ALL";
+    parameter SLEEP_ASYNC = "FALSE";
+    parameter [17:0] SRVAL_A = 18'h00000;
+    parameter [17:0] SRVAL_B = 18'h00000;
+    parameter WRITE_MODE_A = "NO_CHANGE";
+    parameter WRITE_MODE_B = "NO_CHANGE";
+    parameter integer WRITE_WIDTH_A = 0;
+    parameter integer WRITE_WIDTH_B = 0;
+    output [15:0] CASDOUTA;
+    output [15:0] CASDOUTB;
+    output [1:0] CASDOUTPA;
+    output [1:0] CASDOUTPB;
+    output [15:0] DOUTADOUT;
+    output [15:0] DOUTBDOUT;
+    output [1:0] DOUTPADOUTP;
+    output [1:0] DOUTPBDOUTP;
+    input [13:0] ADDRARDADDR;
+    input [13:0] ADDRBWRADDR;
+    input ADDRENA;
+    input ADDRENB;
+    input CASDIMUXA;
+    input CASDIMUXB;
+    input [15:0] CASDINA;
+    input [15:0] CASDINB;
+    input [1:0] CASDINPA;
+    input [1:0] CASDINPB;
+    input CASDOMUXA;
+    input CASDOMUXB;
+    input CASDOMUXEN_A;
+    input CASDOMUXEN_B;
+    input CASOREGIMUXA;
+    input CASOREGIMUXB;
+    input CASOREGIMUXEN_A;
+    input CASOREGIMUXEN_B;
+    (* clkbuf_sink *)
+    (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
+    input CLKARDCLK;
+    (* clkbuf_sink *)
+    (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
+    input CLKBWRCLK;
+    input [15:0] DINADIN;
+    input [15:0] DINBDIN;
+    input [1:0] DINPADINP;
+    input [1:0] DINPBDINP;
+    (* invertible_pin = "IS_ENARDEN_INVERTED" *)
+    input ENARDEN;
+    (* invertible_pin = "IS_ENBWREN_INVERTED" *)
+    input ENBWREN;
+    input REGCEAREGCE;
+    input REGCEB;
+    (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
+    input RSTRAMARSTRAM;
+    (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
+    input RSTRAMB;
+    (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
+    input RSTREGARSTREG;
+    (* invertible_pin = "IS_RSTREGB_INVERTED" *)
+    input RSTREGB;
+    input SLEEP;
+    input [1:0] WEA;
+    input [3:0] WEBWE;
+endmodule
+
+module RAMB36E2 (...);
+    parameter CASCADE_ORDER_A = "NONE";
+    parameter CASCADE_ORDER_B = "NONE";
+    parameter CLOCK_DOMAINS = "INDEPENDENT";
+    parameter integer DOA_REG = 1;
+    parameter integer DOB_REG = 1;
+    parameter ENADDRENA = "FALSE";
+    parameter ENADDRENB = "FALSE";
+    parameter EN_ECC_PIPE = "FALSE";
+    parameter EN_ECC_READ = "FALSE";
+    parameter EN_ECC_WRITE = "FALSE";
+    parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
+    parameter [35:0] INIT_A = 36'h000000000;
+    parameter [35:0] INIT_B = 36'h000000000;
+    parameter INIT_FILE = "NONE";
+    parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
+    parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
+    parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
+    parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
+    parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
+    parameter RDADDRCHANGEA = "FALSE";
+    parameter RDADDRCHANGEB = "FALSE";
+    parameter integer READ_WIDTH_A = 0;
+    parameter integer READ_WIDTH_B = 0;
+    parameter RSTREG_PRIORITY_A = "RSTREG";
+    parameter RSTREG_PRIORITY_B = "RSTREG";
+    parameter SIM_COLLISION_CHECK = "ALL";
+    parameter SLEEP_ASYNC = "FALSE";
+    parameter [35:0] SRVAL_A = 36'h000000000;
+    parameter [35:0] SRVAL_B = 36'h000000000;
+    parameter WRITE_MODE_A = "NO_CHANGE";
+    parameter WRITE_MODE_B = "NO_CHANGE";
+    parameter integer WRITE_WIDTH_A = 0;
+    parameter integer WRITE_WIDTH_B = 0;
+    output [31:0] CASDOUTA;
+    output [31:0] CASDOUTB;
+    output [3:0] CASDOUTPA;
+    output [3:0] CASDOUTPB;
+    output CASOUTDBITERR;
+    output CASOUTSBITERR;
+    output DBITERR;
+    output [31:0] DOUTADOUT;
+    output [31:0] DOUTBDOUT;
+    output [3:0] DOUTPADOUTP;
+    output [3:0] DOUTPBDOUTP;
+    output [7:0] ECCPARITY;
+    output [8:0] RDADDRECC;
+    output SBITERR;
+    input [14:0] ADDRARDADDR;
+    input [14:0] ADDRBWRADDR;
+    input ADDRENA;
+    input ADDRENB;
+    input CASDIMUXA;
+    input CASDIMUXB;
+    input [31:0] CASDINA;
+    input [31:0] CASDINB;
+    input [3:0] CASDINPA;
+    input [3:0] CASDINPB;
+    input CASDOMUXA;
+    input CASDOMUXB;
+    input CASDOMUXEN_A;
+    input CASDOMUXEN_B;
+    input CASINDBITERR;
+    input CASINSBITERR;
+    input CASOREGIMUXA;
+    input CASOREGIMUXB;
+    input CASOREGIMUXEN_A;
+    input CASOREGIMUXEN_B;
+    (* clkbuf_sink *)
+    (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
+    input CLKARDCLK;
+    (* clkbuf_sink *)
+    (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
+    input CLKBWRCLK;
+    input [31:0] DINADIN;
+    input [31:0] DINBDIN;
+    input [3:0] DINPADINP;
+    input [3:0] DINPBDINP;
+    input ECCPIPECE;
+    (* invertible_pin = "IS_ENARDEN_INVERTED" *)
+    input ENARDEN;
+    (* invertible_pin = "IS_ENBWREN_INVERTED" *)
+    input ENBWREN;
+    input INJECTDBITERR;
+    input INJECTSBITERR;
+    input REGCEAREGCE;
+    input REGCEB;
+    (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
+    input RSTRAMARSTRAM;
+    (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
+    input RSTRAMB;
+    (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
+    input RSTREGARSTREG;
+    (* invertible_pin = "IS_RSTREGB_INVERTED" *)
+    input RSTREGB;
+    input SLEEP;
+    input [3:0] WEA;
+    input [7:0] WEBWE;
+endmodule
\ No newline at end of file
diff --git a/techlibs/xilinx/xcu_brams_map.v b/techlibs/xilinx/xcu_brams_map.v
new file mode 100644 (file)
index 0000000..6e7925b
--- /dev/null
@@ -0,0 +1,384 @@
+module \$__XILINX_RAMB36_SDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
+       parameter CLKPOL2 = 1;
+       parameter CLKPOL3 = 1;
+       parameter [36863:0] INIT = 36864'bx;
+
+       input CLK2;
+       input CLK3;
+
+       input [8:0] A1ADDR;
+       output [71:0] A1DATA;
+       input A1EN;
+
+       input [8:0] B1ADDR;
+       input [71:0] B1DATA;
+       input [7:0] B1EN;
+
+       wire [15:0] A1ADDR_16 = {A1ADDR, 6'b0};
+       wire [15:0] B1ADDR_16 = {B1ADDR, 6'b0};
+
+       wire [7:0] DIP, DOP;
+       wire [63:0] DI, DO;
+
+       assign A1DATA = { DOP[7], DO[63:56], DOP[6], DO[55:48], DOP[5], DO[47:40], DOP[4], DO[39:32],
+                         DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
+
+       assign { DIP[7], DI[63:56], DIP[6], DI[55:48], DIP[5], DI[47:40], DIP[4], DI[39:32],
+                DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
+
+       RAMB36E2 #(
+               .READ_WIDTH_A(72),
+               .WRITE_WIDTH_B(72),
+               .WRITE_MODE_A("READ_FIRST"),
+               .WRITE_MODE_B("READ_FIRST"),
+               .DOA_REG(0),
+               .DOB_REG(0),
+               .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+               .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+               `include "brams_init_36.vh"
+       ) _TECHMAP_REPLACE_ (
+               .DOUTBDOUT(DO[63:32]),
+               .DOUTADOUT(DO[31:0]),
+               .DOUTPBDOUTP(DOP[7:4]),
+               .DOUTPADOUTP(DOP[3:0]),
+               .DINBDIN(DI[63:32]),
+               .DINADIN(DI[31:0]),
+               .DINPBDINP(DIP[7:4]),
+               .DINPADINP(DIP[3:0]),
+
+               .ADDRARDADDR(A1ADDR_16),
+               .CLKARDCLK(CLK2),
+               .ENARDEN(A1EN),
+               .ADDRENA(|1),
+               .REGCEAREGCE(|1),
+               .RSTRAMARSTRAM(|0),
+               .RSTREGARSTREG(|0),
+               .WEA(4'b0),
+
+               .ADDRBWRADDR(B1ADDR_16),
+               .CLKBWRCLK(CLK3),
+               .ENBWREN(|1),
+               .ADDRENB(|1),
+               .REGCEB(|1),
+               .RSTRAMB(|0),
+               .RSTREGB(|0),
+               .WEBWE(B1EN),
+
+               .SLEEP(|0)
+       );
+endmodule
+
+// ------------------------------------------------------------------------
+
+module \$__XILINX_RAMB18_SDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
+       parameter CLKPOL2 = 1;
+       parameter CLKPOL3 = 1;
+       parameter [18431:0] INIT = 18432'bx;
+
+       input CLK2;
+       input CLK3;
+
+       input [8:0] A1ADDR;
+       output [35:0] A1DATA;
+       input A1EN;
+
+       input [8:0] B1ADDR;
+       input [35:0] B1DATA;
+       input [3:0] B1EN;
+
+       wire [13:0] A1ADDR_14 = {A1ADDR, 5'b0};
+       wire [13:0] B1ADDR_14 = {B1ADDR, 5'b0};
+
+       wire [3:0] DIP, DOP;
+       wire [31:0] DI, DO;
+
+       assign A1DATA = { DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
+       assign { DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
+
+       RAMB18E2 #(
+               .READ_WIDTH_A(36),
+               .WRITE_WIDTH_B(36),
+               .WRITE_MODE_A("READ_FIRST"),
+               .WRITE_MODE_B("READ_FIRST"),
+               .DOA_REG(0),
+               .DOB_REG(0),
+               .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+               .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+               `include "brams_init_18.vh"
+       ) _TECHMAP_REPLACE_ (
+               .DOUTBDOUT(DO[31:16]),
+               .DOUTADOUT(DO[15:0]),
+               .DOUTPBDOUTP(DOP[3:2]),
+               .DOUTPADOUTP(DOP[1:0]),
+               .DINBDIN(DI[31:16]),
+               .DINADIN(DI[15:0]),
+               .DINPBDINP(DIP[3:2]),
+               .DINPADINP(DIP[1:0]),
+
+               .ADDRARDADDR(A1ADDR_14),
+               .CLKARDCLK(CLK2),
+               .ENARDEN(A1EN),
+               .ADDRENA(|1),
+               .REGCEAREGCE(|1),
+               .RSTRAMARSTRAM(|0),
+               .RSTREGARSTREG(|0),
+               .WEA(2'b0),
+
+               .ADDRBWRADDR(B1ADDR_14),
+               .CLKBWRCLK(CLK3),
+               .ENBWREN(|1),
+               .ADDRENB(|1),
+               .REGCEB(|1),
+               .RSTRAMB(|0),
+               .RSTREGB(|0),
+               .WEBWE(B1EN),
+
+               .SLEEP(|0)
+       );
+endmodule
+
+// ------------------------------------------------------------------------
+
+module \$__XILINX_RAMB36_TDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
+       parameter CFG_ABITS = 10;
+       parameter CFG_DBITS = 36;
+       parameter CFG_ENABLE_B = 4;
+
+       parameter CLKPOL2 = 1;
+       parameter CLKPOL3 = 1;
+       parameter [36863:0] INIT = 36864'bx;
+
+       input CLK2;
+       input CLK3;
+
+       input [CFG_ABITS-1:0] A1ADDR;
+       output [CFG_DBITS-1:0] A1DATA;
+       input A1EN;
+
+       input [CFG_ABITS-1:0] B1ADDR;
+       input [CFG_DBITS-1:0] B1DATA;
+       input [CFG_ENABLE_B-1:0] B1EN;
+
+       wire [15:0] A1ADDR_16 = A1ADDR << (15 - CFG_ABITS);
+       wire [15:0] B1ADDR_16 = B1ADDR << (15 - CFG_ABITS);
+       wire [7:0] B1EN_8 = B1EN;
+
+       wire [3:0] DIP, DOP;
+       wire [31:0] DI, DO;
+
+       wire [31:0] DOBDO;
+       wire [3:0] DOPBDOP;
+
+       assign A1DATA = { DOP[3], DO[31:24], DOP[2], DO[23:16], DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
+       assign { DIP[3], DI[31:24], DIP[2], DI[23:16], DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
+
+       generate if (CFG_DBITS > 8) begin
+               RAMB36E2 #(
+                       .READ_WIDTH_A(CFG_DBITS),
+                       .READ_WIDTH_B(CFG_DBITS),
+                       .WRITE_WIDTH_A(CFG_DBITS),
+                       .WRITE_WIDTH_B(CFG_DBITS),
+                       .WRITE_MODE_A("READ_FIRST"),
+                       .WRITE_MODE_B("READ_FIRST"),
+                       .DOA_REG(0),
+                       .DOB_REG(0),
+                       .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+                       .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+                       `include "brams_init_36.vh"
+               ) _TECHMAP_REPLACE_ (
+                       .DINADIN(32'hFFFFFFFF),
+                       .DINPADINP(4'hF),
+                       .DOUTADOUT(DO[31:0]),
+                       .DOUTPADOUTP(DOP[3:0]),
+                       .ADDRARDADDR(A1ADDR_16),
+                       .CLKARDCLK(CLK2),
+                       .ENARDEN(A1EN),
+                       .ADDRENA(|1),
+                       .REGCEAREGCE(|1),
+                       .RSTRAMARSTRAM(|0),
+                       .RSTREGARSTREG(|0),
+                       .WEA(4'b0),
+
+                       .DINBDIN(DI),
+                       .DINPBDINP(DIP),
+                       .DOUTBDOUT(DOBDO),
+                       .DOUTPBDOUTP(DOPBDOP),
+                       .ADDRBWRADDR(B1ADDR_16),
+                       .CLKBWRCLK(CLK3),
+                       .ENBWREN(|1),
+                       .ADDRENB(|1),
+                       .REGCEB(|0),
+                       .RSTRAMB(|0),
+                       .RSTREGB(|0),
+                       .WEBWE(B1EN_8),
+
+                       .SLEEP(|0)
+               );
+       end else begin
+               RAMB36E2 #(
+                       .READ_WIDTH_A(CFG_DBITS),
+                       .READ_WIDTH_B(CFG_DBITS),
+                       .WRITE_WIDTH_A(CFG_DBITS),
+                       .WRITE_WIDTH_B(CFG_DBITS),
+                       .WRITE_MODE_A("READ_FIRST"),
+                       .WRITE_MODE_B("READ_FIRST"),
+                       .DOA_REG(0),
+                       .DOB_REG(0),
+                       .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+                       .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+                       `include "brams_init_32.vh"
+               ) _TECHMAP_REPLACE_ (
+                       .DINADIN(32'hFFFFFFFF),
+                       .DINPADINP(4'hF),
+                       .DOUTADOUT(DO[31:0]),
+                       .DOUTPADOUTP(DOP[3:0]),
+                       .ADDRARDADDR(A1ADDR_16),
+                       .CLKARDCLK(CLK2),
+                       .ENARDEN(A1EN),
+                       .ADDRENA(|1),
+                       .REGCEAREGCE(|1),
+                       .RSTRAMARSTRAM(|0),
+                       .RSTREGARSTREG(|0),
+                       .WEA(4'b0),
+
+                       .DINBDIN(DI),
+                       .DINPBDINP(DIP),
+                       .DOUTBDOUT(DOBDO),
+                       .DOUTPBDOUTP(DOPBDOP),
+                       .ADDRBWRADDR(B1ADDR_16),
+                       .CLKBWRCLK(CLK3),
+                       .ENBWREN(|1),
+                       .ADDRENB(|1),
+                       .REGCEB(|0),
+                       .RSTRAMB(|0),
+                       .RSTREGB(|0),
+                       .WEBWE(B1EN_8),
+
+                       .SLEEP(|0)
+               );
+       end endgenerate
+endmodule
+
+// ------------------------------------------------------------------------
+
+module \$__XILINX_RAMB18_TDP (CLK2, CLK3, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
+       parameter CFG_ABITS = 10;
+       parameter CFG_DBITS = 18;
+       parameter CFG_ENABLE_B = 2;
+
+       parameter CLKPOL2 = 1;
+       parameter CLKPOL3 = 1;
+       parameter [18431:0] INIT = 18432'bx;
+
+       input CLK2;
+       input CLK3;
+
+       input [CFG_ABITS-1:0] A1ADDR;
+       output [CFG_DBITS-1:0] A1DATA;
+       input A1EN;
+
+       input [CFG_ABITS-1:0] B1ADDR;
+       input [CFG_DBITS-1:0] B1DATA;
+       input [CFG_ENABLE_B-1:0] B1EN;
+
+       wire [13:0] A1ADDR_14 = A1ADDR << (14 - CFG_ABITS);
+       wire [13:0] B1ADDR_14 = B1ADDR << (14 - CFG_ABITS);
+       wire [3:0] B1EN_4 = B1EN;
+
+       wire [1:0] DIP, DOP;
+       wire [15:0] DI, DO;
+
+       wire [15:0] DOBDO;
+       wire [1:0] DOPBDOP;
+
+       assign A1DATA = { DOP[1], DO[15: 8], DOP[0], DO[ 7: 0] };
+       assign { DIP[1], DI[15: 8], DIP[0], DI[ 7: 0] } = B1DATA;
+
+       generate if (CFG_DBITS > 8) begin
+               RAMB18E2 #(
+                       .READ_WIDTH_A(CFG_DBITS),
+                       .READ_WIDTH_B(CFG_DBITS),
+                       .WRITE_WIDTH_A(CFG_DBITS),
+                       .WRITE_WIDTH_B(CFG_DBITS),
+                       .WRITE_MODE_A("READ_FIRST"),
+                       .WRITE_MODE_B("READ_FIRST"),
+                       .DOA_REG(0),
+                       .DOB_REG(0),
+                       .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+                       .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+                       `include "brams_init_18.vh"
+               ) _TECHMAP_REPLACE_ (
+                       .DINADIN(16'hFFFF),
+                       .DINPADINP(2'b11),
+                       .DOUTADOUT(DO),
+                       .DOUTPADOUTP(DOP),
+                       .ADDRARDADDR(A1ADDR_14),
+                       .CLKARDCLK(CLK2),
+                       .ENARDEN(A1EN),
+                       .ADDRENA(|1),
+                       .REGCEAREGCE(|1),
+                       .RSTRAMARSTRAM(|0),
+                       .RSTREGARSTREG(|0),
+                       .WEA(2'b0),
+
+                       .DINBDIN(DI),
+                       .DINPBDINP(DIP),
+                       .DOUTBDOUT(DOBDO),
+                       .DOUTPBDOUTP(DOPBDOP),
+                       .ADDRBWRADDR(B1ADDR_14),
+                       .CLKBWRCLK(CLK3),
+                       .ENBWREN(|1),
+                       .ADDRENB(|1),
+                       .REGCEB(|0),
+                       .RSTRAMB(|0),
+                       .RSTREGB(|0),
+                       .WEBWE(B1EN_4),
+
+                       .SLEEP(|0)
+               );
+       end else begin
+               RAMB18E2 #(
+                       //.RAM_MODE("TDP"),
+                       .READ_WIDTH_A(CFG_DBITS),
+                       .READ_WIDTH_B(CFG_DBITS),
+                       .WRITE_WIDTH_A(CFG_DBITS),
+                       .WRITE_WIDTH_B(CFG_DBITS),
+                       .WRITE_MODE_A("READ_FIRST"),
+                       .WRITE_MODE_B("READ_FIRST"),
+                       .DOA_REG(0),
+                       .DOB_REG(0),
+                       .IS_CLKARDCLK_INVERTED(!CLKPOL2),
+                       .IS_CLKBWRCLK_INVERTED(!CLKPOL3),
+                       `include "brams_init_16.vh"
+               ) _TECHMAP_REPLACE_ (
+                       .DINADIN(16'hFFFF),
+                       .DINPADINP(2'b11),
+                       .DOUTADOUT(DO),
+                       .DOUTPADOUTP(DOP),
+                       .ADDRARDADDR(A1ADDR_14),
+                       .CLKARDCLK(CLK2),
+                       .ENARDEN(A1EN),
+                       .ADDRENA(|1),
+                       .REGCEAREGCE(|1),
+                       .RSTRAMARSTRAM(|0),
+                       .RSTREGARSTREG(|0),
+                       .WEA(2'b0),
+
+                       .DINBDIN(DI),
+                       .DINPBDINP(DIP),
+                       .DOUTBDOUT(DOBDO),
+                       .DOUTPBDOUTP(DOPBDOP),
+                       .ADDRBWRADDR(B1ADDR_14),
+                       .CLKBWRCLK(CLK3),
+                       .ENBWREN(|1),
+                       .ADDRENB(|1),
+                       .REGCEB(|0),
+                       .RSTRAMB(|0),
+                       .RSTREGB(|0),
+                       .WEBWE(B1EN_4),
+
+                       .SLEEP(|0)
+               );
+       end endgenerate
+endmodule
+
index 4523b521028b7ac622f5fd269e9ae2b77687bde5..3c83e0ef1b457ab4e8cc69f7336c70e323abce88 100644 (file)
@@ -8330,412 +8330,6 @@ module FIFO36E2 (...);
     input WREN;
 endmodule
 
-module RAMB18E2 (...);
-    parameter CASCADE_ORDER_A = "NONE";
-    parameter CASCADE_ORDER_B = "NONE";
-    parameter CLOCK_DOMAINS = "INDEPENDENT";
-    parameter integer DOA_REG = 1;
-    parameter integer DOB_REG = 1;
-    parameter ENADDRENA = "FALSE";
-    parameter ENADDRENB = "FALSE";
-    parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [17:0] INIT_A = 18'h00000;
-    parameter [17:0] INIT_B = 18'h00000;
-    parameter INIT_FILE = "NONE";
-    parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
-    parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
-    parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
-    parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
-    parameter RDADDRCHANGEA = "FALSE";
-    parameter RDADDRCHANGEB = "FALSE";
-    parameter integer READ_WIDTH_A = 0;
-    parameter integer READ_WIDTH_B = 0;
-    parameter RSTREG_PRIORITY_A = "RSTREG";
-    parameter RSTREG_PRIORITY_B = "RSTREG";
-    parameter SIM_COLLISION_CHECK = "ALL";
-    parameter SLEEP_ASYNC = "FALSE";
-    parameter [17:0] SRVAL_A = 18'h00000;
-    parameter [17:0] SRVAL_B = 18'h00000;
-    parameter WRITE_MODE_A = "NO_CHANGE";
-    parameter WRITE_MODE_B = "NO_CHANGE";
-    parameter integer WRITE_WIDTH_A = 0;
-    parameter integer WRITE_WIDTH_B = 0;
-    output [15:0] CASDOUTA;
-    output [15:0] CASDOUTB;
-    output [1:0] CASDOUTPA;
-    output [1:0] CASDOUTPB;
-    output [15:0] DOUTADOUT;
-    output [15:0] DOUTBDOUT;
-    output [1:0] DOUTPADOUTP;
-    output [1:0] DOUTPBDOUTP;
-    input [13:0] ADDRARDADDR;
-    input [13:0] ADDRBWRADDR;
-    input ADDRENA;
-    input ADDRENB;
-    input CASDIMUXA;
-    input CASDIMUXB;
-    input [15:0] CASDINA;
-    input [15:0] CASDINB;
-    input [1:0] CASDINPA;
-    input [1:0] CASDINPB;
-    input CASDOMUXA;
-    input CASDOMUXB;
-    input CASDOMUXEN_A;
-    input CASDOMUXEN_B;
-    input CASOREGIMUXA;
-    input CASOREGIMUXB;
-    input CASOREGIMUXEN_A;
-    input CASOREGIMUXEN_B;
-    (* clkbuf_sink *)
-    (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
-    input CLKARDCLK;
-    (* clkbuf_sink *)
-    (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
-    input CLKBWRCLK;
-    input [15:0] DINADIN;
-    input [15:0] DINBDIN;
-    input [1:0] DINPADINP;
-    input [1:0] DINPBDINP;
-    (* invertible_pin = "IS_ENARDEN_INVERTED" *)
-    input ENARDEN;
-    (* invertible_pin = "IS_ENBWREN_INVERTED" *)
-    input ENBWREN;
-    input REGCEAREGCE;
-    input REGCEB;
-    (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
-    input RSTRAMARSTRAM;
-    (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
-    input RSTRAMB;
-    (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
-    input RSTREGARSTREG;
-    (* invertible_pin = "IS_RSTREGB_INVERTED" *)
-    input RSTREGB;
-    input SLEEP;
-    input [1:0] WEA;
-    input [3:0] WEBWE;
-endmodule
-
-module RAMB36E2 (...);
-    parameter CASCADE_ORDER_A = "NONE";
-    parameter CASCADE_ORDER_B = "NONE";
-    parameter CLOCK_DOMAINS = "INDEPENDENT";
-    parameter integer DOA_REG = 1;
-    parameter integer DOB_REG = 1;
-    parameter ENADDRENA = "FALSE";
-    parameter ENADDRENB = "FALSE";
-    parameter EN_ECC_PIPE = "FALSE";
-    parameter EN_ECC_READ = "FALSE";
-    parameter EN_ECC_WRITE = "FALSE";
-    parameter [255:0] INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INITP_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [255:0] INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
-    parameter [35:0] INIT_A = 36'h000000000;
-    parameter [35:0] INIT_B = 36'h000000000;
-    parameter INIT_FILE = "NONE";
-    parameter [0:0] IS_CLKARDCLK_INVERTED = 1'b0;
-    parameter [0:0] IS_CLKBWRCLK_INVERTED = 1'b0;
-    parameter [0:0] IS_ENARDEN_INVERTED = 1'b0;
-    parameter [0:0] IS_ENBWREN_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTRAMARSTRAM_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTRAMB_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTREGARSTREG_INVERTED = 1'b0;
-    parameter [0:0] IS_RSTREGB_INVERTED = 1'b0;
-    parameter RDADDRCHANGEA = "FALSE";
-    parameter RDADDRCHANGEB = "FALSE";
-    parameter integer READ_WIDTH_A = 0;
-    parameter integer READ_WIDTH_B = 0;
-    parameter RSTREG_PRIORITY_A = "RSTREG";
-    parameter RSTREG_PRIORITY_B = "RSTREG";
-    parameter SIM_COLLISION_CHECK = "ALL";
-    parameter SLEEP_ASYNC = "FALSE";
-    parameter [35:0] SRVAL_A = 36'h000000000;
-    parameter [35:0] SRVAL_B = 36'h000000000;
-    parameter WRITE_MODE_A = "NO_CHANGE";
-    parameter WRITE_MODE_B = "NO_CHANGE";
-    parameter integer WRITE_WIDTH_A = 0;
-    parameter integer WRITE_WIDTH_B = 0;
-    output [31:0] CASDOUTA;
-    output [31:0] CASDOUTB;
-    output [3:0] CASDOUTPA;
-    output [3:0] CASDOUTPB;
-    output CASOUTDBITERR;
-    output CASOUTSBITERR;
-    output DBITERR;
-    output [31:0] DOUTADOUT;
-    output [31:0] DOUTBDOUT;
-    output [3:0] DOUTPADOUTP;
-    output [3:0] DOUTPBDOUTP;
-    output [7:0] ECCPARITY;
-    output [8:0] RDADDRECC;
-    output SBITERR;
-    input [14:0] ADDRARDADDR;
-    input [14:0] ADDRBWRADDR;
-    input ADDRENA;
-    input ADDRENB;
-    input CASDIMUXA;
-    input CASDIMUXB;
-    input [31:0] CASDINA;
-    input [31:0] CASDINB;
-    input [3:0] CASDINPA;
-    input [3:0] CASDINPB;
-    input CASDOMUXA;
-    input CASDOMUXB;
-    input CASDOMUXEN_A;
-    input CASDOMUXEN_B;
-    input CASINDBITERR;
-    input CASINSBITERR;
-    input CASOREGIMUXA;
-    input CASOREGIMUXB;
-    input CASOREGIMUXEN_A;
-    input CASOREGIMUXEN_B;
-    (* clkbuf_sink *)
-    (* invertible_pin = "IS_CLKARDCLK_INVERTED" *)
-    input CLKARDCLK;
-    (* clkbuf_sink *)
-    (* invertible_pin = "IS_CLKBWRCLK_INVERTED" *)
-    input CLKBWRCLK;
-    input [31:0] DINADIN;
-    input [31:0] DINBDIN;
-    input [3:0] DINPADINP;
-    input [3:0] DINPBDINP;
-    input ECCPIPECE;
-    (* invertible_pin = "IS_ENARDEN_INVERTED" *)
-    input ENARDEN;
-    (* invertible_pin = "IS_ENBWREN_INVERTED" *)
-    input ENBWREN;
-    input INJECTDBITERR;
-    input INJECTSBITERR;
-    input REGCEAREGCE;
-    input REGCEB;
-    (* invertible_pin = "IS_RSTRAMARSTRAM_INVERTED" *)
-    input RSTRAMARSTRAM;
-    (* invertible_pin = "IS_RSTRAMB_INVERTED" *)
-    input RSTRAMB;
-    (* invertible_pin = "IS_RSTREGARSTREG_INVERTED" *)
-    input RSTREGARSTREG;
-    (* invertible_pin = "IS_RSTREGB_INVERTED" *)
-    input RSTREGB;
-    input SLEEP;
-    input [3:0] WEA;
-    input [7:0] WEBWE;
-endmodule
-
 module URAM288 (...);
     parameter integer AUTO_SLEEP_LATENCY = 8;
     parameter integer AVG_CONS_INACTIVE_CYCLES = 10;
@@ -9767,6 +9361,256 @@ module PLLE4_BASE (...);
     input RST;
 endmodule
 
+module MMCME2_ADV (...);
+    parameter BANDWIDTH = "OPTIMIZED";
+    parameter real CLKFBOUT_MULT_F = 5.000;
+    parameter real CLKFBOUT_PHASE = 0.000;
+    parameter CLKFBOUT_USE_FINE_PS = "FALSE";
+    parameter real CLKIN1_PERIOD = 0.000;
+    parameter real CLKIN2_PERIOD = 0.000;
+    parameter real CLKIN_FREQ_MAX = 1066.000;
+    parameter real CLKIN_FREQ_MIN = 10.000;
+    parameter real CLKOUT0_DIVIDE_F = 1.000;
+    parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT0_PHASE = 0.000;
+    parameter CLKOUT0_USE_FINE_PS = "FALSE";
+    parameter integer CLKOUT1_DIVIDE = 1;
+    parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT1_PHASE = 0.000;
+    parameter CLKOUT1_USE_FINE_PS = "FALSE";
+    parameter integer CLKOUT2_DIVIDE = 1;
+    parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT2_PHASE = 0.000;
+    parameter CLKOUT2_USE_FINE_PS = "FALSE";
+    parameter integer CLKOUT3_DIVIDE = 1;
+    parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT3_PHASE = 0.000;
+    parameter CLKOUT3_USE_FINE_PS = "FALSE";
+    parameter CLKOUT4_CASCADE = "FALSE";
+    parameter integer CLKOUT4_DIVIDE = 1;
+    parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT4_PHASE = 0.000;
+    parameter CLKOUT4_USE_FINE_PS = "FALSE";
+    parameter integer CLKOUT5_DIVIDE = 1;
+    parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT5_PHASE = 0.000;
+    parameter CLKOUT5_USE_FINE_PS = "FALSE";
+    parameter integer CLKOUT6_DIVIDE = 1;
+    parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT6_PHASE = 0.000;
+    parameter CLKOUT6_USE_FINE_PS = "FALSE";
+    parameter real CLKPFD_FREQ_MAX = 550.000;
+    parameter real CLKPFD_FREQ_MIN = 10.000;
+    parameter COMPENSATION = "ZHOLD";
+    parameter integer DIVCLK_DIVIDE = 1;
+    parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+    parameter [0:0] IS_PSEN_INVERTED = 1'b0;
+    parameter [0:0] IS_PSINCDEC_INVERTED = 1'b0;
+    parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+    parameter [0:0] IS_RST_INVERTED = 1'b0;
+    parameter real REF_JITTER1 = 0.010;
+    parameter real REF_JITTER2 = 0.010;
+    parameter SS_EN = "FALSE";
+    parameter SS_MODE = "CENTER_HIGH";
+    parameter integer SS_MOD_PERIOD = 10000;
+    parameter STARTUP_WAIT = "FALSE";
+    parameter real VCOCLK_FREQ_MAX = 1600.000;
+    parameter real VCOCLK_FREQ_MIN = 600.000;
+    parameter STARTUP_WAIT = "FALSE";
+    output CLKFBOUT;
+    output CLKFBOUTB;
+    output CLKFBSTOPPED;
+    output CLKINSTOPPED;
+    output CLKOUT0;
+    output CLKOUT0B;
+    output CLKOUT1;
+    output CLKOUT1B;
+    output CLKOUT2;
+    output CLKOUT2B;
+    output CLKOUT3;
+    output CLKOUT3B;
+    output CLKOUT4;
+    output CLKOUT5;
+    output CLKOUT6;
+    output [15:0] DO;
+    output DRDY;
+    output LOCKED;
+    output PSDONE;
+    input CLKFBIN;
+    input CLKIN1;
+    input CLKIN2;
+    (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+    input CLKINSEL;
+    input [6:0] DADDR;
+    input DCLK;
+    input DEN;
+    input [15:0] DI;
+    input DWE;
+    input PSCLK;
+    (* invertible_pin = "IS_PSEN_INVERTED" *)
+    input PSEN;
+    (* invertible_pin = "IS_PSINCDEC_INVERTED" *)
+    input PSINCDEC;
+    (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+    input PWRDWN;
+    (* invertible_pin = "IS_RST_INVERTED" *)
+    input RST;
+endmodule
+
+module MMCME2_BASE (...);
+    parameter BANDWIDTH = "OPTIMIZED";
+    parameter real CLKFBOUT_MULT_F = 5.000;
+    parameter real CLKFBOUT_PHASE = 0.000;
+    parameter real CLKIN1_PERIOD = 0.000;
+    parameter real CLKOUT0_DIVIDE_F = 1.000;
+    parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT0_PHASE = 0.000;
+    parameter integer CLKOUT1_DIVIDE = 1;
+    parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT1_PHASE = 0.000;
+    parameter integer CLKOUT2_DIVIDE = 1;
+    parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT2_PHASE = 0.000;
+    parameter integer CLKOUT3_DIVIDE = 1;
+    parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT3_PHASE = 0.000;
+    parameter CLKOUT4_CASCADE = "FALSE";
+    parameter integer CLKOUT4_DIVIDE = 1;
+    parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT4_PHASE = 0.000;
+    parameter integer CLKOUT5_DIVIDE = 1;
+    parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT5_PHASE = 0.000;
+    parameter integer CLKOUT6_DIVIDE = 1;
+    parameter real CLKOUT6_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT6_PHASE = 0.000;
+    parameter integer DIVCLK_DIVIDE = 1;
+    parameter real REF_JITTER1 = 0.010;
+    parameter STARTUP_WAIT = "FALSE";
+    output CLKFBOUT;
+    output CLKFBOUTB;
+    output CLKOUT0;
+    output CLKOUT0B;
+    output CLKOUT1;
+    output CLKOUT1B;
+    output CLKOUT2;
+    output CLKOUT2B;
+    output CLKOUT3;
+    output CLKOUT3B;
+    output CLKOUT4;
+    output CLKOUT5;
+    output CLKOUT6;
+    output LOCKED;
+    input CLKFBIN;
+    input CLKIN1;
+    input PWRDWN;
+    input RST;
+endmodule
+
+module PLLE2_ADV (...);
+    parameter BANDWIDTH = "OPTIMIZED";
+    parameter COMPENSATION = "ZHOLD";
+    parameter STARTUP_WAIT = "FALSE";
+    parameter integer CLKOUT0_DIVIDE = 1;
+    parameter integer CLKOUT1_DIVIDE = 1;
+    parameter integer CLKOUT2_DIVIDE = 1;
+    parameter integer CLKOUT3_DIVIDE = 1;
+    parameter integer CLKOUT4_DIVIDE = 1;
+    parameter integer CLKOUT5_DIVIDE = 1;
+    parameter integer DIVCLK_DIVIDE = 1;
+    parameter integer CLKFBOUT_MULT = 5;
+    parameter real CLKFBOUT_PHASE = 0.000;
+    parameter real CLKIN1_PERIOD = 0.000;
+    parameter real CLKIN2_PERIOD = 0.000;
+    parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT0_PHASE = 0.000;
+    parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT1_PHASE = 0.000;
+    parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT2_PHASE = 0.000;
+    parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT3_PHASE = 0.000;
+    parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT4_PHASE = 0.000;
+    parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT5_PHASE = 0.000;
+    parameter [0:0] IS_CLKINSEL_INVERTED = 1'b0;
+    parameter [0:0] IS_PWRDWN_INVERTED = 1'b0;
+    parameter [0:0] IS_RST_INVERTED = 1'b0;
+    parameter real REF_JITTER1 = 0.010;
+    parameter real REF_JITTER2 = 0.010;
+    parameter real VCOCLK_FREQ_MAX = 2133.000;
+    parameter real VCOCLK_FREQ_MIN = 800.000;
+    parameter real CLKIN_FREQ_MAX = 1066.000;
+    parameter real CLKIN_FREQ_MIN = 19.000;
+    parameter real CLKPFD_FREQ_MAX = 550.0;
+    parameter real CLKPFD_FREQ_MIN = 19.0;
+    output CLKFBOUT;
+    output CLKOUT0;
+    output CLKOUT1;
+    output CLKOUT2;
+    output CLKOUT3;
+    output CLKOUT4;
+    output CLKOUT5;
+    output DRDY;
+    output LOCKED;
+    output [15:0] DO;
+    input CLKFBIN;
+    input CLKIN1;
+    input CLKIN2;
+    (* invertible_pin = "IS_CLKINSEL_INVERTED" *)
+    input CLKINSEL;
+    input DCLK;
+    input DEN;
+    input DWE;
+    (* invertible_pin = "IS_PWRDWN_INVERTED" *)
+    input PWRDWN;
+    (* invertible_pin = "IS_RST_INVERTED" *)
+    input RST;
+    input [15:0] DI;
+    input [6:0] DADDR;
+endmodule
+
+module PLLE2_BASE (...);
+    parameter BANDWIDTH = "OPTIMIZED";
+    parameter integer CLKFBOUT_MULT = 5;
+    parameter real CLKFBOUT_PHASE = 0.000;
+    parameter real CLKIN1_PERIOD = 0.000;
+    parameter integer CLKOUT0_DIVIDE = 1;
+    parameter real CLKOUT0_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT0_PHASE = 0.000;
+    parameter integer CLKOUT1_DIVIDE = 1;
+    parameter real CLKOUT1_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT1_PHASE = 0.000;
+    parameter integer CLKOUT2_DIVIDE = 1;
+    parameter real CLKOUT2_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT2_PHASE = 0.000;
+    parameter integer CLKOUT3_DIVIDE = 1;
+    parameter real CLKOUT3_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT3_PHASE = 0.000;
+    parameter integer CLKOUT4_DIVIDE = 1;
+    parameter real CLKOUT4_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT4_PHASE = 0.000;
+    parameter integer CLKOUT5_DIVIDE = 1;
+    parameter real CLKOUT5_DUTY_CYCLE = 0.500;
+    parameter real CLKOUT5_PHASE = 0.000;
+    parameter integer DIVCLK_DIVIDE = 1;
+    parameter real REF_JITTER1 = 0.010;
+    parameter STARTUP_WAIT = "FALSE";
+    output CLKFBOUT;
+    output CLKOUT0;
+    output CLKOUT1;
+    output CLKOUT2;
+    output CLKOUT3;
+    output CLKOUT4;
+    output CLKOUT5;
+    output LOCKED;
+    input CLKFBIN;
+    input CLKIN1;
+    input PWRDWN;
+    input RST;
+endmodule
+
 (* keep *)
 module BSCANE2 (...);
     parameter DISABLE_JTAG = "FALSE";