diff --git a/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_cr_cw.vhd b/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_cr_cw.vhd
index 7ce0b6dba3b12c0443e089b4c50d445356b55c77..48582e511cd6bb16e2680656752fb4300d059edb 100644
--- a/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_cr_cw.vhd
+++ b/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_cr_cw.vhd
@@ -21,22 +21,21 @@
 
 -- RadioHDL wrapper
 
-LIBRARY ieee, technology_lib;
+LIBRARY ieee;
 USE ieee.std_logic_1164.all;
 USE ieee.numeric_std.all;
-USE technology_lib.technology_pkg.all;
 
-LIBRARY altera_lnsim;
-USE altera_lnsim.altera_lnsim_components.all;
+LIBRARY xpm;
+USE xpm.vcomponents.ALL;
 
-ENTITY ip_arria10_e2sg_ram_cr_cw IS
+ENTITY ip_ultrascale_ram_cr_cw IS
   GENERIC (
     g_inferred   : BOOLEAN := FALSE;
     g_adr_w      : NATURAL := 5;
     g_dat_w      : NATURAL := 8;
     g_nof_words  : NATURAL := 2**5;
     g_rd_latency : NATURAL := 1;  -- choose 1 or 2
-    g_init_file  : STRING  := "UNUSED"
+    g_init_file  : STRING  := "none"
   );
   PORT
   (
@@ -48,115 +47,122 @@ ENTITY ip_arria10_e2sg_ram_cr_cw IS
     wren      : IN  STD_LOGIC  := '0';
     q         : OUT STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0)
   );
-END ip_arria10_e2sg_ram_cr_cw;
+END ip_ultrascale_ram_cr_cw;
 
 
-ARCHITECTURE SYN OF ip_arria10_e2sg_ram_cr_cw IS
+ARCHITECTURE SYN OF ip_ultrascale_ram_cr_cw IS
 
-  CONSTANT c_outdata_reg_b : STRING := tech_sel_a_b(g_rd_latency=1, "UNREGISTERED", "CLOCK1");
-
-  COMPONENT altera_syncram
-  GENERIC (
-          address_aclr_b  : string;
-          address_reg_b  : string;
-          clock_enable_input_a  : string;
-          clock_enable_input_b  : string;
-          clock_enable_output_b  : string;
-          init_file  : string;
-          intended_device_family  : string;
-          lpm_type  : string;
-          numwords_a  : integer;
-          numwords_b  : integer;
-          operation_mode  : string;
-          outdata_aclr_b  : string;
-          outdata_reg_b  : string;
-          power_up_uninitialized  : string;
-          read_during_write_mode_mixed_ports : string;
-          widthad_a  : integer;
-          widthad_b  : integer;
-          width_a  : integer;
-          width_b  : integer;
-          width_byteena_a  : integer
-  );
-  PORT (
-      address_a : in std_logic_vector(g_adr_w-1 downto 0);
-      address_b : in std_logic_vector(g_adr_w-1 downto 0);
-      clock0 : in std_logic;
-      clock1 : in std_logic;
-      data_a : in std_logic_vector(g_dat_w-1 downto 0);
-      wren_a : in std_logic;
-      q_b : out std_logic_vector(g_dat_w-1 downto 0)
-  );
-  END COMPONENT;
-  
-  SIGNAL rdaddr : natural range 0 to g_nof_words - 1;
-  SIGNAL wraddr : natural range 0 to g_nof_words - 1;
-  
-  SIGNAL out_q  : STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0);
-  SIGNAL reg_q  : STD_LOGIC_VECTOR (g_dat_w-1 DOWNTO 0);
-  
 BEGIN
 
-  ASSERT g_rd_latency=1 OR g_rd_latency=2 REPORT "ip_arria10_e2sg_ram_cr_cw : read latency must be 1 (default) or 2" SEVERITY FAILURE;
-  
-  gen_ip : IF g_inferred=FALSE GENERATE
-    -- Copied from ip_arria10_e2sg_ram_cr_cw/ram_2port_140/sim/ip_arria10_e2sg_ram_cr_cw_ram_2port_140_72tpmcy.vhd
-    u_altera_syncram : altera_syncram
-    GENERIC MAP (
-            address_aclr_b  => "NONE",
-            address_reg_b  => "CLOCK1",
-            clock_enable_input_a  => "BYPASS",
-            clock_enable_input_b  => "BYPASS",
-            clock_enable_output_b  => "BYPASS",
-            init_file  => g_init_file,
-            intended_device_family  => "Arria 10",
-            lpm_type  => "altera_syncram",
-            numwords_a  => g_nof_words,
-            numwords_b  => g_nof_words,
-            operation_mode  => "DUAL_PORT",
-            outdata_aclr_b  => "NONE",
-            outdata_reg_b  => c_outdata_reg_b,
-            power_up_uninitialized  => "FALSE",
-            read_during_write_mode_mixed_ports => "OLD_DATA",
-            widthad_a  => g_adr_w,
-            widthad_b  => g_adr_w,
-            width_a  => g_dat_w,
-            width_b  => g_dat_w,
-            width_byteena_a  => 1
-    )
-    PORT MAP (
-        address_a => wraddress,
-        address_b => rdaddress,
-        clock0 => wrclk,
-        clock1 => rdclk,
-        data_a => data,
-        wren_a => wren,
-        q_b => q
-    );
-  END GENERATE;
-  
-  gen_inferred : IF g_inferred=TRUE GENERATE
-    rdaddr <= TO_INTEGER(UNSIGNED(rdaddress));
-    wraddr <= TO_INTEGER(UNSIGNED(wraddress));
-    
-    u_mem : entity work.ip_arria10_e2sg_simple_dual_port_ram_dual_clock
-    generic map (
-      DATA_WIDTH => g_dat_w,
-      ADDR_WIDTH => g_adr_w
-    )
-    port map (
-      rclk  => rdclk,
-      wclk  => wrclk,
-      raddr => rdaddr,
-      waddr => wraddr,
-      data  => data,
-      we    => wren,
-      q     => out_q
-    );
-  
-    reg_q <= out_q WHEN rising_edge(rdclk);
-    
-    q <= out_q WHEN g_rd_latency=1 ELSE reg_q;  
-  END GENERATE;
+  ASSERT g_rd_latency=1 OR g_rd_latency=2 REPORT "ip_ultrascale_ram_cr_cw : read latency must be 1 (default) or 2" SEVERITY FAILURE;
   
+  ASSERT g_inferred=FALSE REPORT "ip_ultrascale_ram_crw_crw : cannot infer RAM" SEVERITY FAILURE;
+
+   -- xpm_memory_sdpram: Simple Dual Port RAM
+   -- Xilinx Parameterized Macro, version 2022.1
+   xpm_memory_sdpram_inst : xpm_memory_sdpram
+   generic map (
+      ADDR_WIDTH_A => g_adr_w,              -- DECIMAL
+      ADDR_WIDTH_B => g_adr_w,              -- DECIMAL
+      AUTO_SLEEP_TIME => 0,                 -- DECIMAL
+      BYTE_WRITE_WIDTH_A => 32,             -- DECIMAL
+      CASCADE_HEIGHT => 0,                  -- DECIMAL
+      CLOCKING_MODE => "independent_clock", -- String
+      ECC_MODE => "no_ecc",                 -- String
+      MEMORY_INIT_FILE => g_init_file,      -- String
+      MEMORY_INIT_PARAM => "0",             -- String
+      MEMORY_OPTIMIZATION => "true",        -- String
+      MEMORY_PRIMITIVE => "auto",           -- String
+      MEMORY_SIZE => g_nof_words,           -- DECIMAL
+      MESSAGE_CONTROL => 0,                 -- DECIMAL
+      READ_DATA_WIDTH_B => g_dat_w,         -- DECIMAL
+      READ_LATENCY_B => g_rd_latency,       -- DECIMAL
+      READ_RESET_VALUE_B => "0",            -- String
+      RST_MODE_A => "SYNC",                 -- String
+      RST_MODE_B => "SYNC",                 -- String
+      SIM_ASSERT_CHK => 0,                  -- DECIMAL; 0=disable simulation messages, 1=enable simulation messages
+      USE_EMBEDDED_CONSTRAINT => 0,         -- DECIMAL
+      USE_MEM_INIT => 1,                    -- DECIMAL
+      USE_MEM_INIT_MMI => 0,                -- DECIMAL
+      WAKEUP_TIME => "disable_sleep",       -- String
+      WRITE_DATA_WIDTH_A => g_dat_w,        -- DECIMAL
+      WRITE_MODE_B => "no_change",          -- String
+      WRITE_PROTECT => 1                    -- DECIMAL
+   )
+   port map (
+      dbiterra => OPEN,                 -- 1-bit output: Status signal to indicate double bit error occurrence
+                                        -- on the data output of port A.
+
+      dbiterrb => OPEN,                 -- 1-bit output: Status signal to indicate double bit error occurrence
+                                        -- on the data output of port A.
+
+      doutb => q,                       -- READ_DATA_WIDTH_B-bit output: Data output for port B read operations.
+      sbiterra => OPEN,                 -- 1-bit output: Status signal to indicate single bit error occurrence
+                                        -- on the data output of port A.
+
+      sbiterrb => OPEN,                 -- 1-bit output: Status signal to indicate single bit error occurrence
+                                        -- on the data output of port B.
+
+      addra => wraddress,               -- ADDR_WIDTH_A-bit input: Address for port A write and read operations.
+      addrb => rdaddress,               -- ADDR_WIDTH_B-bit input: Address for port B write and read operations.
+      clka => wrclk,                    -- 1-bit input: Clock signal for port A. Also clocks port B when
+                                        -- parameter CLOCKING_MODE is "common_clock".
+
+      clkb => rdclk,                    -- 1-bit input: Clock signal for port B when parameter CLOCKING_MODE is
+                                        -- "independent_clock". Unused when parameter CLOCKING_MODE is
+                                        -- "common_clock".
+
+      dina => data,                     -- WRITE_DATA_WIDTH_A-bit input: Data input for port A write operations.
+      ena => '1',                       -- 1-bit input: Memory enable signal for port A. Must be high on clock
+                                        -- cycles when read or write operations are initiated. Pipelined
+                                        -- internally.
+
+      enb => '1',                       -- 1-bit input: Memory enable signal for port B. Must be high on clock
+                                        -- cycles when read or write operations are initiated. Pipelined
+                                        -- internally.
+                                              
+      injectdbiterra => '0',            -- 1-bit input: Controls double bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectdbiterrb => '0',            -- 1-bit input: Controls double bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectsbiterra => '0',            -- 1-bit input: Controls single bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectsbiterrb => '0',            -- 1-bit input: Controls single bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      regcea => '1',                    -- 1-bit input: Clock Enable for the last register stage on the output
+                                        -- data path.
+
+      regceb => '1',                    -- 1-bit input: Clock Enable for the last register stage on the output
+                                        -- data path.
+
+      rsta => '0',                      -- 1-bit input: Reset signal for the final port A output register
+                                        -- stage. Synchronously resets output port douta to the value specified
+                                        -- by parameter READ_RESET_VALUE_A.
+
+      rstb => '0',                      -- 1-bit input: Reset signal for the final port B output register
+                                        -- stage. Synchronously resets output port doutb to the value specified
+                                        -- by parameter READ_RESET_VALUE_B.
+
+      sleep => '0',                     -- 1-bit input: sleep signal to enable the dynamic power saving feature.
+
+      wea => STD_LOGIC_VECTOR(wren),    -- WRITE_DATA_WIDTH_A/BYTE_WRITE_WIDTH_A-bit input: Write enable vector
+                                        -- for port A input data port dina. 1 bit wide when word-wide writes
+                                        -- are used. In byte-wide write configurations, each bit controls the
+                                        -- writing one byte of dina to address addra. For example, to
+                                        -- synchronously write only bits [15-8] of dina when WRITE_DATA_WIDTH_A
+                                        -- is 32, wea would be 4'b0010.
+
+   );
+
+   -- End of xpm_memory_sdpram_inst instantiation
+
+
 END SYN;
diff --git a/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_crw_crw.vhd b/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_crw_crw.vhd
index 208e59e8fe5514c410abf9d9f09a1c55a9f2398f..e043b25315958aa66347a2965c48149daf31f881 100644
--- a/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_crw_crw.vhd
+++ b/libraries/technology/ip_ultrascale/ram/ip_ultrascale_ram_crw_crw.vhd
@@ -1,6 +1,6 @@
 -------------------------------------------------------------------------------
 --
--- Copyright (C) 2014
+-- Copyright (C) 2023
 -- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
 -- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
 --
@@ -21,10 +21,12 @@
 
 -- RadioHDL wrapper
 
-LIBRARY ieee, technology_lib;
+LIBRARY ieee;
 USE ieee.std_logic_1164.all;
 USE ieee.numeric_std.all;
-USE technology_lib.technology_pkg.all;
+  
+LIBRARY xpm;
+USE xpm.vcomponents.ALL;
 
 ENTITY ip_ultrascale_ram_crw_crw IS
   GENERIC (
@@ -33,7 +35,7 @@ ENTITY ip_ultrascale_ram_crw_crw IS
     g_dat_w      : NATURAL := 8;
     g_nof_words  : NATURAL := 2**5;
     g_rd_latency : NATURAL := 1;  -- choose 1 or 2
-    g_init_file  : STRING  := "UNUSED"
+    g_init_file  : STRING  := "none"
   );
   PORT
   (
@@ -51,286 +53,132 @@ ENTITY ip_ultrascale_ram_crw_crw IS
 END ip_ultrascale_ram_crw_crw;
 
 
-ARCHITECTURE ip_ultrascale_ram_crw_crw_arch OF ip_ultrascale_ram_crw_crw IS
-  ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
-  ATTRIBUTE DowngradeIPIdentifiedWarnings OF ip_ultrascale_ram_crw_crw_arch: ARCHITECTURE IS "yes";
-  COMPONENT blk_mem_gen_v8_4_5 IS
-    GENERIC (
-      C_FAMILY : STRING;
-      C_XDEVICEFAMILY : STRING;
-      C_ELABORATION_DIR : STRING;
-      C_INTERFACE_TYPE : INTEGER;
-      C_AXI_TYPE : INTEGER;
-      C_AXI_SLAVE_TYPE : INTEGER;
-      C_USE_BRAM_BLOCK : INTEGER;
-      C_ENABLE_32BIT_ADDRESS : INTEGER;
-      C_CTRL_ECC_ALGO : STRING;
-      C_HAS_AXI_ID : INTEGER;
-      C_AXI_ID_WIDTH : INTEGER;
-      C_MEM_TYPE : INTEGER;
-      C_BYTE_SIZE : INTEGER;
-      C_ALGORITHM : INTEGER;
-      C_PRIM_TYPE : INTEGER;
-      C_LOAD_INIT_FILE : INTEGER;
-      C_INIT_FILE_NAME : STRING;
-      C_INIT_FILE : STRING;
-      C_USE_DEFAULT_DATA : INTEGER;
-      C_DEFAULT_DATA : STRING;
-      C_HAS_RSTA : INTEGER;
-      C_RST_PRIORITY_A : STRING;
-      C_RSTRAM_A : INTEGER;
-      C_INITA_VAL : STRING;
-      C_HAS_ENA : INTEGER;
-      C_HAS_REGCEA : INTEGER;
-      C_USE_BYTE_WEA : INTEGER;
-      C_WEA_WIDTH : INTEGER;
-      C_WRITE_MODE_A : STRING;
-      C_WRITE_WIDTH_A : INTEGER;
-      C_READ_WIDTH_A : INTEGER;
-      C_WRITE_DEPTH_A : INTEGER;
-      C_READ_DEPTH_A : INTEGER;
-      C_ADDRA_WIDTH : INTEGER;
-      C_HAS_RSTB : INTEGER;
-      C_RST_PRIORITY_B : STRING;
-      C_RSTRAM_B : INTEGER;
-      C_INITB_VAL : STRING;
-      C_HAS_ENB : INTEGER;
-      C_HAS_REGCEB : INTEGER;
-      C_USE_BYTE_WEB : INTEGER;
-      C_WEB_WIDTH : INTEGER;
-      C_WRITE_MODE_B : STRING;
-      C_WRITE_WIDTH_B : INTEGER;
-      C_READ_WIDTH_B : INTEGER;
-      C_WRITE_DEPTH_B : INTEGER;
-      C_READ_DEPTH_B : INTEGER;
-      C_ADDRB_WIDTH : INTEGER;
-      C_HAS_MEM_OUTPUT_REGS_A : INTEGER;
-      C_HAS_MEM_OUTPUT_REGS_B : INTEGER;
-      C_HAS_MUX_OUTPUT_REGS_A : INTEGER;
-      C_HAS_MUX_OUTPUT_REGS_B : INTEGER;
-      C_MUX_PIPELINE_STAGES : INTEGER;
-      C_HAS_SOFTECC_INPUT_REGS_A : INTEGER;
-      C_HAS_SOFTECC_OUTPUT_REGS_B : INTEGER;
-      C_USE_SOFTECC : INTEGER;
-      C_USE_ECC : INTEGER;
-      C_EN_ECC_PIPE : INTEGER;
-      C_READ_LATENCY_A : INTEGER;
-      C_READ_LATENCY_B : INTEGER;
-      C_HAS_INJECTERR : INTEGER;
-      C_SIM_COLLISION_CHECK : STRING;
-      C_COMMON_CLK : INTEGER;
-      C_DISABLE_WARN_BHV_COLL : INTEGER;
-      C_EN_SLEEP_PIN : INTEGER;
-      C_USE_URAM : INTEGER;
-      C_EN_RDADDRA_CHG : INTEGER;
-      C_EN_RDADDRB_CHG : INTEGER;
-      C_EN_DEEPSLEEP_PIN : INTEGER;
-      C_EN_SHUTDOWN_PIN : INTEGER;
-      C_EN_SAFETY_CKT : INTEGER;
-      C_DISABLE_WARN_BHV_RANGE : INTEGER;
-      C_COUNT_36K_BRAM : STRING;
-      C_COUNT_18K_BRAM : STRING;
-      C_EST_POWER_SUMMARY : STRING
-    );
-    PORT (
-      clka : IN STD_LOGIC;
-      rsta : IN STD_LOGIC;
-      ena : IN STD_LOGIC;
-      regcea : IN STD_LOGIC;
-      wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-      addra : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
-      dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-      douta : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-      clkb : IN STD_LOGIC;
-      rstb : IN STD_LOGIC;
-      enb : IN STD_LOGIC;
-      regceb : IN STD_LOGIC;
-      web : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-      addrb : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
-      dinb : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-      doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-      injectsbiterr : IN STD_LOGIC;
-      injectdbiterr : IN STD_LOGIC;
-      eccpipece : IN STD_LOGIC;
-      sbiterr : OUT STD_LOGIC;
-      dbiterr : OUT STD_LOGIC;
-      rdaddrecc : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);
-      sleep : IN STD_LOGIC;
-      deepsleep : IN STD_LOGIC;
-      shutdown : IN STD_LOGIC;
-      rsta_busy : OUT STD_LOGIC;
-      rstb_busy : OUT STD_LOGIC;
-      s_aclk : IN STD_LOGIC;
-      s_aresetn : IN STD_LOGIC;
-      s_axi_awid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
-      s_axi_awaddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
-      s_axi_awlen : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-      s_axi_awsize : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
-      s_axi_awburst : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
-      s_axi_awvalid : IN STD_LOGIC;
-      s_axi_awready : OUT STD_LOGIC;
-      s_axi_wdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-      s_axi_wstrb : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-      s_axi_wlast : IN STD_LOGIC;
-      s_axi_wvalid : IN STD_LOGIC;
-      s_axi_wready : OUT STD_LOGIC;
-      s_axi_bid : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
-      s_axi_bresp : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
-      s_axi_bvalid : OUT STD_LOGIC;
-      s_axi_bready : IN STD_LOGIC;
-      s_axi_arid : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
-      s_axi_araddr : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
-      s_axi_arlen : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-      s_axi_arsize : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
-      s_axi_arburst : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
-      s_axi_arvalid : IN STD_LOGIC;
-      s_axi_arready : OUT STD_LOGIC;
-      s_axi_rid : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
-      s_axi_rdata : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-      s_axi_rresp : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
-      s_axi_rlast : OUT STD_LOGIC;
-      s_axi_rvalid : OUT STD_LOGIC;
-      s_axi_rready : IN STD_LOGIC;
-      s_axi_injectsbiterr : IN STD_LOGIC;
-      s_axi_injectdbiterr : IN STD_LOGIC;
-      s_axi_sbiterr : OUT STD_LOGIC;
-      s_axi_dbiterr : OUT STD_LOGIC;
-      s_axi_rdaddrecc : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)
-    );
-  END COMPONENT blk_mem_gen_v8_4_5;
-  ATTRIBUTE X_CORE_INFO : STRING;
-  ATTRIBUTE X_CORE_INFO OF ip_ultrascale_ram_crw_crw_arch: ARCHITECTURE IS "blk_mem_gen_v8_4_5,Vivado 2022.1";
-  ATTRIBUTE CHECK_LICENSE_TYPE : STRING;
-  ATTRIBUTE CHECK_LICENSE_TYPE OF ip_ultrascale_ram_crw_crw_arch : ARCHITECTURE IS "ip_ultrascale_ram_crw_crw,blk_mem_gen_v8_4_5,{}";
+ARCHITECTURE SYN OF ip_ultrascale_ram_crw_crw IS
   
 BEGIN
 
-  ASSERT g_rd_latency=1   REPORT "ip_ultrascale_ram_crw_crw : read latency must be 1 (default)" SEVERITY FAILURE;
+  ASSERT g_rd_latency=1 OR g_rd_latency=2  REPORT "ip_ultrascale_ram_crw_crw : read latency must be 1 (default) or 2" SEVERITY FAILURE;
   ASSERT g_inferred=FALSE REPORT "ip_ultrascale_ram_crw_crw : cannot infer RAM" SEVERITY FAILURE;
   
-  U0 : blk_mem_gen_v8_4_5
-    GENERIC MAP (
-      C_FAMILY => "virtexuplusHBM",
-      C_XDEVICEFAMILY => "virtexuplusHBM",
-      C_ELABORATION_DIR => "./",
-      C_INTERFACE_TYPE => 0,
-      C_AXI_TYPE => 1,
-      C_AXI_SLAVE_TYPE => 0,
-      C_USE_BRAM_BLOCK => 0,
-      C_ENABLE_32BIT_ADDRESS => 0,
-      C_CTRL_ECC_ALGO => "NONE",
-      C_HAS_AXI_ID => 0,
-      C_AXI_ID_WIDTH => 4,
-      C_MEM_TYPE => 2,
-      C_BYTE_SIZE => 9,
-      C_ALGORITHM => 1,
-      C_PRIM_TYPE => 1,
-      C_LOAD_INIT_FILE => 0,
-      C_INIT_FILE_NAME => "init_file",
-      C_INIT_FILE => g_init_file,
-      C_USE_DEFAULT_DATA => 0,
-      C_DEFAULT_DATA => "0",
-      C_HAS_RSTA => 0,
-      C_RST_PRIORITY_A => "CE",
-      C_RSTRAM_A => 0,
-      C_INITA_VAL => "0",
-      C_HAS_ENA => 1,
-      C_HAS_REGCEA => 0,
-      C_USE_BYTE_WEA => 0,
-      C_WEA_WIDTH => 1,
-      C_WRITE_MODE_A => "WRITE_FIRST",
-      C_WRITE_WIDTH_A => g_dat_w,
-      C_READ_WIDTH_A => g_dat_w,
-      C_WRITE_DEPTH_A => g_nof_words,
-      C_READ_DEPTH_A => g_nof_words,
-      C_ADDRA_WIDTH => g_adr_w,
-      C_HAS_RSTB => 0,
-      C_RST_PRIORITY_B => "CE",
-      C_RSTRAM_B => 0,
-      C_INITB_VAL => "0",
-      C_HAS_ENB => 1,
-      C_HAS_REGCEB => 0,
-      C_USE_BYTE_WEB => 0,
-      C_WEB_WIDTH => 1,
-      C_WRITE_MODE_B => "WRITE_FIRST",
-      C_WRITE_WIDTH_B => g_dat_w,
-      C_READ_WIDTH_B => g_dat_w,
-      C_WRITE_DEPTH_B => g_nof_words,
-      C_READ_DEPTH_B => g_nof_words,
-      C_ADDRB_WIDTH => g_adr_w,
-      C_HAS_MEM_OUTPUT_REGS_A => 1,
-      C_HAS_MEM_OUTPUT_REGS_B => 1,
-      C_HAS_MUX_OUTPUT_REGS_A => 0,
-      C_HAS_MUX_OUTPUT_REGS_B => 0,
-      C_MUX_PIPELINE_STAGES => 0,
-      C_HAS_SOFTECC_INPUT_REGS_A => 0,
-      C_HAS_SOFTECC_OUTPUT_REGS_B => 0,
-      C_USE_SOFTECC => 0,
-      C_USE_ECC => 0,
-      C_EN_ECC_PIPE => 0,
-      C_READ_LATENCY_A => 1,
-      C_READ_LATENCY_B => 1,
-      C_HAS_INJECTERR => 0,
-      C_SIM_COLLISION_CHECK => "ALL",
-      C_COMMON_CLK => 0,
-      C_DISABLE_WARN_BHV_COLL => 0,
-      C_EN_SLEEP_PIN => 0,
-      C_USE_URAM => 0,
-      C_EN_RDADDRA_CHG => 0,
-      C_EN_RDADDRB_CHG => 0,
-      C_EN_DEEPSLEEP_PIN => 0,
-      C_EN_SHUTDOWN_PIN => 0,
-      C_EN_SAFETY_CKT => 0,
-      C_DISABLE_WARN_BHV_RANGE => 0,
-      C_COUNT_36K_BRAM => "NaN",
-      C_COUNT_18K_BRAM => "NaN",
-      C_EST_POWER_SUMMARY => "Estimated Power for IP     :     UNKNOWN"
-    )
-    PORT MAP (
-      clka => clk_a,
-      rsta => '0',
-      ena => '1',
-      regcea => '0',
-      wea(0) => wren_a,
-      addra => address_a,
-      dina => data_a,
-      douta => q_a,
-      clkb => clk_b,
-      rstb => '0',
-      enb => '1',
-      regceb => '0',
-      web(0) => wren_b,
-      addrb => address_b,
-      dinb => data_b,
-      doutb => q_b,
-      injectsbiterr => '0',
-      injectdbiterr => '0',
-      eccpipece => '0',
-      sleep => '0',
-      deepsleep => '0',
-      shutdown => '0',
-      s_aclk => '0',
-      s_aresetn => '0',
-      s_axi_awid => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 4)),
-      s_axi_awaddr => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 32)),
-      s_axi_awlen => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 8)),
-      s_axi_awsize => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 3)),
-      s_axi_awburst => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 2)),
-      s_axi_awvalid => '0',
-      s_axi_wdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 8)),
-      s_axi_wstrb => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
-      s_axi_wlast => '0',
-      s_axi_wvalid => '0',
-      s_axi_bready => '0',
-      s_axi_arid => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 4)),
-      s_axi_araddr => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 32)),
-      s_axi_arlen => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 8)),
-      s_axi_arsize => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 3)),
-      s_axi_arburst => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 2)),
-      s_axi_arvalid => '0',
-      s_axi_rready => '0',
-      s_axi_injectsbiterr => '0',
-      s_axi_injectdbiterr => '0'
-    );
+   -- xpm_memory_tdpram: True Dual Port RAM
+   -- Xilinx Parameterized Macro, version 2022.1
+
+   xpm_memory_tdpram_inst : xpm_memory_tdpram
+   generic map (
+      ADDR_WIDTH_A => g_adr_w,               -- DECIMAL
+      ADDR_WIDTH_B => g_adr_w,               -- DECIMAL
+      AUTO_SLEEP_TIME => 0,            -- DECIMAL
+      BYTE_WRITE_WIDTH_A => g_dat_w,        -- DECIMAL
+      BYTE_WRITE_WIDTH_B => g_dat_w,        -- DECIMAL
+      CASCADE_HEIGHT => 0,             -- DECIMAL
+      CLOCKING_MODE => "independent_clock", -- String
+      ECC_MODE => "no_ecc",            -- String
+      MEMORY_INIT_FILE => g_init_file,      -- String
+      MEMORY_INIT_PARAM => "0",        -- String
+      MEMORY_OPTIMIZATION => "true",   -- String
+      MEMORY_PRIMITIVE => "block",      -- String
+      MEMORY_SIZE => g_nof_words,             -- DECIMAL
+      MESSAGE_CONTROL => 0,            -- DECIMAL
+      READ_DATA_WIDTH_A => g_dat_w,         -- DECIMAL
+      READ_DATA_WIDTH_B => g_dat_w,         -- DECIMAL
+      READ_LATENCY_A => g_rd_latency,   -- DECIMAL
+      READ_LATENCY_B => g_rd_latency,   -- DECIMAL
+      READ_RESET_VALUE_A => "0",       -- String
+      READ_RESET_VALUE_B => "0",       -- String
+      RST_MODE_A => "SYNC",            -- String
+      RST_MODE_B => "SYNC",            -- String
+      SIM_ASSERT_CHK => 0,             -- DECIMAL; 0=disable simulation messages, 1=enable simulation messages
+      USE_EMBEDDED_CONSTRAINT => 0,    -- DECIMAL
+      USE_MEM_INIT => 1,               -- DECIMAL
+      USE_MEM_INIT_MMI => 0,           -- DECIMAL
+      WAKEUP_TIME => "disable_sleep",  -- String
+      WRITE_DATA_WIDTH_A => g_dat_w,   -- DECIMAL
+      WRITE_DATA_WIDTH_B => g_dat_w,   -- DECIMAL
+      WRITE_MODE_A => "no_change",     -- String
+      WRITE_MODE_B => "no_change",     -- String
+      WRITE_PROTECT => 1               -- DECIMAL
+   )
+   port map (
+      dbiterra => OPEN,                 -- 1-bit output: Status signal to indicate double bit error occurrence
+                                        -- on the data output of port A.
+
+      dbiterrb => OPEN,                 -- 1-bit output: Status signal to indicate double bit error occurrence
+                                        -- on the data output of port A.
+
+      douta => q_a,                     -- READ_DATA_WIDTH_A-bit output: Data output for port A read operations.
+      doutb => q_b,                     -- READ_DATA_WIDTH_B-bit output: Data output for port B read operations.
+      sbiterra => OPEN,                 -- 1-bit output: Status signal to indicate single bit error occurrence
+                                        -- on the data output of port A.
+
+      sbiterrb => OPEN,                 -- 1-bit output: Status signal to indicate single bit error occurrence
+                                        -- on the data output of port B.
+
+      addra => address_a,               -- ADDR_WIDTH_A-bit input: Address for port A write and read operations.
+      addrb => address_b,               -- ADDR_WIDTH_B-bit input: Address for port B write and read operations.
+      clka => clk_a,                    -- 1-bit input: Clock signal for port A. Also clocks port B when
+                                        -- parameter CLOCKING_MODE is "common_clock".
+
+      clkb => clk_b,                    -- 1-bit input: Clock signal for port B when parameter CLOCKING_MODE is
+                                        -- "independent_clock". Unused when parameter CLOCKING_MODE is
+                                        -- "common_clock".
+
+      dina => data_a,                     -- WRITE_DATA_WIDTH_A-bit input: Data input for port A write operations.
+      dinb => data_b,                     -- WRITE_DATA_WIDTH_B-bit input: Data input for port B write operations.
+      ena => '1',                       -- 1-bit input: Memory enable signal for port A. Must be high on clock
+                                        -- cycles when read or write operations are initiated. Pipelined
+                                        -- internally.
+
+      enb => '1',                       -- 1-bit input: Memory enable signal for port B. Must be high on clock
+                                        -- cycles when read or write operations are initiated. Pipelined
+                                        -- internally.
+                                              
+      injectdbiterra => '0',            -- 1-bit input: Controls double bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectdbiterrb => '0',            -- 1-bit input: Controls double bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectsbiterra => '0',            -- 1-bit input: Controls single bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      injectsbiterrb => '0',            -- 1-bit input: Controls single bit error injection on input data when
+                                        -- ECC enabled (Error injection capability is not available in
+                                        -- "decode_only" mode).
+
+      regcea => '1',                    -- 1-bit input: Clock Enable for the last register stage on the output
+                                        -- data path.
+
+      regceb => '1',                    -- 1-bit input: Clock Enable for the last register stage on the output
+                                        -- data path.
+
+      rsta => '0',                      -- 1-bit input: Reset signal for the final port A output register
+                                        -- stage. Synchronously resets output port douta to the value specified
+                                        -- by parameter READ_RESET_VALUE_A.
+
+      rstb => '0',                      -- 1-bit input: Reset signal for the final port B output register
+                                        -- stage. Synchronously resets output port doutb to the value specified
+                                        -- by parameter READ_RESET_VALUE_B.
+
+      sleep => '0',                     -- 1-bit input: sleep signal to enable the dynamic power saving feature.
+      wea => STD_LOGIC_VECTOR(wren_a),                       -- WRITE_DATA_WIDTH_A/BYTE_WRITE_WIDTH_A-bit input: Write enable vector
+                                        -- for port A input data port dina. 1 bit wide when word-wide writes
+                                        -- are used. In byte-wide write configurations, each bit controls the
+                                        -- writing one byte of dina to address addra. For example, to
+                                        -- synchronously write only bits [15-8] of dina when WRITE_DATA_WIDTH_A
+                                        -- is 32, wea would be 4'b0010.
+
+      web => STD_LOGIC_VECTOR(wren_a)                        -- WRITE_DATA_WIDTH_B/BYTE_WRITE_WIDTH_B-bit input: Write enable vector
+                                        -- for port B input data port dinb. 1 bit wide when word-wide writes
+                                        -- are used. In byte-wide write configurations, each bit controls the
+                                        -- writing one byte of dinb to address addrb. For example, to
+                                        -- synchronously write only bits [15-8] of dinb when WRITE_DATA_WIDTH_B
+                                        -- is 32, web would be 4'b0010.
+
+   );
 
-END ip_ultrascale_ram_crw_crw_arch;
+   -- End of xpm_memory_tdpram_inst instantiation
+				
+END SYN;