diff --git a/applications/lofar2/designs/lofar2_unb2b_ring/lofar2_unb2b_ring.cl b/applications/lofar2/designs/lofar2_unb2b_ring/lofar2_unb2b_ring.cl
index e2d43ed01ac2c362d8bb8fc1273301f5b0e54756..b2f0baeee6bf008a08e10f6989b151cebfce7c16 100644
--- a/applications/lofar2/designs/lofar2_unb2b_ring/lofar2_unb2b_ring.cl
+++ b/applications/lofar2/designs/lofar2_unb2b_ring/lofar2_unb2b_ring.cl
@@ -37,7 +37,7 @@
 #define LANE_DIRECTION 1
 // Nof lanes = 1 - 8
 #define NOF_LANES 8
-#define USE_DP_LAYER true
+#define USE_DP_LAYER 
 #define ETH_HEADER_SIZE 2
 #define DP_HEADER_SIZE 3
 #ifdef EMULATOR
@@ -45,7 +45,7 @@
 #else
 #define PAYLOAD_SIZE 750 // = 750*8 bytes = 6000 bytes
 #endif
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
 #define BLOCK_LENGTH (PAYLOAD_SIZE+DP_HEADER_SIZE)
 #else
 #define BLOCK_LENGTH (PAYLOAD_SIZE+ETH_HEADER_SIZE)
@@ -532,7 +532,7 @@ __kernel void block_validate_decode()
   for (int x = 0; x < NOF_ERR_COUNTS; x++)
     reg.parameters.err_cnt[x] = 0; 
 
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
   union dp_packet packets[2]; //one to read and one to write
 #else
   union eth_packet packets[2]; //one to read and one to write
@@ -561,6 +561,7 @@ __kernel void block_validate_decode()
         else {
           if (i != BLOCK_LENGTH-1)
             reg.parameters.err_cnt[ERR_BI] += 1;
+#pragma unroll
           for (int err = 0; err < NOF_ERR_COUNTS; err++){
             if (err != ERR_BI)
               reg.parameters.err_cnt[err] += ((input_10GbE.err & (1 << err)) >> err);
@@ -592,7 +593,7 @@ __kernel void block_validate_decode()
       line_out.dp_channel = 0;
       if (j == 0) {
         line_out.flags |= FLAG_FIRST;
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
         line_out.dp_bsn = (packets[writeIndex].packet.dp_header.dp_sync_and_bsn & MASK_BSN); //62:0 = bsn
         line_out.dp_channel = packets[writeIndex].packet.dp_header.dp_channel;
         
@@ -644,7 +645,7 @@ __kernel void rx_split()
   }
 }
 
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
 __attribute__((max_global_work_dim(0)))
 #ifndef EMULATOR
 __attribute__((autorun))
@@ -720,7 +721,7 @@ __kernel void no_validate_bsn_at_sync()
 /* ----- End of ring_rx -----  */
 
 /* ----- ring_tx -----  */
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
 __attribute__((max_global_work_dim(0)))
 #ifndef EMULATOR
 __attribute__((autorun))
@@ -776,7 +777,7 @@ __attribute__((autorun))
 #endif
 __kernel void no_validate_channel()
 {
-  uint no_param_arr[8] = [-1, -1, -1, -1, -1, -1, -1, -1];
+  uint no_param_arr[8] = [~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0];
   while(1){
     // handle MM read/write requests
     handle_ro_mm_request(CH_VALIDATE_CHANNEL, no_param_arr);
@@ -826,7 +827,7 @@ __kernel void tx_encode()
     ushort dp_channel = 0;
     for (int j = 0; j < BLOCK_LENGTH; j++){
 
-#if USE_DP_LAYER
+#ifdef USE_DP_LAYER
       if(j == 0 || (j > DP_HEADER_SIZE)){
 #else
       if(j == 0 || (j > ETH_HEADER_SIZE)){
@@ -836,36 +837,42 @@ __kernel void tx_encode()
       output_10GbE.flags = 0;
       output_10GbE.err = 0;
 
-      if(j == 0){
-#if USE_DP_LAYER
-        dp_channel = input_dp.dp_channel + 1; //Add 1 hop.
-        if ((input_dp.flags & FLAG_SYNC)==FLAG_SYNC){
-          dp_sync_and_bsn = (input_dp.dp_bsn | MASK_SYNC); // set bsn and sync
-        }
-        else{
-          dp_sync_and_bsn = (input_dp.dp_bsn & MASK_BSN); // set bsn and clear sync (if set)
-        }
-#endif            
-        output_10GbE.flags = FLAG_FIRST; 
-        output_10GbE.data = c_header_out[0];
-      }
-      else if (j == 1){
-#if USE_DP_LAYER
-        output_10GbE.data = (c_header_out[1] | ((uint64_t) dp_channel));
+      switch(j)
+      {
+        case 0:
+#ifdef USE_DP_LAYER
+          dp_channel = input_dp.dp_channel + 1; //Add 1 hop.
+          if ((input_dp.flags & FLAG_SYNC)==FLAG_SYNC){
+            dp_sync_and_bsn = (input_dp.dp_bsn | MASK_SYNC); // set bsn and sync
+          }
+          else{
+            dp_sync_and_bsn = (input_dp.dp_bsn & MASK_BSN); // set bsn and clear sync (if set)
+          }
+#endif              
+          output_10GbE.flags = FLAG_FIRST; 
+          output_10GbE.data = c_header_out[0];
+          break;
+
+        case 1:      
+#ifdef USE_DP_LAYER
+          output_10GbE.data = (c_header_out[1] | ((uint64_t) dp_channel));
 #else
-        output_10GbE.data = c_header_out[1];
+          output_10GbE.data = c_header_out[1];
 #endif
-      }
-#if USE_DP_LAYER
-      else if (j == 2){
-        output_10GbE.data = dp_sync_and_bsn;
-      }
+          break;
+      
+#ifdef USE_DP_LAYER
+        case 2:
+          output_10GbE.data = dp_sync_and_bsn;
+          break;
 #endif
-      else {
-        output_10GbE.data = input_dp.data;
-      }
-      if (j == BLOCK_LENGTH-1){
-        output_10GbE.flags = FLAG_LAST; 
+
+        case (BLOCK_LENGTH-1):
+          output_10GbE.flags = FLAG_LAST;
+          // no break, we also want to execute the default case. 
+
+        default:
+          output_10GbE.data = input_dp.data;
       }
       
       write_channel_intel(tx_sosi_channels[laneIndex], output_10GbE);
diff --git a/applications/ta2/bsp/hardware/lofar2_unb2b_ring_bsp/top.vhd b/applications/ta2/bsp/hardware/lofar2_unb2b_ring_bsp/top.vhd
index e8bc077f5559eb052dba6fdc6c9b793bd76eb2d2..33507f51bf32ace02a46dd204711306190958f92 100644
--- a/applications/ta2/bsp/hardware/lofar2_unb2b_ring_bsp/top.vhd
+++ b/applications/ta2/bsp/hardware/lofar2_unb2b_ring_bsp/top.vhd
@@ -94,10 +94,10 @@ ENTITY top IS
     QSFP_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
 
     -- ring transceivers
-    RING_0_RX    : IN    STD_LOGIC_VECTOR(4-1 DOWNTO 0) := (OTHERS => '0');
-    RING_0_TX    : OUT   STD_LOGIC_VECTOR(4-1 DOWNTO 0);
-    RING_1_RX    : IN    STD_LOGIC_VECTOR(4-1 DOWNTO 0) := (OTHERS=>'0');
-    RING_1_TX    : OUT   STD_LOGIC_VECTOR(4-1 DOWNTO 0);
+    RING_0_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS => '0'); -- Using qsfp bus width also for ring interfaces
+    RING_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
+    RING_1_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    RING_1_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
 
     -- LEDs
     QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0)
@@ -115,7 +115,7 @@ ARCHITECTURE str OF top IS
 
   -- RING
   CONSTANT c_nof_ring_bus           : NATURAL := 2;
-  CONSTANT c_ring_bus_w             : NATURAL := 4; --Using 4 phisically there are 12
+  CONSTANT c_ring_bus_w             : NATURAL := 4; --Using 4 phisically, there are 12
   CONSTANT c_nof_streams_ring       : NATURAL := c_ring_bus_w*c_nof_ring_bus; --c_unb2b_board_tr_ring.bus_w*c_nof_ring_bus; -- 8
 
   -- 10GbE
@@ -125,6 +125,16 @@ ARCHITECTURE str OF top IS
   CONSTANT c_fw_version             : t_unb2b_board_fw_version := (1, 1);
   CONSTANT c_mm_clk_freq            : NATURAL := c_unb2b_board_mm_clk_freq_100M;
 
+  -- OpenCL kernel channel widths as defined in the OpenCL kernel
+  CONSTANT c_kernel_10gbe_channel_w      : NATURAL := 104;
+  CONSTANT c_kernel_bs_sosi_channel_w    : NATURAL := 104;
+  CONSTANT c_kernel_lane_sosi_channel_w  : NATURAL := 168;
+  CONSTANT c_kernel_mm_io_mosi_channel_w : NATURAL := 72;
+  CONSTANT c_kernel_mm_io_miso_channel_w : NATURAL := 32;
+
+  -- OpenCL kernel regmap address width as defined in qsys
+  CONSTANT c_kernel_regmap_addr_w : NATURAL := 8;
+
   ------------
   -- Types
   ------------
@@ -305,10 +315,6 @@ ARCHITECTURE str OF top IS
   SIGNAL ta2_unb2b_10GbE_tx_serial_r          : STD_LOGIC_VECTOR(c_max_nof_mac -1 DOWNTO 0);
   SIGNAL ta2_unb2b_10GbE_rx_serial_r          : STD_LOGIC_VECTOR(c_max_nof_mac -1 DOWNTO 0);
 
-  SIGNAL ta2_unb2b_10GbE_ring_ch_src_out_arr  : t_dp_sosi_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
-  SIGNAL ta2_unb2b_10GbE_ring_ch_src_in_arr   : t_dp_siso_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
-  SIGNAL ta2_unb2b_10GbE_ring_ch_snk_out_arr  : t_dp_siso_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
-  SIGNAL ta2_unb2b_10GbE_ring_ch_snk_in_arr   : t_dp_sosi_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
   SIGNAL ta2_unb2b_10GbE_ring_src_out_arr     : t_dp_sosi_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
   SIGNAL ta2_unb2b_10GbE_ring_src_in_arr      : t_dp_siso_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
   SIGNAL ta2_unb2b_10GbE_ring_snk_out_arr     : t_dp_siso_arr(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
@@ -465,39 +471,35 @@ BEGIN
   ----------
   -- 10GbE
   ----------
-  -- Map [0,0; 0,1; 0,2; 0,3; 1,0; 1,1; 1,2; 1,3] -> [0,0; 1,0; 0,1; 1,1; 0,2; 1,2; 0,3; 1,3]
+  -- For the indexing of the lanes we would like to have all even indices (0, 2, 4, 6) to receive from the left (RING_RX_0) and transmit to the right (RING_TX_1).
+  -- For the odd indices it should be the other way around, from RING_RX_1 to RING_TX_0. Therefore we need to rewire those signals as follows:
+  -- For receiving, instead of the array [0,0; 0,1; 0,2; 0,3; 1,0; 1,1; 1,2; 1,3] we need the array [0,0; 1,0; 0,1; 1,1; 0,2; 1,2; 0,3; 1,3] where each element is (RING bus index, stream index of that bus).
+  -- Because all of all the RING busses are concatenated into one array we can do the following:
+  -- Rewire [0, 1, 2, 3, 4, 5, 6, 7] to [0, 4, 1, 5, 2, 6, 3, 7]. So now we have the even indices containing the interfaces from RING_0 (receive from the left) 
+  -- and the odd indices containing RING_1 (receive from the right).
+  -- For transmitting we need to have the even indices containing RING_1 (transmit to the right) and the odd having RING_0 (transmit to the left)
   gen_ring_lanes : FOR I IN 0 TO c_ring_bus_w -1 GENERATE
-     ta2_unb2b_10GbE_ring_rx_serial_r(I*2) <= unb2b_board_ring_io_serial_rx_arr(I);
-     ta2_unb2b_10GbE_ring_rx_serial_r(I*2 +1) <= unb2b_board_ring_io_serial_rx_arr(I+c_ring_bus_w);
-     unb2b_board_ring_io_serial_tx_arr(I) <= ta2_unb2b_10GbE_ring_tx_serial_r(I*2);
-     unb2b_board_ring_io_serial_tx_arr(I+c_ring_bus_w) <= ta2_unb2b_10GbE_ring_tx_serial_r(I*2 +1);
-  END GENERATE;
-
-  -- Map to kernel channel, swapping every two elements of the sink.
-  ta2_unb2b_10GbE_ring_ch_src_out_arr <= ta2_unb2b_10GbE_ring_src_out_arr;
-  ta2_unb2b_10GbE_ring_src_in_arr <= ta2_unb2b_10GbE_ring_ch_src_in_arr;
-  gen_ring_ch : FOR I IN 0 TO c_nof_streams_ring/2 -1 GENERATE 
-    ta2_unb2b_10GbE_ring_snk_in_arr(2*I) <= ta2_unb2b_10GbE_ring_ch_snk_in_arr(2*I+1);
-    ta2_unb2b_10GbE_ring_snk_in_arr(2*I+1) <= ta2_unb2b_10GbE_ring_ch_snk_in_arr(2*I);
-    ta2_unb2b_10GbE_ring_ch_snk_out_arr(2*I+1) <= ta2_unb2b_10GbE_ring_snk_out_arr(2*I);
-    ta2_unb2b_10GbE_ring_ch_snk_out_arr(2*I) <= ta2_unb2b_10GbE_ring_snk_out_arr(2*I+1);
+     ta2_unb2b_10GbE_ring_rx_serial_r(I*2)             <= unb2b_board_ring_io_serial_rx_arr(I);
+     ta2_unb2b_10GbE_ring_rx_serial_r(I*2 +1)          <= unb2b_board_ring_io_serial_rx_arr(I+c_ring_bus_w);
+     unb2b_board_ring_io_serial_tx_arr(I)              <= ta2_unb2b_10GbE_ring_tx_serial_r(I*2 +1);
+     unb2b_board_ring_io_serial_tx_arr(I+c_ring_bus_w) <= ta2_unb2b_10GbE_ring_tx_serial_r(I*2);
   END GENERATE;
 
   -- Wire ring and qsfp to one array
-  ta2_unb2b_10GbE_snk_in_arr(c_nof_streams_qsfp-1 DOWNTO 0) <= ta2_unb2b_10GbE_qsfp_snk_in_arr;
+  ta2_unb2b_10GbE_snk_in_arr(c_nof_streams_qsfp-1 DOWNTO 0)             <= ta2_unb2b_10GbE_qsfp_snk_in_arr;
   ta2_unb2b_10GbE_snk_in_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp) <= ta2_unb2b_10GbE_ring_snk_in_arr;
-  ta2_unb2b_10GbE_qsfp_snk_out_arr <= ta2_unb2b_10GbE_snk_out_arr(c_nof_streams_qsfp-1 DOWNTO 0);
-  ta2_unb2b_10GbE_ring_snk_out_arr <= ta2_unb2b_10GbE_snk_out_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
+  ta2_unb2b_10GbE_qsfp_snk_out_arr                                      <= ta2_unb2b_10GbE_snk_out_arr(c_nof_streams_qsfp-1 DOWNTO 0);
+  ta2_unb2b_10GbE_ring_snk_out_arr                                      <= ta2_unb2b_10GbE_snk_out_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
   
-  ta2_unb2b_10GbE_qsfp_src_out_arr <= ta2_unb2b_10GbE_src_out_arr(c_nof_streams_qsfp-1 DOWNTO 0);
-  ta2_unb2b_10GbE_ring_src_out_arr <= ta2_unb2b_10GbE_src_out_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
-  ta2_unb2b_10GbE_src_in_arr(c_nof_streams_qsfp-1 DOWNTO 0) <= ta2_unb2b_10GbE_qsfp_src_in_arr;
+  ta2_unb2b_10GbE_qsfp_src_out_arr                                      <= ta2_unb2b_10GbE_src_out_arr(c_nof_streams_qsfp-1 DOWNTO 0);
+  ta2_unb2b_10GbE_ring_src_out_arr                                      <= ta2_unb2b_10GbE_src_out_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
+  ta2_unb2b_10GbE_src_in_arr(c_nof_streams_qsfp-1 DOWNTO 0)             <= ta2_unb2b_10GbE_qsfp_src_in_arr;
   ta2_unb2b_10GbE_src_in_arr(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp) <= ta2_unb2b_10GbE_ring_src_in_arr;
   
-  ta2_unb2b_10GbE_rx_serial_r(c_nof_streams_qsfp-1 DOWNTO 0) <= unb2b_board_front_io_serial_rx_arr;
-  ta2_unb2b_10GbE_rx_serial_r(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp) <=ta2_unb2b_10GbE_ring_rx_serial_r;
-  unb2b_board_front_io_serial_tx_arr <= ta2_unb2b_10GbE_tx_serial_r(c_nof_streams_qsfp-1 DOWNTO 0);
-  ta2_unb2b_10GbE_ring_tx_serial_r <= ta2_unb2b_10GbE_tx_serial_r(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
+  ta2_unb2b_10GbE_rx_serial_r(c_nof_streams_qsfp-1 DOWNTO 0)             <= unb2b_board_front_io_serial_rx_arr;
+  ta2_unb2b_10GbE_rx_serial_r(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp) <= ta2_unb2b_10GbE_ring_rx_serial_r;
+  unb2b_board_front_io_serial_tx_arr                                     <= ta2_unb2b_10GbE_tx_serial_r(c_nof_streams_qsfp-1 DOWNTO 0);
+  ta2_unb2b_10GbE_ring_tx_serial_r                                       <= ta2_unb2b_10GbE_tx_serial_r(c_max_nof_mac-1 DOWNTO c_nof_streams_qsfp);
 
   -- tr_10GbE
   u_ta2_unb2b_10GbE : ENTITY ta2_unb2b_10GbE_lib.ta2_unb2b_10GbE
@@ -554,7 +556,7 @@ BEGIN
   u_ta2_channel_cross_lanes : ENTITY ta2_channel_cross_lib.ta2_channel_cross
   GENERIC MAP(
     g_nof_streams => g_nof_lanes,
-    g_nof_bytes => 8,
+    g_nof_bytes => c_longword_sz,
     g_reverse_bytes => TRUE,
     g_use_bsn => TRUE,
     g_use_sync => TRUE,
@@ -584,7 +586,7 @@ BEGIN
   u_ta2_channel_cross_bs_sosi : ENTITY ta2_channel_cross_lib.ta2_channel_cross
   GENERIC MAP(
     g_nof_streams => 1,
-    g_nof_bytes => 4,
+    g_nof_bytes => c_word_sz,
     g_reverse_bytes => TRUE,
     g_use_bsn => TRUE,
     g_use_sync => TRUE
@@ -606,7 +608,7 @@ BEGIN
   u_ta2_channel_cross_rx_monitor : ENTITY ta2_channel_cross_lib.ta2_channel_cross
   GENERIC MAP(
     g_nof_streams => g_nof_lanes,
-    g_nof_bytes => 8,
+    g_nof_bytes => c_longword_sz,
     g_reverse_bytes => TRUE,
     g_use_bsn => TRUE,
     g_use_sync => TRUE,
@@ -632,7 +634,7 @@ BEGIN
   u_ta2_channel_cross_tx_monitor : ENTITY ta2_channel_cross_lib.ta2_channel_cross
   GENERIC MAP(
     g_nof_streams => g_nof_lanes,
-    g_nof_bytes => 8,
+    g_nof_bytes => c_longword_sz,
     g_reverse_bytes => TRUE,
     g_use_bsn => TRUE,
     g_use_sync => TRUE,
@@ -660,7 +662,7 @@ BEGIN
     dp_demux_tx_monitor_sosi_arr <= tx_monitor_sosi_arr;
 
     FOR I IN 0 TO g_nof_lanes-1 LOOP
-      dp_demux_rx_monitor_sosi_arr(I).channel <= nof_hops_to_source_rn(rx_monitor_sosi_arr(I).channel, this_rn_id, sdp_info.N_rn, ((I+1) MOD 2));
+      dp_demux_rx_monitor_sosi_arr(I).channel <= nof_hops_to_source_rn(rx_monitor_sosi_arr(I).channel, this_rn_id, sdp_info.N_rn, ((I+1) MOD 2)); -- Use (I+1) MOD 2 to get 1 if I is even and 0 if I is odd
       dp_demux_tx_monitor_sosi_arr(I).channel <= nof_hops_to_source_rn(tx_monitor_sosi_arr(I).channel, this_rn_id, sdp_info.N_rn, ((I+1) MOD 2));
     END LOOP;
   END PROCESS;
@@ -941,219 +943,220 @@ BEGIN
     board_kernel_register_mem_writedata         => board_kernel_register_mem_writedata,
     board_kernel_register_mem_byteenable        => board_kernel_register_mem_byteenable,  
 
-    board_kernel_stream_src_10GbE_ring_0_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(0).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_0_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(0).valid,
-    board_kernel_stream_src_10GbE_ring_0_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(0).ready,
-    board_kernel_stream_snk_10GbE_ring_0_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(0).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_0_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(0).valid,
-    board_kernel_stream_snk_10GbE_ring_0_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(0).ready,
-
-    board_kernel_stream_src_10GbE_ring_1_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(1).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_1_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(1).valid,
-    board_kernel_stream_src_10GbE_ring_1_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(1).ready,
-    board_kernel_stream_snk_10GbE_ring_1_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(1).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_1_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(1).valid,
-    board_kernel_stream_snk_10GbE_ring_1_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(1).ready,
-
-    board_kernel_stream_src_10GbE_ring_2_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(2).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_2_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(2).valid,
-    board_kernel_stream_src_10GbE_ring_2_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(2).ready,
-    board_kernel_stream_snk_10GbE_ring_2_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(2).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_2_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(2).valid,
-    board_kernel_stream_snk_10GbE_ring_2_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(2).ready,
-
-    board_kernel_stream_src_10GbE_ring_3_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(3).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_3_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(3).valid,
-    board_kernel_stream_src_10GbE_ring_3_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(3).ready,
-    board_kernel_stream_snk_10GbE_ring_3_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(3).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_3_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(3).valid,
-    board_kernel_stream_snk_10GbE_ring_3_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(3).ready,
-
-    board_kernel_stream_src_10GbE_ring_4_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(4).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_4_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(4).valid,
-    board_kernel_stream_src_10GbE_ring_4_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(4).ready,
-    board_kernel_stream_snk_10GbE_ring_4_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(4).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_4_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(4).valid,
-    board_kernel_stream_snk_10GbE_ring_4_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(4).ready,
-
-    board_kernel_stream_src_10GbE_ring_5_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(5).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_5_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(5).valid,
-    board_kernel_stream_src_10GbE_ring_5_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(5).ready,
-    board_kernel_stream_snk_10GbE_ring_5_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(5).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_5_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(5).valid,
-    board_kernel_stream_snk_10GbE_ring_5_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(5).ready,
-
-    board_kernel_stream_src_10GbE_ring_6_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(6).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_6_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(6).valid,
-    board_kernel_stream_src_10GbE_ring_6_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(6).ready,
-    board_kernel_stream_snk_10GbE_ring_6_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(6).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_6_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(6).valid,
-    board_kernel_stream_snk_10GbE_ring_6_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(6).ready,
-
-    board_kernel_stream_src_10GbE_ring_7_data   => ta2_unb2b_10GbE_ring_ch_src_out_arr(7).data(103 DOWNTO 0),
-    board_kernel_stream_src_10GbE_ring_7_valid  => ta2_unb2b_10GbE_ring_ch_src_out_arr(7).valid,
-    board_kernel_stream_src_10GbE_ring_7_ready  => ta2_unb2b_10GbE_ring_ch_src_in_arr(7).ready,
-    board_kernel_stream_snk_10GbE_ring_7_data   => ta2_unb2b_10GbE_ring_ch_snk_in_arr(7).data(103 DOWNTO 0),
-    board_kernel_stream_snk_10GbE_ring_7_valid  => ta2_unb2b_10GbE_ring_ch_snk_in_arr(7).valid,
-    board_kernel_stream_snk_10GbE_ring_7_ready  => ta2_unb2b_10GbE_ring_ch_snk_out_arr(7).ready,
-
-    board_kernel_stream_src_10GbE_qsfp_0_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(0).data(103 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_0_data   => ta2_unb2b_10GbE_ring_src_out_arr(0).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_0_valid  => ta2_unb2b_10GbE_ring_src_out_arr(0).valid,
+    board_kernel_stream_src_10GbE_ring_0_ready  => ta2_unb2b_10GbE_ring_src_in_arr(0).ready,
+    board_kernel_stream_snk_10GbE_ring_0_data   => ta2_unb2b_10GbE_ring_snk_in_arr(0).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_0_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(0).valid,
+    board_kernel_stream_snk_10GbE_ring_0_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(0).ready,
+
+    board_kernel_stream_src_10GbE_ring_1_data   => ta2_unb2b_10GbE_ring_src_out_arr(1).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_1_valid  => ta2_unb2b_10GbE_ring_src_out_arr(1).valid,
+    board_kernel_stream_src_10GbE_ring_1_ready  => ta2_unb2b_10GbE_ring_src_in_arr(1).ready,
+    board_kernel_stream_snk_10GbE_ring_1_data   => ta2_unb2b_10GbE_ring_snk_in_arr(1).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_1_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(1).valid,
+    board_kernel_stream_snk_10GbE_ring_1_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(1).ready,
+
+    board_kernel_stream_src_10GbE_ring_2_data   => ta2_unb2b_10GbE_ring_src_out_arr(2).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_2_valid  => ta2_unb2b_10GbE_ring_src_out_arr(2).valid,
+    board_kernel_stream_src_10GbE_ring_2_ready  => ta2_unb2b_10GbE_ring_src_in_arr(2).ready,
+    board_kernel_stream_snk_10GbE_ring_2_data   => ta2_unb2b_10GbE_ring_snk_in_arr(2).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_2_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(2).valid,
+    board_kernel_stream_snk_10GbE_ring_2_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(2).ready,
+
+    board_kernel_stream_src_10GbE_ring_3_data   => ta2_unb2b_10GbE_ring_src_out_arr(3).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_3_valid  => ta2_unb2b_10GbE_ring_src_out_arr(3).valid,
+    board_kernel_stream_src_10GbE_ring_3_ready  => ta2_unb2b_10GbE_ring_src_in_arr(3).ready,
+    board_kernel_stream_snk_10GbE_ring_3_data   => ta2_unb2b_10GbE_ring_snk_in_arr(3).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_3_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(3).valid,
+    board_kernel_stream_snk_10GbE_ring_3_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(3).ready,
+
+    board_kernel_stream_src_10GbE_ring_4_data   => ta2_unb2b_10GbE_ring_src_out_arr(4).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_4_valid  => ta2_unb2b_10GbE_ring_src_out_arr(4).valid,
+    board_kernel_stream_src_10GbE_ring_4_ready  => ta2_unb2b_10GbE_ring_src_in_arr(4).ready,
+    board_kernel_stream_snk_10GbE_ring_4_data   => ta2_unb2b_10GbE_ring_snk_in_arr(4).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_4_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(4).valid,
+    board_kernel_stream_snk_10GbE_ring_4_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(4).ready,
+
+    board_kernel_stream_src_10GbE_ring_5_data   => ta2_unb2b_10GbE_ring_src_out_arr(5).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_5_valid  => ta2_unb2b_10GbE_ring_src_out_arr(5).valid,
+    board_kernel_stream_src_10GbE_ring_5_ready  => ta2_unb2b_10GbE_ring_src_in_arr(5).ready,
+    board_kernel_stream_snk_10GbE_ring_5_data   => ta2_unb2b_10GbE_ring_snk_in_arr(5).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_5_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(5).valid,
+    board_kernel_stream_snk_10GbE_ring_5_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(5).ready,
+
+    board_kernel_stream_src_10GbE_ring_6_data   => ta2_unb2b_10GbE_ring_src_out_arr(6).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_6_valid  => ta2_unb2b_10GbE_ring_src_out_arr(6).valid,
+    board_kernel_stream_src_10GbE_ring_6_ready  => ta2_unb2b_10GbE_ring_src_in_arr(6).ready,
+    board_kernel_stream_snk_10GbE_ring_6_data   => ta2_unb2b_10GbE_ring_snk_in_arr(6).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_6_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(6).valid,
+    board_kernel_stream_snk_10GbE_ring_6_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(6).ready,
+
+    board_kernel_stream_src_10GbE_ring_7_data   => ta2_unb2b_10GbE_ring_src_out_arr(7).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_src_10GbE_ring_7_valid  => ta2_unb2b_10GbE_ring_src_out_arr(7).valid,
+    board_kernel_stream_src_10GbE_ring_7_ready  => ta2_unb2b_10GbE_ring_src_in_arr(7).ready,
+    board_kernel_stream_snk_10GbE_ring_7_data   => ta2_unb2b_10GbE_ring_snk_in_arr(7).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_ring_7_valid  => ta2_unb2b_10GbE_ring_snk_in_arr(7).valid,
+    board_kernel_stream_snk_10GbE_ring_7_ready  => ta2_unb2b_10GbE_ring_snk_out_arr(7).ready,
+
+    board_kernel_stream_src_10GbE_qsfp_0_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(0).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_10GbE_qsfp_0_valid  => ta2_unb2b_10GbE_qsfp_src_out_arr(0).valid,
     board_kernel_stream_src_10GbE_qsfp_0_ready  => ta2_unb2b_10GbE_qsfp_src_in_arr(0).ready,
-    board_kernel_stream_snk_10GbE_qsfp_0_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(0).data(103 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_qsfp_0_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(0).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_10GbE_qsfp_0_valid  => ta2_unb2b_10GbE_qsfp_snk_in_arr(0).valid,
     board_kernel_stream_snk_10GbE_qsfp_0_ready  => ta2_unb2b_10GbE_qsfp_snk_out_arr(0).ready,
 
-    board_kernel_stream_src_10GbE_qsfp_1_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(1).data(103 DOWNTO 0),
+    board_kernel_stream_src_10GbE_qsfp_1_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(1).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_10GbE_qsfp_1_valid  => ta2_unb2b_10GbE_qsfp_src_out_arr(1).valid,
     board_kernel_stream_src_10GbE_qsfp_1_ready  => ta2_unb2b_10GbE_qsfp_src_in_arr(1).ready,
-    board_kernel_stream_snk_10GbE_qsfp_1_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(1).data(103 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_qsfp_1_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(1).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_10GbE_qsfp_1_valid  => ta2_unb2b_10GbE_qsfp_snk_in_arr(1).valid,
     board_kernel_stream_snk_10GbE_qsfp_1_ready  => ta2_unb2b_10GbE_qsfp_snk_out_arr(1).ready,
 
-    board_kernel_stream_src_10GbE_qsfp_2_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(2).data(103 DOWNTO 0),
+    board_kernel_stream_src_10GbE_qsfp_2_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(2).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_10GbE_qsfp_2_valid  => ta2_unb2b_10GbE_qsfp_src_out_arr(2).valid,
     board_kernel_stream_src_10GbE_qsfp_2_ready  => ta2_unb2b_10GbE_qsfp_src_in_arr(2).ready,
-    board_kernel_stream_snk_10GbE_qsfp_2_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(2).data(103 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_qsfp_2_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(2).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_10GbE_qsfp_2_valid  => ta2_unb2b_10GbE_qsfp_snk_in_arr(2).valid,
     board_kernel_stream_snk_10GbE_qsfp_2_ready  => ta2_unb2b_10GbE_qsfp_snk_out_arr(2).ready,
 
-    board_kernel_stream_src_10GbE_qsfp_3_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(3).data(103 DOWNTO 0),
+    board_kernel_stream_src_10GbE_qsfp_3_data   => ta2_unb2b_10GbE_qsfp_src_out_arr(3).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_10GbE_qsfp_3_valid  => ta2_unb2b_10GbE_qsfp_src_out_arr(3).valid,
     board_kernel_stream_src_10GbE_qsfp_3_ready  => ta2_unb2b_10GbE_qsfp_src_in_arr(3).ready,
-    board_kernel_stream_snk_10GbE_qsfp_3_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(3).data(103 DOWNTO 0),
+    board_kernel_stream_snk_10GbE_qsfp_3_data   => ta2_unb2b_10GbE_qsfp_snk_in_arr(3).data(c_kernel_10gbe_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_10GbE_qsfp_3_valid  => ta2_unb2b_10GbE_qsfp_snk_in_arr(3).valid,
     board_kernel_stream_snk_10GbE_qsfp_3_ready  => ta2_unb2b_10GbE_qsfp_snk_out_arr(3).ready,
 
-    board_kernel_stream_src_lane_0_data         => kernel_to_lane_sosi_arr(0).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_0_data         => kernel_to_lane_sosi_arr(0).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_0_valid        => kernel_to_lane_sosi_arr(0).valid,
     board_kernel_stream_src_lane_0_ready        => kernel_to_lane_siso_arr(0).ready,
-    board_kernel_stream_snk_lane_0_data         => kernel_from_lane_sosi_arr(0).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_0_data         => kernel_from_lane_sosi_arr(0).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_0_valid        => kernel_from_lane_sosi_arr(0).valid,
     board_kernel_stream_snk_lane_0_ready        => kernel_from_lane_siso_arr(0).ready,
 
-    board_kernel_stream_src_lane_1_data         => kernel_to_lane_sosi_arr(1).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_1_data         => kernel_to_lane_sosi_arr(1).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_1_valid        => kernel_to_lane_sosi_arr(1).valid,
     board_kernel_stream_src_lane_1_ready        => kernel_to_lane_siso_arr(1).ready,
-    board_kernel_stream_snk_lane_1_data         => kernel_from_lane_sosi_arr(1).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_1_data         => kernel_from_lane_sosi_arr(1).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_1_valid        => kernel_from_lane_sosi_arr(1).valid,
     board_kernel_stream_snk_lane_1_ready        => kernel_from_lane_siso_arr(1).ready,
 
-    board_kernel_stream_src_lane_2_data         => kernel_to_lane_sosi_arr(2).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_2_data         => kernel_to_lane_sosi_arr(2).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_2_valid        => kernel_to_lane_sosi_arr(2).valid,
     board_kernel_stream_src_lane_2_ready        => kernel_to_lane_siso_arr(2).ready,
-    board_kernel_stream_snk_lane_2_data         => kernel_from_lane_sosi_arr(2).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_2_data         => kernel_from_lane_sosi_arr(2).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_2_valid        => kernel_from_lane_sosi_arr(2).valid,
     board_kernel_stream_snk_lane_2_ready        => kernel_from_lane_siso_arr(2).ready,
 
-    board_kernel_stream_src_lane_3_data         => kernel_to_lane_sosi_arr(3).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_3_data         => kernel_to_lane_sosi_arr(3).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_3_valid        => kernel_to_lane_sosi_arr(3).valid,
     board_kernel_stream_src_lane_3_ready        => kernel_to_lane_siso_arr(3).ready,
-    board_kernel_stream_snk_lane_3_data         => kernel_from_lane_sosi_arr(3).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_3_data         => kernel_from_lane_sosi_arr(3).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_3_valid        => kernel_from_lane_sosi_arr(3).valid,
     board_kernel_stream_snk_lane_3_ready        => kernel_from_lane_siso_arr(3).ready,
 
-    board_kernel_stream_src_lane_4_data         => kernel_to_lane_sosi_arr(4).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_4_data         => kernel_to_lane_sosi_arr(4).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_4_valid        => kernel_to_lane_sosi_arr(4).valid,
     board_kernel_stream_src_lane_4_ready        => kernel_to_lane_siso_arr(4).ready,
-    board_kernel_stream_snk_lane_4_data         => kernel_from_lane_sosi_arr(4).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_4_data         => kernel_from_lane_sosi_arr(4).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_4_valid        => kernel_from_lane_sosi_arr(4).valid,
     board_kernel_stream_snk_lane_4_ready        => kernel_from_lane_siso_arr(4).ready,
 
-    board_kernel_stream_src_lane_5_data         => kernel_to_lane_sosi_arr(5).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_5_data         => kernel_to_lane_sosi_arr(5).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_5_valid        => kernel_to_lane_sosi_arr(5).valid,
     board_kernel_stream_src_lane_5_ready        => kernel_to_lane_siso_arr(5).ready,
-    board_kernel_stream_snk_lane_5_data         => kernel_from_lane_sosi_arr(5).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_5_data         => kernel_from_lane_sosi_arr(5).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_5_valid        => kernel_from_lane_sosi_arr(5).valid,
     board_kernel_stream_snk_lane_5_ready        => kernel_from_lane_siso_arr(5).ready,
 
-    board_kernel_stream_src_lane_6_data         => kernel_to_lane_sosi_arr(6).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_6_data         => kernel_to_lane_sosi_arr(6).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_6_valid        => kernel_to_lane_sosi_arr(6).valid,
     board_kernel_stream_src_lane_6_ready        => kernel_to_lane_siso_arr(6).ready,
-    board_kernel_stream_snk_lane_6_data         => kernel_from_lane_sosi_arr(6).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_6_data         => kernel_from_lane_sosi_arr(6).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_6_valid        => kernel_from_lane_sosi_arr(6).valid,
     board_kernel_stream_snk_lane_6_ready        => kernel_from_lane_siso_arr(6).ready,
 
-    board_kernel_stream_src_lane_7_data         => kernel_to_lane_sosi_arr(7).data(167 DOWNTO 0),
+    board_kernel_stream_src_lane_7_data         => kernel_to_lane_sosi_arr(7).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_lane_7_valid        => kernel_to_lane_sosi_arr(7).valid,
     board_kernel_stream_src_lane_7_ready        => kernel_to_lane_siso_arr(7).ready,
-    board_kernel_stream_snk_lane_7_data         => kernel_from_lane_sosi_arr(7).data(167 DOWNTO 0),
+    board_kernel_stream_snk_lane_7_data         => kernel_from_lane_sosi_arr(7).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_lane_7_valid        => kernel_from_lane_sosi_arr(7).valid,
     board_kernel_stream_snk_lane_7_ready        => kernel_from_lane_siso_arr(7).ready,
 
-    board_kernel_stream_snk_rx_monitor_0_data   => kernel_rx_monitor_sosi_arr(0).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_0_data   => kernel_rx_monitor_sosi_arr(0).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_0_valid  => kernel_rx_monitor_sosi_arr(0).valid,
     board_kernel_stream_snk_rx_monitor_0_ready  => kernel_rx_monitor_siso_arr(0).ready,
-    board_kernel_stream_snk_tx_monitor_0_data   => kernel_tx_monitor_sosi_arr(0).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_0_data   => kernel_tx_monitor_sosi_arr(0).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_0_valid  => kernel_tx_monitor_sosi_arr(0).valid,
     board_kernel_stream_snk_tx_monitor_0_ready  => kernel_tx_monitor_siso_arr(0).ready,
 
-    board_kernel_stream_snk_rx_monitor_1_data   => kernel_rx_monitor_sosi_arr(1).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_1_data   => kernel_rx_monitor_sosi_arr(1).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_1_valid  => kernel_rx_monitor_sosi_arr(1).valid,
     board_kernel_stream_snk_rx_monitor_1_ready  => kernel_rx_monitor_siso_arr(1).ready,
-    board_kernel_stream_snk_tx_monitor_1_data   => kernel_tx_monitor_sosi_arr(1).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_1_data   => kernel_tx_monitor_sosi_arr(1).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_1_valid  => kernel_tx_monitor_sosi_arr(1).valid,
     board_kernel_stream_snk_tx_monitor_1_ready  => kernel_tx_monitor_siso_arr(1).ready,
 
-    board_kernel_stream_snk_rx_monitor_2_data   => kernel_rx_monitor_sosi_arr(2).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_2_data   => kernel_rx_monitor_sosi_arr(2).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_2_valid  => kernel_rx_monitor_sosi_arr(2).valid,
     board_kernel_stream_snk_rx_monitor_2_ready  => kernel_rx_monitor_siso_arr(2).ready,
-    board_kernel_stream_snk_tx_monitor_2_data   => kernel_tx_monitor_sosi_arr(2).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_2_data   => kernel_tx_monitor_sosi_arr(2).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_2_valid  => kernel_tx_monitor_sosi_arr(2).valid,
     board_kernel_stream_snk_tx_monitor_2_ready  => kernel_tx_monitor_siso_arr(2).ready,
 
-    board_kernel_stream_snk_rx_monitor_3_data   => kernel_rx_monitor_sosi_arr(3).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_3_data   => kernel_rx_monitor_sosi_arr(3).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_3_valid  => kernel_rx_monitor_sosi_arr(3).valid,
     board_kernel_stream_snk_rx_monitor_3_ready  => kernel_rx_monitor_siso_arr(3).ready,
-    board_kernel_stream_snk_tx_monitor_3_data   => kernel_tx_monitor_sosi_arr(3).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_3_data   => kernel_tx_monitor_sosi_arr(3).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_3_valid  => kernel_tx_monitor_sosi_arr(3).valid,
     board_kernel_stream_snk_tx_monitor_3_ready  => kernel_tx_monitor_siso_arr(3).ready,
 
-    board_kernel_stream_snk_rx_monitor_4_data   => kernel_rx_monitor_sosi_arr(4).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_4_data   => kernel_rx_monitor_sosi_arr(4).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_4_valid  => kernel_rx_monitor_sosi_arr(4).valid,
     board_kernel_stream_snk_rx_monitor_4_ready  => kernel_rx_monitor_siso_arr(4).ready,
-    board_kernel_stream_snk_tx_monitor_4_data   => kernel_tx_monitor_sosi_arr(4).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_4_data   => kernel_tx_monitor_sosi_arr(4).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_4_valid  => kernel_tx_monitor_sosi_arr(4).valid,
     board_kernel_stream_snk_tx_monitor_4_ready  => kernel_tx_monitor_siso_arr(4).ready,
 
-    board_kernel_stream_snk_rx_monitor_5_data   => kernel_rx_monitor_sosi_arr(5).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_5_data   => kernel_rx_monitor_sosi_arr(5).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_5_valid  => kernel_rx_monitor_sosi_arr(5).valid,
     board_kernel_stream_snk_rx_monitor_5_ready  => kernel_rx_monitor_siso_arr(5).ready,
-    board_kernel_stream_snk_tx_monitor_5_data   => kernel_tx_monitor_sosi_arr(5).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_5_data   => kernel_tx_monitor_sosi_arr(5).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_5_valid  => kernel_tx_monitor_sosi_arr(5).valid,
     board_kernel_stream_snk_tx_monitor_5_ready  => kernel_tx_monitor_siso_arr(5).ready,
 
-    board_kernel_stream_snk_rx_monitor_6_data   => kernel_rx_monitor_sosi_arr(6).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_6_data   => kernel_rx_monitor_sosi_arr(6).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_6_valid  => kernel_rx_monitor_sosi_arr(6).valid,
     board_kernel_stream_snk_rx_monitor_6_ready  => kernel_rx_monitor_siso_arr(6).ready,
-    board_kernel_stream_snk_tx_monitor_6_data   => kernel_tx_monitor_sosi_arr(6).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_6_data   => kernel_tx_monitor_sosi_arr(6).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_6_valid  => kernel_tx_monitor_sosi_arr(6).valid,
     board_kernel_stream_snk_tx_monitor_6_ready  => kernel_tx_monitor_siso_arr(6).ready,
 
-    board_kernel_stream_snk_rx_monitor_7_data   => kernel_rx_monitor_sosi_arr(7).data(167 DOWNTO 0),
+    board_kernel_stream_snk_rx_monitor_7_data   => kernel_rx_monitor_sosi_arr(7).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_rx_monitor_7_valid  => kernel_rx_monitor_sosi_arr(7).valid,
     board_kernel_stream_snk_rx_monitor_7_ready  => kernel_rx_monitor_siso_arr(7).ready,
-    board_kernel_stream_snk_tx_monitor_7_data   => kernel_tx_monitor_sosi_arr(7).data(167 DOWNTO 0),
+    board_kernel_stream_snk_tx_monitor_7_data   => kernel_tx_monitor_sosi_arr(7).data(c_kernel_lane_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_tx_monitor_7_valid  => kernel_tx_monitor_sosi_arr(7).valid,
     board_kernel_stream_snk_tx_monitor_7_ready  => kernel_tx_monitor_siso_arr(7).ready,
 
-    board_kernel_stream_src_bs_data             => kernel_bs_sosi.data(103 DOWNTO 0),
+    board_kernel_stream_src_bs_data             => kernel_bs_sosi.data(c_kernel_bs_sosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_bs_valid            => kernel_bs_sosi.valid,
     board_kernel_stream_src_bs_ready            => OPEN,
 
-    board_kernel_stream_src_mm_io_data          => ta2_unb2b_mm_io_src_out.data(71 DOWNTO 0),
+    board_kernel_stream_src_mm_io_data          => ta2_unb2b_mm_io_src_out.data(c_kernel_mm_io_mosi_channel_w-1 DOWNTO 0),
     board_kernel_stream_src_mm_io_valid         => ta2_unb2b_mm_io_src_out.valid,
     board_kernel_stream_src_mm_io_ready         => ta2_unb2b_mm_io_src_in.ready,
-    board_kernel_stream_snk_mm_io_data          => ta2_unb2b_mm_io_snk_in.data(31 DOWNTO 0),
+    board_kernel_stream_snk_mm_io_data          => ta2_unb2b_mm_io_snk_in.data(c_kernel_mm_io_miso_channel_w-1 DOWNTO 0),
     board_kernel_stream_snk_mm_io_valid         => ta2_unb2b_mm_io_snk_in.valid,
     board_kernel_stream_snk_mm_io_ready         => ta2_unb2b_mm_io_snk_out.ready
 
   );
 
-  i_reset_n <= NOT mm_rst;
-  i_kernel_rst <= NOT board_kernel_reset_reset_n;
+  i_reset_n <= NOT mm_rst; -- First reset OpenCL components in qsys (board)
+  i_kernel_rst <= NOT board_kernel_reset_reset_n; -- qsys output used to reset all OpenCL BSP components
 
-  -- Kernel should start later than BSP
+  -- Kernel should start later than BSP. Delaying the reset from the qsys output to form the reset of the OpenCL kernel.
+  -- This way it is ensured the OpenCL kernel does not start reading/writing data before the components in the OpenCL BSP are ready.
   u_common_areset : ENTITY common_lib.common_areset
   GENERIC MAP (
     g_rst_level => '0',
@@ -1471,7 +1474,7 @@ BEGIN
          
       kernel_irq_irq                            => board_kernel_irq_irq,            
 
-      reg_ta2_unb2b_mm_io_address_export        => reg_ta2_unb2b_mm_io_mosi.address(7 DOWNTO 0),
+      reg_ta2_unb2b_mm_io_address_export        => reg_ta2_unb2b_mm_io_mosi.address(c_kernel_regmap_addr_w-1 DOWNTO 0),
       reg_ta2_unb2b_mm_io_read_export           => reg_ta2_unb2b_mm_io_mosi.rd,
       reg_ta2_unb2b_mm_io_readdata_export       => reg_ta2_unb2b_mm_io_miso.rddata(c_word_w-1 DOWNTO 0),
       reg_ta2_unb2b_mm_io_write_export          => reg_ta2_unb2b_mm_io_mosi.wr,
diff --git a/applications/ta2/ip/ta2_channel_cross/ta2_channel_cross.vhd b/applications/ta2/ip/ta2_channel_cross/ta2_channel_cross.vhd
index 07f83a7a19f1d9949feb26d47b126c299bb1f9f9..4203f8ac92663d13f948d8b1bd6d93d3f309c0e5 100644
--- a/applications/ta2/ip/ta2_channel_cross/ta2_channel_cross.vhd
+++ b/applications/ta2/ip/ta2_channel_cross/ta2_channel_cross.vhd
@@ -55,7 +55,9 @@
 --   |           |         | generics                                               |
 --   +-----------+---------+--------------------------------------------------------+
 -- Remark:
--- . It may be nice to be able to configure a larger empty field to support g_nof_bytes > 32. Keep 
+-- . This IP should be configured according to the corresponding IO channel in the OpenCL code.
+-- . It may be nice to be able to configure a larger empty field to support g_nof_bytes > 32 
+--   but that would mean that the data structure in the OpenCL code must be adapted. Keep 
 --   in mind that IO channels must be a multiple of 8 bits (bytes).
 
 LIBRARY IEEE, common_lib, dp_lib, technology_lib;
@@ -67,7 +69,7 @@ USE technology_lib.technology_pkg.ALL;
 ENTITY ta2_channel_cross IS      
   GENERIC (
     g_nof_streams   : NATURAL;
-    g_nof_bytes     : POSITIVE; -- Max = 32
+    g_nof_bytes     : POSITIVE; -- nof bytes in payload field, Max = 32
     g_reverse_bytes : BOOLEAN := TRUE;
     g_fifo_size     : NATURAL := 8;
     g_use_err       : BOOLEAN := FALSE;
@@ -101,15 +103,20 @@ END ta2_channel_cross;
 
 ARCHITECTURE str OF ta2_channel_cross IS
 
-  CONSTANT c_data_w  : NATURAL := c_byte_w * g_nof_bytes;
-  CONSTANT c_empty_w : NATURAL := ceil_log2(g_nof_bytes);
-  CONSTANT c_err_w   : NATURAL := sel_a_b(g_use_err, g_err_w, 0);
-  CONSTANT c_bsn_w   : NATURAL := sel_a_b(g_use_err, g_err_w, 0);
-  CONSTANT c_channel_w   : NATURAL := sel_a_b(g_use_err, g_err_w, 0);
+  CONSTANT c_data_w    : NATURAL := c_byte_w * g_nof_bytes;
+  CONSTANT c_empty_w   : NATURAL := ceil_log2(g_nof_bytes);
+  CONSTANT c_err_w     : NATURAL := sel_a_b(g_use_err, g_err_w, 0);
+  CONSTANT c_bsn_w     : NATURAL := sel_a_b(g_use_bsn, g_bsn_w, 0);
+  CONSTANT c_channel_w : NATURAL := sel_a_b(g_use_channel, g_channel_w, 0);
 
-  CONSTANT c_err_offset   : NATURAL := (g_nof_bytes+1 * c_byte_w);
-  CONSTANT c_bsn_offset   : NATURAL := c_err_offset+c_err_w;
-  CONSTANT c_channel_offset   : NATURAL := c_bsn_offset+c_bsn_w;
+  CONSTANT c_err_offset     : NATURAL := (g_nof_bytes+1 * c_byte_w);
+  CONSTANT c_bsn_offset     : NATURAL := c_err_offset+c_err_w;
+  CONSTANT c_channel_offset : NATURAL := c_bsn_offset+c_bsn_w;
+
+  CONSTANT c_sop_offset   : NATURAL := g_nof_bytes*c_byte_w;
+  CONSTANT c_eop_offset   : NATURAL := g_nof_bytes*c_byte_w+1;
+  CONSTANT c_sync_offset  : NATURAL := g_nof_bytes*c_byte_w+2;
+  CONSTANT c_empty_offset : NATURAL := c_byte_w*(g_nof_bytes+1);
 
   SIGNAL dp_latency_adapter_tx_snk_in_arr  : t_dp_sosi_arr(g_nof_streams-1 DOWNTO 0); 
   SIGNAL dp_latency_adapter_tx_snk_out_arr : t_dp_siso_arr(g_nof_streams-1 DOWNTO 0);
@@ -189,6 +196,16 @@ BEGIN
         kernel_src_out_arr(stream).data(c_data_w-1 DOWNTO 0) <= dp_latency_adapter_tx_src_out_arr(stream).data(c_data_w-1 DOWNTO 0);
     END GENERATE;
 
+    -- Assign control signals to correct data fields.
+    kernel_src_out_arr(stream).data(c_sop_offset)  <= dp_latency_adapter_tx_src_out_arr(stream).sop;
+    kernel_src_out_arr(stream).data(c_eop_offset)  <= dp_latency_adapter_tx_src_out_arr(stream).eop;
+    kernel_src_out_arr(stream).data(c_sync_offset) <= dp_latency_adapter_tx_src_out_arr(stream).sync WHEN g_use_sync ELSE '0';
+    kernel_src_out_arr(stream).data(c_empty_offset-1 DOWNTO c_empty_offset-c_empty_w) <= dp_latency_adapter_tx_src_out_arr(stream).empty(c_empty_w-1 DOWNTO 0);
+    kernel_src_out_arr(stream).valid <= dp_latency_adapter_tx_src_out_arr(stream).valid;
+    dp_latency_adapter_tx_src_in_arr(stream).ready <= kernel_src_in_arr(stream).ready;
+    dp_latency_adapter_tx_src_in_arr(stream).xon <= '1';
+
+    -- Assign optional meta data signals to correct data fields.
     gen_err_out : IF g_use_err GENERATE
       kernel_src_out_arr(stream).data(c_err_offset+c_err_w-1 DOWNTO c_err_offset) <= dp_latency_adapter_tx_src_out_arr(stream).err(c_err_w-1 DOWNTO 0);
     END GENERATE;
@@ -200,16 +217,6 @@ BEGIN
     gen_channel_out : IF g_use_channel GENERATE
       kernel_src_out_arr(stream).data(c_channel_offset+c_channel_w-1 DOWNTO c_channel_offset) <= dp_latency_adapter_tx_src_out_arr(stream).channel(c_channel_w-1 DOWNTO 0);
     END GENERATE;
-
-    -- Assign control signals to correct data fields.
-    kernel_src_out_arr(stream).data(g_nof_bytes*c_byte_w+0) <= dp_latency_adapter_tx_src_out_arr(stream).sop;
-    kernel_src_out_arr(stream).data(g_nof_bytes*c_byte_w+1) <= dp_latency_adapter_tx_src_out_arr(stream).eop;
-    kernel_src_out_arr(stream).data(g_nof_bytes*c_byte_w+2) <= dp_latency_adapter_tx_src_out_arr(stream).sync WHEN g_use_sync ELSE '0';
-    kernel_src_out_arr(stream).data(c_byte_w*(g_nof_bytes+1)-1 DOWNTO c_byte_w*(g_nof_bytes+1)-c_empty_w) <= dp_latency_adapter_tx_src_out_arr(stream).empty(c_empty_w-1 DOWNTO 0);
-    kernel_src_out_arr(stream).valid <= dp_latency_adapter_tx_src_out_arr(stream).valid;
-    dp_latency_adapter_tx_src_in_arr(stream).ready <= kernel_src_in_arr(stream).ready;
-    dp_latency_adapter_tx_src_in_arr(stream).xon <= '1';
-
  
     -- kernel_snk_in -> dp_src_out
     ----------------------------------------------------------------------------