diff --git a/libraries/technology/ddr/tech_ddr_component_pkg.vhd b/libraries/technology/ddr/tech_ddr_component_pkg.vhd
index 679210d1ddda08b94d2e9f0ec1435b9d2fdd7eb4..e304cb76f09e0de3642aaa62e362e89536be3aca 100644
--- a/libraries/technology/ddr/tech_ddr_component_pkg.vhd
+++ b/libraries/technology/ddr/tech_ddr_component_pkg.vhd
@@ -133,7 +133,110 @@ PACKAGE tech_ddr_component_pkg IS
     dll_delayctrl              : OUT   STD_LOGIC_VECTOR(5 DOWNTO 0)     --  dll_sharing.dll_delayctrl
   );
   END COMPONENT;
-  
+
+  -- Manually derived VHDL entity from Verilog module $RADIOHDL/libraries/technology/ip_stratixiv/ddr3_uphy_4g_single_rank_800_master/generated/ip_stratixiv_ddr3_uphy_4g_single_rank_800_master.v
+  COMPONENT ip_stratixiv_ddr3_uphy_4g_single_rank_800_master IS
+  PORT (
+    pll_ref_clk                	: IN    STD_LOGIC;                       --  pll_ref_clk.clk
+    global_reset_n             	: IN    STD_LOGIC;                       -- global_reset.reset_n
+    soft_reset_n               	: IN    STD_LOGIC;                       --   soft_reset.reset_n
+    afi_clk                    	: OUT   STD_LOGIC;                       --      afi_clk.clk
+    afi_half_clk               	: OUT   STD_LOGIC;                       -- afi_half_clk.clk
+    afi_reset_n                	: OUT   STD_LOGIC;                       --    afi_reset.reset_n
+    mem_a                      	: OUT   STD_LOGIC_VECTOR(15 DOWNTO 0);   --       memory.mem_a
+    mem_ba                     	: OUT   STD_LOGIC_VECTOR(2 DOWNTO 0);    --             .mem_ba
+    mem_ck                     	: OUT   STD_LOGIC_VECTOR(1 DOWNTO 0);    --             .mem_ck
+    mem_ck_n                   	: OUT   STD_LOGIC_VECTOR(1 DOWNTO 0);    --             .mem_ck_n
+    mem_cke                    	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --             .mem_cke
+    mem_cs_n                   	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --             .mem_cs_n
+    mem_dm                     	: OUT   STD_LOGIC_VECTOR(7 DOWNTO 0);    --             .mem_dm
+    mem_ras_n                  	: OUT   STD_LOGIC;                       --             .mem_ras_n
+    mem_cas_n                  	: OUT   STD_LOGIC;                       --             .mem_cas_n
+    mem_we_n                   	: OUT   STD_LOGIC;                       --             .mem_we_n
+    mem_reset_n                	: OUT   STD_LOGIC;                       --             .mem_reset_n
+    mem_dq                     	: INOUT STD_LOGIC_VECTOR(63 DOWNTO 0);   --             .mem_dq
+    mem_dqs                    	: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --             .mem_dqs
+    mem_dqs_n                  	: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --             .mem_dqs_n
+    mem_odt                    	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --             .mem_odt
+    avl_ready                  	: OUT   STD_LOGIC;                       --          avl.waitrequest_n
+    avl_burstbegin             	: IN    STD_LOGIC;                       --             .beginbursttransfer
+    avl_addr                   	: IN    STD_LOGIC_VECTOR(26 DOWNTO 0);   --             .address
+    avl_rdata_valid            	: OUT   STD_LOGIC;                       --             .readdatavalid
+    avl_rdata                  	: OUT   STD_LOGIC_VECTOR(255 DOWNTO 0);  --             .readdata
+    avl_wdata                  	: IN    STD_LOGIC_VECTOR(255 DOWNTO 0);  --             .writedata
+    avl_be                     	: IN    STD_LOGIC_VECTOR(31 DOWNTO 0);   --             .byteenable
+    avl_read_req               	: IN    STD_LOGIC;                       --             .read
+    avl_write_req              	: IN    STD_LOGIC;                       --             .write
+    avl_size                   	: IN    STD_LOGIC_VECTOR(6 DOWNTO 0);    --             .burstcount
+    local_init_done            	: OUT   STD_LOGIC;                       --       status.local_init_done
+    local_cal_success          	: OUT   STD_LOGIC;                       --             .local_cal_success
+    local_cal_fail             	: OUT   STD_LOGIC;                       --             .local_cal_fail
+    oct_rdn                    	: IN    STD_LOGIC;                       --          oct.rdn
+    oct_rup                    	: IN    STD_LOGIC;                       --             .rup
+    seriesterminationcontrol   	: OUT   STD_LOGIC_VECTOR(13 DOWNTO 0);   --  oct_sharing.seriesterminationcontrol
+    parallelterminationcontrol 	: OUT   STD_LOGIC_VECTOR(13 DOWNTO 0);   --             .parallelterminationcontrol
+    pll_mem_clk                	: OUT   STD_LOGIC;                       --  pll_sharing.pll_mem_clk
+    pll_write_clk              	: OUT   STD_LOGIC;                       --             .pll_write_clk
+    pll_write_clk_pre_phy_clk  	: OUT   STD_LOGIC;                       --             .pll_write_clk_pre_phy_clk
+    pll_addr_cmd_clk           	: OUT   STD_LOGIC;                       --             .pll_addr_cmd_clk
+    pll_locked                 	: OUT   STD_LOGIC;                       --             .pll_locked
+    pll_avl_clk                	: OUT   STD_LOGIC;                       --             .pll_avl_clk
+    pll_config_clk             	: OUT   STD_LOGIC;                       --             .pll_config_clk
+    dll_delayctrl              	: OUT   STD_LOGIC_VECTOR(5 DOWNTO 0)     --  dll_sharing.dll_delayctrl
+  );
+  END COMPONENT;
+
+  -- Manually derived VHDL entity from Verilog module $RADIOHDL/libraries/technology/ip_stratixiv/ddr3_uphy_4g_single_rank_800_slave/generated/ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave.v
+  -- . diff with master is that only master has oct_* inputs and that the *terminationcontrol are inputs for the slave
+  COMPONENT ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave IS
+  PORT (
+		pll_ref_clk                	: IN    STD_LOGIC;                       --     pll_ref_clk.clk
+		global_reset_n             	: IN    STD_LOGIC;                       --    global_reset.reset_n
+		soft_reset_n               	: IN    STD_LOGIC;                       --      soft_reset.reset_n
+		afi_clk                    	: OUT   STD_LOGIC;                       --      afi_clk_in.clk
+		afi_half_clk               	: OUT   STD_LOGIC;                       -- afi_half_clk_in.clk
+		afi_reset_n                	: OUT   STD_LOGIC;                       --    afi_reset_in.reset_n
+		mem_a                      	: OUT   STD_LOGIC_VECTOR(15 DOWNTO 0);   --          memory.mem_a
+		mem_ba                     	: OUT   STD_LOGIC_VECTOR(2 DOWNTO 0);    --                .mem_ba
+		mem_ck                     	: OUT   STD_LOGIC_VECTOR(1 DOWNTO 0);    --                .mem_ck
+		mem_ck_n                   	: OUT   STD_LOGIC_VECTOR(1 DOWNTO 0);    --                .mem_ck_n
+		mem_cke                    	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --                .mem_cke
+		mem_cs_n                   	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --                .mem_cs_n
+		mem_dm                     	: OUT   STD_LOGIC_VECTOR(7 DOWNTO 0);    --                .mem_dm
+		mem_ras_n                  	: OUT   STD_LOGIC;                       --                .mem_ras_n
+		mem_cas_n                  	: OUT   STD_LOGIC;                       --                .mem_cas_n
+		mem_we_n                   	: OUT   STD_LOGIC;                       --                .mem_we_n
+		mem_reset_n                	: OUT   STD_LOGIC;                       --                .mem_reset_n
+		mem_dq                     	: INOUT STD_LOGIC_VECTOR(63 DOWNTO 0);   --                .mem_dq
+		mem_dqs                    	: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --                .mem_dqs
+		mem_dqs_n                  	: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);    --                .mem_dqs_n
+		mem_odt                    	: OUT   STD_LOGIC_VECTOR(0 DOWNTO 0);    --                .mem_odt
+		avl_ready                  	: OUT   STD_LOGIC;                       --             avl.waitrequest_n
+		avl_burstbegin             	: IN    STD_LOGIC;                       --                .beginbursttransfer
+		avl_addr                   	: IN    STD_LOGIC_VECTOR(26 DOWNTO 0);   --                .address
+		avl_rdata_valid            	: OUT   STD_LOGIC;                       --                .readdatavalid
+		avl_rdata                  	: OUT   STD_LOGIC_VECTOR(255 DOWNTO 0);  --                .readdata
+		avl_wdata                  	: IN    STD_LOGIC_VECTOR(255 DOWNTO 0);  --                .writedata
+		avl_be                     	: IN    STD_LOGIC_VECTOR(31 DOWNTO 0);   --                .byteenable
+		avl_read_req               	: IN    STD_LOGIC;                       --                .read
+		avl_write_req              	: IN    STD_LOGIC;                       --                .write
+		avl_size                   	: IN    STD_LOGIC_VECTOR(6 DOWNTO 0);    --                .burstcount
+		local_init_done            	: OUT   STD_LOGIC;                       --          status.local_init_done
+		local_cal_success          	: OUT   STD_LOGIC;                       --                .local_cal_success
+		local_cal_fail             	: OUT   STD_LOGIC;                       --                .local_cal_fail
+		seriesterminationcontrol   	: IN    STD_LOGIC_VECTOR(13 DOWNTO 0);   --     oct_sharing.seriesterminationcontrol
+		parallelterminationcontrol 	: IN    STD_LOGIC_VECTOR(13 DOWNTO 0);   --                .parallelterminationcontrol
+		pll_mem_clk                	: OUT   STD_LOGIC;                       --     pll_sharing.pll_mem_clk
+		pll_write_clk              	: OUT   STD_LOGIC;                       --                .pll_write_clk
+		pll_write_clk_pre_phy_clk  	: OUT   STD_LOGIC;                       --                .pll_write_clk_pre_phy_clk
+		pll_addr_cmd_clk           	: OUT   STD_LOGIC;                       --                .pll_addr_cmd_clk
+		pll_locked                 	: OUT   STD_LOGIC;                       --                .pll_locked
+		pll_avl_clk                	: OUT   STD_LOGIC;                       --                .pll_avl_clk
+		pll_config_clk             	: OUT   STD_LOGIC;                       --                .pll_config_clk
+		dll_delayctrl              	: OUT   STD_LOGIC_VECTOR(5 DOWNTO 0)     --     dll_sharing.dll_delayctrl
+  );
+  END COMPONENT;
+
   ------------------------------------------------------------------------------
   -- ip_arria10
   ------------------------------------------------------------------------------
diff --git a/libraries/technology/ddr/tech_ddr_pkg.vhd b/libraries/technology/ddr/tech_ddr_pkg.vhd
index 75060c7780dab1a7169f274c8759026f17cc61db..5b0d7ab2caf8ee08f71e162cc9d6e94313d690f4 100644
--- a/libraries/technology/ddr/tech_ddr_pkg.vhd
+++ b/libraries/technology/ddr/tech_ddr_pkg.vhd
@@ -33,6 +33,7 @@ PACKAGE tech_ddr_pkg IS
     name                              : STRING(1 TO 4);  -- = "DDR3" or "DDR4"
     mts                               : NATURAL;  -- = 800   access rate in mega transfers per second
     master                            : BOOLEAN;  -- = TRUE  TRUE = uniphy master, FALSE = uniphy slave regarding OCT and terminationcontrol for DDR3
+    rank                              : STRING(1 TO 6);  -- = "SINGLE" or "DUAL  "
     -- PHY external FPGA IO
     a_w                               : NATURAL;  -- = 16
     a_row_w                           : NATURAL;  -- = 16     = a_w, row address width, via a_w lines
@@ -65,14 +66,16 @@ PACKAGE tech_ddr_pkg IS
   FUNCTION func_tech_ddr_ctlr_data_w(   c_ddr : t_c_tech_ddr) RETURN NATURAL;  -- return DDR    data width for the controller data at the by rsl=4 reduced rate
   FUNCTION func_tech_ddr_module_size(   c_ddr : t_c_tech_ddr) RETURN NATURAL;  -- return DDR module size in GByte
   
-  --                                                                                a   a
-  --                                                                            a row col ba  dq dqs dm dbi bg ck cke cs cs_w odt      rsl
-  CONSTANT c_tech_ddr3_max            : t_c_tech_ddr := ("none",  800,  TRUE,  15, 15, 10, 3, 64,  8, 8, 0,  0, 2,  2, 2,   1,  2, 14,   4, 2,  4, 64, 7);  -- maximum ranges for record field definitions
-  CONSTANT c_tech_ddr3_4g_800m_master : t_c_tech_ddr := ("DDR3",  800,  TRUE,  15, 15, 10, 3, 64,  8, 8, 0,  0, 2,  2, 2,   1,  2, 14,   4, 2,  4, 64, 7);
-  CONSTANT c_tech_ddr3_4g_800m_slave  : t_c_tech_ddr := ("DDR3",  800, FALSE,  15, 15, 10, 3, 64,  8, 8, 0,  0, 2,  2, 2,   1,  2, 14,   4, 2,  4, 64, 7);
+  --                                                                                                   a   a
+  --                                                                 name    mts   master rank      a   row col ba dq  dqs dm dbi bg ck cke cs cs_w odt term rsl rsl_w cqd burst burst_w
+  CONSTANT c_tech_ddr3_max                        : t_c_tech_ddr := ("none",  800,  TRUE, "DUAL  ", 15, 15, 10, 3, 64, 8,  8, 0,  0, 2, 2,  2, 1,   2,  14,  4,  2,    4,  64,   7);  -- maximum ranges for record field definitions
+  CONSTANT c_tech_ddr3_4g_800m_master             : t_c_tech_ddr := ("DDR3",  800,  TRUE, "DUAL  ", 15, 15, 10, 3, 64, 8,  8, 0,  0, 2, 2,  2, 1,   2,  14,  4,  2,    4,  64,   7);
+  CONSTANT c_tech_ddr3_4g_800m_slave              : t_c_tech_ddr := ("DDR3",  800, FALSE, "DUAL  ", 15, 15, 10, 3, 64, 8,  8, 0,  0, 2, 2,  2, 1,   2,  14,  4,  2,    4,  64,   7);
+  CONSTANT c_tech_ddr3_4g_single_rank_800m_master : t_c_tech_ddr := ("DDR3",  800,  TRUE, "SINGLE", 16, 16, 10, 3, 64, 8,  8, 0,  0, 2, 2,  1, 1,   2,  14,  4,  2,    4,  64,   7);
+  CONSTANT c_tech_ddr3_4g_single_rank_800m_slave  : t_c_tech_ddr := ("DDR3",  800, FALSE, "SINGLE", 16, 16, 10, 3, 64, 8,  8, 0,  0, 2, 2,  1, 1,   2,  14,  4,  2,    4,  64,   7);
   
-  CONSTANT c_tech_ddr4_max            : t_c_tech_ddr := ("none", 1600,  TRUE,  17, 15, 10, 2, 72,  9, 0, 9,  2, 1,  1, 1,   0,  1,  0,   8, 3,  8, 64, 7);  -- maximum ranges for record field definitions
-  CONSTANT c_tech_ddr4_4g_1600m       : t_c_tech_ddr := ("DDR4", 1600,  TRUE,  17, 15, 10, 2, 72,  9, 0, 9,  2, 1,  1, 1,   0,  1,  0,   8, 3,  8, 64, 7);
+  CONSTANT c_tech_ddr4_max                        : t_c_tech_ddr := ("none", 1600,  TRUE, "DUAL  ", 17, 15, 10, 2, 72, 9,  0, 9,  2, 1, 1,  1, 0,   1,   0,  8,  3,    8,  64,   7);  -- maximum ranges for record field definitions
+  CONSTANT c_tech_ddr4_4g_1600m                   : t_c_tech_ddr := ("DDR4", 1600,  TRUE, "DUAL  ", 17, 15, 10, 2, 72, 9,  0, 9,  2, 1, 1,  1, 0,   1,   0,  8,  3,    8,  64,   7);
 
   -- PHY in, inout and out signal records
   TYPE t_tech_ddr3_phy_in IS RECORD                                                                 -- DDR3 Description
diff --git a/libraries/technology/ddr/tech_ddr_stratixiv.vhd b/libraries/technology/ddr/tech_ddr_stratixiv.vhd
index b1e1995c3970feb94ccf911592d50a8719c0d1ac..8c0a9fe68cdb2744a6b27bb8200297b1caf54b61 100644
--- a/libraries/technology/ddr/tech_ddr_stratixiv.vhd
+++ b/libraries/technology/ddr/tech_ddr_stratixiv.vhd
@@ -33,6 +33,8 @@
 -- Declare IP libraries to ensure default binding in simulation. The IP library clause is ignored by synthesis.
 LIBRARY ip_stratixiv_ddr3_uphy_4g_800_master_lib;
 LIBRARY ip_stratixiv_ddr3_uphy_4g_800_slave_lib;
+LIBRARY ip_stratixiv_ddr3_uphy_4g_single_rank_800_master_lib;
+LIBRARY ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave_lib;
 
 LIBRARY IEEE, technology_lib, common_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
@@ -88,7 +90,7 @@ BEGIN
 
   ref_rst_n <= NOT ref_rst;
   
-  gen_ip_stratixiv_ddr3_uphy_4g_800_master : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=TRUE GENERATE
+  gen_ip_stratixiv_ddr3_uphy_4g_800_master : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=TRUE AND g_tech_ddr.rank="DUAL  " GENERATE
     u_ip_stratixiv_ddr3_uphy_4g_800_master : ip_stratixiv_ddr3_uphy_4g_800_master
     PORT MAP (
       pll_ref_clk                => ref_clk,                                                                        --  pll_ref_clk.clk
@@ -140,7 +142,7 @@ BEGIN
     );
   END GENERATE;
 
-  gen_ip_stratixiv_ddr3_uphy_4g_800_slave : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=FALSE GENERATE
+  gen_ip_stratixiv_ddr3_uphy_4g_800_slave : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=FALSE AND g_tech_ddr.rank="DUAL  " GENERATE
     u_ip_stratixiv_ddr3_uphy_4g_800_slave : ip_stratixiv_ddr3_uphy_4g_800_slave
     PORT MAP (
       pll_ref_clk                => ref_clk,                                                                        --  pll_ref_clk.clk
@@ -190,6 +192,108 @@ BEGIN
     );
   END GENERATE;
   
+  gen_ip_stratixiv_ddr3_uphy_4g_single_rank_800_master : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=TRUE AND g_tech_ddr.rank="SINGLE" GENERATE
+    u_ip_stratixiv_ddr3_uphy_4g_single_rank_800_master : ip_stratixiv_ddr3_uphy_4g_single_rank_800_master
+    PORT MAP (
+      pll_ref_clk                => ref_clk,                                                                        --  pll_ref_clk.clk
+      global_reset_n             => ref_rst_n,                                                                      -- global_reset.reset_n
+      soft_reset_n               => '1',                                                                            --   soft_reset.reset_n
+      afi_clk                    => ctlr_gen_clk,                                                                   --      afi_clk.clk
+      afi_half_clk               => OPEN,                                                                           -- afi_half_clk.clk
+      afi_reset_n                => ctlr_gen_rst_n,                                                                 --    afi_reset.reset_n
+      mem_a                      => phy_ou.a(g_tech_ddr.a_w-1 DOWNTO 0),                                            --       memory.mem_a
+      mem_ba                     => phy_ou.ba(g_tech_ddr.ba_w-1 DOWNTO 0),                                          --             .mem_ba
+      mem_ck                     => phy_ou.ck(g_tech_ddr.ck_w-1 DOWNTO 0),                                          --             .mem_ck
+      mem_ck_n                   => phy_ou.ck_n(g_tech_ddr.ck_w-1 DOWNTO 0),                                        --             .mem_ck_n
+      mem_cke                    => phy_ou.cke(g_tech_ddr.cke_w-1 DOWNTO 0),                                        --             .mem_cke
+      mem_cs_n                   => phy_ou.cs_n(g_tech_ddr.cs_w-1 DOWNTO 0),                                        --             .mem_cs_n
+      mem_dm                     => phy_ou.dm(g_tech_ddr.dm_w-1 DOWNTO 0),                                          --             .mem_dm
+      mem_ras_n                  => phy_ou.ras_n,                                                                   --             .mem_ras_n
+      mem_cas_n                  => phy_ou.cas_n,                                                                   --             .mem_cas_n
+      mem_we_n                   => phy_ou.we_n,                                                                    --             .mem_we_n
+      mem_reset_n                => phy_ou.reset_n,                                                                 --             .mem_reset_n
+      mem_dq                     => phy_io.dq(g_tech_ddr.dq_w-1 DOWNTO 0),                                          --             .mem_dq
+      mem_dqs                    => phy_io.dqs(g_tech_ddr.dqs_w-1 DOWNTO 0),                                        --             .mem_dqs
+      mem_dqs_n                  => phy_io.dqs_n(g_tech_ddr.dqs_w-1 DOWNTO 0),                                      --             .mem_dqs_n
+      mem_odt                    => phy_ou.odt(g_tech_ddr.odt_w-1 DOWNTO 0),                                        --             .mem_odt
+      avl_ready                  => ctlr_miso.waitrequest_n,                                                        --          avl.waitrequest_n
+      avl_burstbegin             => ctlr_mosi.burstbegin,                                                           --             .beginbursttransfer
+      avl_addr                   => ctlr_mosi.address(c_ctlr_address_w-1 DOWNTO 0),                                 --             .address
+      avl_rdata_valid            => ctlr_miso.rdval,                                                                --             .readdatavalid
+      avl_rdata                  => ctlr_miso.rddata(c_ctlr_data_w-1 DOWNTO 0),                                     --             .readdata
+      avl_wdata                  => ctlr_mosi.wrdata(c_ctlr_data_w-1 DOWNTO 0),                                     --             .writedata
+      avl_be                     => (OTHERS=>'1'),                                                                  --             .byteenable
+      avl_read_req               => ctlr_mosi.rd,                                                                   --             .read
+      avl_write_req              => ctlr_mosi.wr,                                                                   --             .write
+      avl_size                   => ctlr_mosi.burstsize(g_tech_ddr.maxburstsize_w-1 DOWNTO 0),                      --             .burstcount
+      local_init_done            => ctlr_miso.done,                                                                 --       status.local_init_done
+      local_cal_success          => ctlr_miso.cal_ok,                                                                           --             .local_cal_success
+      local_cal_fail             => ctlr_miso.cal_fail,                                                                           --             .local_cal_fail
+      oct_rdn                    => phy_in.oct_rdn,                                                                 --          oct.rdn
+      oct_rup                    => phy_in.oct_rup,                                                                 --             .rup
+      seriesterminationcontrol   => term_ctrl_out.seriesterminationcontrol,                                         --  oct_sharing.seriesterminationcontrol
+      parallelterminationcontrol => term_ctrl_out.parallelterminationcontrol,                                       --             .parallelterminationcontrol
+      pll_mem_clk                => i_ctlr_gen_clk_2x,                                                              --  pll_sharing.pll_mem_clk
+      pll_write_clk              => OPEN,                                                                           --             .pll_write_clk
+      pll_write_clk_pre_phy_clk  => OPEN,                                                                           --             .pll_write_clk_pre_phy_clk
+      pll_addr_cmd_clk           => OPEN,                                                                           --             .pll_addr_cmd_clk
+      pll_locked                 => OPEN,                                                                           --             .pll_locked
+      pll_avl_clk                => OPEN,                                                                           --             .pll_avl_clk
+      pll_config_clk             => OPEN,                                                                           --             .pll_config_clk
+      dll_delayctrl              => OPEN                                                                            --  dll_sharing.dll_delayctrl
+    );
+  END GENERATE;
+
+  gen_ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave : IF g_tech_ddr.name="DDR3" AND c_gigabytes=4 AND g_tech_ddr.mts=800 AND g_tech_ddr.master=FALSE AND g_tech_ddr.rank="SINGLE" GENERATE
+    u_ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave : ip_stratixiv_ddr3_uphy_4g_single_rank_800_slave
+    PORT MAP (
+      pll_ref_clk                => ref_clk,                                                                        --  pll_ref_clk.clk
+      global_reset_n             => ref_rst_n,                                                                      -- global_reset.reset_n
+      soft_reset_n               => '1',                                                                            --   soft_reset.reset_n
+      afi_clk                    => ctlr_gen_clk,                                                                   --      afi_clk.clk
+      afi_half_clk               => OPEN,                                                                           -- afi_half_clk.clk
+      afi_reset_n                => ctlr_gen_rst_n,                                                                 --    afi_reset.reset_n
+      mem_a                      => phy_ou.a(g_tech_ddr.a_w-1 DOWNTO 0),                                            --       memory.mem_a
+      mem_ba                     => phy_ou.ba(g_tech_ddr.ba_w-1 DOWNTO 0),                                          --             .mem_ba
+      mem_ck                     => phy_ou.ck(g_tech_ddr.ck_w-1 DOWNTO 0),                                          --             .mem_ck
+      mem_ck_n                   => phy_ou.ck_n(g_tech_ddr.ck_w-1 DOWNTO 0),                                        --             .mem_ck_n
+      mem_cke                    => phy_ou.cke(g_tech_ddr.cke_w-1 DOWNTO 0),                                        --             .mem_cke
+      mem_cs_n                   => phy_ou.cs_n(g_tech_ddr.cs_w-1 DOWNTO 0),                                        --             .mem_cs_n
+      mem_dm                     => phy_ou.dm(g_tech_ddr.dm_w-1 DOWNTO 0),                                          --             .mem_dm
+      mem_ras_n                  => phy_ou.ras_n,                                                                   --             .mem_ras_n
+      mem_cas_n                  => phy_ou.cas_n,                                                                   --             .mem_cas_n
+      mem_we_n                   => phy_ou.we_n,                                                                    --             .mem_we_n
+      mem_reset_n                => phy_ou.reset_n,                                                                 --             .mem_reset_n
+      mem_dq                     => phy_io.dq(g_tech_ddr.dq_w-1 DOWNTO 0),                                          --             .mem_dq
+      mem_dqs                    => phy_io.dqs(g_tech_ddr.dqs_w-1 DOWNTO 0),                                        --             .mem_dqs
+      mem_dqs_n                  => phy_io.dqs_n(g_tech_ddr.dqs_w-1 DOWNTO 0),                                      --             .mem_dqs_n
+      mem_odt                    => phy_ou.odt(g_tech_ddr.odt_w-1 DOWNTO 0),                                        --             .mem_odt
+      avl_ready                  => ctlr_miso.waitrequest_n,                                                        --          avl.waitrequest_n
+      avl_burstbegin             => ctlr_mosi.burstbegin,                                                           --             .beginbursttransfer
+      avl_addr                   => ctlr_mosi.address(c_ctlr_address_w-1 DOWNTO 0),                                 --             .address
+      avl_rdata_valid            => ctlr_miso.rdval,                                                                --             .readdatavalid
+      avl_rdata                  => ctlr_miso.rddata(c_ctlr_data_w-1 DOWNTO 0),                                     --             .readdata
+      avl_wdata                  => ctlr_mosi.wrdata(c_ctlr_data_w-1 DOWNTO 0),                                     --             .writedata
+      avl_be                     => (OTHERS=>'1'),                                                                  --             .byteenable
+      avl_read_req               => ctlr_mosi.rd,                                                                   --             .read
+      avl_write_req              => ctlr_mosi.wr,                                                                   --             .write
+      avl_size                   => ctlr_mosi.burstsize(g_tech_ddr.maxburstsize_w-1 DOWNTO 0),                      --             .burstcount
+      local_init_done            => ctlr_miso.done,                                                                 --       status.local_init_done
+      local_cal_success          => OPEN,                                                                           --             .local_cal_success
+      local_cal_fail             => OPEN,                                                                           --             .local_cal_fail
+      seriesterminationcontrol   => term_ctrl_in.seriesterminationcontrol,                                          --  oct_sharing.seriesterminationcontrol
+      parallelterminationcontrol => term_ctrl_in.parallelterminationcontrol,                                        --             .parallelterminationcontrol
+      pll_mem_clk                => i_ctlr_gen_clk_2x,                                                              --  pll_sharing.pll_mem_clk
+      pll_write_clk              => OPEN,                                                                           --             .pll_write_clk
+      pll_write_clk_pre_phy_clk  => OPEN,                                                                           --             .pll_write_clk_pre_phy_clk
+      pll_addr_cmd_clk           => OPEN,                                                                           --             .pll_addr_cmd_clk
+      pll_locked                 => OPEN,                                                                           --             .pll_locked
+      pll_avl_clk                => OPEN,                                                                           --             .pll_avl_clk
+      pll_config_clk             => OPEN,                                                                           --             .pll_config_clk
+      dll_delayctrl              => OPEN                                                                            --  dll_sharing.dll_delayctrl
+    );
+  END GENERATE;
+
   i_ctlr_gen_rst <= NOT ctlr_gen_rst_n;
   
   u_async_ctlr_gen_rst_2x: ENTITY common_lib.common_async