From e78e0cec8846390e416df70b285027b0da75c460 Mon Sep 17 00:00:00 2001
From: Reinier van der Walle <walle@astron.nl>
Date: Tue, 10 Mar 2020 14:13:43 +0100
Subject: [PATCH] Added Ring interface Two 40 GbE IPs are now added and
 connected to RING_0 and RING_1

---
 .../hardware/unb2b/board_spec.xml             |   7 +
 .../ta2_unb2b_bsp/hardware/unb2b/flat.qsf     | 198 ++++++
 .../ta2_unb2b_bsp/hardware/unb2b/hdllib.cfg   |  37 +
 .../hardware/unb2b/ip/freeze_wrapper.v        |  33 +-
 .../hardware/unb2b/ip/pr_region.v             |  34 +-
 .../ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd    |   2 +-
 .../ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl | 200 ------
 .../ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl~   | 200 ------
 .../ta2_unb2b_10GbE_ip_wrapper.vhd            | 114 ---
 .../unb2b/ip/ta2_unb2b_40GbE/hdllib.cfg       |  32 +
 .../ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd    | 673 +++++++++---------
 .../ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl | 213 ------
 .../ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl~   | 213 ------
 .../ta2_unb2b_40GbE_ip_wrapper.vhd            | 114 ---
 .../ta2_unb2b_bsp/hardware/unb2b/top.vhd      | 179 +++--
 .../hardware/unb2b/top_components_pkg.vhd     |  16 +-
 16 files changed, 813 insertions(+), 1452 deletions(-)
 create mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/hdllib.cfg
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl~
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_ip_wrapper.vhd
 create mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/hdllib.cfg
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl~
 delete mode 100644 applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_ip_wrapper.vhd

diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/board_spec.xml b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/board_spec.xml
index 05341e43b5..e77390839e 100755
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/board_spec.xml
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/board_spec.xml
@@ -31,6 +31,13 @@
     <interface name="board" port="kernel_stream_snk_10GbE" type="streamsink" width="72" chan_id="kernel_output_10GbE"/>
     <interface name="board" port="kernel_stream_src_40GbE" type="streamsource" width="264" chan_id="kernel_input_40GbE"/>
     <interface name="board" port="kernel_stream_snk_40GbE" type="streamsink" width="264" chan_id="kernel_output_40GbE"/>
+
+    <!-- Ring interface, ring_0 is to PN to the left. Ring_1 is to PN to the right  -->
+    <interface name="board" port="kernel_stream_src_40GbE_ring_0" type="streamsource" width="264" chan_id="kernel_input_40GbE_ring_0"/>
+    <interface name="board" port="kernel_stream_snk_40GbE_ring_0" type="streamsink" width="264" chan_id="kernel_output_40GbE_ring_0"/>
+    <interface name="board" port="kernel_stream_src_40GbE_ring_1" type="streamsource" width="264" chan_id="kernel_input_40GbE_ring_1"/>
+    <interface name="board" port="kernel_stream_snk_40GbE_ring_1" type="streamsink" width="264" chan_id="kernel_output_40GbE_ring_1"/>
+
     <interface name="board" port="kernel_stream_src_ADC" type="streamsource" width="16" chan_id="kernel_input_ADC"/>
   </channels>
 
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/flat.qsf b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/flat.qsf
index fa25d1956c..51a771c578 100755
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/flat.qsf
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/flat.qsf
@@ -492,4 +492,202 @@ set_location_assignment PIN_U12 -to JESD204B_SYNC[0]
 set_instance_assignment -name IO_STANDARD "1.8 V" -to JESD204B_SYNC[0]
 
 
+set_location_assignment PIN_AP40 -to RING_0_RX[0]
+set_location_assignment PIN_AR38 -to RING_0_RX[1]
+set_location_assignment PIN_AT40 -to RING_0_RX[2]
+set_location_assignment PIN_AU38 -to RING_0_RX[3]
+set_location_assignment PIN_AP44 -to RING_0_TX[0]
+set_location_assignment PIN_AR42 -to RING_0_TX[1]
+set_location_assignment PIN_AT44 -to RING_0_TX[2]
+set_location_assignment PIN_AU42 -to RING_0_TX[3]
+set_location_assignment PIN_H40 -to RING_1_RX[0]
+set_location_assignment PIN_J38 -to RING_1_RX[1]
+set_location_assignment PIN_F40 -to RING_1_RX[2]
+set_location_assignment PIN_G38 -to RING_1_RX[3]
+set_location_assignment PIN_H44 -to RING_1_TX[0]
+set_location_assignment PIN_J42 -to RING_1_TX[1]
+set_location_assignment PIN_G42 -to RING_1_TX[2]
+set_location_assignment PIN_F44 -to RING_1_TX[3]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_0_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_0_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_0_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_0_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_0_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_0_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_0_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_0_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_RX[3]
+
+
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_1_RX[0]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_1_RX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_RX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_1_RX[1]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_1_RX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_RX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_1_RX[2]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_1_RX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_RX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_TERM_SEL R_R1 -to                             RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP5 RADP_DFE_FXTAP5_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP4 RADP_DFE_FXTAP4_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP1 RADP_DFE_FXTAP1_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP7 RADP_DFE_FXTAP7_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP6 RADP_DFE_FXTAP6_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP3 RADP_DFE_FXTAP3_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_DFE_FXTAP2 RADP_DFE_FXTAP2_0 -to          RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ONE_STAGE_ENABLE NON_S1_MODE -to              RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_CTLE_ACGAIN_4S RADP_CTLE_ACGAIN_4S_12 -to RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_EQ_DC_GAIN_TRIM NO_DC_GAIN -to                RING_1_RX[3]
+set_instance_assignment -name XCVR_A10_RX_ADP_VGA_SEL RADP_VGA_SEL_3 -to                RING_1_RX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_RX[3]
+
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_0_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_0_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_0_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_0_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_0_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_0_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_0_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_0_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_0_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_0_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_0_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_0_TX[3]
+
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_1_TX[0]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_1_TX[0]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_1_TX[0]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_1_TX[1]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_1_TX[1]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_1_TX[1]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_1_TX[2]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_1_TX[2]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_1_TX[2]
+
+set_instance_assignment -name IO_STANDARD "HSSI DIFFERENTIAL I/O" -to                   RING_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_VOD_OUTPUT_SWING_CTRL 30 -to                  RING_1_TX[3]
+set_instance_assignment -name XCVR_VCCR_VCCT_VOLTAGE 1_0V -to                           RING_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_COMPENSATION_EN ENABLE -to                    RING_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SWITCHING_CTRL_1ST_POST_TAP 0 -to     RING_1_TX[3]
+set_instance_assignment -name XCVR_A10_TX_PRE_EMP_SIGN_1ST_POST_TAP FIR_POST_1T_POS -to RING_1_TX[3]
+
+
 set_global_assignment -name IP_FILE ip/board/board_reg_ta2_unb2b_jesd204b.ip
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/hdllib.cfg b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/hdllib.cfg
new file mode 100644
index 0000000000..5e76341e8e
--- /dev/null
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/hdllib.cfg
@@ -0,0 +1,37 @@
+hdl_lib_name = ta2_unb2b_top
+hdl_library_clause_name = ta2_unb2b_top_lib
+hdl_lib_uses_synth = common technology dp unb2b_board ta2_unb2b_40GbE ta2_unb2b_10GbE ta2_unb2b_1GbE_mc ta2_unb2b_jesd204b
+hdl_lib_uses_sim = 
+hdl_lib_technology = ip_arria10_e1sg
+hdl_lib_include_ip = 
+
+synth_files =
+  top_components_pkg.vhd
+  ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd
+  ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd
+  ip/ta2_unb2b_1GbE_mc/ta2_unb2b_1GbE_mc.vhd
+  ip/ta2_unb2b_jesd204b/ta2_unb2b_jesd204b.vhd
+  top.vhd
+test_bench_files =     
+
+regression_test_vhdl = 
+    
+[modelsim_project_file]
+
+[quartus_project_file]
+synth_top_level_entity =
+
+quartus_copy_files =
+
+quartus_qsf_files =
+    $RADIOHDL/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
+
+quartus_sdc_files =
+    $RADIOHDL/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
+
+quartus_tcl_files =
+    
+
+quartus_vhdl_files = 
+
+quartus_qip_files =
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/freeze_wrapper.v b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/freeze_wrapper.v
index 22508e8dc2..cd44bb01ca 100755
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/freeze_wrapper.v
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/freeze_wrapper.v
@@ -62,6 +62,20 @@ module freeze_wrapper(
   output wire [263:0] board_kernel_stream_snk_40GbE_data,
   output wire         board_kernel_stream_snk_40GbE_valid,
   input  wire         board_kernel_stream_snk_40GbE_ready,
+  
+  input  wire [263:0] board_kernel_stream_src_40GbE_ring_0_data,
+  input  wire         board_kernel_stream_src_40GbE_ring_0_valid,
+  output wire         board_kernel_stream_src_40GbE_ring_0_ready,
+  output wire [263:0] board_kernel_stream_snk_40GbE_ring_0_data,
+  output wire         board_kernel_stream_snk_40GbE_ring_0_valid,
+  input  wire         board_kernel_stream_snk_40GbE_ring_0_ready,
+  
+  input  wire [263:0] board_kernel_stream_src_40GbE_ring_1_data,
+  input  wire         board_kernel_stream_src_40GbE_ring_1_valid,
+  output wire         board_kernel_stream_src_40GbE_ring_1_ready,
+  output wire [263:0] board_kernel_stream_snk_40GbE_ring_1_data,
+  output wire         board_kernel_stream_snk_40GbE_ring_1_valid,
+  input  wire         board_kernel_stream_snk_40GbE_ring_1_ready,
 
   output [6:0]     board_kernel_register_mem_address,                
   output           board_kernel_register_mem_clken,      
@@ -187,28 +201,45 @@ pr_region pr_region_inst
   .kernel_cra_debugaccess(board_kernel_cra_debugaccess),
 
 
-
   .kernel_stream_src_40GbE_data(board_kernel_stream_src_40GbE_data),
   .kernel_stream_src_40GbE_ready(board_kernel_stream_src_40GbE_ready),
   .kernel_stream_src_40GbE_valid(board_kernel_stream_src_40GbE_valid),
   .kernel_stream_snk_40GbE_data(board_kernel_stream_snk_40GbE_data),
   .kernel_stream_snk_40GbE_ready(board_kernel_stream_snk_40GbE_ready),
   .kernel_stream_snk_40GbE_valid(board_kernel_stream_snk_40GbE_valid),
+
+  .kernel_stream_src_40GbE_ring_0_data(board_kernel_stream_src_40GbE_ring_0_data),
+  .kernel_stream_src_40GbE_ring_0_ready(board_kernel_stream_src_40GbE_ring_0_ready),
+  .kernel_stream_src_40GbE_ring_0_valid(board_kernel_stream_src_40GbE_ring_0_valid),
+  .kernel_stream_snk_40GbE_ring_0_data(board_kernel_stream_snk_40GbE_ring_0_data),
+  .kernel_stream_snk_40GbE_ring_0_ready(board_kernel_stream_snk_40GbE_ring_0_ready),
+  .kernel_stream_snk_40GbE_ring_0_valid(board_kernel_stream_snk_40GbE_ring_0_valid),
+
+  .kernel_stream_src_40GbE_ring_1_data(board_kernel_stream_src_40GbE_ring_1_data),
+  .kernel_stream_src_40GbE_ring_1_ready(board_kernel_stream_src_40GbE_ring_1_ready),
+  .kernel_stream_src_40GbE_ring_1_valid(board_kernel_stream_src_40GbE_ring_1_valid),
+  .kernel_stream_snk_40GbE_ring_1_data(board_kernel_stream_snk_40GbE_ring_1_data),
+  .kernel_stream_snk_40GbE_ring_1_ready(board_kernel_stream_snk_40GbE_ring_1_ready),
+  .kernel_stream_snk_40GbE_ring_1_valid(board_kernel_stream_snk_40GbE_ring_1_valid),
+
   .kernel_stream_src_10GbE_data(board_kernel_stream_src_10GbE_data),
   .kernel_stream_src_10GbE_ready(board_kernel_stream_src_10GbE_ready),
   .kernel_stream_src_10GbE_valid(board_kernel_stream_src_10GbE_valid),
   .kernel_stream_snk_10GbE_data(board_kernel_stream_snk_10GbE_data),
   .kernel_stream_snk_10GbE_ready(board_kernel_stream_snk_10GbE_ready),
   .kernel_stream_snk_10GbE_valid(board_kernel_stream_snk_10GbE_valid),
+
   .kernel_stream_src_1GbE_data(board_kernel_stream_src_1GbE_data),
   .kernel_stream_src_1GbE_ready(board_kernel_stream_src_1GbE_ready),
   .kernel_stream_src_1GbE_valid(board_kernel_stream_src_1GbE_valid),
   .kernel_stream_snk_1GbE_data(board_kernel_stream_snk_1GbE_data),
   .kernel_stream_snk_1GbE_ready(board_kernel_stream_snk_1GbE_ready),
   .kernel_stream_snk_1GbE_valid(board_kernel_stream_snk_1GbE_valid),
+
   .kernel_stream_src_ADC_data(board_kernel_stream_src_ADC_data),
   .kernel_stream_src_ADC_ready(board_kernel_stream_src_ADC_ready),
   .kernel_stream_src_ADC_valid(board_kernel_stream_src_ADC_valid),
+
   .kernel_register_mem_address(board_kernel_register_mem_address),  
   .kernel_register_mem_clken(board_kernel_register_mem_clken),  
   .kernel_register_mem_chipselect(board_kernel_register_mem_chipselect),  
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/pr_region.v b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/pr_region.v
index f0ea3b6263..3b9130301f 100755
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/pr_region.v
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/pr_region.v
@@ -66,7 +66,21 @@ module pr_region (
   output wire         kernel_stream_src_40GbE_ready,
   output wire [263:0] kernel_stream_snk_40GbE_data,
   output wire         kernel_stream_snk_40GbE_valid,
-  input  wire         kernel_stream_snk_40GbE_ready
+  input  wire         kernel_stream_snk_40GbE_ready,
+
+  input  wire [263:0] kernel_stream_src_40GbE_ring_0_data,
+  input  wire         kernel_stream_src_40GbE_ring_0_valid,
+  output wire         kernel_stream_src_40GbE_ring_0_ready,
+  output wire [263:0] kernel_stream_snk_40GbE_ring_0_data,
+  output wire         kernel_stream_snk_40GbE_ring_0_valid,
+  input  wire         kernel_stream_snk_40GbE_ring_0_ready,
+
+  input  wire [263:0] kernel_stream_src_40GbE_ring_1_data,
+  input  wire         kernel_stream_src_40GbE_ring_1_valid,
+  output wire         kernel_stream_src_40GbE_ring_1_ready,
+  output wire [263:0] kernel_stream_snk_40GbE_ring_1_data,
+  output wire         kernel_stream_snk_40GbE_ring_1_valid,
+  input  wire         kernel_stream_snk_40GbE_ring_1_ready
 
 
 //  input  wire         kernel_mem0_waitrequest,
@@ -179,6 +193,24 @@ kernel_system kernel_system_inst
   .kernel_output_40GbE_valid(kernel_stream_snk_40GbE_valid),
 
 
+  .kernel_input_40GbE_ring_0_data(kernel_stream_src_40GbE_ring_0_data),
+  .kernel_input_40GbE_ring_0_ready(kernel_stream_src_40GbE_ring_0_ready),
+  .kernel_input_40GbE_ring_0_valid(kernel_stream_src_40GbE_ring_0_valid),
+
+  .kernel_output_40GbE_ring_0_data(kernel_stream_snk_40GbE_ring_0_data),
+  .kernel_output_40GbE_ring_0_ready(kernel_stream_snk_40GbE_ring_0_ready),
+  .kernel_output_40GbE_ring_0_valid(kernel_stream_snk_40GbE_ring_0_valid),
+
+
+  .kernel_input_40GbE_ring_1_data(kernel_stream_src_40GbE_ring_1_data),
+  .kernel_input_40GbE_ring_1_ready(kernel_stream_src_40GbE_ring_1_ready),
+  .kernel_input_40GbE_ring_1_valid(kernel_stream_src_40GbE_ring_1_valid),
+
+  .kernel_output_40GbE_ring_1_data(kernel_stream_snk_40GbE_ring_1_data),
+  .kernel_output_40GbE_ring_1_ready(kernel_stream_snk_40GbE_ring_1_ready),
+  .kernel_output_40GbE_ring_1_valid(kernel_stream_snk_40GbE_ring_1_valid),
+
+
   .kernel_input_10GbE_data(kernel_stream_src_10GbE_data),
   .kernel_input_10GbE_ready(kernel_stream_src_10GbE_ready),
   .kernel_input_10GbE_valid(kernel_stream_src_10GbE_valid),
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd
index 5bde0464e4..34f7db0034 100644
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE.vhd
@@ -200,7 +200,7 @@ BEGIN
   dp_latency_adapter_tx_snk_in.valid <= kernel_snk_valid;
   kernel_snk_ready <= dp_latency_adapter_tx_snk_out.ready; -- Flow control towards source (kernel)
 
-  rx_status <= dp_latency_adapter_tx_snk_out.xon;
+  rx_status <= dp_xonoff_src_in.xon; -- use xonoff_src_in for status as xonoff_snk_out is always '1'
 
   tx_serial_r <= unb2_board_front_io_serial_tx_arr(0);
   unb2_board_front_io_serial_rx_arr(0) <= rx_serial_r;
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl
deleted file mode 100644
index 072933051d..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl
+++ /dev/null
@@ -1,200 +0,0 @@
-# TCL File Generated by Component Editor 18.0
-# Mon Jan 13 11:25:28 CET 2020
-# DO NOT MODIFY
-
-
-# 
-# ta2_unb2b_10GbE "ta2_unb2b_10GbE" v1.0
-#  2020.01.13.11:25:28
-# 
-# 
-
-# 
-# request TCL package from ACDS 18.0
-# 
-package require -exact qsys 18.0
-
-
-# 
-# module ta2_unb2b_10GbE
-# 
-set_module_property DESCRIPTION ""
-set_module_property NAME ta2_unb2b_10GbE
-set_module_property VERSION 1.0
-set_module_property INTERNAL false
-set_module_property OPAQUE_ADDRESS_MAP true
-set_module_property AUTHOR ""
-set_module_property DISPLAY_NAME ta2_unb2b_10GbE
-set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
-set_module_property EDITABLE true
-set_module_property REPORT_TO_TALKBACK false
-set_module_property ALLOW_GREYBOX_GENERATION false
-set_module_property REPORT_HIERARCHY false
-
-
-# 
-# file sets
-# 
-add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
-set_fileset_property QUARTUS_SYNTH TOP_LEVEL ta2_unb2b_10GbE_ip_wrapper
-set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
-set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ta2_unb2b_10GbE_ip_wrapper.vhd VHDL PATH ta2_unb2b_10GbE_ip_wrapper.vhd TOP_LEVEL_FILE
-
-
-# 
-# parameters
-# 
-
-
-# 
-# display items
-# 
-
-
-# 
-# connection point kernel_snk
-# 
-add_interface kernel_snk avalon_streaming end
-set_interface_property kernel_snk associatedClock kernel_clk
-set_interface_property kernel_snk associatedReset kernel_reset
-set_interface_property kernel_snk dataBitsPerSymbol 8
-set_interface_property kernel_snk errorDescriptor ""
-set_interface_property kernel_snk firstSymbolInHighOrderBits true
-set_interface_property kernel_snk maxChannel 0
-set_interface_property kernel_snk readyAllowance 0
-set_interface_property kernel_snk readyLatency 0
-set_interface_property kernel_snk ENABLED true
-set_interface_property kernel_snk EXPORT_OF ""
-set_interface_property kernel_snk PORT_NAME_MAP ""
-set_interface_property kernel_snk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_snk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_snk kernel_snk_data data Input 72
-add_interface_port kernel_snk kernel_snk_ready ready Output 1
-add_interface_port kernel_snk kernel_snk_valid valid Input 1
-
-
-# 
-# connection point kernel_src
-# 
-add_interface kernel_src avalon_streaming start
-set_interface_property kernel_src associatedClock kernel_clk
-set_interface_property kernel_src associatedReset kernel_reset
-set_interface_property kernel_src dataBitsPerSymbol 8
-set_interface_property kernel_src errorDescriptor ""
-set_interface_property kernel_src firstSymbolInHighOrderBits true
-set_interface_property kernel_src maxChannel 0
-set_interface_property kernel_src readyAllowance 0
-set_interface_property kernel_src readyLatency 0
-set_interface_property kernel_src ENABLED true
-set_interface_property kernel_src EXPORT_OF ""
-set_interface_property kernel_src PORT_NAME_MAP ""
-set_interface_property kernel_src CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_src SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_src kernel_src_data data Output 72
-add_interface_port kernel_src kernel_src_ready ready Input 1
-add_interface_port kernel_src kernel_src_valid valid Output 1
-
-
-# 
-# connection point kernel_clk
-# 
-add_interface kernel_clk clock end
-set_interface_property kernel_clk ENABLED true
-set_interface_property kernel_clk EXPORT_OF ""
-set_interface_property kernel_clk PORT_NAME_MAP ""
-set_interface_property kernel_clk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_clk kernel_clk clk Input 1
-
-
-# 
-# connection point refclk
-# 
-add_interface refclk clock end
-set_interface_property refclk ENABLED true
-set_interface_property refclk EXPORT_OF ""
-set_interface_property refclk PORT_NAME_MAP ""
-set_interface_property refclk CMSIS_SVD_VARIABLES ""
-set_interface_property refclk SVD_ADDRESS_GROUP ""
-
-add_interface_port refclk clk_ref_r clk Input 1
-
-
-# 
-# connection point rx_serial_data
-# 
-add_interface rx_serial_data conduit end
-set_interface_property rx_serial_data associatedClock ""
-set_interface_property rx_serial_data associatedReset ""
-set_interface_property rx_serial_data ENABLED true
-set_interface_property rx_serial_data EXPORT_OF ""
-set_interface_property rx_serial_data PORT_NAME_MAP ""
-set_interface_property rx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property rx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_serial_data rx_serial_r conduit Input 1
-
-
-# 
-# connection point tx_serial_data
-# 
-add_interface tx_serial_data conduit end
-set_interface_property tx_serial_data associatedClock ""
-set_interface_property tx_serial_data associatedReset ""
-set_interface_property tx_serial_data ENABLED true
-set_interface_property tx_serial_data EXPORT_OF ""
-set_interface_property tx_serial_data PORT_NAME_MAP ""
-set_interface_property tx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property tx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port tx_serial_data tx_serial_r conduit Output 1
-
-
-# 
-# connection point config_reset
-# 
-add_interface config_reset reset end
-set_interface_property config_reset associatedClock ""
-set_interface_property config_reset synchronousEdges NONE
-set_interface_property config_reset ENABLED true
-set_interface_property config_reset EXPORT_OF ""
-set_interface_property config_reset PORT_NAME_MAP ""
-set_interface_property config_reset CMSIS_SVD_VARIABLES ""
-set_interface_property config_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port config_reset config_reset reset Input 1
-
-
-# 
-# connection point kernel_reset
-# 
-add_interface kernel_reset reset end
-set_interface_property kernel_reset associatedClock kernel_clk
-set_interface_property kernel_reset synchronousEdges DEASSERT
-set_interface_property kernel_reset ENABLED true
-set_interface_property kernel_reset EXPORT_OF ""
-set_interface_property kernel_reset PORT_NAME_MAP ""
-set_interface_property kernel_reset CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_reset kernel_reset reset Input 1
-
-
-# 
-# connection point rx_status
-# 
-add_interface rx_status conduit end
-set_interface_property rx_status associatedClock ""
-set_interface_property rx_status associatedReset ""
-set_interface_property rx_status ENABLED true
-set_interface_property rx_status EXPORT_OF ""
-set_interface_property rx_status PORT_NAME_MAP ""
-set_interface_property rx_status CMSIS_SVD_VARIABLES ""
-set_interface_property rx_status SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_status rx_status rx_status Output 1
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl~ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl~
deleted file mode 100644
index ea4cf697bb..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_hw.tcl~
+++ /dev/null
@@ -1,200 +0,0 @@
-# TCL File Generated by Component Editor 18.0
-# Mon Jan 13 09:28:21 CET 2020
-# DO NOT MODIFY
-
-
-# 
-# ta2_unb2b_10GbE "ta2_unb2b_10GbE" v1.0
-#  2020.01.13.09:28:21
-# 
-# 
-
-# 
-# request TCL package from ACDS 18.0
-# 
-package require -exact qsys 18.0
-
-
-# 
-# module ta2_unb2b_10GbE
-# 
-set_module_property DESCRIPTION ""
-set_module_property NAME ta2_unb2b_10GbE
-set_module_property VERSION 1.0
-set_module_property INTERNAL false
-set_module_property OPAQUE_ADDRESS_MAP true
-set_module_property AUTHOR ""
-set_module_property DISPLAY_NAME ta2_unb2b_10GbE
-set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
-set_module_property EDITABLE true
-set_module_property REPORT_TO_TALKBACK false
-set_module_property ALLOW_GREYBOX_GENERATION false
-set_module_property REPORT_HIERARCHY false
-
-
-# 
-# file sets
-# 
-add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
-set_fileset_property QUARTUS_SYNTH TOP_LEVEL ta2_unb2b_10GbE_ip_wrapper
-set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
-set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ta2_unb2b_10GbE_ip_wrapper.vhd VHDL PATH ta2_unb2b_10GbE_ip_wrapper.vhd TOP_LEVEL_FILE
-
-
-# 
-# parameters
-# 
-
-
-# 
-# display items
-# 
-
-
-# 
-# connection point kernel_snk
-# 
-add_interface kernel_snk avalon_streaming end
-set_interface_property kernel_snk associatedClock kernel_clk
-set_interface_property kernel_snk associatedReset kernel_reset
-set_interface_property kernel_snk dataBitsPerSymbol 8
-set_interface_property kernel_snk errorDescriptor ""
-set_interface_property kernel_snk firstSymbolInHighOrderBits true
-set_interface_property kernel_snk maxChannel 0
-set_interface_property kernel_snk readyAllowance 0
-set_interface_property kernel_snk readyLatency 0
-set_interface_property kernel_snk ENABLED true
-set_interface_property kernel_snk EXPORT_OF ""
-set_interface_property kernel_snk PORT_NAME_MAP ""
-set_interface_property kernel_snk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_snk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_snk kernel_snk_data data Input 72
-add_interface_port kernel_snk kernel_snk_ready ready Output 1
-add_interface_port kernel_snk kernel_snk_valid valid Input 1
-
-
-# 
-# connection point kernel_src
-# 
-add_interface kernel_src avalon_streaming start
-set_interface_property kernel_src associatedClock kernel_clk
-set_interface_property kernel_src associatedReset kernel_reset
-set_interface_property kernel_src dataBitsPerSymbol 8
-set_interface_property kernel_src errorDescriptor ""
-set_interface_property kernel_src firstSymbolInHighOrderBits true
-set_interface_property kernel_src maxChannel 0
-set_interface_property kernel_src readyAllowance 0
-set_interface_property kernel_src readyLatency 0
-set_interface_property kernel_src ENABLED true
-set_interface_property kernel_src EXPORT_OF ""
-set_interface_property kernel_src PORT_NAME_MAP ""
-set_interface_property kernel_src CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_src SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_src kernel_src_data data Output 72
-add_interface_port kernel_src kernel_src_ready ready Input 1
-add_interface_port kernel_src kernel_src_valid valid Output 1
-
-
-# 
-# connection point kernel_clk
-# 
-add_interface kernel_clk clock end
-set_interface_property kernel_clk ENABLED true
-set_interface_property kernel_clk EXPORT_OF ""
-set_interface_property kernel_clk PORT_NAME_MAP ""
-set_interface_property kernel_clk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_clk kernel_clk clk Input 1
-
-
-# 
-# connection point refclk
-# 
-add_interface refclk clock end
-set_interface_property refclk ENABLED true
-set_interface_property refclk EXPORT_OF ""
-set_interface_property refclk PORT_NAME_MAP ""
-set_interface_property refclk CMSIS_SVD_VARIABLES ""
-set_interface_property refclk SVD_ADDRESS_GROUP ""
-
-add_interface_port refclk clk_ref_r clk Input 1
-
-
-# 
-# connection point rx_serial_data
-# 
-add_interface rx_serial_data conduit end
-set_interface_property rx_serial_data associatedClock ""
-set_interface_property rx_serial_data associatedReset ""
-set_interface_property rx_serial_data ENABLED true
-set_interface_property rx_serial_data EXPORT_OF ""
-set_interface_property rx_serial_data PORT_NAME_MAP ""
-set_interface_property rx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property rx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_serial_data rx_serial_r conduit Input 1
-
-
-# 
-# connection point tx_serial_data
-# 
-add_interface tx_serial_data conduit end
-set_interface_property tx_serial_data associatedClock ""
-set_interface_property tx_serial_data associatedReset ""
-set_interface_property tx_serial_data ENABLED true
-set_interface_property tx_serial_data EXPORT_OF ""
-set_interface_property tx_serial_data PORT_NAME_MAP ""
-set_interface_property tx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property tx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port tx_serial_data tx_serial_r conduit Output 1
-
-
-# 
-# connection point config_reset
-# 
-add_interface config_reset reset end
-set_interface_property config_reset associatedClock ""
-set_interface_property config_reset synchronousEdges NONE
-set_interface_property config_reset ENABLED true
-set_interface_property config_reset EXPORT_OF ""
-set_interface_property config_reset PORT_NAME_MAP ""
-set_interface_property config_reset CMSIS_SVD_VARIABLES ""
-set_interface_property config_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port config_reset config_reset reset Input 1
-
-
-# 
-# connection point kernel_reset
-# 
-add_interface kernel_reset reset end
-set_interface_property kernel_reset associatedClock kernel_clk
-set_interface_property kernel_reset synchronousEdges DEASSERT
-set_interface_property kernel_reset ENABLED true
-set_interface_property kernel_reset EXPORT_OF ""
-set_interface_property kernel_reset PORT_NAME_MAP ""
-set_interface_property kernel_reset CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_reset kernel_reset reset Input 1
-
-
-# 
-# connection point rx_status
-# 
-add_interface rx_status conduit end
-set_interface_property rx_status associatedClock ""
-set_interface_property rx_status associatedReset ""
-set_interface_property rx_status ENABLED true
-set_interface_property rx_status EXPORT_OF ""
-set_interface_property rx_status PORT_NAME_MAP ""
-set_interface_property rx_status CMSIS_SVD_VARIABLES ""
-set_interface_property rx_status SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_status rx_status rx_status Output 1
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_ip_wrapper.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_ip_wrapper.vhd
deleted file mode 100644
index b2c09951e8..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_10GbE/ta2_unb2b_10GbE_ip_wrapper.vhd
+++ /dev/null
@@ -1,114 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright (C) 2019
--- 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/>.
---
--------------------------------------------------------------------------------
-
--- Author:
--- . Reinier van der Walle
--- Purpose:
--- . Instantiates ta2_unb2b_10GbE component 
-LIBRARY IEEE;
-USE IEEE.STD_LOGIC_1164.ALL;
-
-ENTITY ta2_unb2b_10GbE_ip_wrapper IS       
-  PORT (      
-    --config_clk       : IN  STD_LOGIC; -- 100MHz clk for reconfig block and status interface
-    config_reset     : IN  STD_LOGIC;
-
-    clk_ref_r        : IN  STD_LOGIC; -- 644.53125MHz 10G MAC reference clock
-
-    tx_serial_r      : OUT STD_LOGIC; -- Serial TX lanes towards QSFP cage
-    rx_serial_r      : IN  STD_LOGIC; -- Serial RX lanes from QSFP cage
-
-    kernel_clk       : IN  STD_LOGIC; -- Kernel clock (runs the kernel_* I/O below)
-    kernel_reset     : IN  STD_LOGIC;
-
-    kernel_src_data  : OUT STD_LOGIC_VECTOR(71 DOWNTO 0); -- RX Data to kernel
-    kernel_src_valid : OUT STD_LOGIC; -- RX data valid signal to kernel
-    kernel_src_ready : IN  STD_LOGIC; -- Flow control from kernel
-
-    kernel_snk_data  : IN  STD_LOGIC_VECTOR(71 DOWNTO 0); -- TX Data from kernel
-    kernel_snk_valid : IN  STD_LOGIC; -- TX data valid signal from kernel
-    kernel_snk_ready : OUT STD_LOGIC;  -- Flow control towards kernel
-
-    rx_status        : OUT STD_LOGIC -- RX status
-  );
-END ta2_unb2b_10GbE_ip_wrapper;
-
-
-ARCHITECTURE str OF ta2_unb2b_10GbE_ip_wrapper IS
-  ----------------------------------------------------------------------------
-  -- ta2_unb2b_10GbE Component
-  ----------------------------------------------------------------------------
-  COMPONENT ta2_unb2b_10GbE IS
-  PORT (
-    --config_clk       : IN  STD_LOGIC; -- 100MHz clk for reconfig block and status interface
-    config_reset     : IN  STD_LOGIC;
-
-    clk_ref_r        : IN  STD_LOGIC; -- 644.53125MHz 10G MAC reference clock
-
-    tx_serial_r      : OUT STD_LOGIC; -- Serial TX lanes towards QSFP cage
-    rx_serial_r      : IN  STD_LOGIC; -- Serial RX lanes from QSFP cage
-
-    kernel_clk       : IN  STD_LOGIC; -- Kernel clock (runs the kernel_* I/O below)
-    kernel_reset     : IN  STD_LOGIC;
-
-    kernel_src_data  : OUT STD_LOGIC_VECTOR(71 DOWNTO 0); -- RX Data to kernel
-    kernel_src_valid : OUT STD_LOGIC; -- RX data valid signal to kernel
-    kernel_src_ready : IN  STD_LOGIC; -- Flow control from kernel
-
-    kernel_snk_data  : IN  STD_LOGIC_VECTOR(71 DOWNTO 0); -- TX Data from kernel
-    kernel_snk_valid : IN  STD_LOGIC; -- TX data valid signal from kernel
-    kernel_snk_ready : OUT STD_LOGIC;  -- Flow control towards kernel
-
-    rx_status        : OUT STD_LOGIC -- RX status
-  );
-  END COMPONENT ta2_unb2b_10GbE;
-
-BEGIN
-
-  u_ta2_unb2b_10GbE : ta2_unb2b_10GbE 
-    PORT MAP (
-      --config_clk       => config_clk,
-      config_reset     => config_reset,     
-                                           
-      clk_ref_r        => clk_ref_r,        
-                                           
-      tx_serial_r      => tx_serial_r,     
-      rx_serial_r      => rx_serial_r,      
-                                           
-      kernel_clk       => kernel_clk,       
-      kernel_reset     => kernel_reset,     
-                                           
-      kernel_src_data  => kernel_src_data,  
-      kernel_src_valid => kernel_src_valid, 
-      kernel_src_ready => kernel_src_ready, 
-                                           
-      kernel_snk_data  => kernel_snk_data,  
-      kernel_snk_valid => kernel_snk_valid, 
-      kernel_snk_ready => kernel_snk_ready, 
-  
-      rx_status        => rx_status
-
-    );
-
-
-
-END str;
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/hdllib.cfg b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/hdllib.cfg
new file mode 100644
index 0000000000..e51ddb0cc1
--- /dev/null
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/hdllib.cfg
@@ -0,0 +1,32 @@
+hdl_lib_name = ta2_unb2b_40GbE
+hdl_library_clause_name = ta2_unb2b_40GbE_lib
+hdl_lib_uses_synth = common technology dp  
+hdl_lib_uses_sim = 
+hdl_lib_technology = ip_arria10_e1sg
+hdl_lib_include_ip = 
+
+synth_files =
+  ta2_unb2b_40GbE.vhd
+test_bench_files =     
+
+regression_test_vhdl = 
+    
+[modelsim_project_file]
+
+[quartus_project_file]
+synth_top_level_entity =
+
+quartus_copy_files =
+
+quartus_qsf_files =
+    $RADIOHDL/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
+
+quartus_sdc_files =
+    $RADIOHDL/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
+
+quartus_tcl_files =
+    
+
+quartus_vhdl_files = 
+
+quartus_qip_files =
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd
index 83f8851193..0bbee7f131 100644
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE.vhd
@@ -55,28 +55,27 @@ USE IEEE.STD_LOGIC_1164.ALL;
 USE common_lib.common_pkg.ALL;
 USE dp_lib.dp_stream_pkg.ALL; 
 
-ENTITY ta2_unb2b_40GbE IS       
+ENTITY ta2_unb2b_40GbE IS   
+  GENERIC (
+    g_nof_mac : NATURAL := 1
+  );    
   PORT (      
     config_clk       : IN  STD_LOGIC; -- 100MHz clk for reconfig block and status interface
     config_reset     : IN  STD_LOGIC;
 
     clk_ref_r        : IN  STD_LOGIC; -- 644.53125MHz 40G MAC reference clock
 
-    tx_serial_r      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial TX lanes towards QSFP cage
-    rx_serial_r      : IN  STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial RX lanes from QSFP cage
+    tx_serial_r      : OUT STD_LOGIC_VECTOR(4*g_nof_mac-1 DOWNTO 0); -- Serial TX lanes towards QSFP cage
+    rx_serial_r      : IN  STD_LOGIC_VECTOR(4*g_nof_mac-1 DOWNTO 0); -- Serial RX lanes from QSFP cage
 
     kernel_clk       : IN  STD_LOGIC; -- Kernel clock (runs the kernel_* I/O below)
     kernel_reset     : IN  STD_LOGIC;
 
-    kernel_src_data  : OUT STD_LOGIC_VECTOR(263 DOWNTO 0); -- RX Data to kernel
-    kernel_src_valid : OUT STD_LOGIC; -- RX data valid signal to kernel
-    kernel_src_ready : IN  STD_LOGIC; -- Flow control from kernel
-
-    kernel_snk_data  : IN  STD_LOGIC_VECTOR(263 DOWNTO 0); -- TX Data from kernel
-    kernel_snk_valid : IN  STD_LOGIC; -- TX data valid signal from kernel
-    kernel_snk_ready : OUT STD_LOGIC;  -- Flow control towards kernel
-
-    rx_status        : OUT STD_LOGIC -- RX status
+    src_out_arr      : OUT t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+    src_in_arr       : IN  t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
+    snk_out_arr      : OUT t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
+    snk_in_arr       : IN  t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0)
+    
   );
 END ta2_unb2b_40GbE;
 
@@ -93,74 +92,64 @@ ARCHITECTURE str OF ta2_unb2b_40GbE IS
   ----------------------------------------------------------------------------
   -- Reset signals
   ----------------------------------------------------------------------------
-  SIGNAL rst_txmac  : STD_LOGIC;
-  SIGNAL rst_rxmac  : STD_LOGIC;
+  SIGNAL rst_txmac_arr  : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);
+  SIGNAL rst_rxmac_arr  : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- dp_xonoff 
   ----------------------------------------------------------------------------
-  SIGNAL dp_xonoff_src_out  : t_dp_sosi;
-  SIGNAL dp_xonoff_src_in   : t_dp_siso;
+  SIGNAL dp_xonoff_src_out_arr  : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_xonoff_src_in_arr   : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- Latency adapter tx a
   ----------------------------------------------------------------------------
-  SIGNAL dp_latency_adapter_tx_a_src_out : t_dp_sosi;
-  SIGNAL dp_latency_adapter_tx_a_src_in  : t_dp_siso;
-  SIGNAL dp_latency_adapter_tx_a_snk_in  : t_dp_sosi;
-  SIGNAL dp_latency_adapter_tx_a_snk_out : t_dp_siso;
+  SIGNAL dp_latency_adapter_tx_a_src_out_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_latency_adapter_tx_a_src_in_arr  : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_latency_adapter_tx_a_snk_in_arr  : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_latency_adapter_tx_a_snk_out_arr : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- Latency adapter tx b
   ----------------------------------------------------------------------------
-  SIGNAL dp_latency_adapter_tx_b_src_out : t_dp_sosi;
-  SIGNAL dp_latency_adapter_tx_b_src_in  : t_dp_siso;
+  SIGNAL dp_latency_adapter_tx_b_src_out_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_latency_adapter_tx_b_src_in_arr  : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- Latency adapter rx
   ----------------------------------------------------------------------------
-  SIGNAL dp_latency_adapter_rx_src_out : t_dp_sosi;
-  SIGNAL dp_latency_adapter_rx_src_in  : t_dp_siso;
+  SIGNAL dp_latency_adapter_rx_src_out_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_latency_adapter_rx_src_in_arr  : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- TX FIFO
   ----------------------------------------------------------------------------
-  SIGNAL dp_fifo_fill_eop_src_out : t_dp_sosi;
-  SIGNAL dp_fifo_fill_eop_src_in  : t_dp_siso;
+  SIGNAL dp_fifo_fill_eop_src_out_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_fifo_fill_eop_src_in_arr  : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- 40G MAC IP
   ----------------------------------------------------------------------------
-  SIGNAL serial_clk : STD_LOGIC;
-  SIGNAL serial_clk_arr : STD_LOGIC_VECTOR(3 DOWNTO 0);
+  SIGNAL serial_clk_2arr : t_slv_4_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL serial_clk_arr : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);
 
-  SIGNAL pll_locked : STD_LOGIC;
+  SIGNAL pll_locked_arr : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);
 
-  SIGNAL tx_lanes_stable : STD_LOGIC;
-  SIGNAL rx_pcs_ready : STD_LOGIC;
+  SIGNAL rx_pcs_ready_arr : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);
 
-  SIGNAL clk_txmac : STD_LOGIC;    -- MAC + PCS clock - at least 312.5Mhz
-  SIGNAL clk_rxmac : STD_LOGIC;    -- MAC + PCS clock - at least 312.5Mhz
+  SIGNAL clk_txmac_arr : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);    -- MAC + PCS clock - at least 312.5Mhz
+  SIGNAL clk_rxmac_arr : STD_LOGIC_VECTOR(g_nof_mac-1 DOWNTO 0);    -- MAC + PCS clock - at least 312.5Mhz
 
-  SIGNAL l4_tx_data : STD_LOGIC_VECTOR(255 DOWNTO 0);
-  SIGNAL l4_tx_empty : STD_LOGIC_VECTOR(4 DOWNTO 0);
-  SIGNAL l4_tx_endofpacket : STD_LOGIC;
-  SIGNAL l4_tx_ready : STD_LOGIC;
-  SIGNAL l4_tx_startofpacket : STD_LOGIC;
-  SIGNAL l4_tx_valid : STD_LOGIC;
-  SIGNAL l4_rx_data : STD_LOGIC_VECTOR(255 DOWNTO 0);
-  SIGNAL l4_rx_empty : STD_LOGIC_VECTOR(4 DOWNTO 0);
-  SIGNAL l4_rx_endofpacket : STD_LOGIC;
-  SIGNAL l4_rx_startofpacket : STD_LOGIC;
-  SIGNAL l4_rx_valid : STD_LOGIC;
+  SIGNAL l4_tx_sosi_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL l4_tx_siso_arr : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL l4_rx_sosi_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL l4_rx_siso_arr : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- RX FIFO
   ----------------------------------------------------------------------------
-  SIGNAL dp_fifo_dc_snk_in  : t_dp_sosi;
-
-  SIGNAL dp_fifo_dc_src_out : t_dp_sosi;
-  SIGNAL dp_fifo_dc_src_in  : t_dp_siso;
+  SIGNAL dp_fifo_dc_src_out_arr : t_dp_sosi_arr(g_nof_mac-1 DOWNTO 0);
+  SIGNAL dp_fifo_dc_src_in_arr  : t_dp_siso_arr(g_nof_mac-1 DOWNTO 0);
 
   ----------------------------------------------------------------------------
   -- ATX PLL Component
@@ -284,333 +273,321 @@ ARCHITECTURE str OF ta2_unb2b_40GbE IS
 
 BEGIN
 
-  ----------------------------------------------------------------------------
-  -- Data mapping 
-  ----------------------------------------------------------------------------
-  -- Reverse byte order
-  gen_tx_bytes: FOR I IN 0 TO 31 GENERATE
-    dp_latency_adapter_tx_a_snk_in.data(8*(32-I) -1  DOWNTO 8*(31-I)) <= kernel_snk_data(8*(I+1) -1 DOWNTO 8*I);
-  END GENERATE;
+  gen_mac: FOR mac IN 0 TO g_nof_mac-1 GENERATE
+    ----------------------------------------------------------------------------
+    -- Data mapping 
+    ----------------------------------------------------------------------------
+    -- Reverse byte order
+    gen_tx_bytes: FOR I IN 0 TO 31 GENERATE
+      dp_latency_adapter_tx_a_snk_in_arr(mac).data(8*(32-I) -1  DOWNTO 8*(31-I)) <= snk_in_arr(mac).data(8*(I+1) -1 DOWNTO 8*I);
+    END GENERATE;
+
+    -- Assign correct data fields to control signals.
+    dp_latency_adapter_tx_a_snk_in_arr(mac).sop <= snk_in_arr(mac).data(256);
+    dp_latency_adapter_tx_a_snk_in_arr(mac).eop <= snk_in_arr(mac).data(257);
+    dp_latency_adapter_tx_a_snk_in_arr(mac).empty(4 DOWNTO 0) <= snk_in_arr(mac).data(263 DOWNTO 259);
+    dp_latency_adapter_tx_a_snk_in_arr(mac).valid <= snk_in_arr(mac).valid;
+    snk_out_arr(mac).ready <= dp_latency_adapter_tx_a_snk_out_arr(mac).ready; -- Flow control towards source (kernel)
+    snk_out_arr(mac).xon   <= rx_pcs_ready_arr(mac); 
+
+    ----------------------------------------------------------------------------
+    -- Latency adapter: adapt RL=0 (OpenCL kernel) to RL=1 (downstream).
+    ----------------------------------------------------------------------------
+    u_dp_latency_adapter_tx_a : ENTITY dp_lib.dp_latency_adapter
+    GENERIC MAP (
+      g_in_latency  => 0,
+      g_out_latency => 1 
+    )
+    PORT MAP (
+      clk       => kernel_clk,
+      rst       => kernel_reset,
 
-  -- Assign correct data fields to control signals.
-  dp_latency_adapter_tx_a_snk_in.sop <= kernel_snk_data(256);
-  dp_latency_adapter_tx_a_snk_in.eop <= kernel_snk_data(257);
-  dp_latency_adapter_tx_a_snk_in.empty(4 DOWNTO 0) <= kernel_snk_data(263 DOWNTO 259);
+      snk_in    => dp_latency_adapter_tx_a_snk_in_arr(mac),
+      snk_out   => dp_latency_adapter_tx_a_snk_out_arr(mac),
 
-  dp_latency_adapter_tx_a_snk_in.valid <= kernel_snk_valid;
-  kernel_snk_ready <= dp_latency_adapter_tx_a_snk_out.ready; -- Flow control towards source (kernel)
+      src_out   => dp_latency_adapter_tx_a_src_out_arr(mac),
+      src_in    => dp_latency_adapter_tx_a_src_in_arr(mac)
+    );
+    
+    ----------------------------------------------------------------------------
+    -- dp_xonoff: discard all TX frames until 40G MAC TX side is ready
+    ----------------------------------------------------------------------------
+    u_dp_xonoff : ENTITY dp_lib.dp_xonoff
+    PORT MAP (
+      clk           => kernel_clk,
+      rst           => kernel_reset,
 
+      in_sosi       => dp_latency_adapter_tx_a_src_out_arr(mac),
+      in_siso       => dp_latency_adapter_tx_a_src_in_arr(mac),
 
-  ----------------------------------------------------------------------------
-  -- Latency adapter: adapt RL=0 (OpenCL kernel) to RL=1 (downstream).
-  ----------------------------------------------------------------------------
-  u_dp_latency_adapter_tx_a : ENTITY dp_lib.dp_latency_adapter
-  GENERIC MAP (
-    g_in_latency  => 0,
-    g_out_latency => 1 
-  )
-  PORT MAP (
-    clk       => kernel_clk,
-    rst       => kernel_reset,
-
-    snk_in    => dp_latency_adapter_tx_a_snk_in,
-    snk_out   => dp_latency_adapter_tx_a_snk_out,
-
-    src_out   => dp_latency_adapter_tx_a_src_out,
-    src_in    => dp_latency_adapter_tx_a_src_in
-  );
-  
-  ----------------------------------------------------------------------------
-  -- dp_xonoff: discard all TX frames until 40G MAC TX side is ready
-  ----------------------------------------------------------------------------
-  u_dp_xonoff : ENTITY dp_lib.dp_xonoff
-  PORT MAP (
-    clk           => kernel_clk,
-    rst           => kernel_reset,
+      out_sosi      => dp_xonoff_src_out_arr(mac),
+      out_siso      => dp_xonoff_src_in_arr(mac)  -- flush control via out_siso.xon
+    );
 
-    in_sosi       => dp_latency_adapter_tx_a_src_out,
-    in_siso       => dp_latency_adapter_tx_a_src_in,
+    ----------------------------------------------------------------------------
+    -- TX FIFO
+    ----------------------------------------------------------------------------
+    u_dp_fifo_fill_eop : ENTITY dp_lib.dp_fifo_fill_eop
+    GENERIC MAP (
+      g_data_w         => c_data_w,
+      g_use_dual_clock => TRUE,
+      g_empty_w        => 8,
+      g_use_empty      => TRUE,
+      g_use_bsn        => FALSE,
+      g_bsn_w          => 64,
+      g_use_channel    => FALSE,
+      g_use_sync       => FALSE,
+      g_fifo_size      => c_tx_fifo_size,
+      g_fifo_fill      => c_tx_fifo_fill
+   )
+    PORT MAP (
+      wr_clk  => kernel_clk,
+      wr_rst  => kernel_reset,
 
-    out_sosi      => dp_xonoff_src_out,
-    out_siso      => dp_xonoff_src_in  -- flush control via out_siso.xon
-  );
+      rd_clk  => clk_txmac_arr(mac),
+      rd_rst  => rst_txmac_arr(mac),
 
-  ----------------------------------------------------------------------------
-  -- TX FIFO
-  ----------------------------------------------------------------------------
-  u_dp_fifo_fill_eop : ENTITY dp_lib.dp_fifo_fill_eop
-  GENERIC MAP (
-    g_data_w         => c_data_w,
-    g_use_dual_clock => TRUE,
-    g_empty_w        => 8,
-    g_use_empty      => TRUE,
-    g_use_bsn        => FALSE,
-    g_bsn_w          => 64,
-    g_use_channel    => FALSE,
-    g_use_sync       => FALSE,
-    g_fifo_size      => c_tx_fifo_size,
-    g_fifo_fill      => c_tx_fifo_fill
- )
-  PORT MAP (
-    wr_clk  => kernel_clk,
-    wr_rst  => kernel_reset,
-
-    rd_clk  => clk_txmac,
-    rd_rst  => rst_txmac,
-
-    snk_in  => dp_xonoff_src_out,
-    snk_out => dp_xonoff_src_in,
-
-    src_out => dp_fifo_fill_eop_src_out,
-    src_in  => dp_fifo_fill_eop_src_in
-  );
+      snk_in  => dp_xonoff_src_out_arr(mac),
+      snk_out => dp_xonoff_src_in_arr(mac),
 
-  ----------------------------------------------------------------------------
-  -- Latency adapter: adapt RL=1 (upstream) to RL=0 (MAC TX interface).
-  ----------------------------------------------------------------------------
-  u_dp_latency_adapter_tx_b : ENTITY dp_lib.dp_latency_adapter
-  GENERIC MAP (
-    g_in_latency  => 1,
-    g_out_latency => 0 
-  )
-  PORT MAP (
-    clk       => clk_txmac,
-    rst       => rst_txmac,
-
-    snk_in    => dp_fifo_fill_eop_src_out,
-    snk_out   => dp_fifo_fill_eop_src_in,
-
-    src_out   => dp_latency_adapter_tx_b_src_out,
-    src_in    => dp_latency_adapter_tx_b_src_in
-  );
+      src_out => dp_fifo_fill_eop_src_out_arr(mac),
+      src_in  => dp_fifo_fill_eop_src_in_arr(mac)
+    );
 
-  ----------------------------------------------------------------------------
-  -- 40G MAC IP
-  ----------------------------------------------------------------------------
-  l4_tx_data          <= dp_latency_adapter_tx_b_src_out.data(c_data_w-1 DOWNTO 0);
-  l4_tx_valid         <= dp_latency_adapter_tx_b_src_out.valid;
-  l4_tx_empty         <= dp_latency_adapter_tx_b_src_out.empty(4 DOWNTO 0);
-  l4_tx_startofpacket <= dp_latency_adapter_tx_b_src_out.sop;
-  l4_tx_endofpacket   <= dp_latency_adapter_tx_b_src_out.eop;
+    ----------------------------------------------------------------------------
+    -- Latency adapter: adapt RL=1 (upstream) to RL=0 (MAC TX interface).
+    ----------------------------------------------------------------------------
+    u_dp_latency_adapter_tx_b : ENTITY dp_lib.dp_latency_adapter
+    GENERIC MAP (
+      g_in_latency  => 1,
+      g_out_latency => 0 
+    )
+    PORT MAP (
+      clk       => clk_txmac_arr(mac),
+      rst       => rst_txmac_arr(mac),
 
-  dp_latency_adapter_tx_b_src_in.ready <= l4_tx_ready;
-  dp_latency_adapter_tx_b_src_in.xon   <= tx_lanes_stable;
+      snk_in    => dp_fifo_fill_eop_src_out_arr(mac),
+      snk_out   => dp_fifo_fill_eop_src_in_arr(mac),
 
-  u_arria10_40g_mac : arria10_40g_mac 
-    PORT MAP (
-       reset_async(0)         => config_reset,
-       clk_txmac(0)           => clk_txmac,    -- MAC + PCS clock - at least 312.5Mhz
-       clk_rxmac(0)           => clk_rxmac,    -- MAC + PCS clock - at least 312.5Mhz
-       clk_ref(0)             => clk_ref_r,
-       rx_pcs_ready(0)        => rx_pcs_ready,
-
-       tx_serial_clk          => serial_clk_arr,
-       tx_pll_locked(0)       => pll_locked,
-
-       clk_status(0)          => config_clk,
-       reset_status(0)        => config_reset,
-       status_addr            => (OTHERS=>'0'),
-       status_read            => (OTHERS=>'0'),
-       status_write           => (OTHERS=>'0'),
-       status_writedata       => (OTHERS=>'0'),
+      src_out   => dp_latency_adapter_tx_b_src_out_arr(mac),
+      src_in    => dp_latency_adapter_tx_b_src_in_arr(mac)
+    );
+
+    ----------------------------------------------------------------------------
+    -- 40G MAC IP
+    ----------------------------------------------------------------------------
+    l4_tx_sosi_arr(mac) <= dp_latency_adapter_tx_b_src_out_arr(mac);
+    dp_latency_adapter_tx_b_src_in_arr(mac) <= l4_tx_siso_arr(mac);  
+
+    u_arria10_40g_mac : arria10_40g_mac 
+      PORT MAP (
+         reset_async(0)         => config_reset,
+         clk_txmac(0)           => clk_txmac_arr(mac),    -- MAC + PCS clock - at least 312.5Mhz
+         clk_rxmac(0)           => clk_rxmac_arr(mac),    -- MAC + PCS clock - at least 312.5Mhz
+         clk_ref(0)             => clk_ref_r,
+         rx_pcs_ready(0)        => rx_pcs_ready_arr(mac),
+
+         tx_serial_clk          => serial_clk_2arr(mac),
+         tx_pll_locked(0)       => pll_locked_arr(mac),
+
+         clk_status(0)          => config_clk,
+         reset_status(0)        => config_reset,
+         status_addr            => (OTHERS=>'0'),
+         status_read            => (OTHERS=>'0'),
+         status_write           => (OTHERS=>'0'),
+         status_writedata       => (OTHERS=>'0'),
 --       status_readdata        => status_readdata_eth,
 --       status_read_timeout    => status_read_timeout,
 --       status_readdata_valid  => status_readdata_valid_eth,
-    
-       reconfig_clk(0)        => config_clk,
-       reconfig_reset(0)      => config_reset,
-       reconfig_write         => (OTHERS=>'0'),
-       reconfig_read          => (OTHERS=>'0'),
-       reconfig_address       => (OTHERS=>'0'),
-       reconfig_writedata     => (OTHERS=>'0'),
+      
+         reconfig_clk(0)        => config_clk,
+         reconfig_reset(0)      => config_reset,
+         reconfig_write         => (OTHERS=>'0'),
+         reconfig_read          => (OTHERS=>'0'),
+         reconfig_address       => (OTHERS=>'0'),
+         reconfig_writedata     => (OTHERS=>'0'),
 --       reconfig_readdata      => reco_readdata[31:0],
 --       reconfig_waitrequest   => reco_waitrequest,
-       
-       l4_tx_data             => l4_tx_data,
-       l4_tx_empty            => l4_tx_empty,
-       l4_tx_startofpacket    => l4_tx_startofpacket,
-       l4_tx_endofpacket      => l4_tx_endofpacket,
-       l4_tx_ready            => l4_tx_ready,
-       l4_tx_valid            => l4_tx_valid,
-       l4_tx_error            => '0',
-       
-       l4_rx_data             => l4_rx_data,
-       l4_rx_empty            => l4_rx_empty,
-       l4_rx_startofpacket    => l4_rx_startofpacket,
-       l4_rx_endofpacket      => l4_rx_endofpacket,
---       l4_rx_error            => ,
-       l4_rx_valid            => l4_rx_valid,
-
---        l4_rx_status                  (),
---        l4_rx_fcs_error               (),
---        l4_rx_fcs_valid               (),
---        rx_inc_octetsOK               (),
---        rx_inc_octetsOK_valid         (),
---        rx_inc_runt                   (),
---        rx_inc_64                     (),
---        rx_inc_127                    (),
---        rx_inc_255                    (),
---        rx_inc_511                    (),
---        rx_inc_1023                   (),
---        rx_inc_1518                   (),
---        rx_inc_max                    (),
---        rx_inc_over                   (),
---        rx_inc_mcast_data_err         (),
---        rx_inc_mcast_data_ok          (),
---        rx_inc_bcast_data_err         (),
---        rx_inc_bcast_data_ok          (),
---        rx_inc_ucast_data_err         (),
---        rx_inc_ucast_data_ok          (),
---        rx_inc_mcast_ctrl             (),
---        rx_inc_bcast_ctrl             (),
---        rx_inc_ucast_ctrl             (),
---        rx_inc_pause                  (),
---        rx_inc_fcs_err                (),
---        rx_inc_fragment               (),
---        rx_inc_jabber                 (),
---        rx_inc_sizeok_fcserr          (),
---        rx_inc_pause_ctrl_err         (),
---        rx_inc_mcast_ctrl_err         (),
---        rx_inc_bcast_ctrl_err         (),
---        rx_inc_ucast_ctrl_err         (),
---        status_waitrequest            (),
-       tx_lanes_stable(0)     => tx_lanes_stable,
---        tx_inc_octetsOK               (),
---        tx_inc_octetsOK_valid         (),
---        tx_inc_64                     (),
---        tx_inc_127                    (),
---        tx_inc_255                    (),
---        tx_inc_511                    (),
---        tx_inc_1023                   (),
---        tx_inc_1518                   (),
---        tx_inc_max                    (),
---        tx_inc_over                   (),
---        tx_inc_mcast_data_err         (),
---        tx_inc_mcast_data_ok          (),
---        tx_inc_bcast_data_err         (),
---        tx_inc_bcast_data_ok          (),
---        tx_inc_ucast_data_err         (),
---        tx_inc_ucast_data_ok          (),
---        tx_inc_mcast_ctrl             (),
---        tx_inc_bcast_ctrl             (),
---        tx_inc_ucast_ctrl             (),
---        tx_inc_pause                  (),
---        tx_inc_fcs_err                (),
---        tx_inc_fragment               (),
---        tx_inc_jabber                 (),
---        tx_inc_sizeok_fcserr          (),
-
-       tx_serial              => tx_serial_r,
-       rx_serial              => rx_serial_r
-    );
+         
+         l4_tx_data             => l4_tx_sosi_arr(mac).data(255 DOWNTO 0), 
+         l4_tx_empty            => l4_tx_sosi_arr(mac).empty(4 DOWNTO 0), 
+         l4_tx_startofpacket    => l4_tx_sosi_arr(mac).sop, 
+         l4_tx_endofpacket      => l4_tx_sosi_arr(mac).eop,
+         l4_tx_ready            => l4_tx_siso_arr(mac).ready, 
+         l4_tx_valid            => l4_tx_sosi_arr(mac).valid, 
+         l4_tx_error            => '0',
+         
+         l4_rx_data             => l4_rx_sosi_arr(mac).data(255 DOWNTO 0),
+         l4_rx_empty            => l4_rx_sosi_arr(mac).empty(4 DOWNTO 0),
+         l4_rx_startofpacket    => l4_rx_sosi_arr(mac).sop,
+         l4_rx_endofpacket      => l4_rx_sosi_arr(mac).eop,
+  --       l4_rx_error            => ,
+         l4_rx_valid            => l4_rx_sosi_arr(mac).valid,
+  
+  --        l4_rx_status                  (),
+  --        l4_rx_fcs_error               (),
+  --        l4_rx_fcs_valid               (),
+  --        rx_inc_octetsOK               (),
+  --        rx_inc_octetsOK_valid         (),
+  --        rx_inc_runt                   (),
+  --        rx_inc_64                     (),
+  --        rx_inc_127                    (),
+  --        rx_inc_255                    (),
+  --        rx_inc_511                    (),
+  --        rx_inc_1023                   (),
+  --        rx_inc_1518                   (),
+  --        rx_inc_max                    (),
+  --        rx_inc_over                   (),
+  --        rx_inc_mcast_data_err         (),
+  --        rx_inc_mcast_data_ok          (),
+  --        rx_inc_bcast_data_err         (),
+  --        rx_inc_bcast_data_ok          (),
+  --        rx_inc_ucast_data_err         (),
+  --        rx_inc_ucast_data_ok          (),
+  --        rx_inc_mcast_ctrl             (),
+  --        rx_inc_bcast_ctrl             (),
+  --        rx_inc_ucast_ctrl             (),
+  --        rx_inc_pause                  (),
+  --        rx_inc_fcs_err                (),
+  --        rx_inc_fragment               (),
+  --        rx_inc_jabber                 (),
+  --        rx_inc_sizeok_fcserr          (),
+  --        rx_inc_pause_ctrl_err         (),
+  --        rx_inc_mcast_ctrl_err         (),
+  --        rx_inc_bcast_ctrl_err         (),
+  --        rx_inc_ucast_ctrl_err         (),
+  --        status_waitrequest            (),
+         tx_lanes_stable(0)     => l4_tx_siso_arr(mac).xon,
+  --        tx_inc_octetsOK               (),
+  --        tx_inc_octetsOK_valid         (),
+  --        tx_inc_64                     (),
+  --        tx_inc_127                    (),
+  --        tx_inc_255                    (),
+  --        tx_inc_511                    (),
+  --        tx_inc_1023                   (),
+  --        tx_inc_1518                   (),
+  --        tx_inc_max                    (),
+  --        tx_inc_over                   (),
+  --        tx_inc_mcast_data_err         (),
+  --        tx_inc_mcast_data_ok          (),
+  --        tx_inc_bcast_data_err         (),
+  --        tx_inc_bcast_data_ok          (),
+  --        tx_inc_ucast_data_err         (),
+  --        tx_inc_ucast_data_ok          (),
+  --        tx_inc_mcast_ctrl             (),
+  --        tx_inc_bcast_ctrl             (),
+  --        tx_inc_ucast_ctrl             (),
+  --        tx_inc_pause                  (),
+  --        tx_inc_fcs_err                (),
+  --        tx_inc_fragment               (),
+  --        tx_inc_jabber                 (),
+  --        tx_inc_sizeok_fcserr          (),
+
+         tx_serial              => tx_serial_r(4*(mac+1)-1 DOWNTO 4*mac),
+         rx_serial              => rx_serial_r(4*(mac+1)-1 DOWNTO 4*mac)
+      );
+
+
+    -- No latency adapter needed as the RX MAC does not have a ready input
+    ----------------------------------------------------------------------------
+    -- RX FIFO
+    ----------------------------------------------------------------------------
+    rst_rxmac_arr(mac) <= NOT rx_pcs_ready_arr(mac);
+    u_dp_fifo_dc : ENTITY dp_lib.dp_fifo_dc
+    GENERIC MAP (
+      g_data_w         => c_data_w,
+      g_empty_w        => 8,
+      g_use_empty      => TRUE,
+      g_use_bsn        => FALSE,
+      g_bsn_w          => 64,
+      g_use_channel    => FALSE,
+      g_use_sync       => FALSE,
+      g_fifo_size      => c_rx_fifo_size
+   )
+    PORT MAP (
+      wr_clk  => clk_rxmac_arr(mac),
+      wr_rst  => rst_rxmac_arr(mac),
 
+      rd_clk  => kernel_clk,
+      rd_rst  => kernel_reset,
 
-  -- No latency adapter needed as the RX MAC does not have a ready input
-  ----------------------------------------------------------------------------
-  -- RX FIFO
-  ----------------------------------------------------------------------------
-  rst_rxmac <= NOT rx_pcs_ready;
-  rx_status <= rx_pcs_ready;
-
-  dp_fifo_dc_snk_in.data(c_data_w-1 DOWNTO 0) <= l4_rx_data;
-  dp_fifo_dc_snk_in.valid              <= l4_rx_valid;
-  dp_fifo_dc_snk_in.sop                <= l4_rx_startofpacket;
-  dp_fifo_dc_snk_in.eop                <= l4_rx_endofpacket;
-  dp_fifo_dc_snk_in.empty(4 DOWNTO 0)  <= l4_rx_empty;
-
-  u_dp_fifo_dc : ENTITY dp_lib.dp_fifo_dc
-  GENERIC MAP (
-    g_data_w         => c_data_w,
-    g_empty_w        => 8,
-    g_use_empty      => TRUE,
-    g_use_bsn        => FALSE,
-    g_bsn_w          => 64,
-    g_use_channel    => FALSE,
-    g_use_sync       => FALSE,
-    g_fifo_size      => c_rx_fifo_size
- )
-  PORT MAP (
-    wr_clk  => clk_rxmac,
-    wr_rst  => rst_rxmac,
-
-    rd_clk  => kernel_clk,
-    rd_rst  => kernel_reset,
-
-    snk_in  => dp_fifo_dc_snk_in,
-    snk_out => OPEN,
-
-    src_out => dp_fifo_dc_src_out,
-    src_in  => dp_fifo_dc_src_in
-  );
+      snk_in  => l4_rx_sosi_arr(mac),
+      snk_out => OPEN,
 
+      src_out => dp_fifo_dc_src_out_arr(mac),
+      src_in  => dp_fifo_dc_src_in_arr(mac)
+    );
 
-  ----------------------------------------------------------------------------
-  -- Latency adapter: adapt RL=1 (dp_fifo_dc) to RL=0 (OpenCL kernel).
-  ----------------------------------------------------------------------------
-  u_dp_latency_adapter_rx : ENTITY dp_lib.dp_latency_adapter
-  GENERIC MAP (
-    g_in_latency  => 1,
-    g_out_latency => 0 
-  )
-  PORT MAP (
-    clk       => kernel_clk,
-    rst       => kernel_reset,
-
-    snk_in    => dp_fifo_dc_src_out,
-    snk_out   => dp_fifo_dc_src_in,
-
-    src_out   => dp_latency_adapter_rx_src_out,
-    src_in    => dp_latency_adapter_rx_src_in
-  );
 
-  ----------------------------------------------------------------------------
-  -- Data mapping 
-  ----------------------------------------------------------------------------
-  -- Reverse byte order
-  gen_rx_bytes: FOR I IN 0 TO 31 GENERATE
-    kernel_src_data(8*(32-I) -1  DOWNTO 8*(31-I)) <= dp_latency_adapter_rx_src_out.data(8*(I+1) -1 DOWNTO 8*I);
-  END GENERATE;
+    ----------------------------------------------------------------------------
+    -- Latency adapter: adapt RL=1 (dp_fifo_dc) to RL=0 (OpenCL kernel).
+    ----------------------------------------------------------------------------
+    u_dp_latency_adapter_rx : ENTITY dp_lib.dp_latency_adapter
+    GENERIC MAP (
+      g_in_latency  => 1,
+      g_out_latency => 0 
+    )
+    PORT MAP (
+      clk       => kernel_clk,
+      rst       => kernel_reset,
+
+      snk_in    => dp_fifo_dc_src_out_arr(mac),
+      snk_out   => dp_fifo_dc_src_in_arr(mac),
+
+      src_out   => dp_latency_adapter_rx_src_out_arr(mac),
+      src_in    => dp_latency_adapter_rx_src_in_arr(mac)
+    );
 
-  -- Assign control signals to correct data fields.
-  kernel_src_data(256) <= dp_latency_adapter_rx_src_out.sop;
-  kernel_src_data(257) <= dp_latency_adapter_rx_src_out.eop;
-  kernel_src_data(263 DOWNTO 259) <= dp_latency_adapter_rx_src_out.empty(4 DOWNTO 0);
+    ----------------------------------------------------------------------------
+    -- Data mapping 
+    ----------------------------------------------------------------------------
+    -- Reverse byte order
+    gen_rx_bytes: FOR I IN 0 TO 31 GENERATE
+      src_out_arr(mac).data(8*(32-I) -1  DOWNTO 8*(31-I)) <= dp_latency_adapter_rx_src_out_arr(mac).data(8*(I+1) -1 DOWNTO 8*I);
+    END GENERATE;
+
+    -- Assign control signals to correct data fields.
+    src_out_arr(mac).data(256) <= dp_latency_adapter_rx_src_out_arr(mac).sop;
+    src_out_arr(mac).data(257) <= dp_latency_adapter_rx_src_out_arr(mac).eop;
+    src_out_arr(mac).data(263 DOWNTO 259) <= dp_latency_adapter_rx_src_out_arr(mac).empty(4 DOWNTO 0);
+    src_out_arr(mac).valid <= dp_latency_adapter_rx_src_out_arr(mac).valid;
+    dp_latency_adapter_rx_src_in_arr(mac).ready <= src_in_arr(mac).ready;
+    dp_latency_adapter_rx_src_in_arr(mac).xon <= '1';
+
+    -------------------------------------------------------------------------------
+    -- Reset signal generation
+    -------------------------------------------------------------------------------
   
+    u_common_areset_txmac : ENTITY common_lib.common_areset
+    GENERIC MAP (
+      g_rst_level => '1',
+      g_delay_len => 3
+    )
+    PORT MAP (
+      in_rst    => kernel_reset,
+      clk       => clk_txmac_arr(mac),
+      out_rst   => rst_txmac_arr(mac)
+    );
 
-  kernel_src_valid <= dp_latency_adapter_rx_src_out.valid;
-  dp_latency_adapter_rx_src_in.ready <= kernel_src_ready;
-  dp_latency_adapter_rx_src_in.xon <= '1';
-
-  -------------------------------------------------------------------------------
-  -- PLL for clock generation
-  -------------------------------------------------------------------------------
-  u_arria10_40g_atx_pll : arria10_40g_atx_pll
-  port map (
-    pll_cal_busy  => OPEN,
-    pll_locked    => pll_locked,
-    pll_powerdown => config_reset,
-    pll_refclk0   => clk_ref_r,
-    tx_serial_clk => serial_clk
-  );
 
-  gen_serial_clk_arr : FOR i IN 0 TO 3 GENERATE
-    serial_clk_arr(i) <= serial_clk;
+    -------------------------------------------------------------------------------
+    -- PLL for clock generation, every mac needs its own, due to clock nework limitations
+    -------------------------------------------------------------------------------
+    u_arria10_40g_atx_pll : arria10_40g_atx_pll
+    port map (
+      pll_cal_busy  => OPEN,
+      pll_locked    => pll_locked_arr(mac),
+      pll_powerdown => config_reset,
+      pll_refclk0   => clk_ref_r,
+      tx_serial_clk => serial_clk_arr(mac)
+    );
+  
+    gen_serial_clk_arr : FOR i IN 0 TO 3 GENERATE
+      serial_clk_2arr(mac)(i) <= serial_clk_arr(mac);
+    END GENERATE;
+
   END GENERATE;
 
-  -------------------------------------------------------------------------------
-  -- Reset signal generation
-  -------------------------------------------------------------------------------
-
-  u_common_areset_txmac : ENTITY common_lib.common_areset
-  GENERIC MAP (
-    g_rst_level => '1',
-    g_delay_len => 3
-  )
-  PORT MAP (
-    in_rst    => kernel_reset,
-    clk       => clk_txmac,
-    out_rst   => rst_txmac
-  );
 
 END str;
 
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl
deleted file mode 100644
index 255db44967..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl
+++ /dev/null
@@ -1,213 +0,0 @@
-# TCL File Generated by Component Editor 18.0
-# Fri Jan 10 16:11:08 CET 2020
-# DO NOT MODIFY
-
-
-# 
-# ta2_unb2b_40GbE "ta2_unb2b_40GbE" v1.0
-#  2020.01.10.16:11:08
-# 
-# 
-
-# 
-# request TCL package from ACDS 18.0
-# 
-package require -exact qsys 18.0
-
-
-# 
-# module ta2_unb2b_40GbE
-# 
-set_module_property DESCRIPTION ""
-set_module_property NAME ta2_unb2b_40GbE
-set_module_property VERSION 1.0
-set_module_property INTERNAL false
-set_module_property OPAQUE_ADDRESS_MAP true
-set_module_property AUTHOR ""
-set_module_property DISPLAY_NAME ta2_unb2b_40GbE
-set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
-set_module_property EDITABLE true
-set_module_property REPORT_TO_TALKBACK false
-set_module_property ALLOW_GREYBOX_GENERATION false
-set_module_property REPORT_HIERARCHY false
-
-
-# 
-# file sets
-# 
-add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
-set_fileset_property QUARTUS_SYNTH TOP_LEVEL ta2_unb2b_40GbE_ip_wrapper
-set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
-set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ta2_unb2b_40GbE_ip_wrapper.vhd VHDL PATH ta2_unb2b_40GbE_ip_wrapper.vhd TOP_LEVEL_FILE
-
-
-# 
-# parameters
-# 
-
-
-# 
-# display items
-# 
-
-
-# 
-# connection point kernel_snk
-# 
-add_interface kernel_snk avalon_streaming end
-set_interface_property kernel_snk associatedClock kernel_clk
-set_interface_property kernel_snk associatedReset kernel_reset
-set_interface_property kernel_snk dataBitsPerSymbol 8
-set_interface_property kernel_snk errorDescriptor ""
-set_interface_property kernel_snk firstSymbolInHighOrderBits true
-set_interface_property kernel_snk maxChannel 0
-set_interface_property kernel_snk readyAllowance 0
-set_interface_property kernel_snk readyLatency 0
-set_interface_property kernel_snk ENABLED true
-set_interface_property kernel_snk EXPORT_OF ""
-set_interface_property kernel_snk PORT_NAME_MAP ""
-set_interface_property kernel_snk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_snk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_snk kernel_snk_data data Input 264
-add_interface_port kernel_snk kernel_snk_ready ready Output 1
-add_interface_port kernel_snk kernel_snk_valid valid Input 1
-
-
-# 
-# connection point kernel_src
-# 
-add_interface kernel_src avalon_streaming start
-set_interface_property kernel_src associatedClock kernel_clk
-set_interface_property kernel_src associatedReset kernel_reset
-set_interface_property kernel_src dataBitsPerSymbol 8
-set_interface_property kernel_src errorDescriptor ""
-set_interface_property kernel_src firstSymbolInHighOrderBits true
-set_interface_property kernel_src maxChannel 0
-set_interface_property kernel_src readyAllowance 0
-set_interface_property kernel_src readyLatency 0
-set_interface_property kernel_src ENABLED true
-set_interface_property kernel_src EXPORT_OF ""
-set_interface_property kernel_src PORT_NAME_MAP ""
-set_interface_property kernel_src CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_src SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_src kernel_src_data data Output 264
-add_interface_port kernel_src kernel_src_ready ready Input 1
-add_interface_port kernel_src kernel_src_valid valid Output 1
-
-
-# 
-# connection point config_clk
-# 
-add_interface config_clk clock end
-set_interface_property config_clk ENABLED true
-set_interface_property config_clk EXPORT_OF ""
-set_interface_property config_clk PORT_NAME_MAP ""
-set_interface_property config_clk CMSIS_SVD_VARIABLES ""
-set_interface_property config_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port config_clk config_clk clk Input 1
-
-
-# 
-# connection point kernel_clk
-# 
-add_interface kernel_clk clock end
-set_interface_property kernel_clk ENABLED true
-set_interface_property kernel_clk EXPORT_OF ""
-set_interface_property kernel_clk PORT_NAME_MAP ""
-set_interface_property kernel_clk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_clk kernel_clk clk Input 1
-
-
-# 
-# connection point refclk
-# 
-add_interface refclk clock end
-set_interface_property refclk ENABLED true
-set_interface_property refclk EXPORT_OF ""
-set_interface_property refclk PORT_NAME_MAP ""
-set_interface_property refclk CMSIS_SVD_VARIABLES ""
-set_interface_property refclk SVD_ADDRESS_GROUP ""
-
-add_interface_port refclk clk_ref_r clk Input 1
-
-
-# 
-# connection point rx_serial_data
-# 
-add_interface rx_serial_data conduit end
-set_interface_property rx_serial_data associatedClock ""
-set_interface_property rx_serial_data associatedReset ""
-set_interface_property rx_serial_data ENABLED true
-set_interface_property rx_serial_data EXPORT_OF ""
-set_interface_property rx_serial_data PORT_NAME_MAP ""
-set_interface_property rx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property rx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_serial_data rx_serial_r conduit Input 4
-
-
-# 
-# connection point tx_serial_data
-# 
-add_interface tx_serial_data conduit end
-set_interface_property tx_serial_data associatedClock ""
-set_interface_property tx_serial_data associatedReset ""
-set_interface_property tx_serial_data ENABLED true
-set_interface_property tx_serial_data EXPORT_OF ""
-set_interface_property tx_serial_data PORT_NAME_MAP ""
-set_interface_property tx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property tx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port tx_serial_data tx_serial_r conduit Output 4
-
-
-# 
-# connection point config_reset
-# 
-add_interface config_reset reset end
-set_interface_property config_reset associatedClock config_clk
-set_interface_property config_reset synchronousEdges DEASSERT
-set_interface_property config_reset ENABLED true
-set_interface_property config_reset EXPORT_OF ""
-set_interface_property config_reset PORT_NAME_MAP ""
-set_interface_property config_reset CMSIS_SVD_VARIABLES ""
-set_interface_property config_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port config_reset config_reset reset Input 1
-
-
-# 
-# connection point kernel_reset
-# 
-add_interface kernel_reset reset end
-set_interface_property kernel_reset associatedClock kernel_clk
-set_interface_property kernel_reset synchronousEdges DEASSERT
-set_interface_property kernel_reset ENABLED true
-set_interface_property kernel_reset EXPORT_OF ""
-set_interface_property kernel_reset PORT_NAME_MAP ""
-set_interface_property kernel_reset CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_reset kernel_reset reset Input 1
-
-
-# 
-# connection point rx_status
-# 
-add_interface rx_status conduit end
-set_interface_property rx_status associatedClock ""
-set_interface_property rx_status associatedReset ""
-set_interface_property rx_status ENABLED true
-set_interface_property rx_status EXPORT_OF ""
-set_interface_property rx_status PORT_NAME_MAP ""
-set_interface_property rx_status CMSIS_SVD_VARIABLES ""
-set_interface_property rx_status SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_status rx_status rx_status Output 1
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl~ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl~
deleted file mode 100644
index 169117a331..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_hw.tcl~
+++ /dev/null
@@ -1,213 +0,0 @@
-# TCL File Generated by Component Editor 18.0
-# Fri Jan 10 15:53:26 CET 2020
-# DO NOT MODIFY
-
-
-# 
-# ta2_unb2b_40GbE "ta2_unb2b_40GbE" v1.0
-#  2020.01.10.15:53:26
-# 
-# 
-
-# 
-# request TCL package from ACDS 18.0
-# 
-package require -exact qsys 18.0
-
-
-# 
-# module ta2_unb2b_40GbE
-# 
-set_module_property DESCRIPTION ""
-set_module_property NAME ta2_unb2b_40GbE
-set_module_property VERSION 1.0
-set_module_property INTERNAL false
-set_module_property OPAQUE_ADDRESS_MAP true
-set_module_property AUTHOR ""
-set_module_property DISPLAY_NAME ta2_unb2b_40GbE
-set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
-set_module_property EDITABLE true
-set_module_property REPORT_TO_TALKBACK false
-set_module_property ALLOW_GREYBOX_GENERATION false
-set_module_property REPORT_HIERARCHY false
-
-
-# 
-# file sets
-# 
-add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
-set_fileset_property QUARTUS_SYNTH TOP_LEVEL ta2_unb2b_40GbE_ip_wrapper
-set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
-set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ta2_unb2b_40GbE_ip_wrapper.vhd VHDL PATH ta2_unb2b_40GbE_ip_wrapper.vhd TOP_LEVEL_FILE
-
-
-# 
-# parameters
-# 
-
-
-# 
-# display items
-# 
-
-
-# 
-# connection point kernel_snk
-# 
-add_interface kernel_snk avalon_streaming end
-set_interface_property kernel_snk associatedClock kernel_clk
-set_interface_property kernel_snk associatedReset kernel_reset
-set_interface_property kernel_snk dataBitsPerSymbol 8
-set_interface_property kernel_snk errorDescriptor ""
-set_interface_property kernel_snk firstSymbolInHighOrderBits true
-set_interface_property kernel_snk maxChannel 0
-set_interface_property kernel_snk readyAllowance 0
-set_interface_property kernel_snk readyLatency 0
-set_interface_property kernel_snk ENABLED true
-set_interface_property kernel_snk EXPORT_OF ""
-set_interface_property kernel_snk PORT_NAME_MAP ""
-set_interface_property kernel_snk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_snk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_snk kernel_snk_data data Input 264
-add_interface_port kernel_snk kernel_snk_ready ready Output 1
-add_interface_port kernel_snk kernel_snk_valid valid Input 1
-
-
-# 
-# connection point kernel_src
-# 
-add_interface kernel_src avalon_streaming start
-set_interface_property kernel_src associatedClock kernel_clk
-set_interface_property kernel_src associatedReset kernel_reset
-set_interface_property kernel_src dataBitsPerSymbol 8
-set_interface_property kernel_src errorDescriptor ""
-set_interface_property kernel_src firstSymbolInHighOrderBits true
-set_interface_property kernel_src maxChannel 0
-set_interface_property kernel_src readyAllowance 0
-set_interface_property kernel_src readyLatency 0
-set_interface_property kernel_src ENABLED true
-set_interface_property kernel_src EXPORT_OF ""
-set_interface_property kernel_src PORT_NAME_MAP ""
-set_interface_property kernel_src CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_src SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_src kernel_src_data data Output 264
-add_interface_port kernel_src kernel_src_ready ready Input 1
-add_interface_port kernel_src kernel_src_valid valid Output 1
-
-
-# 
-# connection point config_clk
-# 
-add_interface config_clk clock end
-set_interface_property config_clk ENABLED true
-set_interface_property config_clk EXPORT_OF ""
-set_interface_property config_clk PORT_NAME_MAP ""
-set_interface_property config_clk CMSIS_SVD_VARIABLES ""
-set_interface_property config_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port config_clk config_clk clk Input 1
-
-
-# 
-# connection point kernel_clk
-# 
-add_interface kernel_clk clock end
-set_interface_property kernel_clk ENABLED true
-set_interface_property kernel_clk EXPORT_OF ""
-set_interface_property kernel_clk PORT_NAME_MAP ""
-set_interface_property kernel_clk CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_clk SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_clk kernel_clk clk Input 1
-
-
-# 
-# connection point refclk
-# 
-add_interface refclk clock end
-set_interface_property refclk ENABLED true
-set_interface_property refclk EXPORT_OF ""
-set_interface_property refclk PORT_NAME_MAP ""
-set_interface_property refclk CMSIS_SVD_VARIABLES ""
-set_interface_property refclk SVD_ADDRESS_GROUP ""
-
-add_interface_port refclk clk_ref_r clk Input 1
-
-
-# 
-# connection point rx_serial_data
-# 
-add_interface rx_serial_data conduit end
-set_interface_property rx_serial_data associatedClock ""
-set_interface_property rx_serial_data associatedReset ""
-set_interface_property rx_serial_data ENABLED true
-set_interface_property rx_serial_data EXPORT_OF ""
-set_interface_property rx_serial_data PORT_NAME_MAP ""
-set_interface_property rx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property rx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_serial_data rx_serial_r conduit Input 4
-
-
-# 
-# connection point tx_serial_data
-# 
-add_interface tx_serial_data conduit end
-set_interface_property tx_serial_data associatedClock ""
-set_interface_property tx_serial_data associatedReset ""
-set_interface_property tx_serial_data ENABLED true
-set_interface_property tx_serial_data EXPORT_OF ""
-set_interface_property tx_serial_data PORT_NAME_MAP ""
-set_interface_property tx_serial_data CMSIS_SVD_VARIABLES ""
-set_interface_property tx_serial_data SVD_ADDRESS_GROUP ""
-
-add_interface_port tx_serial_data tx_serial_r conduit Output 4
-
-
-# 
-# connection point config_reset
-# 
-add_interface config_reset reset end
-set_interface_property config_reset associatedClock config_clk
-set_interface_property config_reset synchronousEdges DEASSERT
-set_interface_property config_reset ENABLED true
-set_interface_property config_reset EXPORT_OF ""
-set_interface_property config_reset PORT_NAME_MAP ""
-set_interface_property config_reset CMSIS_SVD_VARIABLES ""
-set_interface_property config_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port config_reset config_reset reset Input 1
-
-
-# 
-# connection point kernel_reset
-# 
-add_interface kernel_reset reset end
-set_interface_property kernel_reset associatedClock kernel_clk
-set_interface_property kernel_reset synchronousEdges DEASSERT
-set_interface_property kernel_reset ENABLED true
-set_interface_property kernel_reset EXPORT_OF ""
-set_interface_property kernel_reset PORT_NAME_MAP ""
-set_interface_property kernel_reset CMSIS_SVD_VARIABLES ""
-set_interface_property kernel_reset SVD_ADDRESS_GROUP ""
-
-add_interface_port kernel_reset kernel_reset reset Input 1
-
-
-# 
-# connection point rx_status
-# 
-add_interface rx_status conduit end
-set_interface_property rx_status associatedClock ""
-set_interface_property rx_status associatedReset ""
-set_interface_property rx_status ENABLED true
-set_interface_property rx_status EXPORT_OF ""
-set_interface_property rx_status PORT_NAME_MAP ""
-set_interface_property rx_status CMSIS_SVD_VARIABLES ""
-set_interface_property rx_status SVD_ADDRESS_GROUP ""
-
-add_interface_port rx_status rx_status rx_status Output 1
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_ip_wrapper.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_ip_wrapper.vhd
deleted file mode 100644
index c6c086f03b..0000000000
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/ip/ta2_unb2b_40GbE/ta2_unb2b_40GbE_ip_wrapper.vhd
+++ /dev/null
@@ -1,114 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright (C) 2019
--- 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/>.
---
--------------------------------------------------------------------------------
-
--- Author:
--- . Reinier van der Walle
--- Purpose:
--- . Instantiates ta2_unb2b_40GbE component 
-LIBRARY IEEE;
-USE IEEE.STD_LOGIC_1164.ALL;
-
-ENTITY ta2_unb2b_40GbE_ip_wrapper IS       
-  PORT (      
-    config_clk       : IN  STD_LOGIC; -- 100MHz clk for reconfig block and status interface
-    config_reset     : IN  STD_LOGIC;
-
-    clk_ref_r        : IN  STD_LOGIC; -- 644.53125MHz 40G MAC reference clock
-
-    tx_serial_r      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial TX lanes towards QSFP cage
-    rx_serial_r      : IN  STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial RX lanes from QSFP cage
-
-    kernel_clk       : IN  STD_LOGIC; -- Kernel clock (runs the kernel_* I/O below)
-    kernel_reset     : IN  STD_LOGIC;
-
-    kernel_src_data  : OUT STD_LOGIC_VECTOR(263 DOWNTO 0); -- RX Data to kernel
-    kernel_src_valid : OUT STD_LOGIC; -- RX data valid signal to kernel
-    kernel_src_ready : IN  STD_LOGIC; -- Flow control from kernel
-
-    kernel_snk_data  : IN  STD_LOGIC_VECTOR(263 DOWNTO 0); -- TX Data from kernel
-    kernel_snk_valid : IN  STD_LOGIC; -- TX data valid signal from kernel
-    kernel_snk_ready : OUT STD_LOGIC;  -- Flow control towards kernel
-
-    rx_status        : OUT STD_LOGIC -- RX status
-  );
-END ta2_unb2b_40GbE_ip_wrapper;
-
-
-ARCHITECTURE str OF ta2_unb2b_40GbE_ip_wrapper IS
-  ----------------------------------------------------------------------------
-  -- ta2_unb2b_40GbE Component
-  ----------------------------------------------------------------------------
-  COMPONENT ta2_unb2b_40GbE IS
-  PORT (
-    config_clk       : IN  STD_LOGIC; -- 100MHz clk for reconfig block and status interface
-    config_reset     : IN  STD_LOGIC;
-
-    clk_ref_r        : IN  STD_LOGIC; -- 644.53125MHz 40G MAC reference clock
-
-    tx_serial_r      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial TX lanes towards QSFP cage
-    rx_serial_r      : IN  STD_LOGIC_VECTOR(3 DOWNTO 0); -- Serial RX lanes from QSFP cage
-
-    kernel_clk       : IN  STD_LOGIC; -- Kernel clock (runs the kernel_* I/O below)
-    kernel_reset     : IN  STD_LOGIC;
-
-    kernel_src_data  : OUT STD_LOGIC_VECTOR(263 DOWNTO 0); -- RX Data to kernel
-    kernel_src_valid : OUT STD_LOGIC; -- RX data valid signal to kernel
-    kernel_src_ready : IN  STD_LOGIC; -- Flow control from kernel
-
-    kernel_snk_data  : IN  STD_LOGIC_VECTOR(263 DOWNTO 0); -- TX Data from kernel
-    kernel_snk_valid : IN  STD_LOGIC; -- TX data valid signal from kernel
-    kernel_snk_ready : OUT STD_LOGIC;  -- Flow control towards kernel
-
-    rx_status        : OUT STD_LOGIC -- RX status
-  );
-  END COMPONENT ta2_unb2b_40GbE;
-
-BEGIN
-
-  u_ta2_unb2b_40GbE : ta2_unb2b_40GbE 
-    PORT MAP (
-      config_clk       => config_clk,
-      config_reset     => config_reset,     
-                                           
-      clk_ref_r        => clk_ref_r,        
-                                           
-      tx_serial_r      => tx_serial_r,     
-      rx_serial_r      => rx_serial_r,      
-                                           
-      kernel_clk       => kernel_clk,       
-      kernel_reset     => kernel_reset,     
-                                           
-      kernel_src_data  => kernel_src_data,  
-      kernel_src_valid => kernel_src_valid, 
-      kernel_src_ready => kernel_src_ready, 
-                                           
-      kernel_snk_data  => kernel_snk_data,  
-      kernel_snk_valid => kernel_snk_valid, 
-      kernel_snk_ready => kernel_snk_ready, 
-  
-      rx_status        => rx_status
-
-    );
-
-
-
-END str;
-
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top.vhd
index c46698e643..42ce5312d6 100644
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top.vhd
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top.vhd
@@ -75,10 +75,16 @@ ENTITY top IS
     SA_CLK       : IN    STD_LOGIC := '0'; -- Clock 10GbE front (qsfp) and ring lines
 
     -- front transceivers
-    QSFP_0_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0) := (OTHERS=>'0');
-    QSFP_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0);
-    QSFP_1_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0) := (OTHERS=>'0');
-    QSFP_1_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 downto 0);
+    QSFP_0_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    QSFP_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
+    QSFP_1_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    QSFP_1_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
+
+    -- ring transceivers
+    RING_0_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_ring.bus_w-1 DOWNTO 0) := (OTHERS => '0');
+    RING_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_ring.bus_w-1 DOWNTO 0);
+    RING_1_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_ring.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
+    RING_1_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_ring.bus_w-1 DOWNTO 0);
 
      -- back transceivers
     BCK_RX       : IN    STD_LOGIC_VECTOR(0 DOWNTO 0);
@@ -106,7 +112,13 @@ ARCHITECTURE str OF top IS
 
   -- 10GbE
   CONSTANT c_nof_qsfp_bus           : NATURAL := 2;
-  CONSTANT c_nof_streams_qsfp       : NATURAL := c_quad*c_nof_qsfp_bus;
+  CONSTANT c_nof_ring_bus           : NATURAL := 2;
+  CONSTANT c_ring_bus_w             : NATURAL := c_unb2b_board_tr_ring.bus_w;
+  CONSTANT c_nof_streams_qsfp       : NATURAL := c_unb2b_board_tr_qsfp.bus_w*c_nof_qsfp_bus;
+  CONSTANT c_nof_streams_ring       : NATURAL := c_unb2b_board_tr_ring.bus_w*c_nof_ring_bus;
+
+  -- 40GbE
+  CONSTANT c_nof_40GbE_IP           : NATURAL := 3;
 
   -- System
   SIGNAL cs_sim                     : STD_LOGIC;
@@ -193,14 +205,21 @@ ARCHITECTURE str OF top IS
   -- 10GbE
   SIGNAL i_QSFP_TX                  : t_unb2b_board_qsfp_bus_2arr(c_nof_qsfp_bus-1 DOWNTO 0); 
   SIGNAL i_QSFP_RX                  : t_unb2b_board_qsfp_bus_2arr(c_nof_qsfp_bus-1 DOWNTO 0);
- 
+
+  SIGNAL i_RING_TX                  : t_unb2b_board_ring_bus_2arr(c_nof_ring_bus-1 DOWNTO 0); 
+  SIGNAL i_RING_RX                  : t_unb2b_board_ring_bus_2arr(c_nof_ring_bus-1 DOWNTO 0);
+  
   SIGNAL unb2b_board_front_io_serial_tx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS=>'0');
   SIGNAL unb2b_board_front_io_serial_rx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0);
+ 
+  SIGNAL unb2b_board_ring_io_serial_tx_arr : STD_LOGIC_VECTOR(c_nof_streams_ring-1 DOWNTO 0) := (OTHERS=>'0');
+  SIGNAL unb2b_board_ring_io_serial_rx_arr : STD_LOGIC_VECTOR(c_nof_streams_ring-1 DOWNTO 0);
 
   -- QSFP leds
-  SIGNAL qsfp_green_led_arr         : STD_LOGIC_VECTOR(c_nof_qsfp_bus-1 DOWNTO 0);
-  SIGNAL qsfp_red_led_arr           : STD_LOGIC_VECTOR(c_nof_qsfp_bus-1 DOWNTO 0);
-  SIGNAL unb2b_board_qsfp_leds_tx_src_in_arr : t_dp_siso_arr(c_nof_qsfp_bus*c_quad-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
+  SIGNAL qsfp_green_led_arr         : STD_LOGIC_VECTOR(c_nof_qsfp_bus+c_nof_ring_bus-1 DOWNTO 0);
+  SIGNAL qsfp_red_led_arr           : STD_LOGIC_VECTOR(c_nof_qsfp_bus+c_nof_ring_bus-1 DOWNTO 0);
+  --SIGNAL unb2b_board_qsfp_leds_tx_src_in_arr : t_dp_siso_arr(c_nof_qsfp_bus*c_quad-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
+  SIGNAL unb2b_board_qsfp_leds_tx_src_in_arr : t_dp_siso_arr((c_nof_qsfp_bus+c_nof_qsfp_bus)*c_quad-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst);
 
   SIGNAL i_reset_n         : STD_LOGIC;
   SIGNAL i_kernel_rst    : STD_LOGIC;
@@ -209,6 +228,7 @@ ARCHITECTURE str OF top IS
   SIGNAL board_kernel_clk_clk                         : std_logic;                    
   SIGNAL board_kernel_clk2x_clk                       : std_logic;                   
   SIGNAL board_kernel_reset_reset_n                   : std_logic;                   
+  SIGNAL board_kernel_reset_reset_n_in                : std_logic;                   
  
   SIGNAL board_kernel_cra_waitrequest                 : std_logic;                     
   SIGNAL board_kernel_cra_readdata                    : std_logic_vector(63 downto 0); 
@@ -231,13 +251,12 @@ ARCHITECTURE str OF top IS
   SIGNAL board_kernel_register_mem_writedata          : std_logic_vector(255 downto 0); -- := (others => 'X'); -- writedata
   SIGNAL board_kernel_register_mem_byteenable         : std_logic_vector(31 downto 0); --  := (others => 'X'); -- byteenable
 
-  SIGNAL board_kernel_stream_snk_40GbE_data           : std_logic_vector(263 downto 0) := (others => 'X'); -- data
-  SIGNAL board_kernel_stream_snk_40GbE_ready          : std_logic;                                         -- ready
-  SIGNAL board_kernel_stream_snk_40GbE_valid          : std_logic                      := 'X';             -- valid
-  SIGNAL board_kernel_stream_src_40GbE_data           : std_logic_vector(263 downto 0);                    -- data
-  SIGNAL board_kernel_stream_src_40GbE_ready          : std_logic                      := 'X';             -- ready
-  SIGNAL board_kernel_stream_src_40GbE_valid          : std_logic;                                         -- valid
-  SIGNAL ta2_unb2b_40gbe_rx_status_rx_status          : std_logic;                                         -- rx_status
+  SIGNAL ta2_unb2b_40GbE_src_out_arr                  : t_dp_sosi_arr(c_nof_40GbE_IP-1 DOWNTO 0);
+  SIGNAL ta2_unb2b_40GbE_src_in_arr                   : t_dp_siso_arr(c_nof_40GbE_IP-1 DOWNTO 0);
+  SIGNAL ta2_unb2b_40GbE_snk_out_arr                  : t_dp_siso_arr(c_nof_40GbE_IP-1 DOWNTO 0);
+  SIGNAL ta2_unb2b_40GbE_snk_in_arr                   : t_dp_sosi_arr(c_nof_40GbE_IP-1 DOWNTO 0);
+  SIGNAL ta2_unb2b_40GbE_tx_serial_r                  : STD_LOGIC_VECTOR(4*c_nof_40GbE_IP -1 DOWNTO 0);
+  SIGNAL ta2_unb2b_40GbE_rx_serial_r                  : STD_LOGIC_VECTOR(4*c_nof_40GbE_IP -1 DOWNTO 0);
 
   SIGNAL board_kernel_stream_src_10GbE_data           : std_logic_vector(71 downto 0); 
   SIGNAL board_kernel_stream_src_10GbE_valid          : std_logic; 
@@ -278,25 +297,29 @@ BEGIN
     serial_tx_arr => unb2b_board_front_io_serial_tx_arr,
     serial_rx_arr => unb2b_board_front_io_serial_rx_arr,
 
-    green_led_arr => qsfp_green_led_arr(c_nof_qsfp_bus-1 DOWNTO 0),
-    red_led_arr   => qsfp_red_led_arr(c_nof_qsfp_bus-1 DOWNTO 0),
+    --green_led_arr => qsfp_green_led_arr(c_nof_qsfp_bus-1 DOWNTO 0),
+    --red_led_arr   => qsfp_red_led_arr(c_nof_qsfp_bus-1 DOWNTO 0),
 
     QSFP_RX    => i_QSFP_RX,
-    QSFP_TX    => i_QSFP_TX,
+    QSFP_TX    => i_QSFP_TX --,
 
-    QSFP_LED   => QSFP_LED
+    --QSFP_LED   => QSFP_LED
   );
 
   ------------------------
   -- qsfp LEDs controller 
   ------------------------
-  unb2b_board_qsfp_leds_tx_src_in_arr(4).xon <= ta2_unb2b_40gbe_rx_status_rx_status;
   unb2b_board_qsfp_leds_tx_src_in_arr(0).xon <= ta2_unb2b_10gbe_rx_status_rx_status;
+  unb2b_board_qsfp_leds_tx_src_in_arr(4).xon <= ta2_unb2b_40GbE_snk_out_arr(0).xon;
+  -- ring LED indicator
+  unb2b_board_qsfp_leds_tx_src_in_arr(8).xon <= ta2_unb2b_40GbE_snk_out_arr(1).xon;
+  unb2b_board_qsfp_leds_tx_src_in_arr(12).xon <= ta2_unb2b_40GbE_snk_out_arr(2).xon;
+
   u_unb2b_board_qsfp_leds : ENTITY unb2b_board_lib.unb2b_board_qsfp_leds
   GENERIC MAP (
     g_sim             => g_sim,
     g_factory_image   => g_factory_image,
-    g_nof_qsfp        => c_nof_qsfp_bus,
+    g_nof_qsfp        => c_nof_qsfp_bus+c_nof_ring_bus,
     g_pulse_us        => 1000 / (10**9 / c_mm_clk_freq) -- nof clk cycles to get us period
   )
   PORT MAP (
@@ -305,35 +328,71 @@ BEGIN
 
     tx_siso_arr       => unb2b_board_qsfp_leds_tx_src_in_arr,
 
-    green_led_arr     => qsfp_green_led_arr(c_nof_qsfp_bus-1 DOWNTO 0),
-    red_led_arr       => qsfp_red_led_arr(c_nof_qsfp_bus-1 DOWNTO 0)
+    green_led_arr     => qsfp_green_led_arr(c_nof_qsfp_bus+c_nof_ring_bus-1 DOWNTO 0),
+    red_led_arr       => qsfp_red_led_arr(c_nof_qsfp_bus+c_nof_ring_bus-1 DOWNTO 0)
   );
 
-  ----------
-  -- 40GbE
-  ----------
+  gen_leds : FOR i IN 0 TO c_nof_qsfp_bus+c_nof_ring_bus-1 GENERATE
+    QSFP_LED(i*2)   <=  qsfp_green_led_arr(i);
+    QSFP_LED(i*2+1) <=  qsfp_red_led_arr(i);
+  END GENERATE;
+
+
+
+  ------------
+  -- RING IO
+  ------------
+  i_RING_RX(0) <= RING_0_RX;
+  i_RING_RX(1) <= RING_1_RX;
+  RING_0_TX <= i_RING_TX(0);
+  RING_1_TX <= i_RING_TX(1);
+
+  u_ring_io : ENTITY unb2b_board_lib.unb2b_board_ring_io
+  GENERIC MAP (
+    g_nof_ring_bus => c_nof_ring_bus
+  )
+  PORT MAP (
+    serial_tx_arr => unb2b_board_ring_io_serial_tx_arr,
+    serial_rx_arr => unb2b_board_ring_io_serial_rx_arr,
+    RING_RX => i_RING_RX,
+    RING_TX => i_RING_TX
+  );
+
+  ---------
+  -- 40GbE 
+  ---------
+  -- Front QSFP 1 40GbE Interface, IP index = 0
+  unb2b_board_front_io_serial_tx_arr(7 DOWNTO 4) <= ta2_unb2b_40GbE_tx_serial_r(3 DOWNTO 0);
+  ta2_unb2b_40GbE_rx_serial_r(3 DOWNTO 0) <= unb2b_board_front_io_serial_rx_arr(7 DOWNTO 4);
+  
+  -- Ring 0 (to the left), IP index = 1
+  unb2b_board_ring_io_serial_tx_arr(3 DOWNTO 0) <= ta2_unb2b_40GbE_tx_serial_r(7 DOWNTO 4);
+  ta2_unb2b_40GbE_rx_serial_r(7 DOWNTO 4) <= unb2b_board_ring_io_serial_rx_arr(3 DOWNTO 0);
+
+  -- Ring 1 (to the right), IP index = 2
+  unb2b_board_ring_io_serial_tx_arr(3+c_ring_bus_w DOWNTO c_ring_bus_w) <= ta2_unb2b_40GbE_tx_serial_r(11 DOWNTO 8);
+  ta2_unb2b_40GbE_rx_serial_r(11 DOWNTO 8) <= unb2b_board_ring_io_serial_rx_arr(3+c_ring_bus_w DOWNTO c_ring_bus_w);
+
   u_ta2_unb2b_40GbE : ENTITY work.ta2_unb2b_40GbE
+  GENERIC MAP (
+    g_nof_mac => c_nof_40GbE_IP
+  )
   PORT MAP (
     config_clk       => mm_clk, 
     config_reset     => mm_rst, 
 
     clk_ref_r        => SA_CLK, 
 
-    tx_serial_r      => unb2b_board_front_io_serial_tx_arr(7 DOWNTO 4), 
-    rx_serial_r      => unb2b_board_front_io_serial_rx_arr(7 DOWNTO 4), 
+    tx_serial_r      => ta2_unb2b_40GbE_tx_serial_r, 
+    rx_serial_r      => ta2_unb2b_40GbE_rx_serial_r, 
 
     kernel_clk       => board_kernel_clk_clk, 
-    kernel_reset     => i_kernel_rst, 
+    kernel_reset     => i_kernel_rst,
 
-    kernel_src_data  => board_kernel_stream_src_40GbE_data, 
-    kernel_src_valid => board_kernel_stream_src_40GbE_valid, 
-    kernel_src_ready => board_kernel_stream_src_40GbE_ready, 
-
-    kernel_snk_data  => board_kernel_stream_snk_40GbE_data, 
-    kernel_snk_valid => board_kernel_stream_snk_40GbE_valid, 
-    kernel_snk_ready => board_kernel_stream_snk_40GbE_ready, 
-
-    rx_status        => ta2_unb2b_40gbe_rx_status_rx_status
+    src_out_arr      => ta2_unb2b_40GbE_src_out_arr, 
+    src_in_arr       => ta2_unb2b_40GbE_src_in_arr, 
+    snk_out_arr      => ta2_unb2b_40GbE_snk_out_arr, 
+    snk_in_arr       => ta2_unb2b_40GbE_snk_in_arr
   );
 
   ----------
@@ -423,7 +482,7 @@ BEGIN
   PORT MAP(
     board_kernel_clk_clk                 => board_kernel_clk_clk,  
     board_kernel_clk2x_clk               => board_kernel_clk2x_clk,
-    board_kernel_reset_reset_n           => board_kernel_reset_reset_n,
+    board_kernel_reset_reset_n           => board_kernel_reset_reset_n_in,
     board_kernel_irq_irq                 => board_kernel_irq_irq,
     board_kernel_cra_waitrequest         => board_kernel_cra_waitrequest,
     board_kernel_cra_readdata            => board_kernel_cra_readdata,
@@ -443,12 +502,26 @@ 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_40GbE_data   => board_kernel_stream_src_40GbE_data,
-    board_kernel_stream_src_40GbE_valid  => board_kernel_stream_src_40GbE_valid,
-    board_kernel_stream_src_40GbE_ready  => board_kernel_stream_src_40GbE_ready,
-    board_kernel_stream_snk_40GbE_data   => board_kernel_stream_snk_40GbE_data,
-    board_kernel_stream_snk_40GbE_valid  => board_kernel_stream_snk_40GbE_valid,
-    board_kernel_stream_snk_40GbE_ready  => board_kernel_stream_snk_40GbE_ready,
+    board_kernel_stream_src_40GbE_data   => ta2_unb2b_40GbE_src_out_arr(0).data(263 DOWNTO 0),
+    board_kernel_stream_src_40GbE_valid  => ta2_unb2b_40GbE_src_out_arr(0).valid,
+    board_kernel_stream_src_40GbE_ready  => ta2_unb2b_40GbE_src_in_arr(0).ready,
+    board_kernel_stream_snk_40GbE_data   => ta2_unb2b_40GbE_snk_in_arr(0).data(263 DOWNTO 0),
+    board_kernel_stream_snk_40GbE_valid  => ta2_unb2b_40GbE_snk_in_arr(0).valid,
+    board_kernel_stream_snk_40GbE_ready  => ta2_unb2b_40GbE_snk_out_arr(0).ready,
+
+    board_kernel_stream_src_40GbE_ring_0_data   => ta2_unb2b_40GbE_src_out_arr(1).data(263 DOWNTO 0),
+    board_kernel_stream_src_40GbE_ring_0_valid  => ta2_unb2b_40GbE_src_out_arr(1).valid,
+    board_kernel_stream_src_40GbE_ring_0_ready  => ta2_unb2b_40GbE_src_in_arr(1).ready,
+    board_kernel_stream_snk_40GbE_ring_0_data   => ta2_unb2b_40GbE_snk_in_arr(1).data(263 DOWNTO 0),
+    board_kernel_stream_snk_40GbE_ring_0_valid  => ta2_unb2b_40GbE_snk_in_arr(1).valid,
+    board_kernel_stream_snk_40GbE_ring_0_ready  => ta2_unb2b_40GbE_snk_out_arr(1).ready,
+
+    board_kernel_stream_src_40GbE_ring_1_data   => ta2_unb2b_40GbE_src_out_arr(2).data(263 DOWNTO 0),
+    board_kernel_stream_src_40GbE_ring_1_valid  => ta2_unb2b_40GbE_src_out_arr(2).valid,
+    board_kernel_stream_src_40GbE_ring_1_ready  => ta2_unb2b_40GbE_src_in_arr(2).ready,
+    board_kernel_stream_snk_40GbE_ring_1_data   => ta2_unb2b_40GbE_snk_in_arr(2).data(263 DOWNTO 0),
+    board_kernel_stream_snk_40GbE_ring_1_valid  => ta2_unb2b_40GbE_snk_in_arr(2).valid,
+    board_kernel_stream_snk_40GbE_ring_1_ready  => ta2_unb2b_40GbE_snk_out_arr(2).ready,
 
     board_kernel_stream_src_10GbE_data   => board_kernel_stream_src_10GbE_data,
     board_kernel_stream_src_10GbE_valid  => board_kernel_stream_src_10GbE_valid,
@@ -472,6 +545,20 @@ BEGIN
 
   i_reset_n <= NOT mm_rst;
   i_kernel_rst <= NOT board_kernel_reset_reset_n;
+
+  -- Kernel should start later than BSP
+  u_common_areset : ENTITY common_lib.common_areset
+  GENERIC MAP (
+    g_rst_level => '0',
+    g_delay_len => 9
+  )
+  PORT MAP (
+    in_rst  => i_kernel_rst,
+    clk     => board_kernel_clk_clk,
+    out_rst => board_kernel_reset_reset_n_in
+  );
+
+
   -----------------------------------------------------------------------------
   -- General control function
   -----------------------------------------------------------------------------
diff --git a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top_components_pkg.vhd b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top_components_pkg.vhd
index 748b2e5a8d..a84c59fdcd 100644
--- a/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top_components_pkg.vhd
+++ b/applications/ta2/libraries/ta2_unb2b_bsp/hardware/unb2b/top_components_pkg.vhd
@@ -212,7 +212,21 @@ PACKAGE top_components_pkg IS
       board_kernel_stream_snk_40GbE_data   : out std_logic_vector(263 downto 0); 
       board_kernel_stream_snk_40GbE_valid  : out std_logic; 
       board_kernel_stream_snk_40GbE_ready  : in  std_logic; 
-                                          
+
+      board_kernel_stream_src_40GbE_ring_0_data   : in  std_logic_vector(263 downto 0);  
+      board_kernel_stream_src_40GbE_ring_0_valid  : in  std_logic; 
+      board_kernel_stream_src_40GbE_ring_0_ready  : out std_logic; 
+      board_kernel_stream_snk_40GbE_ring_0_data   : out std_logic_vector(263 downto 0); 
+      board_kernel_stream_snk_40GbE_ring_0_valid  : out std_logic; 
+      board_kernel_stream_snk_40GbE_ring_0_ready  : in  std_logic; 
+ 
+      board_kernel_stream_src_40GbE_ring_1_data   : in  std_logic_vector(263 downto 0);  
+      board_kernel_stream_src_40GbE_ring_1_valid  : in  std_logic; 
+      board_kernel_stream_src_40GbE_ring_1_ready  : out std_logic; 
+      board_kernel_stream_snk_40GbE_ring_1_data   : out std_logic_vector(263 downto 0); 
+      board_kernel_stream_snk_40GbE_ring_1_valid  : out std_logic; 
+      board_kernel_stream_snk_40GbE_ring_1_ready  : in  std_logic; 
+                                         
       board_kernel_stream_src_10GbE_data   : in  std_logic_vector(71 downto 0); 
       board_kernel_stream_src_10GbE_valid  : in  std_logic; 
       board_kernel_stream_src_10GbE_ready  : out std_logic; 
-- 
GitLab