diff --git a/libraries/technology/ddr/tech_ddr_mem_model.vhd b/libraries/technology/ddr/tech_ddr_mem_model.vhd
index 546849e8a81045ec8f1235595a7b555804a886e9..aad4c64ca3db3c5ae139f66f2d915f7691f9fe4d 100644
--- a/libraries/technology/ddr/tech_ddr_mem_model.vhd
+++ b/libraries/technology/ddr/tech_ddr_mem_model.vhd
@@ -27,6 +27,7 @@
 
 -- Declare IP libraries to ensure default binding in simulation.
 LIBRARY ip_stratixiv_ddr3_mem_model_lib;
+LIBRARY ed_sim_altera_emif_mem_model_core_ddr4_141;
 
 
 LIBRARY IEEE, common_lib;
@@ -42,14 +43,19 @@ ENTITY tech_ddr_memory_model IS
   PORT (
     -- PHY interface
     mem_in       : IN    t_tech_ddr_phy_ou;
-    mem_io       : INOUT t_tech_ddr_phy_io
+    mem_io       : INOUT t_tech_ddr_phy_io;
+    mem_ou       : OUT   t_tech_ddr_phy_in
   );
 END tech_ddr_memory_model;
 
 
 ARCHITECTURE str OF tech_ddr_memory_model IS
 
+  CONSTANT c_gigabytes    : NATURAL := func_tech_ddr_module_size(g_tech_ddr);
 
+  SIGNAL dbg_g_tech_ddr   : t_c_tech_ddr := g_tech_ddr;
+  SIGNAL dbg_c_gigabytes  : NATURAL := c_gigabytes;
+  
 BEGIN
 
   gen_ip_stratixiv_ddr_memory_model : IF g_tech_ddr.name="DDR3" GENERATE
@@ -100,5 +106,27 @@ BEGIN
     );
   END GENERATE;
   
+  gen_ip_arria10_ddr_memory_model : IF g_tech_ddr.name="DDR4" AND c_gigabytes=4 GENERATE
+    u_ip_arria10_ddr_memory_model : ed_sim_altera_emif_mem_model_141_z3tvrmq
+    PORT MAP (
+      mem_ck       => mem_in.ck(g_tech_ddr.ck_w-1 DOWNTO 0),      -- mem_conduit_end.mem_ck
+      mem_ck_n     => mem_in.ck_n(g_tech_ddr.ck_w-1 DOWNTO 0),    --                .mem_ck_n
+      mem_a        => mem_in.a(g_tech_ddr.a_w-1 DOWNTO 0),        --                .mem_a
+      mem_act_n    => slv(mem_in.act_n),                          --                .mem_act_n
+      mem_ba       => mem_in.ba(g_tech_ddr.ba_w-1 DOWNTO 0),      --                .mem_ba
+      mem_bg       => mem_in.bg(g_tech_ddr.bg_w-1 DOWNTO 0),      --                .mem_bg
+      mem_cke      => mem_in.cke(g_tech_ddr.cke_w-1 DOWNTO 0),    --                .mem_cke
+      mem_cs_n     => mem_in.cs_n(g_tech_ddr.cs_w-1 DOWNTO 0),    --                .mem_cs_n
+      mem_odt      => mem_in.odt(g_tech_ddr.odt_w-1 DOWNTO 0),    --                .mem_odt
+      mem_reset_n  => slv(mem_in.reset_n),                        --                .mem_reset_n
+      mem_par      => slv(mem_in.par),                            --                .mem_par
+   sl(mem_alert_n) => mem_ou.alert_n,                             --                .mem_alert_n
+      mem_dqs      => mem_io.dqs(g_tech_ddr.dqs_w-1 DOWNTO 0),    --                .mem_dqs
+      mem_dqs_n    => mem_io.dqs_n(g_tech_ddr.dqs_w-1 DOWNTO 0),  --                .mem_dqs_n
+      mem_dq       => mem_io.dq(g_tech_ddr.dq_w-1 DOWNTO 0),      --                .mem_dq
+      mem_dbi_n    => mem_io.dbi_n(g_tech_ddr.dbi_w-1 DOWNTO 0)   --                .mem_dbi_n
+    );
+  END GENERATE;
+  
 END str;
 
diff --git a/libraries/technology/ddr/tech_ddr_mem_model_component_pkg.vhd b/libraries/technology/ddr/tech_ddr_mem_model_component_pkg.vhd
index e61e0e142e7098bcc99e482e6b11bfc60252fe95..a715eed9a500e4b774924d50ca00325ad21a30a9 100644
--- a/libraries/technology/ddr/tech_ddr_mem_model_component_pkg.vhd
+++ b/libraries/technology/ddr/tech_ddr_mem_model_component_pkg.vhd
@@ -81,6 +81,34 @@ PACKAGE tech_ddr_mem_model_component_pkg IS
   );
   END COMPONENT alt_mem_if_ddr3_mem_model_top_ddr3_mem_if_dm_pins_en_mem_if_dqsn_en;
   
+  ------------------------------------------------------------------------------
+  -- ip_arria10
+  ------------------------------------------------------------------------------
+  
+  -- Manually derived VHDL entity from ed_sim_altera_emif_mem_model_141_z3tvrmq.vhd in:
+  -- $RADIOHDL/libraries/technology/ip_arria10/ddr4_4g_1600/emif_0_example_design/sim/altera_emif_mem_model_141/sim
+  COMPONENT ed_sim_altera_emif_mem_model_141_z3tvrmq IS
+	PORT (
+		mem_ck      : in    std_logic_vector(0 downto 0)  := (others => '0'); -- mem_conduit_end.mem_ck
+		mem_ck_n    : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_ck_n
+		mem_a       : in    std_logic_vector(16 downto 0) := (others => '0'); --                .mem_a
+		mem_act_n   : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_act_n
+		mem_ba      : in    std_logic_vector(1 downto 0)  := (others => '0'); --                .mem_ba
+		mem_bg      : in    std_logic_vector(1 downto 0)  := (others => '0'); --                .mem_bg
+		mem_cke     : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_cke
+		mem_cs_n    : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_cs_n
+		mem_odt     : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_odt
+		mem_reset_n : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_reset_n
+		mem_par     : in    std_logic_vector(0 downto 0)  := (others => '0'); --                .mem_par
+		mem_alert_n : out   std_logic_vector(0 downto 0);                     --                .mem_alert_n
+		mem_dqs     : inout std_logic_vector(8 downto 0)  := (others => '0'); --                .mem_dqs
+		mem_dqs_n   : inout std_logic_vector(8 downto 0)  := (others => '0'); --                .mem_dqs_n
+		mem_dq      : inout std_logic_vector(71 downto 0) := (others => '0'); --                .mem_dq
+		mem_dbi_n   : inout std_logic_vector(8 downto 0)  := (others => '0')  --                .mem_dbi_n
+	);
+  END COMPONENT ed_sim_altera_emif_mem_model_141_z3tvrmq;
+
+  
 END tech_ddr_mem_model_component_pkg;
 
 PACKAGE BODY tech_ddr_mem_model_component_pkg IS