diff --git a/applications/aartfaac/designs/aartfaac_bn_sdo/hdllib.cfg b/applications/aartfaac/designs/aartfaac_bn_sdo/hdllib.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..41530f0da94e8192984706ac770704245c34b9eb
--- /dev/null
+++ b/applications/aartfaac/designs/aartfaac_bn_sdo/hdllib.cfg
@@ -0,0 +1,42 @@
+hdl_lib_name = aartfaac_bn_sdo
+hdl_library_clause_name = aartfaac_bn_sdo_lib
+hdl_lib_uses_synth = unb1_board rsp_terminal ss
+hdl_lib_uses_sim = 
+
+hdl_lib_technology = ip_stratixiv
+
+synth_top_level_entity =
+
+quartus_copy_files =
+#    quartus/sopc_aartfaac_bn_sdo.sopc .
+    src/quartus/sopc_aartfaac_bn_sdo.sopc .
+#    src/hex/ hex
+#    $UNB/Firmware/dsp/filter/build/data/ mif
+
+modelsim_copy_files = 
+#    src/hex hex
+#    $UNB/Firmware/dsp/filter/build/data/ mif
+
+synth_files =
+    $HDL_BUILD_DIR/unb1/quartus/aartfaac_bn_sdo/sopc_aartfaac_bn_sdo.vhd
+    src/vhdl/mmm_aartfaac_bn_sdo.vhd
+    src/vhdl/aartfaac_bn_sdo_udp_sdo.vhd
+    src/vhdl/aartfaac_bn_sdo.vhd
+    
+test_bench_files = 
+#    tb/vhdl/tb_aartfaac_bn_sdo.vhd
+    $SVN/Aartfaac/trunk/Firmware/designs/aartfaac_bn_sdo/tb/vhdl/tb_aartfaac_bn_sdo.vhd
+
+quartus_qsf_files =
+#    $RADIOHDL/boards/uniboard1/libraries/unb1_board/quartus/unb1_board.qsf
+    
+quartus_tcl_files =
+#    quartus/aartfaac_bn_sdo_pins.tcl
+    
+quartus_vhdl_files = 
+
+quartus_qip_files =
+#    $HDL_BUILD_DIR/unb1/quartus/aartfaac_bn_sdo/qsys_aartfaac_bn_sdo/synthesis/qsys_aartfaac_bn_sdo.qip
+
+quartus_sdc_files =
+#    $RADIOHDL/boards/uniboard1/libraries/unb1_board/quartus/unb1_board.sdc    
diff --git a/applications/aartfaac/designs/aartfaac_bn_sdo/src/quartus/sopc_aartfaac_bn_sdo.sopc b/applications/aartfaac/designs/aartfaac_bn_sdo/src/quartus/sopc_aartfaac_bn_sdo.sopc
index d8abf9468135b33895e55f79aff995424e42380b..27a723751ac300a30d3f21692460b858bd5c5376 100644
--- a/applications/aartfaac/designs/aartfaac_bn_sdo/src/quartus/sopc_aartfaac_bn_sdo.sopc
+++ b/applications/aartfaac/designs/aartfaac_bn_sdo/src/quartus/sopc_aartfaac_bn_sdo.sopc
@@ -100,63 +100,71 @@
          type = "String";
       }
    }
-   element reg_diag_data_buffer.mem
+   element reg_stable_monitor.mem
    {
       datum baseAddress
       {
-         value = "128";
+         value = "12304";
          type = "long";
       }
    }
-   element ram_ss_reorder_out.mem
+   element reg_dp_offload_tx.mem
    {
       datum baseAddress
       {
-         value = "20480";
+         value = "12320";
          type = "long";
       }
    }
-   element reg_bsn_monitor_subband.mem
+   element reg_bsn_monitor_beamlet.mem
    {
       datum baseAddress
       {
-         value = "24576";
+         value = "1024";
          type = "long";
       }
    }
-   element reg_dp_offload_tx.mem
+   element ram_ss_reorder_out.mem
    {
       datum baseAddress
       {
-         value = "12320";
+         value = "20480";
          type = "long";
       }
    }
-   element reg_tr_nonbonded.mem
+   element ram_diag_data_buffer.mem
    {
       datum baseAddress
       {
-         value = "768";
+         value = "65536";
          type = "long";
       }
    }
-   element ram_ss_reorder_in.mem
+   element reg_bsn_monitor.mem
    {
       datum baseAddress
       {
-         value = "26624";
+         value = "25600";
          type = "long";
       }
    }
-   element reg_bsn_monitor_crosslet.mem
+   element ram_ss_ss_wide.mem
    {
       datum baseAddress
       {
-         value = "13312";
+         value = "262144";
          type = "long";
       }
    }
-   element rom_system_info.mem
+   element pio_pps.mem
+   {
+      datum baseAddress
+      {
+         value = "2048";
+         type = "long";
+      }
+   }
+   element reg_wdi.mem
    {
       datum _lockedAddress
       {
@@ -165,19 +173,19 @@
       }
       datum baseAddress
       {
-         value = "4096";
+         value = "12288";
          type = "long";
       }
    }
-   element reg_bsn_monitor.mem
+   element reg_tr_nonbonded.mem
    {
       datum baseAddress
       {
-         value = "25600";
+         value = "768";
          type = "long";
       }
    }
-   element reg_wdi.mem
+   element pio_system_info.mem
    {
       datum _lockedAddress
       {
@@ -186,84 +194,76 @@
       }
       datum baseAddress
       {
-         value = "12288";
+         value = "0";
          type = "long";
       }
    }
-   element ram_diag_data_buffer.mem
+   element reg_diag_data_buffer.mem
    {
       datum baseAddress
       {
-         value = "65536";
+         value = "128";
          type = "long";
       }
    }
-   element reg_diagnostics.mem
+   element reg_bsn_monitor_subband.mem
    {
       datum baseAddress
       {
-         value = "256";
+         value = "24576";
          type = "long";
       }
    }
-   element ram_ss_ss_wide.mem
+   element reg_diagnostics.mem
    {
       datum baseAddress
       {
-         value = "262144";
+         value = "256";
          type = "long";
       }
    }
-   element pio_system_info.mem
+   element reg_bsn_monitor_crosslet.mem
    {
-      datum _lockedAddress
-      {
-         value = "1";
-         type = "boolean";
-      }
       datum baseAddress
       {
-         value = "0";
+         value = "13312";
          type = "long";
       }
    }
-   element reg_unb_sens.mem
+   element ram_ss_reorder_in.mem
    {
       datum baseAddress
       {
-         value = "928";
+         value = "26624";
          type = "long";
       }
    }
-   element reg_dp_offload_tx_hdr_dat.mem
+   element rom_system_info.mem
    {
-      datum baseAddress
+      datum _lockedAddress
       {
-         value = "512";
-         type = "long";
+         value = "1";
+         type = "boolean";
       }
-   }
-   element reg_bsn_monitor_beamlet.mem
-   {
       datum baseAddress
       {
-         value = "1024";
+         value = "4096";
          type = "long";
       }
    }
-   element reg_stable_monitor.mem
+   element reg_dp_offload_tx_hdr_dat.mem
    {
       datum baseAddress
       {
-         value = "12304";
+         value = "512";
          type = "long";
       }
    }
-   element reg_dp_offload_tx_hdr_ovr.mem
+   element reg_unb_sens.mem
    {
       datum baseAddress
       {
-         value = "640";
+         value = "928";
          type = "long";
       }
    }
@@ -316,7 +316,7 @@
    {
       datum _sortIndex
       {
-         value = "18";
+         value = "27";
          type = "int";
       }
    }
@@ -358,7 +358,7 @@
    {
       datum _sortIndex
       {
-         value = "20";
+         value = "19";
          type = "int";
       }
    }
@@ -366,7 +366,7 @@
    {
       datum _sortIndex
       {
-         value = "23";
+         value = "22";
          type = "int";
       }
    }
@@ -374,7 +374,7 @@
    {
       datum _sortIndex
       {
-         value = "24";
+         value = "23";
          type = "int";
       }
    }
@@ -382,7 +382,7 @@
    {
       datum _sortIndex
       {
-         value = "22";
+         value = "21";
          type = "int";
       }
    }
@@ -390,7 +390,7 @@
    {
       datum _sortIndex
       {
-         value = "21";
+         value = "20";
          type = "int";
       }
    }
@@ -422,7 +422,7 @@
    {
       datum _sortIndex
       {
-         value = "19";
+         value = "18";
          type = "int";
       }
    }
@@ -435,14 +435,6 @@
       }
    }
    element reg_dp_offload_tx
-   {
-      datum _sortIndex
-      {
-         value = "27";
-         type = "int";
-      }
-   }
-   element reg_dp_offload_tx_hdr_dat
    {
       datum _sortIndex
       {
@@ -450,11 +442,11 @@
          type = "int";
       }
    }
-   element reg_dp_offload_tx_hdr_ovr
+   element reg_dp_offload_tx_hdr_dat
    {
       datum _sortIndex
       {
-         value = "28";
+         value = "25";
          type = "int";
       }
    }
@@ -462,7 +454,7 @@
    {
       datum _sortIndex
       {
-         value = "25";
+         value = "24";
          type = "int";
       }
    }
@@ -498,24 +490,19 @@
          type = "int";
       }
    }
-   element onchip_memory2_0.s1
+   element pio_debug_wave.s1
    {
-      datum _lockedAddress
-      {
-         value = "1";
-         type = "boolean";
-      }
       datum baseAddress
       {
-         value = "131072";
+         value = "976";
          type = "long";
       }
    }
-   element pio_debug_wave.s1
+   element timer_0.s1
    {
       datum baseAddress
       {
-         value = "976";
+         value = "896";
          type = "long";
       }
    }
@@ -527,19 +514,16 @@
          type = "long";
       }
    }
-   element pio_pps.s1
+   element onchip_memory2_0.s1
    {
-      datum baseAddress
+      datum _lockedAddress
       {
-         value = "1008";
-         type = "long";
+         value = "1";
+         type = "boolean";
       }
-   }
-   element timer_0.s1
-   {
       datum baseAddress
       {
-         value = "896";
+         value = "131072";
          type = "long";
       }
    }
@@ -566,10 +550,10 @@
  <parameter name="globalResetBus" value="true" />
  <parameter name="hdlLanguage" value="VHDL" />
  <parameter name="maxAdditionalLatency" value="0" />
- <parameter name="projectName">aartfaac_bn_sdo_lpbk.qpf</parameter>
+ <parameter name="projectName" value="" />
  <parameter name="sopcBorderPoints" value="true" />
- <parameter name="systemHash" value="-100444974251" />
- <parameter name="timeStamp" value="1395780220821" />
+ <parameter name="systemHash" value="-105761453609" />
+ <parameter name="timeStamp" value="1435833898909" />
  <parameter name="useTestBenchNamingPattern" value="false" />
  <module kind="clock_source" version="11.1" enabled="1" name="clk_0">
   <parameter name="clockFrequency" value="25000000" />
@@ -670,7 +654,7 @@
   <parameter name="dcache_numTCDM" value="_0" />
   <parameter name="dcache_lineSize" value="_32" />
   <parameter name="dcache_bursts" value="false" />
-  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='reg_diag_data_buffer.mem' start='0x80' end='0x100' /><slave name='reg_diagnostics.mem' start='0x100' end='0x200' /><slave name='reg_dp_offload_tx_hdr_dat.mem' start='0x200' end='0x300' /><slave name='reg_tr_nonbonded.mem' start='0x300' end='0x340' /><slave name='avs_eth_0.mms_reg' start='0x340' end='0x380' /><slave name='timer_0.s1' start='0x380' end='0x3A0' /><slave name='reg_unb_sens.mem' start='0x3A0' end='0x3C0' /><slave name='altpll_0.pll_slave' start='0x3C0' end='0x3D0' /><slave name='pio_debug_wave.s1' start='0x3D0' end='0x3E0' /><slave name='pio_wdi.s1' start='0x3E0' end='0x3F0' /><slave name='pio_pps.s1' start='0x3F0' end='0x400' /><slave name='reg_bsn_monitor_beamlet.mem' start='0x400' end='0x800' /><slave name='reg_dp_offload_tx_hdr_ovr.mem' start='0x800' end='0x880' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x3008' end='0x3010' /><slave name='reg_stable_monitor.mem' start='0x3010' end='0x3020' /><slave name='reg_dp_offload_tx.mem' start='0x3020' end='0x3028' /><slave name='reg_bsn_monitor_crosslet.mem' start='0x3400' end='0x3800' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='ram_ss_reorder_out.mem' start='0x5000' end='0x6000' /><slave name='reg_bsn_monitor_subband.mem' start='0x6000' end='0x6400' /><slave name='reg_bsn_monitor.mem' start='0x6400' end='0x6800' /><slave name='ram_ss_reorder_in.mem' start='0x6800' end='0x6C00' /><slave name='ram_diag_data_buffer.mem' start='0x10000' end='0x20000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /><slave name='ram_ss_ss_wide.mem' start='0x40000' end='0x50000' /></address-map>]]></parameter>
+  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='pio_system_info.mem' start='0x0' end='0x80' /><slave name='reg_diag_data_buffer.mem' start='0x80' end='0x100' /><slave name='reg_diagnostics.mem' start='0x100' end='0x200' /><slave name='reg_dp_offload_tx_hdr_dat.mem' start='0x200' end='0x300' /><slave name='reg_tr_nonbonded.mem' start='0x300' end='0x340' /><slave name='avs_eth_0.mms_reg' start='0x340' end='0x380' /><slave name='timer_0.s1' start='0x380' end='0x3A0' /><slave name='reg_unb_sens.mem' start='0x3A0' end='0x3C0' /><slave name='altpll_0.pll_slave' start='0x3C0' end='0x3D0' /><slave name='pio_debug_wave.s1' start='0x3D0' end='0x3E0' /><slave name='pio_wdi.s1' start='0x3E0' end='0x3F0' /><slave name='reg_bsn_monitor_beamlet.mem' start='0x400' end='0x800' /><slave name='pio_pps.mem' start='0x800' end='0x808' /><slave name='rom_system_info.mem' start='0x1000' end='0x2000' /><slave name='avs_eth_0.mms_tse' start='0x2000' end='0x3000' /><slave name='reg_wdi.mem' start='0x3000' end='0x3008' /><slave name='jtag_uart_0.avalon_jtag_slave' start='0x3008' end='0x3010' /><slave name='reg_stable_monitor.mem' start='0x3010' end='0x3020' /><slave name='reg_dp_offload_tx.mem' start='0x3020' end='0x3028' /><slave name='reg_bsn_monitor_crosslet.mem' start='0x3400' end='0x3800' /><slave name='cpu_0.jtag_debug_module' start='0x3800' end='0x4000' /><slave name='avs_eth_0.mms_ram' start='0x4000' end='0x5000' /><slave name='ram_ss_reorder_out.mem' start='0x5000' end='0x6000' /><slave name='reg_bsn_monitor_subband.mem' start='0x6000' end='0x6400' /><slave name='reg_bsn_monitor.mem' start='0x6400' end='0x6800' /><slave name='ram_ss_reorder_in.mem' start='0x6800' end='0x6C00' /><slave name='ram_diag_data_buffer.mem' start='0x10000' end='0x20000' /><slave name='onchip_memory2_0.s1' start='0x20000' end='0x40000' /><slave name='ram_ss_ss_wide.mem' start='0x40000' end='0x50000' /></address-map>]]></parameter>
   <parameter name="dataAddrWidth" value="19" />
   <parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" />
   <parameter name="cpuReset" value="false" />
@@ -997,20 +981,6 @@ q]]></parameter>
   <parameter name="g_dat_w" value="32" />
   <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="125000000" />
  </module>
- <module kind="altera_avalon_pio" version="11.1" enabled="1" name="pio_pps">
-  <parameter name="bitClearingEdgeCapReg" value="false" />
-  <parameter name="bitModifyingOutReg" value="false" />
-  <parameter name="captureEdge" value="false" />
-  <parameter name="clockRate" value="125000000" />
-  <parameter name="direction" value="Input" />
-  <parameter name="edgeType" value="RISING" />
-  <parameter name="generateIRQ" value="false" />
-  <parameter name="irqType" value="LEVEL" />
-  <parameter name="resetValue" value="0" />
-  <parameter name="simDoTestBenchWiring" value="false" />
-  <parameter name="simDrivenValue" value="0" />
-  <parameter name="width" value="32" />
- </module>
  <module
    kind="avs_common_mm"
    version="1.0"
@@ -1084,12 +1054,8 @@ q]]></parameter>
   <parameter name="g_dat_w" value="32" />
   <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="125000000" />
  </module>
- <module
-   kind="avs_common_mm"
-   version="1.0"
-   enabled="1"
-   name="reg_dp_offload_tx_hdr_ovr">
-  <parameter name="g_adr_w" value="5" />
+ <module kind="avs_common_mm" version="1.0" enabled="1" name="pio_pps">
+  <parameter name="g_adr_w" value="1" />
   <parameter name="g_dat_w" value="32" />
   <parameter name="AUTO_SYSTEM_CLOCK_RATE" value="125000000" />
  </module>
@@ -1339,15 +1305,6 @@ q]]></parameter>
   <parameter name="arbitrationPriority" value="1" />
   <parameter name="baseAddress" value="0x6000" />
  </connection>
- <connection kind="clock" version="11.1" start="altpll_0.c0" end="pio_pps.clk" />
- <connection
-   kind="avalon"
-   version="11.1"
-   start="cpu_0.data_master"
-   end="pio_pps.s1">
-  <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x03f0" />
- </connection>
  <connection
    kind="clock"
    version="11.1"
@@ -1465,16 +1422,12 @@ q]]></parameter>
   <parameter name="arbitrationPriority" value="1" />
   <parameter name="baseAddress" value="0x3020" />
  </connection>
- <connection
-   kind="clock"
-   version="11.1"
-   start="altpll_0.c0"
-   end="reg_dp_offload_tx_hdr_ovr.system" />
+ <connection kind="clock" version="11.1" start="altpll_0.c0" end="pio_pps.system" />
  <connection
    kind="avalon"
    version="11.1"
    start="cpu_0.data_master"
-   end="reg_dp_offload_tx_hdr_ovr.mem">
+   end="pio_pps.mem">
   <parameter name="arbitrationPriority" value="1" />
   <parameter name="baseAddress" value="0x0800" />
  </connection>
diff --git a/applications/aartfaac/designs/aartfaac_bn_sdo/tb/vhdl/tb_aartfaac_bn_sdo.vhd b/applications/aartfaac/designs/aartfaac_bn_sdo/tb/vhdl/tb_aartfaac_bn_sdo.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..4270c5e1d382b518e6c2861e7da1ba3fda31333b
--- /dev/null
+++ b/applications/aartfaac/designs/aartfaac_bn_sdo/tb/vhdl/tb_aartfaac_bn_sdo.vhd
@@ -0,0 +1,180 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2013
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.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/>.
+--
+-------------------------------------------------------------------------------
+
+LIBRARY IEEE, common_lib, unb1_board_lib, mm_lib;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE common_lib.tb_common_mem_pkg.ALL;
+USE unb1_board_lib.unb1_board_pkg.ALL;
+USE unb1_board_lib.tb_unb1_board_pkg.ALL;
+USE mm_lib.mm_file_pkg.ALL;
+USE mm_lib.mm_file_unb_pkg.ALL;
+
+ENTITY tb_aartfaac_bn_sdo IS
+GENERIC (
+  g_sim_play_udp_sdo_stream : BOOLEAN := FALSE
+  );
+END tb_aartfaac_bn_sdo;
+
+ARCHITECTURE tb OF tb_aartfaac_bn_sdo IS
+
+  CONSTANT c_nof_bn     : NATURAL := 1; -- 1 BN = tx(0)->rx(0); 2 BN = TX(0) to RX(1)
+
+  CONSTANT c_nof_bn_max : NATURAL := 2; 
+
+  CONSTANT c_sim        : BOOLEAN := TRUE;
+
+  CONSTANT c_unb_index  : NATURAL := 0; -- Python can target this test bench @ UniBoard 0, BN 0 and 1.
+  CONSTANT c_id_arr     : t_unb1_board_id_arr(c_nof_bn_max-1 DOWNTO 0) := ( (TO_UVEC(c_unb_index, c_unb1_board_nof_uniboard_w ) & TO_UVEC(5, c_unb1_board_nof_chip_w)), 
+                                                                     (TO_UVEC(c_unb_index, c_unb1_board_nof_uniboard_w ) & TO_UVEC(4, c_unb1_board_nof_chip_w)) );
+
+  CONSTANT c_misalign_xcvrs : BOOLEAN := FALSE; -- TRUE misaligns back xcvr bus 0 to test BSN aligner in subband stream
+  ----------------------------------------------------------------------------
+  -- Clocks and resets
+  ----------------------------------------------------------------------------   
+  CONSTANT c_mm_clk_period  : TIME := 100 ps;
+  CONSTANT c_dp_pps_period  : NATURAL := 8;
+  CONSTANT c_tr_clk_period  : TIME := 6.4 ns;
+  CONSTANT c_eth_clk_period : TIME := 40 ns;
+  CONSTANT c_dp_clk_period  : TIME := 5 ns;
+
+  CONSTANT c_cable_delay       : TIME := 12 ns;
+  CONSTANT c_xcvr_misalign_dly : TIME  := 0 ns;
+  CONSTANT c_xcvr_general_dly  : TIME  := 0 ns;
+
+  SIGNAL dp_pps             : STD_LOGIC;
+  SIGNAL dp_clk             : STD_LOGIC := '1';
+  SIGNAL dp_rst             : STD_LOGIC := '0';
+
+  SIGNAL tr_clk             : STD_LOGIC := '1';
+
+  SIGNAL eth_clk            : STD_LOGIC := '0';
+  SIGNAL eth_txp_arr        : STD_LOGIC_VECTOR(c_nof_bn-1 DOWNTO 0);
+  SIGNAL eth_rxp_arr        : STD_LOGIC_VECTOR(c_nof_bn-1 DOWNTO 0) := (OTHERS=>'0');
+
+  SIGNAL mesh_tx_3arr       : t_unb1_board_mesh_sl_3arr;
+  SIGNAL mesh_rx_3arr       : t_unb1_board_mesh_sl_3arr;
+
+  SIGNAL back_tx_3arr       : t_unb1_board_mesh_sl_3arr;
+  SIGNAL back_rx_3arr       : t_unb1_board_mesh_sl_3arr;
+
+  SIGNAL WDI                : STD_LOGIC;
+  SIGNAL VERSION            : STD_LOGIC_VECTOR(c_unb1_board_aux.version_w-1 DOWNTO 0) := "00"; 
+
+BEGIN
+
+  ----------------------------------------------------------------------------
+  -- Clocks
+  ----------------------------------------------------------------------------
+  dp_clk  <= NOT dp_clk AFTER c_dp_clk_period/2;
+  tr_clk  <= NOT tr_clk AFTER c_tr_clk_period/2;
+  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;
+
+  ------------------------------------------------------------------------------
+  -- External PPS
+  ------------------------------------------------------------------------------  
+  proc_common_gen_pulse(1, c_dp_pps_period, '1', dp_rst, dp_clk, dp_pps);
+
+  ----------------------------------------------------------------------------
+  -- DUTs
+  ----------------------------------------------------------------------------
+    gen_bn: FOR BN IN 0 TO c_nof_bn-1 GENERATE  
+      ----------------------------------------------------------------------------
+      -- aartfaac_bn_sdo
+      ----------------------------------------------------------------------------
+      u_aartfaac_bn_sdo : ENTITY work.aartfaac_bn_sdo
+        GENERIC MAP (
+          g_sim         => c_sim,
+          g_sim_unb_nr  => c_unb_index,
+          g_sim_node_nr => 4+BN,
+          g_design_name => sel_a_b(c_nof_bn=2 , sel_a_b(BN=0, "aartfaac_bn_sdo_tx", "aartfaac_bn_sdo"), "aartfaac_bn_sdo_lpbk" ),
+          g_sim_play_udp_sdo_stream => g_sim_play_udp_sdo_stream
+        )
+        PORT MAP (
+          -- GENERAL
+          PPS         => dp_pps,
+          WDI         => WDI,
+    
+          -- Others
+          VERSION     => VERSION,
+          ID          => c_id_arr(BN),
+    
+          -- 1GbE Control Interface
+          ETH_clk     => eth_clk,
+          ETH_SGIN    => eth_rxp_arr(BN),
+          ETH_SGOUT   => eth_txp_arr(BN),
+
+          SA_CLK      => tr_clk,
+          SB_CLK      => tr_clk,
+
+          FN_BN_0_TX  => mesh_tx_3arr(BN)(0),
+          FN_BN_0_RX  => mesh_rx_3arr(BN)(0),
+          FN_BN_1_TX  => mesh_tx_3arr(BN)(1),
+          FN_BN_1_RX  => mesh_rx_3arr(BN)(1),
+          FN_BN_2_TX  => mesh_tx_3arr(BN)(2),
+          FN_BN_2_RX  => mesh_rx_3arr(BN)(2),
+          FN_BN_3_TX  => mesh_tx_3arr(BN)(3),
+          FN_BN_3_RX  => mesh_rx_3arr(BN)(3),
+                      
+          BN_BI_0_TX  => back_tx_3arr(BN)(0),
+          BN_BI_0_RX  => back_rx_3arr(BN)(0),
+          BN_BI_1_TX  => back_tx_3arr(BN)(1),
+          BN_BI_1_RX  => back_rx_3arr(BN)(1),
+          BN_BI_2_TX  => back_tx_3arr(BN)(2),
+          BN_BI_2_RX  => back_rx_3arr(BN)(2),
+          BN_BI_3_TX  => back_tx_3arr(BN)(3),
+          BN_BI_3_RX  => back_rx_3arr(BN)(3)
+        );
+      END GENERATE;
+
+  ----------------------------------------------------------------------------
+  -- BN xcvr interconnects / xcvr loopback 
+  ----------------------------------------------------------------------------
+  gen_interconnect: IF c_nof_bn = 2 GENERATE
+    back_rx_3arr(1) <= back_tx_3arr(0);
+  END GENERATE;
+
+  gen_loopback: IF c_nof_bn = 1 GENERATE
+
+    gen_synced: IF c_misalign_xcvrs = FALSE GENERATE
+        back_rx_3arr(0) <= back_tx_3arr(0);
+     END GENERATE;
+
+    gen_misaligned: IF c_misalign_xcvrs = TRUE GENERATE
+        back_rx_3arr(0)(0) <= back_tx_3arr(0)(0)  ; -- +c_xcvr_misalign_dly;
+        back_rx_3arr(0)(1) <= TRANSPORT back_tx_3arr(0)(1) AFTER 8 ns;
+        back_rx_3arr(0)(2) <= TRANSPORT back_tx_3arr(0)(2) AFTER 3 * 8 ns;
+        back_rx_3arr(0)(3) <= TRANSPORT back_tx_3arr(0)(3) AFTER 2 * 8 ns;
+     END GENERATE;
+
+  END GENERATE;
+
+  ------------------------------------------------------------------------------
+  -- 1GbE Loopback model
+  ------------------------------------------------------------------------------
+  gen_eth_loopback: FOR i IN 0 TO c_nof_bn-1 GENERATE
+    eth_rxp_arr(i) <= TRANSPORT eth_txp_arr(i) AFTER c_cable_delay;
+  END GENERATE;
+
+END tb;