diff --git a/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd b/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd
index 6486797c208045dfcef21a3b688327ba11e07bd0..c8b290ca128ba8fa4e963e22425e3b0a1791feb8 100644
--- a/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd
+++ b/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd
@@ -37,15 +37,19 @@ USE eth_lib.eth_pkg.ALL;
 
 ENTITY unb2_test IS
   GENERIC (
-    g_design_name : STRING  := "unb2_test";
-    g_design_note : STRING  := "UNUSED";
-    g_technology  : NATURAL := c_tech_arria10;
-    g_sim         : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr  : NATURAL := 0;
-    g_sim_node_nr : NATURAL := 0;
-    g_stamp_date  : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time  : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_stamp_svn   : NATURAL := 0   -- SVN revision    -- set by QSF
+    g_design_name      : STRING  := "unb2_test";
+    g_design_note      : STRING  := "UNUSED";
+    g_technology       : NATURAL := c_tech_arria10;
+    g_sim              : BOOLEAN := FALSE; --Overridden by TB
+    g_sim_unb_nr       : NATURAL := 0;
+    g_sim_node_nr      : NATURAL := 0;
+    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
+    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
+    g_stamp_svn        : NATURAL := 0;  -- SVN revision    -- set by QSF
+    g_factory_image    : BOOLEAN := FALSE;
+    g_nof_streams_qsfp : NATURAL := 1;  --FIXME
+    g_nof_streams_ring : NATURAL := 0;  --FIXME
+    g_nof_streams_back : NATURAL := 0   --FIXME
   );
   PORT (
     -- GENERAL
@@ -108,7 +112,7 @@ ENTITY unb2_test IS
     QSFP_SCL     : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.i2c_w-1 downto 0);
     QSFP_RST     : INOUT STD_LOGIC;
 
-    QSFP_LED     : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_nof_leds-1 DOWNTO 0)
+    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_nof_leds-1 DOWNTO 0)
   );
 END unb2_test;
 
@@ -124,7 +128,7 @@ ARCHITECTURE str OF unb2_test IS
   CONSTANT c_use_lpbk                   : BOOLEAN := FALSE; --g_design_name = "unb2_test_lpbk";
   CONSTANT c_use_1GbE                   : BOOLEAN := FALSE; --g_design_name = "unb2_test_1GbE";
   CONSTANT c_use_10GbE                  : BOOLEAN := TRUE;  --g_design_name = "unb2_test_10GbE";
-  CONSTANT c_nof_streams                : NATURAL := 1; --c_unb2_board_tr_qsfp_hw_nof_lines; --FIXME
+  CONSTANT g_nof_streams                : NATURAL := (g_nof_streams_qsfp + g_nof_streams_ring + g_nof_streams_back);
   CONSTANT c_data_w                     : NATURAL := sel_a_b(c_use_lpbk,  c_lpbk_data_w, -- Select correct c_data_w when one interface is used
                                                      sel_a_b(c_use_1GbE,  c_eth_data_w,
                                                      sel_a_b(c_use_10GbE, c_xgmii_data_w, 0)));
@@ -198,8 +202,8 @@ ARCHITECTURE str OF unb2_test IS
   CONSTANT c_max_nof_blocks_per_packet  : NATURAL := c_max_udp_payload_nof_words/c_min_nof_words_per_block;
   CONSTANT c_def_nof_blocks_per_packet  : NATURAL := 1;
 
-  SIGNAL hdr_fields_in_arr              : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL hdr_fields_out_arr             : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL hdr_fields_in_arr              : t_slv_1024_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL hdr_fields_out_arr             : t_slv_1024_arr(g_nof_streams-1 DOWNTO 0);
 
 
   -- System
@@ -264,10 +268,17 @@ ARCHITECTURE str OF unb2_test IS
   SIGNAL reg_remu_miso              : t_mem_miso;
 
   -- 10GbE
-  SIGNAL serial_10G_tx_arr          : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_hw_nof_lines-1 downto 0) := (OTHERS=>'0');
-  SIGNAL serial_10G_rx_arr          : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp_hw_nof_lines-1 downto 0);
-  SIGNAL i_serial_10G_tx_arr        : STD_LOGIC_VECTOR(c_nof_streams-1 DOWNTO 0);
-  SIGNAL i_serial_10G_rx_arr        : STD_LOGIC_VECTOR(c_nof_streams-1 DOWNTO 0);
+  SIGNAL i_serial_10G_tx_qsfp_ring_arr   : STD_LOGIC_VECTOR(g_nof_streams_qsfp+g_nof_streams_ring-1 DOWNTO 0);
+  SIGNAL i_serial_10G_rx_qsfp_ring_arr   : STD_LOGIC_VECTOR(g_nof_streams_qsfp+g_nof_streams_ring-1 DOWNTO 0);
+  SIGNAL i_serial_10G_tx_back_arr        : STD_LOGIC_VECTOR(g_nof_streams_back-1 DOWNTO 0);
+  SIGNAL i_serial_10G_rx_back_arr        : STD_LOGIC_VECTOR(g_nof_streams_back-1 DOWNTO 0);
+
+  SIGNAL serial_10G_tx_qsfp_arr          : STD_LOGIC_VECTOR(g_nof_streams_qsfp * c_unb2_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+  SIGNAL serial_10G_rx_qsfp_arr          : STD_LOGIC_VECTOR(g_nof_streams_qsfp * c_unb2_board_tr_qsfp.bus_w-1 DOWNTO 0);
+  SIGNAL serial_10G_tx_ring_arr          : STD_LOGIC_VECTOR(g_nof_streams_ring-1 DOWNTO 0) := (OTHERS=>'0');
+  SIGNAL serial_10G_rx_ring_arr          : STD_LOGIC_VECTOR(g_nof_streams_ring-1 DOWNTO 0);
+  SIGNAL serial_10G_tx_back_arr          : STD_LOGIC_VECTOR(g_nof_streams_back-1 DOWNTO 0) := (OTHERS=>'0');
+  SIGNAL serial_10G_rx_back_arr          : STD_LOGIC_VECTOR(g_nof_streams_back-1 DOWNTO 0);
 
   SIGNAL reg_tr_10GbE_mosi          : t_mem_mosi;
   SIGNAL reg_tr_10GbE_miso          : t_mem_miso;
@@ -303,26 +314,33 @@ ARCHITECTURE str OF unb2_test IS
   SIGNAL reg_diag_data_buf_mosi         : t_mem_mosi;
   SIGNAL reg_diag_data_buf_miso         : t_mem_miso;
 
-  SIGNAL block_gen_src_out_arr          : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL block_gen_src_in_arr           : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy);
+  SIGNAL block_gen_src_out_arr          : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL block_gen_src_in_arr           : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy);
 
-  SIGNAL dp_offload_tx_src_out_arr      : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL dp_offload_tx_src_in_arr       : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL dp_offload_tx_src_out_arr      : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL dp_offload_tx_src_in_arr       : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
 
-  SIGNAL dp_offload_rx_snk_in_arr       : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL dp_offload_rx_snk_out_arr      : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL dp_offload_rx_snk_in_arr       : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL dp_offload_rx_snk_out_arr      : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
 
-  SIGNAL dp_offload_rx_src_out_arr      : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL dp_offload_rx_src_in_arr       : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy);
+  SIGNAL dp_offload_rx_src_out_arr      : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL dp_offload_rx_src_in_arr       : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy);
 
-  SIGNAL diag_data_buf_snk_in_arr       : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL diag_data_buf_snk_out_arr      : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL diag_data_buf_snk_in_arr       : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL diag_data_buf_snk_out_arr      : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
+
+  SIGNAL tmp_dp_offload_tx_src_out_arr      : t_dp_sosi_arr(4*g_nof_streams-1 DOWNTO 0);
+  SIGNAL tmp_dp_offload_tx_src_in_arr       : t_dp_siso_arr(4*g_nof_streams-1 DOWNTO 0);
+  SIGNAL tmp_dp_offload_rx_snk_in_arr       : t_dp_sosi_arr(4*g_nof_streams-1 DOWNTO 0);
+
+  SIGNAL user_green_led_arr             : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0);
+  SIGNAL user_red_led_arr               : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0);
 
    -- Interface: 1GbE UDP streaming ports
-  SIGNAL eth1g_udp_tx_sosi_arr          : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL eth1g_udp_tx_siso_arr          : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL eth1g_udp_rx_sosi_arr          : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
-  SIGNAL eth1g_udp_rx_siso_arr          : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL eth1g_udp_tx_sosi_arr          : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL eth1g_udp_tx_siso_arr          : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL eth1g_udp_rx_sosi_arr          : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0);
+  SIGNAL eth1g_udp_rx_siso_arr          : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
 
 
 BEGIN
@@ -343,8 +361,9 @@ BEGIN
     g_eth_clk_freq            => c_unb2_board_eth_clk_freq_125M,
     g_aux                     => c_unb2_board_aux,
     g_udp_offload             => c_use_1GbE,
-    g_udp_offload_nof_streams => c_nof_streams,
-    g_dp_clk_use_pll          => TRUE
+    g_udp_offload_nof_streams => g_nof_streams,
+    g_dp_clk_use_pll          => TRUE,
+    g_factory_image           => g_factory_image
   )
   PORT MAP (
     -- Clock an reset signals
@@ -448,7 +467,7 @@ BEGIN
     g_sim         => g_sim,
     g_sim_unb_nr  => g_sim_unb_nr,
     g_sim_node_nr => g_sim_node_nr,
-    g_nof_streams   => 3, --c_nof_streams, --FIXME
+    g_nof_streams   => 3, --g_nof_streams, --FIXME
     g_bg_block_size => c_bg_block_size,
     g_hdr_field_arr => c_hdr_field_arr
    )
@@ -550,7 +569,7 @@ BEGIN
   -----------------------------------------------------------------------------
   u_mms_diag_block_gen : ENTITY diag_lib.mms_diag_block_gen
   GENERIC MAP (
-    g_nof_output_streams => c_nof_streams,
+    g_nof_output_streams => g_nof_streams,
     g_buf_dat_w          => c_data_w,
     g_buf_addr_w         => ceil_log2(TO_UINT(c_bg_ctrl.samples_per_packet)),
     g_file_name_prefix   => "../../counter_data_" & NATURAL'IMAGE(c_data_w),
@@ -577,7 +596,7 @@ BEGIN
   -----------------------------------------------------------------------------
   u_dp_offload_tx : ENTITY dp_lib.dp_offload_tx_dev
   GENERIC MAP (
-    g_nof_streams               => c_nof_streams,
+    g_nof_streams               => g_nof_streams,
     g_data_w                    => c_data_w,
     g_use_complex               => FALSE,
     g_max_nof_words_per_block   => c_max_nof_words_per_block,
@@ -613,7 +632,7 @@ BEGIN
     hdr_fields_in_arr     => hdr_fields_in_arr
   );
 
-  gen_hdr_in_fields : FOR i IN 0 TO c_nof_streams-1 GENERATE
+  gen_hdr_in_fields : FOR i IN 0 TO g_nof_streams-1 GENERATE
     -- dst = src
     hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_hdr_field_arr, "eth_src_mac")) <= x"00228608" & B"000"&ID(7 DOWNTO 3) & RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w);
     hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "eth_dst_mac" ) DOWNTO field_lo(c_hdr_field_arr, "eth_dst_mac")) <= x"00228608" & B"000"&ID(7 DOWNTO 3) & RESIZE_UVEC(ID(2 DOWNTO 0), c_byte_w);
@@ -636,7 +655,7 @@ BEGIN
   -----------------------------------------------------------------------------
   u_dp_offload_rx : ENTITY dp_lib.dp_offload_rx_dev
   GENERIC MAP (
-    g_nof_streams         => c_nof_streams,
+    g_nof_streams         => g_nof_streams,
     g_data_w              => c_data_w,
     g_hdr_field_arr       => c_hdr_field_arr,
     g_remove_crc          => NOT(c_use_lpbk),
@@ -661,7 +680,7 @@ BEGIN
     hdr_fields_out_arr    => hdr_fields_out_arr
     );
 
-  gen_hdr_out_fields : FOR i IN 0 TO c_nof_streams-1 GENERATE
+  gen_hdr_out_fields : FOR i IN 0 TO g_nof_streams-1 GENERATE
     diag_data_buf_snk_in_arr(i).sync <=          sl(hdr_fields_out_arr(i)(field_hi(c_hdr_field_arr, "usr_sync") DOWNTO field_lo(c_hdr_field_arr, "usr_sync" )));
     diag_data_buf_snk_in_arr(i).bsn  <= RESIZE_UVEC(hdr_fields_out_arr(i)(field_hi(c_hdr_field_arr, "usr_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "usr_bsn"  )), c_dp_stream_bsn_w);
   END GENERATE;
@@ -674,7 +693,7 @@ BEGIN
   -----------------------------------------------------------------------------
   dp_offload_rx_src_in_arr <= diag_data_buf_snk_out_arr;
 
-  gen_bsn_mon_in : FOR i IN 0 TO c_nof_streams-1 GENERATE
+  gen_bsn_mon_in : FOR i IN 0 TO g_nof_streams-1 GENERATE
     diag_data_buf_snk_in_arr(i).data  <= dp_offload_rx_src_out_arr(i).data;
     diag_data_buf_snk_in_arr(i).valid <= dp_offload_rx_src_out_arr(i).valid;
     diag_data_buf_snk_in_arr(i).sop   <= dp_offload_rx_src_out_arr(i).sop;
@@ -684,7 +703,7 @@ BEGIN
 
   u_dp_bsn_monitor : ENTITY dp_lib.mms_dp_bsn_monitor
   GENERIC MAP (
-    g_nof_streams        => c_nof_streams,
+    g_nof_streams        => g_nof_streams,
     g_cross_clock_domain => TRUE,
     g_sync_timeout       => c_bg_blocks_per_sync*(c_bg_block_size+c_bg_gapsize),
     g_cnt_sop_w          => ceil_log2(c_bg_blocks_per_sync+1),
@@ -707,7 +726,7 @@ BEGIN
 
   u_diag_data_buffer : ENTITY diag_lib.mms_diag_data_buffer
   GENERIC MAP (
-    g_nof_streams  => c_nof_streams,
+    g_nof_streams  => g_nof_streams,
     g_data_w       => 32, --c_data_w,
     g_buf_nof_data => 1024,
     g_buf_use_sync => FALSE -- sync by reading last address of data buffer
@@ -754,12 +773,12 @@ BEGIN
   -- tr_10GbE
   -----------------------------------------------------------------------------
   gen_tr_10GbE : IF c_use_10GbE=TRUE GENERATE
-    u_tr_10GbE_front_and_ring: ENTITY unb2_board_lib.unb2_board_10gbe_front_and_ring
+    u_tr_10GbE_qsfp_and_ring: ENTITY unb2_board_lib.unb2_board_10gbe
     GENERIC MAP (
       g_technology    => g_technology,
       g_sim           => g_sim,
       g_sim_level     => 1,
-      g_nof_macs      => c_nof_streams,
+      g_nof_macs      => (g_nof_streams_qsfp + g_nof_streams_ring),
       g_tx_fifo_fill  => c_def_10GbE_block_size,
       g_tx_fifo_size  => c_def_10GbE_block_size*2
     )
@@ -777,87 +796,150 @@ BEGIN
       dp_rst              => dp_rst,
       dp_clk              => dp_clk,
 
-      src_out_arr         => dp_offload_rx_snk_in_arr,
-      src_in_arr          => dp_offload_rx_snk_out_arr,
+      src_out_arr         => dp_offload_rx_snk_in_arr((g_nof_streams_qsfp+g_nof_streams_ring-1) DOWNTO 0),
+      src_in_arr          => dp_offload_rx_snk_out_arr((g_nof_streams_qsfp+g_nof_streams_ring-1) DOWNTO 0),
 
-      snk_out_arr         => dp_offload_tx_src_in_arr,
-      snk_in_arr          => dp_offload_tx_src_out_arr,
+      snk_out_arr         => dp_offload_tx_src_in_arr((g_nof_streams_qsfp+g_nof_streams_ring-1) DOWNTO 0),
+      snk_in_arr          => dp_offload_tx_src_out_arr((g_nof_streams_qsfp+g_nof_streams_ring-1) DOWNTO 0),
 
       -- Serial IO
-      serial_tx_arr       => i_serial_10G_tx_arr,
-      serial_rx_arr       => i_serial_10G_rx_arr
+      serial_tx_arr       => i_serial_10G_tx_qsfp_ring_arr,
+      serial_rx_arr       => i_serial_10G_rx_qsfp_ring_arr
     );
 
+--    u_tr_10GbE_back: ENTITY unb2_board_lib.unb2_board_10gbe
+--    GENERIC MAP (
+--      g_technology    => g_technology,
+--      g_sim           => g_sim,
+--      g_sim_level     => 1,
+--      g_nof_macs      => g_nof_streams_back,
+--      g_tx_fifo_fill  => c_def_10GbE_block_size,
+--      g_tx_fifo_size  => c_def_10GbE_block_size*2
+--    )
+--    PORT MAP (
+--      tr_ref_clk          => SB_CLK,
+--
+--      -- MM interface
+--      mm_rst              => mm_rst,
+--      mm_clk              => mm_clk,
+--
+--      reg_mac_mosi        => reg_tr_10GbE_mosi, -- FIXME use separate
+--      reg_mac_miso        => reg_tr_10GbE_miso,
+--
+--      -- DP interface
+--      dp_rst              => dp_rst,
+--      dp_clk              => dp_clk,
+--
+--      src_out_arr         => dp_offload_rx_snk_in_arr((g_nof_streams_back-1) DOWNTO 0),
+--      src_in_arr          => dp_offload_rx_snk_out_arr((g_nof_streams_back-1) DOWNTO 0),
+--
+--      snk_out_arr         => dp_offload_tx_src_in_arr((g_nof_streams_back-1) DOWNTO 0),
+--      snk_in_arr          => dp_offload_tx_src_out_arr((g_nof_streams_back-1) DOWNTO 0),
+--
+--      -- Serial IO
+--      serial_tx_arr       => i_serial_10G_tx_back_arr,
+--      serial_rx_arr       => i_serial_10G_rx_back_arr
+--    );
 
-    gen_wires: FOR i IN 0 TO c_nof_streams-1 GENERATE
-        serial_10G_tx_arr(i) <= i_serial_10G_tx_arr(i);
-      i_serial_10G_rx_arr(i) <=   serial_10G_rx_arr(i);
-    END GENERATE;
 
-    serial_10G_tx_arr(c_unb2_board_tr_qsfp_hw_nof_lines-1 DOWNTO c_nof_streams) <= (OTHERS=>'0');
+
+    --gen_wires: FOR i IN 0 TO g_nof_streams_qsfp-1 GENERATE
+    --    serial_10G_tx_arr(i) <= i_serial_10G_tx_qsfp_ring_arr(i);
+    --  i_serial_10G_rx_qsfp_ring_arr(i) <=   serial_10G_rx_arr(i);
+    --END GENERATE;
+
+    serial_10G_tx_qsfp_arr(0) <= i_serial_10G_tx_qsfp_ring_arr(0);
+    i_serial_10G_rx_qsfp_ring_arr(0) <= serial_10G_rx_qsfp_arr(0);
+
+    --serial_10G_tx_qsfp_arr(c_unb2_board_tr_qsfp_hw_nof_lines-1 DOWNTO g_nof_streams) <= (OTHERS=>'0');
 
     u_front_io : ENTITY unb2_board_lib.unb2_board_front_io
+    GENERIC MAP (
+      g_nof_qsfp_bus => ceil_div(g_nof_streams_qsfp,c_unb2_board_tr_qsfp.bus_w)
+    )
     PORT MAP (
 
-      serial_tx_arr => serial_10G_tx_arr,
-      serial_rx_arr => serial_10G_rx_arr,
+      serial_tx_arr => serial_10G_tx_qsfp_arr,
+      serial_rx_arr => serial_10G_rx_qsfp_arr,
+
+      green_led_arr => user_green_led_arr(g_nof_streams_qsfp-1 DOWNTO 0),
+      red_led_arr   => user_red_led_arr(g_nof_streams_qsfp-1 DOWNTO 0),
 
       -- Serial I/O
       -- front transceivers
-      QSFP_0_RX  => QSFP_0_RX,
-      QSFP_0_TX  => QSFP_0_TX,
-   --   QSFP_1_RX  => QSFP_1_RX,
-   --   QSFP_1_TX  => QSFP_1_TX,
-   --   QSFP_2_RX  => QSFP_2_RX,
-   --   QSFP_2_TX  => QSFP_2_TX,
-   --   QSFP_3_RX  => QSFP_3_RX,
-   --   QSFP_3_TX  => QSFP_3_TX,
-   --   QSFP_4_RX  => QSFP_4_RX,
-   --   QSFP_4_TX  => QSFP_4_TX,
-   --   QSFP_5_RX  => QSFP_5_RX,
-   --   QSFP_5_TX  => QSFP_5_TX,
+      QSFP_RX(0)(0)  => QSFP_0_RX(0),
+      QSFP_TX(0)(0)  => QSFP_0_TX(0),
 
       QSFP_SDA   => QSFP_SDA,
       QSFP_SCL   => QSFP_SCL,
-
       QSFP_RST   => QSFP_RST,
 
       QSFP_LED   => QSFP_LED
     );
 
-    --u_back_io : ENTITY unb2_board_lib.unb2_board_back_io
-    --PORT MAP (
-    --  serial_tx_arr => (OTHERS=>'0'),
-    --  --serial_rx_arr => ,
-
-    --  -- Serial I/O
-    --  -- back transceivers
-    --  BCK_RX  => BCK_RX,
-    --  BCK_TX  => BCK_TX,
-
-    --  BCK_SDA => BCK_SDA,
-    --  BCK_SCL => BCK_SCL,
-    --  BCK_ERR => BCK_ERR
-    --);
-
-    --u_ring_io : ENTITY unb2_board_lib.unb2_board_ring_io
-    --PORT MAP (
-    --  serial_tx_arr => (OTHERS=>'0'),
-    --  --serial_rx_arr => ,
-
-    --  -- Serial I/O
-    --  -- ring transceivers
-    --  RING_0_RX => RING_0_RX,
-    --  RING_0_TX => RING_0_TX,
-    --  RING_1_RX => RING_1_RX,
-    --  RING_1_TX => RING_1_TX
-    --);
-  END GENERATE;
 
-  -----------------------------------------------------------------------------
-  -- Node function
-  -----------------------------------------------------------------------------
-  -- Insert node_[design_name] here
+    tmp_dp_offload_tx_src_out_arr(0) <= dp_offload_tx_src_out_arr(0);
+    tmp_dp_offload_tx_src_in_arr(0)  <= dp_offload_tx_src_in_arr(0);
+    tmp_dp_offload_rx_snk_in_arr(0)  <= dp_offload_rx_snk_in_arr(0);
+
+    u_front_led : ENTITY work.unb2_board_qsfp_leds
+    GENERIC MAP (
+      g_sim             => g_sim,
+      g_factory_image   => g_factory_image,
+      g_nof_qsfp        => ceil_div(g_nof_streams_qsfp,c_unb2_board_tr_qsfp.bus_w),
+      g_pulse_us        => 1000 / (10**9 / c_unb2_board_ext_clk_freq_200M) -- nof clk cycles to get us period
+    )
+    PORT MAP (
+      rst               => dp_rst,
+      clk               => dp_clk,
+      -- internal pulser outputs
+      --pulse_us          => pulse_us,
+      --pulse_ms          => pulse_ms,
+      --pulse_s           => pulse_s,
+      -- lane status
+      tx_siso_arr       => tmp_dp_offload_tx_src_in_arr,--(g_nof_streams_qsfp-1 DOWNTO 0),
+      tx_sosi_arr       => tmp_dp_offload_tx_src_out_arr,--(g_nof_streams_qsfp-1 DOWNTO 0),
+      rx_sosi_arr       => tmp_dp_offload_rx_snk_in_arr,--(g_nof_streams_qsfp-1 DOWNTO 0),
+      -- leds
+      green_led_arr     => user_green_led_arr(g_nof_streams_qsfp-1 DOWNTO 0),
+      red_led_arr       => user_red_led_arr(g_nof_streams_qsfp-1 DOWNTO 0)
+    );
+
+
+--    u_back_io : ENTITY unb2_board_lib.unb2_board_back_io
+--    GENERIC MAP (
+--      g_nof_back_io => g_nof_streams_back
+--    )
+--    PORT MAP (
+--      serial_tx_arr => serial_10G_tx_back_arr,
+--      serial_rx_arr => serial_10G_rx_back_arr,
+--
+--      -- Serial I/O
+--      -- back transceivers
+--      BCK_RX  => BCK_RX,
+--      BCK_TX  => BCK_TX,
+--
+--      BCK_SDA => BCK_SDA,
+--      BCK_SCL => BCK_SCL,
+--      BCK_ERR => BCK_ERR
+--    );
+--
+--    u_ring_io : ENTITY unb2_board_lib.unb2_board_ring_io
+--    GENERIC MAP (
+--      g_nof_ring_io => g_nof_streams_ring
+--    )
+--    PORT MAP (
+--      serial_tx_arr => serial_10G_tx_ring_arr,
+--      serial_rx_arr => serial_10G_rx_ring_arr,
+--
+--      -- Serial I/O
+--      -- ring transceivers
+--      RING_0_RX => RING_0_RX,
+--      RING_0_TX => RING_0_TX,
+--      RING_1_RX => RING_1_RX,
+--      RING_1_TX => RING_1_TX
+--    );
+  END GENERATE;
 
 END str;