diff --git a/libraries/technology/eth_10g/hdllib.cfg b/libraries/technology/eth_10g/hdllib.cfg
index 74cf4140bbd2d4975e0b8943b99999965133227a..d3653813d89d74ccc4e11a449eb79a6f742684b7 100644
--- a/libraries/technology/eth_10g/hdllib.cfg
+++ b/libraries/technology/eth_10g/hdllib.cfg
@@ -1,13 +1,13 @@
 hdl_lib_name = tech_eth_10g
 hdl_library_clause_name = tech_eth_10g_lib
-hdl_lib_uses = technology tech_pll tech_mac_10g tech_10gbase_r common dp
+hdl_lib_uses = technology tech_pll tech_mac_10g tech_10gbase_r tech_xaui common dp
 hdl_lib_technology = 
 
 build_dir_sim = $HDL_BUILD_DIR
 build_dir_synth = $HDL_BUILD_DIR
 
 synth_files =
-    #tech_eth_10g_stratixiv.vhd
+    tech_eth_10g_stratixiv.vhd
     tech_eth_10g_arria10.vhd
     tech_eth_10g.vhd
 
@@ -16,9 +16,5 @@ test_bench_files =
     tb_tech_eth_10g_ppm.vhd
     
 modelsim_search_libraries =
-    altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver twentynm_ver twentynm_hssi_ver twentynm_hip_ver
-    altera     lpm     sgate     altera_mf     altera_lnsim     twentynm     twentynm_hssi     twentynm_hip
-
-modelsim_copy_files =
-    #wave_tb_tech_eth_10gbase_r.do .
-    
\ No newline at end of file
+    altera_ver lpm_ver sgate_ver altera_mf_ver altera_lnsim_ver  stratixiv_ver stratixiv_hssi_ver stratixiv_pcie_hip_ver twentynm_ver twentynm_hssi_ver twentynm_hip_ver
+    altera     lpm     sgate     altera_mf     altera_lnsim      stratixiv     stratixiv_hssi     stratixiv_pcie_hip     twentynm     twentynm_hssi     twentynm_hip
diff --git a/libraries/technology/eth_10g/tb_tech_eth_10g.vhd b/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
index f032d16d45d26db1c1d4a78933dfe40729f05316..bd414709a93247e6aaa06fa7dc1c1c5bf9be423b 100644
--- a/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
+++ b/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
@@ -47,15 +47,20 @@ ENTITY tb_tech_eth_10g IS
   -- Test bench control parameters
   GENERIC (
     g_technology              : NATURAL := c_tech_select_default;
-    g_tech_pll_clk_644_period : TIME := tech_pll_clk_644_period;
+    g_clk_644_period          : TIME := tech_pll_clk_644_period;
+    g_clk_156_period          : TIME := 6.4 ns;
     g_data_type               : NATURAL := c_tb_tech_mac_10g_data_type_symbols;
     g_verify_link_recovery    : BOOLEAN := TRUE;
     g_link_status_check       : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11";
-    g_use_rx_serial_in        : BOOLEAN := FALSE 
+    g_use_serial_rx_in        : BOOLEAN := FALSE 
   );
   PORT (
-    tx_serial_out : OUT STD_LOGIC;
-    rx_serial_in  : IN  STD_LOGIC
+    -- PHY 10gbase_r
+    serial_tx_out   : OUT STD_LOGIC;                                       -- 1 lane
+    serial_rx_in    : IN  STD_LOGIC;
+    -- PHY XAUI
+    xaui_tx_out     : OUT STD_LOGIC_VECTOR(c_nof_xaui_lanes-1 DOWNTO 0);   -- 4 lanes
+    xaui_rx_in      : IN  STD_LOGIC_VECTOR(c_nof_xaui_lanes-1 DOWNTO 0)
   );
 END tb_tech_eth_10g;
 
@@ -64,7 +69,7 @@ ARCHITECTURE tb OF tb_tech_eth_10g IS
 
   CONSTANT phy_delay                : TIME :=  0 ns;
   
-  CONSTANT c_phy_loopback       : BOOLEAN := NOT g_use_rx_serial_in;
+  CONSTANT c_phy_loopback       : BOOLEAN := NOT g_use_serial_rx_in;
   CONSTANT c_st_loopback        : BOOLEAN := FALSE;  -- default FALSE to verify the DUT, else use TRUE to verify the tb itself without the DUT
   CONSTANT c_rl                 : NATURAL := 1;
   CONSTANT c_nof_tx_not_valid   : NATURAL := 0;  -- when > 0 then pull tx valid low for c_nof_tx_not_valid beats during tx
@@ -94,11 +99,30 @@ ARCHITECTURE tb OF tb_tech_eth_10g IS
   SIGNAL tb_end            : STD_LOGIC := '0';
   SIGNAL mm_clk            : STD_LOGIC := '0';  -- memory-mapped bus clock
   SIGNAL mm_rst            : STD_LOGIC;         -- reset synchronous with mm_clk
-  SIGNAL tr_ref_clk_644    : STD_LOGIC := '1';  -- 10base_r reference clock
+  
+  -- . 10base_r clocks
+  SIGNAL tr_ref_clk_644    : STD_LOGIC := '1';
   SIGNAL clk_312           : STD_LOGIC;
   SIGNAL clk_156           : STD_LOGIC;
   SIGNAL rst_156           : STD_LOGIC;
 
+  -- . XAUI clocks
+  SIGNAL tr_ref_clk_156    : STD_LOGIC := '1';
+  SIGNAL tx_rst_arr        : STD_LOGIC_VECTOR(0 DOWNTO 0);
+  SIGNAL rx_clk_arr_out    : STD_LOGIC_VECTOR(0 DOWNTO 0);
+  SIGNAL rx_rst_arr        : STD_LOGIC_VECTOR(0 DOWNTO 0);
+ 
+  -- . Test bench top level clocks 
+  SIGNAL tb_ref_clk_644    : STD_LOGIC;
+  SIGNAL tb_ref_clk_156    : STD_LOGIC;
+  SIGNAL tb_clk_312        : STD_LOGIC;
+  SIGNAL tb_clk_156        : STD_LOGIC;
+  SIGNAL tb_rst_156        : STD_LOGIC;
+  SIGNAL tb_tx_clk         : STD_LOGIC;
+  SIGNAL tb_tx_rst         : STD_LOGIC;
+  SIGNAL tb_rx_clk         : STD_LOGIC;
+  SIGNAL tb_rx_rst         : STD_LOGIC;
+      
   -- 10G MAC control interface
   SIGNAL mm_init           : STD_LOGIC := '1';
   SIGNAL mm_mosi           : t_mem_mosi;
@@ -123,12 +147,17 @@ ARCHITECTURE tb OF tb_tech_eth_10g IS
   SIGNAL rx_sosi_arr       : t_dp_sosi_arr(0 DOWNTO 0);
   SIGNAL rx_sosi_data      : STD_LOGIC_VECTOR(c_tech_mac_10g_data_w-1 DOWNTO 0);  -- 64 bit
 
-  -- 10G PHY serial interface
-  SIGNAL tx_serial_arr       : STD_LOGIC_VECTOR(0 DOWNTO 0);
-  SIGNAL rx_serial_arr       : STD_LOGIC_VECTOR(0 DOWNTO 0);
+  -- PHY serial IO
+  -- . 10GBASE-R (single lane)
+  SIGNAL serial_tx_arr     : STD_LOGIC_VECTOR(0 DOWNTO 0);
+  SIGNAL serial_rx_arr     : STD_LOGIC_VECTOR(0 DOWNTO 0);
   
+  -- . XAUI (four lanes)
+  SIGNAL xaui_tx_arr       : t_xaui_arr(0 DOWNTO 0);
+  SIGNAL xaui_rx_arr       : t_xaui_arr(0 DOWNTO 0);
+      
   -- Model a serial link fault
-  SIGNAL link_fault          : STD_LOGIC;
+  SIGNAL link_fault        : STD_LOGIC;
 
   -- Verification
   SIGNAL tx_pkt_cnt        : NATURAL := 0;
@@ -173,7 +202,7 @@ BEGIN
   PORT MAP (
     mm_init        => mm_init,
     total_header   => total_header,
-    clk_156        => clk_156,
+    clk_156        => tb_tx_clk,
     tx_siso        => tx_siso,
     tx_sosi        => tx_sosi,
     link_fault     => link_fault,
@@ -187,7 +216,8 @@ BEGIN
   rx_siso_arr(0) <= rx_siso;
   rx_sosi        <= rx_sosi_arr(0);
   
-  tr_ref_clk_644 <= NOT tr_ref_clk_644 AFTER g_tech_pll_clk_644_period/2;
+  tr_ref_clk_644 <= NOT tr_ref_clk_644 AFTER g_clk_644_period/2;
+  tr_ref_clk_156 <= NOT tr_ref_clk_156 AFTER g_clk_156_period/2;
 
   pll : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks
   GENERIC MAP (
@@ -200,7 +230,25 @@ BEGIN
     rst_156    => rst_156,
     rst_312    => OPEN
   );
+  
+  -- Connect the clocks from test bench top level (down such that they have their rising_edge() aligned without any delta-delay)
+  gen_tb_clocks_xaui : IF g_technology=c_tech_stratixiv GENERATE
+    tb_ref_clk_156 <= tr_ref_clk_156;
+    tb_tx_clk      <= tr_ref_clk_156;
+    tb_rx_clk      <= rx_clk_arr_out(0);
+    tb_tx_rst      <= tx_rst_arr(0);
+    tb_rx_rst      <= rx_rst_arr(0);
+  END GENERATE;
     
+  gen_tb_clocks_10gbase_r : IF g_technology=c_tech_arria10 GENERATE
+    tb_ref_clk_644 <= tr_ref_clk_644;
+    tb_clk_312     <= clk_312;
+    tb_clk_156     <= clk_156;
+    tb_rst_156     <= rst_156;
+    tb_tx_clk      <= clk_156;
+    tb_rx_clk      <= clk_156;
+  END GENERATE;
+  
   no_dut : IF c_st_loopback=TRUE GENERATE
     rx_sosi <= tx_sosi;
     tx_siso <= rx_siso;
@@ -218,7 +266,8 @@ BEGIN
     )
     PORT MAP (
       -- Transceiver PLL reference clock
-      tr_ref_clk_644   => tr_ref_clk_644,
+      tr_ref_clk_644   => tb_ref_clk_644,
+      tr_ref_clk_156   => tb_ref_clk_156,
       
       -- MM
       mm_clk           => mm_clk,
@@ -228,37 +277,57 @@ BEGIN
       mac_miso         => mm_miso,
       
       -- Clocks
-      clk_312          => clk_312,
-      clk_156          => clk_156,         -- 156.25 MHz local reference
-      rst_156          => rst_156,
+      -- . 10GBASE-R
+      clk_312          => tb_clk_312,
+      clk_156          => tb_clk_156,      -- 156.25 MHz local reference
+      rst_156          => tb_rst_156,
+    
+      -- . XAUI
+      tx_clk_arr(0)    => tb_tx_clk,       -- 156.25 MHz, externally connect tr_ref_clk_156 to tx_clk_arr or connect rx_clk_arr to tx_clk_arr
+      tx_rst_arr       => tx_rst_arr,
+      rx_clk_arr_out   => rx_clk_arr_out,
+      rx_clk_arr_in(0) => tb_rx_clk,       -- externally connect to rx_clk_arr_out to avoid clock delta-delay
+      rx_rst_arr       => rx_rst_arr,
       
       -- ST
-      tx_snk_in_arr    => tx_sosi_arr,     -- 64 bit data @ clk_156
+      tx_snk_in_arr    => tx_sosi_arr,     -- 64 bit data @ 156 tb_tx_clk
       tx_snk_out_arr   => tx_siso_arr,
       
-      rx_src_out_arr   => rx_sosi_arr,     -- 64 bit data @ clk_156
+      rx_src_out_arr   => rx_sosi_arr,     -- 64 bit data @ 156 tb_rx_clk
       rx_src_in_arr    => rx_siso_arr,
       
-      -- Serial
-      tx_serial_arr    => tx_serial_arr,
-      rx_serial_arr    => rx_serial_arr
+      -- PHY serial IO
+      -- . 10GBASE-R (single lane)
+      serial_tx_arr    => serial_tx_arr,
+      serial_rx_arr    => serial_rx_arr,
+      
+      -- . XAUI (four lanes)
+      xaui_tx_arr      => xaui_tx_arr,
+      xaui_rx_arr      => xaui_rx_arr
     );
   END GENERATE;
 
+  xaui_rx_arr <= xaui_tx_arr;
+  
   u_link_connect : ENTITY tech_mac_10g_lib.tb_tech_mac_10g_link_connect
   GENERIC MAP (
     g_loopback    => c_phy_loopback,  -- default TRUE for loopback tx to rx, else use FALSE to connect tx-tx, rx-rx between two tb devices
     g_link_delay  => phy_delay
   )
   PORT MAP (
-    -- Serial layer connect
     link_fault    => link_fault,      -- when '1' then forces rx_serial_arr(0)='0'
-    tx_serial_arr => tx_serial_arr,
-    rx_serial_arr => rx_serial_arr,   -- connects to delayed tx_serial_arr(0) when g_loopback=TRUE else to rx_serial_in
     
-    -- . external connect
-    tx_serial_out => tx_serial_out,   -- connects to delayed tx_serial_arr(0)
-    rx_serial_in  => rx_serial_in     -- used when g_loopback=FALSE
+    -- 10GBASE-R serial layer connect
+    serial_tx_arr => serial_tx_arr,
+    serial_rx_arr => serial_rx_arr,   -- connects to delayed tx_serial_arr(0) when g_loopback=TRUE else to rx_serial_in
+    serial_tx_out => serial_tx_out,   -- connects to delayed tx_serial_arr(0)
+    serial_rx_in  => serial_rx_in,    -- used when g_loopback=FALSE
+    
+    -- XAUI serial layer connect
+    xaui_tx_arr   => xaui_tx_arr,
+    xaui_rx_arr   => xaui_rx_arr,     -- connects to delayed xaui_tx_arr(0) when g_loopback=TRUE else to xaui_rx_in
+    xaui_tx_out   => xaui_tx_out,     -- connects to delayed xaui_tx_arr(0)
+    xaui_rx_in    => xaui_rx_in       -- used when g_loopback=FALSE
   );
   
   -- Packet receiver
@@ -269,7 +338,7 @@ BEGIN
   PORT MAP (
     mm_init        => mm_init,
     total_header   => total_header,
-    clk_156        => clk_156,
+    clk_156        => tb_rx_clk,
     rx_sosi        => rx_sosi,
     rx_siso        => rx_siso,
     rx_toggle      => rx_toggle
@@ -282,9 +351,9 @@ BEGIN
     g_pkt_length_arr => c_pkt_length_arr
   )
   PORT MAP (
-    tx_clk_156     => clk_156,
+    tx_clk_156     => tb_tx_clk,
     tx_sosi        => tx_sosi,
-    rx_clk_156     => clk_156,
+    rx_clk_156     => tb_rx_clk,
     rx_sosi        => rx_sosi
   );  
 
@@ -293,9 +362,9 @@ BEGIN
     g_nof_pkt     => c_nof_pkt
   )
   PORT MAP (
-    tx_clk_156     => clk_156,
+    tx_clk_156     => tb_tx_clk,
     tx_sosi        => tx_sosi,
-    rx_clk_156     => clk_156,
+    rx_clk_156     => tb_rx_clk,
     rx_sosi        => rx_sosi,
     tx_pkt_cnt     => tx_pkt_cnt,
     rx_pkt_cnt     => rx_pkt_cnt,
@@ -305,8 +374,8 @@ BEGIN
   p_tb_end : PROCESS  
   BEGIN
     WAIT UNTIL rx_end='1';
-    proc_common_wait_some_cycles(clk_156, 100);
-    --proc_common_wait_some_cycles(clk_156, 10000);  -- uncomment to simulate somewhat longer without tx packet data
+    proc_common_wait_some_cycles(tb_tx_clk, 100);
+    --proc_common_wait_some_cycles(tb_tx_clk, 10000);  -- uncomment to simulate somewhat longer without tx packet data
     
     -- Stop the simulation
     tb_end <= '1';
diff --git a/libraries/technology/eth_10g/tb_tech_eth_10g_ppm.vhd b/libraries/technology/eth_10g/tb_tech_eth_10g_ppm.vhd
index c4f8f1e772c1d1557bfae113d3ce9fe7d0c046bf..7ec75eab8874761711e29f185ad3915711a77653 100644
--- a/libraries/technology/eth_10g/tb_tech_eth_10g_ppm.vhd
+++ b/libraries/technology/eth_10g/tb_tech_eth_10g_ppm.vhd
@@ -27,55 +27,74 @@
 --   and both tb_tech_eth_10g instances send the same and expect the same.
 -- Remarks:
 --   . For c_tech_arria10 the test fails when g_nof_10ppm /= 0 (erko, 21 nov 2014)
+--   . For c_tech_stratixiv the test fails when g_nof_10ppm /= 0 (erko, 5 dec 2014)
 -- Usage:
 --   > as 16
 --   > run -all
 
-LIBRARY IEEE, technology_lib, tech_pll_lib, tech_mac_10g_lib;
+LIBRARY IEEE, technology_lib, tech_pll_lib, tech_mac_10g_lib, common_lib;
 USE IEEE.std_logic_1164.ALL;
 USE technology_lib.technology_pkg.ALL;
 USE technology_lib.technology_select_pkg.ALL;
 USE tech_pll_lib.tech_pll_component_pkg.ALL;
+USE common_lib.common_interface_layers_pkg.ALL;
 
 ENTITY tb_tech_eth_10g_ppm IS
   -- Test bench control parameters
   GENERIC (
     g_technology : NATURAL := c_tech_select_default;
-    g_nof_10ppm  : INTEGER := 0    -- use /= 0 to verify XO ppm offset between two devices
+    g_nof_10ppm  : INTEGER := 1    -- use /= 0 to verify XO ppm offset between two devices
   );
 END tb_tech_eth_10g_ppm;
 
 ARCHITECTURE tb OF tb_tech_eth_10g_ppm IS
 
-  SIGNAL tx_serial_0 : STD_LOGIC;
-  SIGNAL tx_serial_1 : STD_LOGIC;
+  -- PHY 10gbase_r
+  SIGNAL serial_tx_0 : STD_LOGIC;  -- 1 lane
+  SIGNAL serial_tx_1 : STD_LOGIC;
 
+  -- PHY XAUI
+  SIGNAL xaui_tx_0   : STD_LOGIC_VECTOR(c_nof_xaui_lanes-1 DOWNTO 0);   -- 4 lanes
+  SIGNAL xaui_tx_1   : STD_LOGIC_VECTOR(c_nof_xaui_lanes-1 DOWNTO 0);
+  
 BEGIN
 
   u_tb_tech_eth_10g_0 : ENTITY work.tb_tech_eth_10g
   GENERIC MAP (
     g_technology              => g_technology,
-    g_tech_pll_clk_644_period => tech_pll_clk_644_period,
+    g_clk_644_period          => tech_pll_clk_644_period,
+    g_clk_156_period          => 6.4 ns,
     g_verify_link_recovery    => FALSE,
     g_link_status_check       => "11",
-    g_use_rx_serial_in        => TRUE
+    g_use_serial_rx_in        => TRUE
   )
   PORT MAP (
-    tx_serial_out => tx_serial_0,
-    rx_serial_in  => tx_serial_1
+    -- PHY 10gbase_r
+    serial_tx_out => serial_tx_0,
+    serial_rx_in  => serial_tx_1,
+    
+    -- PHY XAUI
+    xaui_tx_out   => xaui_tx_0,
+    xaui_rx_in    => xaui_tx_1
   );
 
   u_tb_tech_eth_10g_1 : ENTITY work.tb_tech_eth_10g
   GENERIC MAP (
     g_technology              => g_technology,
-    g_tech_pll_clk_644_period => tech_pll_clk_644_period + tech_pll_clk_644_10ppm * g_nof_10ppm,
+    g_clk_644_period          => tech_pll_clk_644_period + tech_pll_clk_644_10ppm * g_nof_10ppm,
+    g_clk_156_period          => 6.4 ns + 64 fs * g_nof_10ppm,
     g_verify_link_recovery    => FALSE,
     g_link_status_check       => "11",
-    g_use_rx_serial_in        => TRUE
+    g_use_serial_rx_in        => TRUE
   )
   PORT MAP (
-    tx_serial_out => tx_serial_1,
-    rx_serial_in  => tx_serial_0
+    -- PHY 10gbase_r
+    serial_tx_out => serial_tx_1,
+    serial_rx_in  => serial_tx_0,
+    
+    -- PHY XAUI
+    xaui_tx_out   => xaui_tx_1,
+    xaui_rx_in    => xaui_tx_0
   );
   
 END tb;
diff --git a/libraries/technology/eth_10g/tech_eth_10g.vhd b/libraries/technology/eth_10g/tech_eth_10g.vhd
index a1c8a87b8c1ba69a4d20f3b2e037061c3e657761..f2037baea1eba75d1b831865ccf0a6688dc2a91b 100644
--- a/libraries/technology/eth_10g/tech_eth_10g.vhd
+++ b/libraries/technology/eth_10g/tech_eth_10g.vhd
@@ -28,8 +28,8 @@
 -- . For c_tech_arria10:
 --                __________________
 --                |                |
---     tx_snk --->|tech_           |---> tx_serial
---     rx_src <---|eth_10g_arria10 |<--- rx_serial
+--     tx_snk --->|tech_           |---> serial_tx
+--     rx_src <---|eth_10g_arria10 |<--- serial_rx
 --                |________________|
 --                    |
 --                    |
@@ -57,42 +57,99 @@ ENTITY tech_eth_10g IS
   PORT (
     -- Transceiver PLL reference clock
     tr_ref_clk_644   : IN  STD_LOGIC := '0';   -- 644.531250 MHz for 10GBASE-R
+    tr_ref_clk_156   : IN  STD_LOGIC := '0';   -- 156.25     MHz for XAUI
+    
+    -- Calibration & reconfig clock
+    cal_rec_clk      : IN  STD_LOGIC := '0';   -- for XAUI;
+    
+    -- Data clocks and reset
+    -- . 10GBASE-R
+    clk_312          : IN  STD_LOGIC := '0';
+    clk_156          : IN  STD_LOGIC := '0';
+    rst_156          : IN  STD_LOGIC := '0';
+    
+    -- . XAUI
+    tx_clk_arr       : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0) := (OTHERS=>'0');  -- 156.25 MHz, externally connect tr_ref_clk_156 to tx_clk_arr or connect rx_clk_arr to tx_clk_arr
+    tx_rst_arr       : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    rx_clk_arr_out   : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    rx_clk_arr_in    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0) := (OTHERS=>'0');  -- externally connect to rx_clk_arr_out to avoid clock delta-delay
+    rx_rst_arr       : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
     
     -- MM
     mm_clk           : IN  STD_LOGIC;
     mm_rst           : IN  STD_LOGIC;
     
-    mac_mosi         : IN  t_mem_mosi;     -- MAG_10G (CSR), aggregated for all g_nof_channels
+    mac_mosi         : IN  t_mem_mosi;                    -- MAG_10G (CSR), aggregated for all g_nof_channels
     mac_miso         : OUT t_mem_miso; 
     
-    -- Clocks
-    clk_312          : IN  STD_LOGIC := '0';
-    clk_156          : IN  STD_LOGIC := '0';
-    rst_156          : IN  STD_LOGIC := '0';
+    xaui_mosi        : IN  t_mem_mosi := c_mem_mosi_rst;  -- XAUI control
+    xaui_miso        : OUT t_mem_miso;
     
     -- ST
-    tx_snk_in_arr    : IN  t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ clk_156
+    tx_snk_in_arr    : IN  t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ 156 MHz
     tx_snk_out_arr   : OUT t_dp_siso_arr(g_nof_channels-1 DOWNTO 0); 
     
-    rx_src_out_arr   : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ clk_156
+    rx_src_out_arr   : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ 156 MHz
     rx_src_in_arr    : IN  t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
     
-    -- Serial
-    tx_serial_arr    : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
-    rx_serial_arr    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0) := (OTHERS=>'0')
+    -- PHY serial IO
+    -- . 10GBASE-R (single lane)
+    serial_tx_arr    : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    serial_rx_arr    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0) := (OTHERS=>'0');
+      
+    -- . XAUI (four lanes)
+    xaui_tx_arr      : OUT t_xaui_arr(g_nof_channels-1 DOWNTO 0);
+    xaui_rx_arr      : IN  t_xaui_arr(g_nof_channels-1 DOWNTO 0) := (OTHERS=>(OTHERS=>'0'))
   );
 END tech_eth_10g;
 
 
 ARCHITECTURE str OF tech_eth_10g IS
-
-  -- MAG_10G control status registers
-  SIGNAL mac_mosi_arr       : t_mem_mosi_arr(g_nof_channels-1 DOWNTO 0);
-  SIGNAL mac_miso_arr       : t_mem_miso_arr(g_nof_channels-1 DOWNTO 0); 
-
 BEGIN
                    
   gen_ip_stratixiv : IF g_technology=c_tech_stratixiv GENERATE
+    u0 : ENTITY work.tech_eth_10g_stratixiv
+    GENERIC MAP (
+      g_sim                 => g_sim,
+      g_nof_channels        => g_nof_channels,
+      g_link_status_check   => g_link_status_check,
+      g_pre_header_padding  => g_pre_header_padding
+    )
+    PORT MAP (
+      -- Transceiver PLL reference clock
+      tr_ref_clk_156   => tr_ref_clk_156,
+      
+      -- Calibration & reconfig clock
+      cal_rec_clk      => cal_rec_clk,
+      
+      -- Data clocks
+      tx_clk_arr       => tx_clk_arr,
+      tx_rst_arr       => tx_rst_arr,
+      rx_clk_arr_out   => rx_clk_arr_out,
+      rx_clk_arr_in    => rx_clk_arr_in,
+      rx_rst_arr       => rx_rst_arr,
+      
+      -- MM
+      mm_clk           => mm_clk,
+      mm_rst           => mm_rst,
+      
+      mac_mosi         => mac_mosi,
+      mac_miso         => mac_miso,
+      
+      xaui_mosi        => xaui_mosi,
+      xaui_miso        => xaui_miso,
+      
+      -- ST
+      tx_snk_in_arr    => tx_snk_in_arr,       -- 64 bit data @ clk_156
+      tx_snk_out_arr   => tx_snk_out_arr, 
+      
+      rx_src_out_arr   => rx_src_out_arr,      -- 64 bit data @ clk_156
+      rx_src_in_arr    => rx_src_in_arr,
+      
+      -- Serial IO
+      xaui_tx_arr      => xaui_tx_arr,
+      xaui_rx_arr      => xaui_rx_arr
+    );
   END GENERATE;
   
   gen_ip_arria10 : IF g_technology=c_tech_arria10 GENERATE
@@ -107,17 +164,17 @@ BEGIN
       -- Transceiver PLL reference clock
       tr_ref_clk_644   => tr_ref_clk_644,
       
+      -- Data clocks
+      clk_312          => clk_312,
+      clk_156          => clk_156,
+      rst_156          => rst_156,
+      
       -- MM
       mm_clk           => mm_clk,
       mm_rst           => mm_rst,
       
-      mac_mosi_arr     => mac_mosi_arr,
-      mac_miso_arr     => mac_miso_arr,
-      
-      -- Clocks
-      clk_312          => clk_312,
-      clk_156          => clk_156,
-      rst_156          => rst_156,
+      mac_mosi         => mac_mosi,
+      mac_miso         => mac_miso,
       
       -- ST
       tx_snk_in_arr    => tx_snk_in_arr,       -- 64 bit data @ clk_156
@@ -127,24 +184,9 @@ BEGIN
       rx_src_in_arr    => rx_src_in_arr,
       
       -- Serial
-      tx_serial_arr    => tx_serial_arr,
-      rx_serial_arr    => rx_serial_arr
+      serial_tx_arr    => serial_tx_arr,
+      serial_rx_arr    => serial_rx_arr
     );
   END GENERATE;
   
-  -----------------------------------------------------------------------------
-  -- MM bus mux
-  -----------------------------------------------------------------------------
-  u_common_mem_mux : ENTITY common_lib.common_mem_mux
-  GENERIC MAP (    
-    g_nof_mosi    => g_nof_channels,
-    g_mult_addr_w => func_tech_mac_10g_csr_addr_w(g_technology) 
-  )
-  PORT MAP (
-    mosi     => mac_mosi,
-    miso     => mac_miso,
-    mosi_arr => mac_mosi_arr,
-    miso_arr => mac_miso_arr
-  );  
-
 END str;
diff --git a/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd b/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
index 7a2601ad45c1485d3e5b2b332f8ccdff3f297452..77e0365058ec4dccda0f4ff3098cc5072790e785 100644
--- a/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
+++ b/libraries/technology/eth_10g/tech_eth_10g_arria10.vhd
@@ -22,17 +22,42 @@
 
 
 -- Purpose: Combine mac_10g and 10gbase_r for c_tech_arria10
--- Description:
---                         XGMII
---              _________       ____________
---              |       |       |          |
---   tx_snk --->|tech_  |-------|tech_     |---> tx_serial
---   rx_src <---|mac_10g|       |10gbase_r |<--- rx_serial
---              |_______|       |__________|
---                  |
---                  |
---                mac_mm
+-- Description 
+--   
+--   The clocks come from an external central fPLL:
 --
+--     tx_ref_clk_644 --> fPLL --> clk_312
+--                                 clk_156, rst_156
+--   Blockdiagram:
+--
+--                          312 156 644  
+--                _________   |  |  |   ____________
+--                |       |   |  |  |   |          |
+--                |       |<--/  |  \-->|          |
+--                |       |<-----+----->|          |
+--                |       |             |          |
+--                |       |    XGMII    |          |
+--     tx_snk --->|tech_  |------------>|tech_     |---> serial_tx
+--     rx_src <---|mac_10g|<------------|10gbase_r |<--- serial_rx
+--                |       |             |          |
+--                |_______|--\       /--|__________|
+--                    |      |       |
+--                  mac_mm   |       |
+--                           |       v
+--                       (   v    xgmii_tx_ready)
+--     tx_snk_out.xon <--(xgmii_link_status[1:0])
+--
+--  When the xgmii_tx_ready from the 10gbase_r and the xgmii_link_status from
+--  the mac_10g are both be OK then the tx_snk.xon is asserted to allow the
+--  user data transmission.
+--  The tb_tech_eth_10g reveals that xgmii_tx_ready goes high after some power
+--  up time and then remains active independent of link_fault. A link fault
+--  eg. due to rx disconnect is detected by xgmii_link_status:
+--    0 = OK
+--    1 = local fault
+--    2 = remote fault
+--  Hence when the xgmii_link_status is OK then the other side is also OK so
+--  then it is also appropriate to release tx_snk.xon.
 
 LIBRARY IEEE, common_lib, dp_lib, technology_lib, tech_10gbase_r_lib, tech_mac_10g_lib;
 USE IEEE.STD_LOGIC_1164.ALL;
@@ -54,17 +79,17 @@ ENTITY tech_eth_10g_arria10 IS
     -- Transceiver PLL reference clock
     tr_ref_clk_644   : IN  STD_LOGIC := '0';   -- 644.531250 MHz for 10GBASE-R
     
+    -- Data clocks
+    clk_312          : IN  STD_LOGIC := '0';
+    clk_156          : IN  STD_LOGIC := '0';
+    rst_156          : IN  STD_LOGIC := '0';
+    
     -- MM
     mm_clk           : IN  STD_LOGIC;
     mm_rst           : IN  STD_LOGIC;
     
-    mac_mosi_arr     : IN  t_mem_mosi_arr(g_nof_channels-1 DOWNTO 0);     -- MAG_10G (CSR)
-    mac_miso_arr     : OUT t_mem_miso_arr(g_nof_channels-1 DOWNTO 0); 
-    
-    -- Clocks
-    clk_312          : IN  STD_LOGIC := '0';
-    clk_156          : IN  STD_LOGIC := '0';
-    rst_156          : IN  STD_LOGIC := '0';
+    mac_mosi         : IN  t_mem_mosi;         -- MAG_10G (CSR)
+    mac_miso         : OUT t_mem_miso; 
     
     -- ST
     tx_snk_in_arr    : IN  t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ clk_156
@@ -74,14 +99,18 @@ ENTITY tech_eth_10g_arria10 IS
     rx_src_in_arr    : IN  t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
     
     -- Serial
-    tx_serial_arr    : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
-    rx_serial_arr    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0) := (OTHERS=>'0')
+    serial_tx_arr    : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    serial_rx_arr    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0)
   );
 END tech_eth_10g_arria10;
 
 
 ARCHITECTURE str OF tech_eth_10g_arria10 IS
 
+  -- MAG_10G control status registers
+  SIGNAL mac_mosi_arr          : t_mem_mosi_arr(g_nof_channels-1 DOWNTO 0);
+  SIGNAL mac_miso_arr          : t_mem_miso_arr(g_nof_channels-1 DOWNTO 0); 
+
   -- XON control
   SIGNAL mac_snk_out_arr       : t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
   
@@ -139,7 +168,7 @@ BEGIN
       xgmii_tx_data     => xgmii_tx_dc_arr(I),
       xgmii_rx_data     => xgmii_rx_dc_arr(I)
     );
-  END GENERATE;
+  END GENERATE;  
   
   u_tech_10gbase_r: ENTITY tech_10gbase_r_lib.tech_10gbase_r
   GENERIC MAP (
@@ -157,12 +186,28 @@ BEGIN
 
     -- XGMII interface
     xgmii_tx_ready_arr => xgmii_tx_ready_arr,
+    xgmii_rx_ready_arr => OPEN,
     xgmii_tx_dc_arr    => xgmii_tx_dc_arr,
     xgmii_rx_dc_arr    => xgmii_rx_dc_arr,
 
     -- PHY serial IO
-    tx_serial_arr      => tx_serial_arr,
-    rx_serial_arr      => rx_serial_arr
+    tx_serial_arr      => serial_tx_arr,
+    rx_serial_arr      => serial_rx_arr
   );
     
+  -----------------------------------------------------------------------------
+  -- MM bus mux
+  -----------------------------------------------------------------------------
+  u_common_mem_mux : ENTITY common_lib.common_mem_mux
+  GENERIC MAP (    
+    g_nof_mosi    => g_nof_channels,
+    g_mult_addr_w => func_tech_mac_10g_csr_addr_w(c_tech_arria10) 
+  )
+  PORT MAP (
+    mosi     => mac_mosi,
+    miso     => mac_miso,
+    mosi_arr => mac_mosi_arr,
+    miso_arr => mac_miso_arr
+  );  
+
 END str;
diff --git a/libraries/technology/eth_10g/tech_eth_10g_stratixiv.vhd b/libraries/technology/eth_10g/tech_eth_10g_stratixiv.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..318e33204f6e6061d5b56b90ddad03e6b5632fd8
--- /dev/null
+++ b/libraries/technology/eth_10g/tech_eth_10g_stratixiv.vhd
@@ -0,0 +1,237 @@
+--------------------------------------------------------------------------------
+--
+-- Copyright (C) 2014
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+--------------------------------------------------------------------------------
+
+
+-- Purpose: Combine mac_10g and xaui for c_tech_stratixiv
+-- Description:
+--   The clocks come from an external central fPLL:
+--
+--   Blockdiagram:
+--
+--                                  ref
+--                              156 156  
+--                _________      |  |   ____________
+--                |       |      |  |   |          |
+--                |       |      |  \-->|          |
+--                |       |<-----+----->|          |
+--                |       |             |          |
+--                |       |    XGMII    |          |
+--     tx_snk --->|tech_  |------------>|tech_     |---> xaui_tx[3:0]
+--     rx_src <---|mac_10g|<------------|xaui      |<--- xaui_rx[3:0]
+--                |       |             |          |
+--                |_______|--\       /--|__________|
+--                    |      |       |
+--                  mac_mm   |       |
+--                           |       v
+--                       (   v    xgmii_tx_ready)
+--     tx_snk_out.xon <--(xgmii_link_status[1:0])
+--
+
+LIBRARY IEEE, common_lib, dp_lib, technology_lib, tech_xaui_lib, tech_mac_10g_lib;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE technology_lib.technology_pkg.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.common_interface_layers_pkg.ALL;
+USE dp_lib.dp_stream_pkg.ALL;
+USE tech_mac_10g_lib.tech_mac_10g_component_pkg.ALL;
+
+ENTITY tech_eth_10g_stratixiv IS
+  GENERIC (
+    g_sim                 : BOOLEAN := FALSE;
+    g_nof_channels        : NATURAL := 1;
+    g_link_status_check   : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11";
+    g_pre_header_padding  : BOOLEAN := FALSE
+  );
+  PORT (
+    -- Transceiver PLL reference clock
+    tr_ref_clk_156   : IN  STD_LOGIC;   -- 156.25 MHz for XAUI
+    
+    -- Calibration & reconfig clock
+    cal_rec_clk      : IN  STD_LOGIC;
+    
+    -- Data clocks
+    tx_clk_arr       : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);  -- 156.25 MHz, externally connect tr_ref_clk_156 to tx_clk_arr or connect rx_clk_arr to tx_clk_arr
+    tx_rst_arr       : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    rx_clk_arr_out   : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    rx_clk_arr_in    : IN  STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);  -- externally connect to rx_clk_arr_out to avoid clock delta-delay
+    rx_rst_arr       : OUT STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+    
+    -- MM
+    mm_clk           : IN  STD_LOGIC;
+    mm_rst           : IN  STD_LOGIC;
+    
+    mac_mosi         : IN  t_mem_mosi;                      -- MAG_10G (CSR)
+    mac_miso         : OUT t_mem_miso; 
+    
+    xaui_mosi        : IN  t_mem_mosi := c_mem_mosi_rst;    -- XAUI control
+    xaui_miso        : OUT t_mem_miso;
+    
+    -- ST
+    tx_snk_in_arr    : IN  t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ 156 MHz tx_clk_arr
+    tx_snk_out_arr   : OUT t_dp_siso_arr(g_nof_channels-1 DOWNTO 0); 
+    
+    rx_src_out_arr   : OUT t_dp_sosi_arr(g_nof_channels-1 DOWNTO 0);      -- 64 bit data @ 156 MHz rx_clk_arr_in
+    rx_src_in_arr    : IN  t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
+    
+    -- XAUI serial IO
+    xaui_tx_arr      : OUT t_xaui_arr(g_nof_channels-1 DOWNTO 0);
+    xaui_rx_arr      : IN  t_xaui_arr(g_nof_channels-1 DOWNTO 0)
+  );
+END tech_eth_10g_stratixiv;
+
+
+ARCHITECTURE str OF tech_eth_10g_stratixiv IS
+
+  -- MAG_10G control status registers
+  SIGNAL mac_mosi_arr              : t_mem_mosi_arr(g_nof_channels-1 DOWNTO 0);
+  SIGNAL mac_miso_arr              : t_mem_miso_arr(g_nof_channels-1 DOWNTO 0); 
+
+  -- ST
+  SIGNAL i_tx_rst_arr              : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+  SIGNAL i_rx_rst_arr              : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);
+  
+  SIGNAL txc_tx_ready_arr          : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);  -- tx_ready in tx_clk_arr domain, can be used for xon flow control
+  SIGNAL rxc_rx_ready_arr          : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);  -- rx_ready in rx_clk_arr domain, typically leave not connected
+
+  SIGNAL txc_rx_channelaligned_arr : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);  -- rx_channelaligned in tx_clk_arr domain, from PHY XAUI, indicates
+                                                                                   -- that all 4 RX channels are aligned when asserted
+
+  -- XON control
+  SIGNAL mac_snk_out_arr           : t_dp_siso_arr(g_nof_channels-1 DOWNTO 0);
+  
+  -- XGMII
+  SIGNAL xgmii_link_status_arr     : t_tech_mac_10g_xgmii_status_arr(g_nof_channels-1 DOWNTO 0);  -- 2 bit, from MAC_10g
+  SIGNAL xgmii_tx_ready_arr        : STD_LOGIC_VECTOR(g_nof_channels-1 DOWNTO 0);                 -- 1 bit, from PHY XAUI
+  SIGNAL xgmii_tx_dc_arr           : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);    -- 72 bit
+  SIGNAL xgmii_rx_dc_arr           : t_xgmii_dc_arr(g_nof_channels-1 DOWNTO 0);    -- 72 bit
+
+BEGIN
+
+  -- Clocks and reset
+  tx_rst_arr <= i_tx_rst_arr;
+  rx_rst_arr <= i_rx_rst_arr;
+  
+  i_tx_rst_arr <= NOT txc_tx_ready_arr;
+  i_rx_rst_arr <= NOT rxc_rx_ready_arr;
+  
+  xgmii_tx_ready_arr <= txc_tx_ready_arr;
+
+  gen_mac : FOR I IN 0 TO g_nof_channels-1 GENERATE
+  
+    tx_snk_out_arr(I).ready <= mac_snk_out_arr(I).ready;  -- pass on MAC cycle accurate backpressure
+    
+    p_xon_flow_control : PROCESS(tx_clk_arr)
+      VARIABLE v_xgmii_link_status : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0);
+    BEGIN
+      IF rising_edge(tx_clk_arr(I)) THEN
+        tx_snk_out_arr(I).xon <= '0';
+        v_xgmii_link_status := xgmii_link_status_arr(I) AND g_link_status_check;  -- use mask to check Tx, Rx, both or none. 
+        IF xgmii_tx_ready_arr(I)='1' AND v_xgmii_link_status="00" THEN
+          tx_snk_out_arr(I).xon <= '1';  -- XON when Tx PHY is ready and XGMII is ok
+        END IF;
+      END IF;
+    END PROCESS;
+    
+    u_tech_mac_10g : ENTITY tech_mac_10g_lib.tech_mac_10g
+    GENERIC MAP (
+      g_technology          => c_tech_stratixiv,
+      g_pre_header_padding  => g_pre_header_padding
+    )
+    PORT MAP (
+      -- MM
+      mm_clk            => mm_clk,
+      mm_rst            => mm_rst,
+      csr_mosi          => mac_mosi_arr(I),
+      csr_miso          => mac_miso_arr(I),
+  
+      -- ST
+      tx_clk_156        => tx_clk_arr(I),
+      tx_rst            => i_tx_rst_arr(I),
+      tx_snk_in         => tx_snk_in_arr(I),   -- 64 bit data
+      tx_snk_out        => mac_snk_out_arr(I),
+      
+      rx_clk_156        => rx_clk_arr_in(I),
+      rx_rst            => i_rx_rst_arr(I),
+      rx_src_out        => rx_src_out_arr(I),  -- 64 bit data
+      rx_src_in         => rx_src_in_arr(I),
+            
+      -- XGMII
+      xgmii_link_status => xgmii_link_status_arr(I),
+      xgmii_tx_data     => xgmii_tx_dc_arr(I),
+      xgmii_rx_data     => xgmii_rx_dc_arr(I)
+    );
+  END GENERATE;
+    
+  u_tech_xaui: ENTITY tech_xaui_lib.tech_xaui
+  GENERIC MAP (
+    g_technology      => c_tech_stratixiv,
+    g_nof_xaui        => g_nof_channels  -- Up to 3 (hard XAUI only) supported
+  )
+  PORT MAP (
+    -- Transceiver PLL reference clock   
+    tr_clk                    => tr_ref_clk_156,
+
+    -- Calibration & reconfig clock
+    cal_rec_clk               => cal_rec_clk,
+
+    -- MM interface 
+    mm_clk                    => mm_clk,
+    mm_rst                    => mm_rst,
+
+    xaui_mosi                 => xaui_mosi,
+    xaui_miso                 => xaui_miso,
+    
+    -- XGMII interface
+    tx_clk_arr                => tx_clk_arr,
+    rx_clk_arr_out            => rx_clk_arr_out,
+    rx_clk_arr_in             => rx_clk_arr_in,
+    
+    txc_tx_ready_arr          => txc_tx_ready_arr,  -- tx_ready in tx_clk_arr domain, can be used for xon flow control
+    rxc_rx_ready_arr          => rxc_rx_ready_arr,  -- rx_ready in rx_clk_arr domain, typically leave not connected
+
+    txc_rx_channelaligned_arr => txc_rx_channelaligned_arr,  -- rx_channelaligned in tx_clk_arr domain, indicates that all 4 RX channels are aligned when asserted
+
+    xgmii_tx_dc_arr           => xgmii_tx_dc_arr,
+    xgmii_rx_dc_arr           => xgmii_rx_dc_arr,
+
+    -- XAUI serial IO
+    xaui_tx_arr               => xaui_tx_arr,
+    xaui_rx_arr               => xaui_rx_arr
+  );
+      
+  -----------------------------------------------------------------------------
+  -- MM bus mux
+  -----------------------------------------------------------------------------
+  u_common_mem_mux : ENTITY common_lib.common_mem_mux
+  GENERIC MAP (    
+    g_nof_mosi    => g_nof_channels,
+    g_mult_addr_w => func_tech_mac_10g_csr_addr_w(c_tech_stratixiv) 
+  )
+  PORT MAP (
+    mosi     => mac_mosi,
+    miso     => mac_miso,
+    mosi_arr => mac_mosi_arr,
+    miso_arr => mac_miso_arr
+  );  
+
+END str;