From 666817965ba2fdcb31f7925c8a1955b6ef8ea28a Mon Sep 17 00:00:00 2001
From: Reinier van der Walle <walle@astron.nl>
Date: Thu, 12 May 2022 14:33:56 +0200
Subject: [PATCH] removed unused disturb designs

---
 .../disturb2_unb2b_station_adc.vhd            |  163 ---
 .../disturb2_unb2b_station_adc_pins.tcl       |   24 -
 .../disturb2_unb2b_station_adc/hdllib.cfg     |  127 --
 .../tb_disturb2_unb2b_station_adc.vhd         |  303 -----
 .../disturb2_unb2b_station_bf.vhd             |  177 ---
 .../disturb2_unb2b_station_bf_pins.tcl        |   25 -
 .../disturb2_unb2b_station_bf/hdllib.cfg      |  135 --
 .../tb_disturb2_unb2b_station_bf.vhd          | 1136 -----------------
 ..._disturb2_unb2b_station_bf_bst_offload.vhd |  250 ----
 .../disturb2_unb2b_station_fsub.vhd           |  162 ---
 .../disturb2_unb2b_station_fsub_pins.tcl      |   24 -
 .../disturb2_unb2b_station_fsub/hdllib.cfg    |  134 --
 .../tb_disturb2_unb2b_station_fsub.vhd        |  535 --------
 ...isturb2_unb2b_station_fsub_sst_offload.vhd |  249 ----
 .../disturb2_unb2b_station_xsub_one.vhd       |  162 ---
 .../disturb2_unb2b_station_xsub_one_pins.tcl  |   24 -
 .../hdllib.cfg                                |  134 --
 .../tb_disturb2_unb2b_station_xsub_one.vhd    |  374 ------
 ...rb2_unb2b_station_xsub_one_xst_offload.vhd |  264 ----
 .../disturb2_unb2b_station_xsub_ring.vhd      |  195 ---
 .../disturb2_unb2b_station_xsub_ring_pins.tcl |   25 -
 .../hdllib.cfg                                |  132 --
 .../tb_disturb2_unb2b_station_xsub_ring.vhd   |  491 -------
 23 files changed, 5245 deletions(-)
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg
 delete mode 100644 applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd

diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd
deleted file mode 100644
index 62b9e62420..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc.vhd
+++ /dev/null
@@ -1,163 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--- Author : J Hargreaves, R vd Walle
--- Purpose:  
---   Wrapper for Lofar2 SDP Station adc design
--- Description:
---   Unb2b version for lab testing
---   Contains complete AIT input stage with 12 ADC streams
-
-
-LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_station_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE technology_lib.technology_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-
-ENTITY disturb2_unb2b_station_adc IS
-  GENERIC (
-    g_design_name      : STRING  := "disturb2_unb2b_station_adc";
-    g_design_note      : STRING  := "Lofar2 SDP station adc design";
-    g_sim              : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr       : NATURAL := 0;
-    g_sim_node_nr      : NATURAL := 0;
-    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_revision_id      : STRING := ""   -- revision ID     -- set by QSF
-  );
-  PORT (
-    -- GENERAL
-    CLK          : IN    STD_LOGIC; -- System Clock
-    PPS          : IN    STD_LOGIC; -- System Sync
-    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
-    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
-    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
-
-    -- Others
-    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0);
-    ID           : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0);
-    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0);
-    
-    -- I2C Interface to Sensors
-    SENS_SC      : INOUT STD_LOGIC;
-    SENS_SD      : INOUT STD_LOGIC;
-  
-    PMBUS_SC     : INOUT STD_LOGIC;
-    PMBUS_SD     : INOUT STD_LOGIC;
-    PMBUS_ALERT  : IN    STD_LOGIC := '0';
-
-    -- 1GbE Control Interface
-    ETH_CLK      : IN    STD_LOGIC;
-    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-
-    -- LEDs
-    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0);
-
-     -- back transceivers (note only 6 are used in unb2b)
-    BCK_RX       : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b);  -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12
-    BCK_REF_CLK  : IN    STD_LOGIC; -- Use as JESD204B_REFCLK
- 
-    -- jesd204b syncronization signals (2 syncs)
-    JESD204B_SYSREF : IN    STD_LOGIC;
-    JESD204B_SYNC_N : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0)  -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4
-  );
-END disturb2_unb2b_station_adc;
- 
-ARCHITECTURE str OF disturb2_unb2b_station_adc IS
-
-  SIGNAL JESD204B_SERIAL_DATA       : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL jesd204b_sync_n_arr        : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL JESD204B_REFCLK            : STD_LOGIC;
-
-
-BEGIN
-
-  -- Mapping between JESD signal names and UNB2B pin/schematic names
-  JESD204B_REFCLK <=  BCK_REF_CLK;
-  JESD204B_SERIAL_DATA(0) <= BCK_RX(42);
-  JESD204B_SERIAL_DATA(1) <= BCK_RX(43);
-  JESD204B_SERIAL_DATA(2) <= BCK_RX(44);
-  JESD204B_SERIAL_DATA(3) <= BCK_RX(45);
-  JESD204B_SERIAL_DATA(4) <= BCK_RX(46);
-  JESD204B_SERIAL_DATA(5) <= BCK_RX(47);
-  JESD204B_SERIAL_DATA(6) <= '0';
-  JESD204B_SERIAL_DATA(7) <= '0';
-  JESD204B_SERIAL_DATA(8) <= '0';
-  JESD204B_SERIAL_DATA(9) <= '0';
-  JESD204B_SERIAL_DATA(10) <= '0';
-  JESD204B_SERIAL_DATA(11) <= '0';
-  JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0);
-
-
-  u_revision : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name => g_design_name,
-    g_design_note => g_design_note,
-    g_sim         => g_sim,
-    g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr,
-    g_stamp_date  => g_stamp_date,
-    g_stamp_time  => g_stamp_time,
-    g_revision_id => g_revision_id
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => CLK,
-    PPS          => PPS,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => VERSION,
-    ID           => ID,
-    TESTIO       => TESTIO,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => SENS_SC,
-    SENS_SD      => SENS_SD,
-
-    PMBUS_SC     => PMBUS_SC,
-    PMBUS_SD     => PMBUS_SD,
-    PMBUS_ALERT  => PMBUS_ALERT,
-
-    -- 1GbE Control Interface
-    ETH_clk      => ETH_clk,
-    ETH_SGIN     => ETH_SGIN,
-    ETH_SGOUT    => ETH_SGOUT,
-
-    -- LEDs
-    QSFP_LED     => QSFP_LED,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA   => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK        => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF        => JESD204B_SYSREF,
-    JESD204B_SYNC_N        => jesd204b_sync_n_arr
-  );
-END str;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl
deleted file mode 100644
index af0a453b32..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/disturb2_unb2b_station_adc_pins.tcl
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-#
-# Copyright (C) 2022
-# 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/>.
-#
-###############################################################################
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl
-
-
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg
deleted file mode 100644
index 126f05643a..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/hdllib.cfg
+++ /dev/null
@@ -1,127 +0,0 @@
-hdl_lib_name = disturb2_unb2b_station_adc
-hdl_library_clause_name = disturb2_unb2b_station_adc_lib
-hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station 
-hdl_lib_uses_sim = 
-hdl_lib_technology = ip_arria10_e1sg
-                     
- synth_files =
-    disturb2_unb2b_station_adc.vhd
-
-test_bench_files = 
-    tb_disturb2_unb2b_station_adc.vhd
-
-regression_test_vhdl =
-    tb_disturb2_unb2b_station_adc.vhd
-
-
-[modelsim_project_file]
-modelsim_copy_files =
-    ../../src/data data
-
-[quartus_project_file]
-synth_top_level_entity =
-
-quartus_copy_files =
-    ../../quartus .
-    ../../src/data data
-
-quartus_qsf_files =
-    $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
-
-quartus_sdc_files =
-    ../../quartus/disturb2_unb2b_station.sdc
-
-quartus_tcl_files =
-    disturb2_unb2b_station_adc_pins.tcl
-
-quartus_vhdl_files = 
-
-quartus_qip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_adc/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip
-
-quartus_ip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip
-
-nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd
deleted file mode 100644
index a55244db5f..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_adc/tb_disturb2_unb2b_station_adc.vhd
+++ /dev/null
@@ -1,303 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_adc using WG data.
---
--- Description:
---   MM control actions:
---
---   1) Enable calc mode for WG via reg_diag_wg with:
---        freq = 19.921875MHz
---        ampl = 0.5 * 2**13
---   
---   2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg 
---      to trigger start of WG at BSN.
---     
---   3) Read ADUH monitor power sum for via reg_aduh_mon and verify with 
---      c_exp_wg_power_sp_0.
---      View sp_power_sum in Wave window
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a  
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_adc IS
-END tb_disturb2_unb2b_station_adc;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_adc IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0; 
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 16; 
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-   
-  CONSTANT c_percentage          : REAL := 0.05;  -- percentage that actual value may differ from expected value
-  CONSTANT c_lo_factor           : REAL := 1.0 - c_percentage;  -- lower boundary  
-  CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
-
-  -- WG
-  CONSTANT c_full_scale_ampl      : REAL := REAL(2**(14-1)-1);  -- = full scale of WG
-  CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := 2**(c_disturb_W_adc-1)/2;  -- in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-  CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
-  CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl;  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
-
-  -- ADUH
-  CONSTANT c_mon_buffer_nof_samples : NATURAL := 512; --samples per stream 
-  
-  -- MM  
-  CONSTANT c_mm_file_reg_ppsh             : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "PIO_PPS";
-  CONSTANT c_mm_file_reg_bsn_source_v2    : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER";
-  CONSTANT c_mm_file_reg_diag_wg          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG";
-  CONSTANT c_mm_file_reg_aduh_mon         : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_ADUH_MONITOR";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0);
-
-  -- WG
-  SIGNAL dbg_c_exp_wg_power_sp_0 : REAL := c_exp_wg_power_sp_0;
-  SIGNAL sp_samples              : t_integer_arr(0 TO c_mon_buffer_nof_samples-1) := (OTHERS=>0); 
-  SIGNAL sp_sample               : INTEGER := 0;
-  SIGNAL sp_power_sum            : STD_LOGIC_VECTOR(63 DOWNTO 0);
-  SIGNAL current_bsn_wg          : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
-
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '0';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0);
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0);
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(10, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_adc : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_adc",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,                
-    g_scope_selected_subband => NATURAL(c_subband_sp_0)
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-    VARIABLE v_bsn                   : NATURAL;
-    VARIABLE v_sp_power_sum_0          : REAL;
-    VARIABLE v_sp_subband_power      : REAL;
-    VARIABLE v_W, v_T, v_U, v_S, v_B : NATURAL;  -- array indicies
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
-    
-    proc_common_wait_until_hi_lo(ext_clk, ext_pps);
-        
-    ----------------------------------------------------------------------------
-    -- Enable BS
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000003#, tb_clk);  -- Enable BS at PPS
-    
-    ----------------------------------------------------------------------------
-    -- Enable WG
-    ----------------------------------------------------------------------------
-    --   0 : mode[7:0]           --> off=0, calc=1, repeat=2, single=3)
-    --       nof_samples[31:16]  --> <= c_ram_wg_size=1024
-    --   1 : phase[15:0]
-    --   2 : freq[30:0]
-    --   3 : ampl[16:0]
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
-
-    -- Read current BSN
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    
-    -- Write scheduler BSN to trigger start of WG at next block
-    v_bsn := TO_UINT(current_bsn_wg) + 2;
-    ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR;
-    v_bsn := c_bsn_start_wg;
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, v_bsn, tb_clk);  -- first write low then high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1,     0, tb_clk);  -- assume v_bsn < 2**31-1
-
-    -- Wait for enough WG data and start of sync interval
-    mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                   -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_nof_block_per_sync*3,   -- this is the wait until condition
-                            c_disturb_T_sub, tb_clk);    
-
-    ---------------------------------------------------------------------------
-    -- Read ADUH monitor power sum 
-    ---------------------------------------------------------------------------
-    mmf_mm_bus_rd(c_mm_file_reg_aduh_mon, 2, rd_data, tb_clk);  -- read low part
-    sp_power_sum(31 DOWNTO 0) <= rd_data;
-    mmf_mm_bus_rd(c_mm_file_reg_aduh_mon, 3, rd_data, tb_clk);  -- read high part
-    sp_power_sum(63 DOWNTO 32) <= rd_data;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    ---------------------------------------------------------------------------
-    -- Verify sp_power_sum 
-    ---------------------------------------------------------------------------
-    -- Convert STD_LOGIC_VECTOR sp_power_sum to REAL
-    v_sp_power_sum_0 := REAL(REAL(TO_UINT(sp_power_sum(61 DOWNTO 30)))*REAL(2**30) + REAL(TO_UINT(sp_power_sum(29 DOWNTO 0)))); 
-
-    ASSERT v_sp_power_sum_0 > c_lo_factor * c_exp_wg_power_sp_0 REPORT "Wrong SP power for SP 0" SEVERITY ERROR;
-    ASSERT v_sp_power_sum_0 < c_hi_factor * c_exp_wg_power_sp_0 REPORT "Wrong SP power for SP 0" SEVERITY ERROR;
-     
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------   
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd
deleted file mode 100644
index 8f1f543551..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf.vhd
+++ /dev/null
@@ -1,177 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--- Author : R. van der Walle
--- Purpose:  
---   Wrapper for Lofar2 SDP Station beamformer design
--- Description:
---   Unb2b version for lab testing
---   Contains complete AIT input stage with 12 ADC streams, FSUB and BF
-
-
-LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_station_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE technology_lib.technology_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-
-ENTITY disturb2_unb2b_station_bf IS
-  GENERIC (
-    g_design_name      : STRING  := "disturb2_unb2b_station_bf";
-    g_design_note      : STRING  := "Lofar2 SDP station beamformer design";
-    g_sim              : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr       : NATURAL := 0;
-    g_sim_node_nr      : NATURAL := 0;
-    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_revision_id      : STRING := ""   -- revision ID     -- set by QSF
-  );
-  PORT (
-    -- GENERAL
-    CLK          : IN    STD_LOGIC; -- System Clock
-    PPS          : IN    STD_LOGIC; -- System Sync
-    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
-    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
-    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
-
-    -- Others
-    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0);
-    ID           : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0);
-    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0);
-    
-    -- I2C Interface to Sensors
-    SENS_SC      : INOUT STD_LOGIC;
-    SENS_SD      : INOUT STD_LOGIC;
-  
-    PMBUS_SC     : INOUT STD_LOGIC;
-    PMBUS_SD     : INOUT STD_LOGIC;
-    PMBUS_ALERT  : IN    STD_LOGIC := '0';
-
-    -- 1GbE Control Interface
-    ETH_CLK      : IN    STD_LOGIC;
-    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-
-    -- Transceiver clocks
-    SA_CLK        : IN    STD_LOGIC := '0'; -- Clock 10GbE front (qsfp) and ring lines
-
-    -- front transceivers
-    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);
-
-    -- LEDs
-    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0);
-
-     -- back transceivers (note only 6 are used in unb2b)
-    BCK_RX       : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b);  -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12
-    BCK_REF_CLK  : IN    STD_LOGIC; -- Use as JESD204B_REFCLK
- 
-    -- jesd204b syncronization signals (2 syncs)
-    JESD204B_SYSREF : IN    STD_LOGIC;
-    JESD204B_SYNC_N : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0)  -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4
-  );
-END disturb2_unb2b_station_bf;
- 
-ARCHITECTURE str OF disturb2_unb2b_station_bf IS
-
-  SIGNAL JESD204B_SERIAL_DATA       : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL jesd204b_sync_n_arr        : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL JESD204B_REFCLK            : STD_LOGIC;
-
-
-BEGIN
-
-  -- Mapping between JESD signal names and UNB2B pin/schematic names
-  JESD204B_REFCLK <=  BCK_REF_CLK;
-  JESD204B_SERIAL_DATA(0) <= BCK_RX(42);
-  JESD204B_SERIAL_DATA(1) <= BCK_RX(43);
-  JESD204B_SERIAL_DATA(2) <= BCK_RX(44);
-  JESD204B_SERIAL_DATA(3) <= BCK_RX(45);
-  JESD204B_SERIAL_DATA(4) <= BCK_RX(46);
-  JESD204B_SERIAL_DATA(5) <= BCK_RX(47);
-  JESD204B_SERIAL_DATA(6) <= '0';
-  JESD204B_SERIAL_DATA(7) <= '0';
-  JESD204B_SERIAL_DATA(8) <= '0';
-  JESD204B_SERIAL_DATA(9) <= '0';
-  JESD204B_SERIAL_DATA(10) <= '0';
-  JESD204B_SERIAL_DATA(11) <= '0';
-  JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0);
-
-
-  u_revision : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name => g_design_name,
-    g_design_note => g_design_note,
-    g_sim         => g_sim,
-    g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr,
-    g_stamp_date  => g_stamp_date,
-    g_stamp_time  => g_stamp_time,
-    g_revision_id => g_revision_id
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => CLK,
-    PPS          => PPS,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => VERSION,
-    ID           => ID,
-    TESTIO       => TESTIO,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => SENS_SC,
-    SENS_SD      => SENS_SD,
-
-    PMBUS_SC     => PMBUS_SC,
-    PMBUS_SD     => PMBUS_SD,
-    PMBUS_ALERT  => PMBUS_ALERT,
-
-    -- 1GbE Control Interface
-    ETH_clk      => ETH_clk,
-    ETH_SGIN     => ETH_SGIN,
-    ETH_SGOUT    => ETH_SGOUT,
-
-    -- Transceiver clocks
-    SA_CLK       => SA_CLK,
-
-    -- front transceivers
-    QSFP_1_RX    => QSFP_1_RX, 
-    QSFP_1_TX    => QSFP_1_TX,
-
-    -- LEDs
-    QSFP_LED     => QSFP_LED,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA   => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK        => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF        => JESD204B_SYSREF,
-    JESD204B_SYNC_N        => jesd204b_sync_n_arr
-  );
-END str;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl
deleted file mode 100644
index 68401a0dbe..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/disturb2_unb2b_station_bf_pins.tcl
+++ /dev/null
@@ -1,25 +0,0 @@
-###############################################################################
-#
-# Copyright (C) 2022
-# 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/>.
-#
-###############################################################################
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_beamlets_pins.tcl
-
-
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg
deleted file mode 100644
index c57ed9da09..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/hdllib.cfg
+++ /dev/null
@@ -1,135 +0,0 @@
-hdl_lib_name = disturb2_unb2b_station_bf
-hdl_library_clause_name = disturb2_unb2b_station_bf_lib
-hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station 
-hdl_lib_uses_sim = eth 
-hdl_lib_technology = ip_arria10_e1sg
-                     
- synth_files =
-    disturb2_unb2b_station_bf.vhd
-
-test_bench_files = 
-    tb_disturb2_unb2b_station_bf.vhd
-    tb_disturb2_unb2b_station_bf_bst_offload.vhd
-
-regression_test_vhdl =
-    tb_disturb2_unb2b_station_bf.vhd
-    tb_disturb2_unb2b_station_bf_bst_offload.vhd
-
-[modelsim_project_file]
-modelsim_copy_files =
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-    # Overwrite bf weights with sim data
-    ../../tb/data data
-
-[quartus_project_file]
-synth_top_level_entity =
-
-quartus_copy_files =
-     # Note: path $RADIOHDL_WORK is equivalent to relative path ../../../../../../
-    ../../quartus .
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-
-quartus_qsf_files =
-    $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
-
-# use disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz.
-quartus_sdc_files =
-    ../../quartus/disturb2_unb2b_station.sdc
-    #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
-
-quartus_tcl_files =
-    disturb2_unb2b_station_bf_pins.tcl
-
-quartus_vhdl_files = 
-
-quartus_qip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_bf/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip
-
-quartus_ip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip
-
-nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd
deleted file mode 100644
index ec54e77326..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf.vhd
+++ /dev/null
@@ -1,1136 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle (original), E. Kooistra (updates)
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_bf using WG data.
---
--- Description:
---   MM control actions:
---
---   1) Enable calc mode for WG on signal input g_sp via reg_diag_wg with:
---        g_subband = 102 --> WG freq = 19.921875MHz
---        g_ampl = 1.0 --> WG ampl = 2**13
---   
---   2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg 
---      to trigger start of WG at BSN.
---     
---   3) Read and verify subband statistics (SST)
---   
---   4) Select subband g_subband for beamlet g_beamlet
---
---   5) Apply BF weight (g_bf_gain, g_bf_phase) to g_beamlet X beam and Y beam
---
---   6) Read and verify beamlet statistics (BST)
---        View sp_subband_sst in Wave window
---        View pol_beamlet_bst in Wave window
---
---   7) Verify 10GbE output header and output payload for g_beamlet.
---   
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   # Manually add missing signal
---   > add wave -position insertpoint  \
---     sim:/tb_disturb2_unb2b_station_bf/sp_subband_ssts_arr2 \
---     sim:/tb_disturb2_unb2b_station_bf/pol_beamlet_bsts_arr2
---   > run -a  
---   Takes about   40 m when g_read_all_* = FALSE
---   Takes about 1h 5 m when g_read_all_* = TRUE
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, tech_pll_lib, tr_10GbE_lib, disturb2_unb2b_station_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.math_real.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE common_lib.common_field_pkg.ALL;
-USE common_lib.common_network_layers_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-USE disturb_lib.tb_disturb_pkg.ALL;
-USE tech_pll_lib.tech_pll_component_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_bf IS
-  GENERIC (
-    g_sp                : NATURAL := 0;     -- WG signal path index in range(S_pn = 12)
-    g_wg_ampl           : REAL := 1.0;      -- WG normalized amplitude
-    g_subband           : NATURAL := 102;   -- select g_subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz
-    g_beamlet           : NATURAL := 10;    -- map g_subband to g_beamlet index in beamset in range(c_disturb_S_sub_bf = 488)
-    g_beamlet_scale     : REAL := 1.0 / 2.0**9;  -- g_beamlet output scale factor
-    g_bf_gain           : REAL := 1.0;      -- g_beamlet BF weight normalized gain
-    g_bf_phase          : REAL := 30.0;      -- g_beamlet BF weight phase rotation in degrees
-    g_read_all_SST      : BOOLEAN := FALSE;  -- when FALSE only read SST for g_subband, to save sim time
-    g_read_all_BST      : BOOLEAN := FALSE   -- when FALSE only read BST for g_beamlet, to save sim time
-  );
-END tb_disturb2_unb2b_station_bf;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_bf IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0; 
-  CONSTANT c_gn_index        : NATURAL := c_unb_nr * 4 + c_node_nr;           -- this node GN
-  CONSTANT c_init_bsn        : NATURAL := 17;  -- some recognizable value >= 0
-
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_gn_index, 8);
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_mac_15_0        : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr, 8);
-  CONSTANT c_ip_15_0         : STD_LOGIC_VECTOR(15 DOWNTO 0) := TO_UVEC(c_unb_nr, 8) & TO_UVEC(c_node_nr+1, 8);  -- +1 to avoid IP = *.*.*.0
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_mm_clk_period       : TIME := 10 ns;  -- 100 MHz internal mm_clk
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-  CONSTANT c_sa_clk_period       : TIME := tech_pll_clk_644_period; -- 644MHz
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 16;
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync * c_disturb_N_fft;
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-  CONSTANT c_stat_data_sz        : NATURAL := c_wpfb_sim.stat_data_sz;  -- = 2
-
-  CONSTANT c_stat_percentage     : REAL := 0.05;  -- +-percentage margin that actual value may differ from expected value
-  CONSTANT c_stat_lo_factor      : REAL := 1.0 - c_stat_percentage;  -- lower boundary
-  CONSTANT c_stat_hi_factor      : REAL := 1.0 + c_stat_percentage;  -- higher boundary
-
-  CONSTANT c_beamlet_output_delta : INTEGER := 2;  -- +-delta margin
-
-  -- header fields
-  CONSTANT c_cep_eth_dst_mac     : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_disturb_cep_eth_dst_mac;   -- 00074306C700 = DOP36-eth0
-  CONSTANT c_cep_ip_dst_addr     : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_disturb_cep_ip_dst_addr;   -- C0A80001 = '192.168.0.1' = DOP36-eth0
-  CONSTANT c_cep_udp_dst_port    : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_disturb_cep_udp_dst_port;  -- 5000
-
-  CONSTANT c_cep_eth_src_mac     : STD_LOGIC_VECTOR(47 DOWNTO 0) := c_disturb_cep_eth_src_mac_47_16 & c_mac_15_0;  -- x"00228608";  -- 47:16, 15:8 = backplane, 7:0 = node
-  CONSTANT c_cep_ip_src_addr     : STD_LOGIC_VECTOR(31 DOWNTO 0) := c_disturb_cep_ip_src_addr_31_16 & c_ip_15_0;   -- C0A80001 = '192.168.0.1' = DOP36-eth0
-  CONSTANT c_cep_udp_src_port    : STD_LOGIC_VECTOR(15 DOWNTO 0) := c_disturb_cep_udp_src_port_15_8 & c_id;  -- D0 & c_id
-
-  CONSTANT c_exp_ip_header_checksum : NATURAL := 16#5BDE#;  -- value obtained from rx_disturb_cep_header.ip.header_checksum in wave window
-
-  CONSTANT c_exp_beamlet_scale   : NATURAL := NATURAL(g_beamlet_scale * REAL(c_disturb_unit_beamlet_scale));  -- c_disturb_unit_beamlet_scale = 2**15;
-
-  CONSTANT c_exp_disturb_info        : t_disturb_info := (
-                                     TO_UVEC(601, 16),   -- station_id
-                                     '0',                -- antenna_band_index
-                                     x"7FFFFFFF",        -- observation_id, use > 0 to avoid Warning: (vsim-151) NUMERIC_STD.TO_INTEGER: Value -2 is not in bounds of subtype NATURAL.
-                                     b"01",              -- nyquist_zone_index, 0 = first, 1 = second, 2 = third
-                                     '1',                -- f_adc, 0 = 160 MHz, 1 = 200 MHz
-                                     '0',                -- fsub_type, 0 = critically sampled, 1 = oversampled
-                                     '0',                -- beam_repositioning_flag
-                                     x"1400"             -- block_period = 5120
-                                   );
-
-  -- WG
-  CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_disturb_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
-  CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
-  CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
-  -- . phase
-  CONSTANT c_subband_phase        : REAL := 0.0;  -- wanted subband phase in degrees = WG phase at sop
-  CONSTANT c_subband_freq         : REAL := REAL(g_subband) / REAL(c_disturb_N_fft);  -- normalized by fs = f_adc = 200 MHz = dp_clk rate
-  CONSTANT c_wg_latency           : INTEGER := c_diag_wg_latency - 0;  -- -0 to account for BSN scheduler start trigger latency
-  CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
-  CONSTANT c_wg_phase             : REAL := c_subband_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-
-  -- WPFB
-  CONSTANT c_pol_index                      : NATURAL := g_sp MOD c_disturb_Q_fft;
-  CONSTANT c_pfb_index                      : NATURAL := g_sp / c_disturb_Q_fft;  -- only read used WPFB unit out of range(c_disturb_P_pfb = 6)
-  CONSTANT c_subband_phase_offset           : REAL := -90.0;  -- WG with zero phase sinues yields subband with -90 degrees phase (negative Im, zero Re)
-  CONSTANT c_subband_weight_gain            : REAL := 1.0;  -- use default unit subband weights
-  CONSTANT c_subband_weight_phase           : REAL := 0.0;  -- use default unit subband weights
-  CONSTANT c_exp_subband_sp_ampl_ratio      : REAL := 7.96;  -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_subband_ampl               : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio * c_subband_weight_gain;
-  CONSTANT c_exp_subband_power              : REAL := c_exp_subband_ampl**2.0;  -- complex, so no divide by 2
-  CONSTANT c_exp_subband_sst                : REAL := c_exp_subband_power * REAL(c_nof_block_per_sync);
-
-  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; 
-  TYPE t_slv_64_subbands_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_sub-1);           -- 512
-  TYPE t_slv_64_beamlets_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_beamlets_disturb-1);  -- 2*488 = 976
-
-  -- BF
-  -- . select
-  CONSTANT c_exp_beamlet_index        : NATURAL := g_beamlet * c_disturb_N_pol_bf;  -- in beamset 0
-  -- . Beamlet weights for selected g_sp
-  CONSTANT c_bf_weight_re             : INTEGER := INTEGER(g_bf_gain * REAL(c_disturb_unit_bf_weight) * COS(g_bf_phase * MATH_2_PI / 360.0));
-  CONSTANT c_bf_weight_im             : INTEGER := INTEGER(g_bf_gain * REAL(c_disturb_unit_bf_weight) * SIN(g_bf_phase * MATH_2_PI / 360.0));
-  -- . Beamlet internal
-  CONSTANT c_exp_beamlet_ampl         : REAL := c_exp_subband_ampl * g_bf_gain;
-  CONSTANT c_exp_beamlet_phase        : REAL := c_subband_phase_offset + c_subband_weight_phase + g_bf_phase;
-  CONSTANT c_exp_beamlet_re           : REAL := c_exp_beamlet_ampl * COS(c_exp_beamlet_phase * MATH_2_PI / 360.0);
-  CONSTANT c_exp_beamlet_im           : REAL := c_exp_beamlet_ampl * SIN(c_exp_beamlet_phase * MATH_2_PI / 360.0);
-  -- . BST
-  CONSTANT c_exp_beamlet_power        : REAL := c_exp_beamlet_ampl**2.0;  -- complex, so no divide by 2
-  CONSTANT c_exp_beamlet_bst          : REAL := c_exp_subband_sst * g_bf_gain**2.0;  -- = c_exp_beamlet_power *  REAL(c_nof_block_per_sync)
-  -- . Beamlet output
-  CONSTANT c_exp_beamlet_output_ampl  : REAL := c_exp_beamlet_ampl * g_beamlet_scale;
-  CONSTANT c_exp_beamlet_output_phase : REAL := c_exp_beamlet_phase;
-  CONSTANT c_exp_beamlet_output_re    : REAL := c_exp_beamlet_re * g_beamlet_scale;
-  CONSTANT c_exp_beamlet_output_im    : REAL := c_exp_beamlet_im * g_beamlet_scale;
-
-  -- MM
-  -- . Address widths of a single MM instance
-  --   . c_disturb_S_pn = 12 instances
-  CONSTANT c_addr_w_reg_diag_wg     : NATURAL := 2;
-  --   . c_disturb_N_beamsets = 2 instances
-  CONSTANT c_addr_w_ram_ss_ss_wide  : NATURAL := ceil_log2(                 c_disturb_P_pfb * c_disturb_S_sub_bf * c_disturb_Q_fft);
-  CONSTANT c_addr_w_ram_bf_weights  : NATURAL := ceil_log2(c_disturb_N_pol_bf * c_disturb_P_pfb * c_disturb_S_sub_bf * c_disturb_Q_fft);
-  CONSTANT c_addr_w_reg_bf_scale    : NATURAL := 1;
-  CONSTANT c_addr_w_reg_hdr_dat     : NATURAL := ceil_log2(field_nof_words(c_disturb_cep_hdr_field_arr, c_word_w));
-  CONSTANT c_addr_w_reg_dp_xonoff   : NATURAL := 1;
-  CONSTANT c_addr_w_ram_st_bst      : NATURAL := ceil_log2(c_disturb_S_sub_bf*c_disturb_N_pol_bf*c_stat_data_sz);
-  -- . Address spans of a single MM instance
-  --   . c_disturb_S_pn = 12 instances
-  CONSTANT c_mm_span_reg_diag_wg    : NATURAL := 2**c_addr_w_reg_diag_wg;
-  --   . c_disturb_N_beamsets = 2 instances
-  CONSTANT c_mm_span_ram_ss_ss_wide : NATURAL := 2**c_addr_w_ram_ss_ss_wide;
-  CONSTANT c_mm_span_ram_bf_weights : NATURAL := 2**c_addr_w_ram_bf_weights;
-  CONSTANT c_mm_span_reg_bf_scale   : NATURAL := 2**c_addr_w_reg_bf_scale;
-  CONSTANT c_mm_span_reg_hdr_dat    : NATURAL := 2**c_addr_w_reg_hdr_dat;
-  CONSTANT c_mm_span_reg_dp_xonoff  : NATURAL := 2**c_addr_w_reg_dp_xonoff;
-  CONSTANT c_mm_span_ram_st_bst     : NATURAL := 2**c_addr_w_ram_st_bst;
-
-  CONSTANT c_mm_file_reg_ppsh             : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "PIO_PPS";
-  CONSTANT c_mm_file_reg_bsn_source_v2    : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER";
-  CONSTANT c_mm_file_reg_diag_wg          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG";
-  CONSTANT c_mm_file_ram_equalizer_gains  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_EQUALIZER_GAINS";
-  CONSTANT c_mm_file_reg_dp_selector      : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_SELECTOR";
-  CONSTANT c_mm_file_ram_st_sst           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST";
-  CONSTANT c_mm_file_ram_st_bst           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_BST";
-  CONSTANT c_mm_file_reg_dp_xonoff        : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_XONOFF";
-  CONSTANT c_mm_file_ram_ss_ss_wide       : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_SS_SS_WIDE";
-  CONSTANT c_mm_file_ram_bf_weights       : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_BF_WEIGHTS";
-  CONSTANT c_mm_file_reg_bf_scale         : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BF_SCALE";
-  CONSTANT c_mm_file_reg_disturb_info         : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_SDP_INFO";
-  CONSTANT c_mm_file_reg_hdr_dat          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_HDR_DAT";  -- c_disturb_N_beamsets = 2 beamsets
-
-  -- Tb
-  SIGNAL stimuli_done        : STD_LOGIC := '0';
-  SIGNAL tb_almost_end       : STD_LOGIC := '0';
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0);
-
-  SIGNAL dest_rst            : STD_LOGIC := '1';  -- use separate destination rst for Rx 10GbE in tb
-  SIGNAL pps_rst             : STD_LOGIC := '1';  -- use separate reset to release the PPS generator
-  SIGNAL gen_pps             : STD_LOGIC := '0';
-
-  SIGNAL in_sync             : STD_LOGIC := '0';
-  SIGNAL in_sync_cnt         : NATURAL := 0;
-  SIGNAL test_sync_cnt       : INTEGER := 0;
-
-  -- MM
-  SIGNAL rd_disturb_info         : t_disturb_info := c_disturb_info_rst;
-  SIGNAL rd_beamlet_scale    : STD_LOGIC_VECTOR(15 DOWNTO 0);
-  SIGNAL rd_cep_eth_dst_mac  : STD_LOGIC_VECTOR(47 DOWNTO 0);
-  SIGNAL rd_cep_ip_dst_addr  : STD_LOGIC_VECTOR(31 DOWNTO 0);
-  SIGNAL rd_cep_udp_dst_port : STD_LOGIC_VECTOR(15 DOWNTO 0);
-
-  -- WG
-  SIGNAL current_bsn_wg      : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
-
-  -- FSUB
-  -- . Read sp_subband_ssts_arr2 = SST for one WPFB unit that processes g_sp
-  SIGNAL sp_subband_ssts_arr2  : t_slv_64_subbands_arr(c_disturb_N_pol-1 DOWNTO 0);   -- [pol][sub], for X,Y pair of A, B
-  SIGNAL sp_subband_sst        : REAL := 0.0;
-  SIGNAL stat_data               : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0);
-
-  -- . Selector
-  SIGNAL sst_offload_weighted_subbands : STD_LOGIC;
-
-  -- . Subband equalizer
-  SIGNAL sp_subband_weight_re    : INTEGER := 0;
-  SIGNAL sp_subband_weight_im    : INTEGER := 0;
-  SIGNAL sp_subband_weight_gain  : REAL := 0.0;
-  SIGNAL sp_subband_weight_phase : REAL := 0.0;
-
-  -- BF
-  SIGNAL sp_subband_select       : NATURAL :=  0;
-  SIGNAL sp_subband_select_arr   : t_natural_arr(0 TO c_disturb_S_sub_bf * c_disturb_N_pol-1) := (OTHERS => 0);  -- Q_fft = N_pol = 2
-  SIGNAL sp_bf_weights_re_arr    : t_integer_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0);
-  SIGNAL sp_bf_weights_im_arr    : t_integer_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0);
-  SIGNAL sp_bf_weights_gain_arr  : t_real_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0.0);
-  SIGNAL sp_bf_weights_phase_arr : t_real_arr(0 TO c_disturb_S_pn-1) := (OTHERS => 0.0);
-
-  SIGNAL pol_beamlet_bsts_arr2 : t_slv_64_beamlets_arr(c_disturb_N_pol_bf-1 DOWNTO 0);  -- [pol_bf][blet]
-  SIGNAL pol_beamlet_bst_X_arr : t_real_arr(0 TO c_disturb_N_beamsets-1) := (OTHERS => 0.0);  -- [bset]
-  SIGNAL pol_beamlet_bst_Y_arr : t_real_arr(0 TO c_disturb_N_beamsets-1) := (OTHERS => 0.0);  -- [bset]
-
-  -- 10GbE
-  SIGNAL rx_beamlet_arr_re       : t_slv_8_arr(c_disturb_cep_nof_blocks_per_packet-1 DOWNTO 0);   -- [3:0]
-  SIGNAL rx_beamlet_arr_im       : t_slv_8_arr(c_disturb_cep_nof_blocks_per_packet-1 DOWNTO 0);   -- [3:0]
-  SIGNAL rx_beamlet_cnt          : NATURAL;
-  SIGNAL rx_beamlet_valid        : STD_LOGIC;
-
-  SIGNAL rx_beamlet_list_re      : t_slv_8_arr(c_disturb_cep_nof_beamlets_per_block * c_disturb_N_pol_bf-1 DOWNTO 0);  -- [488 * 2-1:0] = [975:0]
-  SIGNAL rx_beamlet_list_im      : t_slv_8_arr(c_disturb_cep_nof_beamlets_per_block * c_disturb_N_pol_bf-1 DOWNTO 0);  -- [488 * 2-1:0] = [975:0]
-
-  SIGNAL tr_10GbE_src_out        : t_dp_sosi;
-  SIGNAL tr_10GbE_src_in         : t_dp_siso;
-  SIGNAL tr_ref_clk_312          : STD_LOGIC := '0';
-  SIGNAL tr_ref_clk_156          : STD_LOGIC := '0';
-  SIGNAL tr_ref_rst_156          : STD_LOGIC := '0';
-
-  -- dp_offload_rx
-  SIGNAL offload_rx_hdr_dat_mosi : t_mem_mosi := c_mem_mosi_rst;
-  SIGNAL offload_rx_hdr_dat_miso : t_mem_miso;
-
-  SIGNAL test_offload_en         : STD_LOGIC := '0';
-  SIGNAL test_offload_data       : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0);  -- 64 bit
-  SIGNAL test_offload_sosi       : t_dp_sosi := c_dp_sosi_rst;
-  SIGNAL test_offload_sop_cnt    : NATURAL := 0;
-  SIGNAL test_offload_eop_cnt    : NATURAL := 0;
-
-  SIGNAL rx_hdr_fields_out       : STD_LOGIC_VECTOR(1023 DOWNTO 0);
-  SIGNAL rx_hdr_fields_raw       : STD_LOGIC_VECTOR(1023 DOWNTO 0) := (OTHERS => '0');
-  SIGNAL rx_disturb_cep_header       : t_disturb_cep_header;
-  SIGNAL exp_disturb_cep_header      : t_disturb_cep_header;
-  SIGNAL exp_dp_bsn              : NATURAL;
-
-  -- DUT
-  SIGNAL ext_clk              : STD_LOGIC := '0';
-  SIGNAL ext_pps              : STD_LOGIC := '0';
-
-  SIGNAL WDI                  : STD_LOGIC;
-  SIGNAL INTA                 : STD_LOGIC;
-  SIGNAL INTB                 : STD_LOGIC;
-
-  SIGNAL eth_clk              : STD_LOGIC := '0';
-  SIGNAL eth_txp              : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0);
-  SIGNAL eth_rxp              : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0);
-
-  SIGNAL sens_scl             : STD_LOGIC;
-  SIGNAL sens_sda             : STD_LOGIC;
-  SIGNAL pmbus_scl            : STD_LOGIC;
-  SIGNAL pmbus_sda            : STD_LOGIC;
-
-  SIGNAL SA_CLK               : STD_LOGIC := '1';
-  SIGNAL si_lpbk_0            : STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
-   
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref      : STD_LOGIC;
-  SIGNAL jesd204b_sync_n      : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-  SA_CLK <= NOT SA_CLK AFTER c_sa_clk_period/2; -- Serial Gigabit IO sa clock (644 MHz)
-  dest_rst <= '0' AFTER c_ext_clk_period * 10;
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, gen_pps);
-  jesd204b_sysref <= gen_pps;
-  ext_pps <= gen_pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_bf : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_bf",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,
-    g_scope_selected_subband => g_subband
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => ext_pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- Transceiver clocks
-    SA_CLK       => SA_CLK,
-    -- front transceivers
-    QSFP_1_RX    => si_lpbk_0, 
-    QSFP_1_TX    => si_lpbk_0, 
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  u_unb2_board_clk644_pll : ENTITY tech_pll_lib.tech_pll_xgmii_mac_clocks
-  PORT MAP (
-    refclk_644 => SA_CLK,
-    rst_in     => dest_rst,
-    clk_156    => tr_ref_clk_156,
-    clk_312    => tr_ref_clk_312,
-    rst_156    => tr_ref_rst_156,
-    rst_312    => OPEN
-  );
-
-  u_tr_10GbE: ENTITY tr_10GbE_lib.tr_10GbE
-  GENERIC MAP (
-    g_sim           => TRUE,
-    g_sim_level     => 1,
-    g_nof_macs      => 1,
-    g_use_mdio      => FALSE
-  )
-  PORT MAP (
-    -- Transceiver PLL reference clock
-    tr_ref_clk_644      => SA_CLK,
-    tr_ref_clk_312      => tr_ref_clk_312,  -- 312.5      MHz for 10GBASE-R
-    tr_ref_clk_156      => tr_ref_clk_156,  -- 156.25     MHz for 10GBASE-R or for XAUI
-    tr_ref_rst_156      => tr_ref_rst_156,  --                for 10GBASE-R or for XAUI
-
-    -- MM interface
-    mm_rst              => dest_rst,
-    mm_clk              => tb_clk,
-
-    -- DP interface
-    dp_rst              => dest_rst,
-    dp_clk              => ext_clk,
-
-    serial_rx_arr(0)    => si_lpbk_0(0),
-
-    src_out_arr(0)      => tr_10GbE_src_out,
-    src_in_arr(0)       => tr_10GbE_src_in
-  );
-
-
-  u_rx : ENTITY dp_lib.dp_offload_rx
-  GENERIC MAP (
-    g_nof_streams         => 1,
-    g_data_w              => c_longword_w,
-    g_symbol_w            => c_octet_w,
-    g_hdr_field_arr       => c_disturb_cep_hdr_field_arr,
-    g_remove_crc          => FALSE,
-    g_crc_nof_words       => 0
-  )
-  PORT MAP (
-    mm_rst                => dest_rst,
-    mm_clk                => tb_clk,
-
-    dp_rst                => dest_rst,
-    dp_clk                => ext_clk,
-
-    reg_hdr_dat_mosi      => offload_rx_hdr_dat_mosi,
-    reg_hdr_dat_miso      => offload_rx_hdr_dat_miso,
-
-    snk_in_arr(0)         => tr_10GbE_src_out,
-    snk_out_arr(0)        => tr_10GbE_src_in,
-
-    src_out_arr(0)        => test_offload_sosi,
-
-    hdr_fields_out_arr(0) => rx_hdr_fields_out,
-    hdr_fields_raw_arr(0) => rx_hdr_fields_raw
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-
-  p_mm_stimuli : PROCESS
-    VARIABLE v_bsn                                  : NATURAL;
-    VARIABLE v_sp_subband_sst                       : REAL := 0.0;
-    VARIABLE v_pol_beamlet_bst                      : REAL := 0.0;
-    VARIABLE v_data_lo, v_data_hi                   : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
-    VARIABLE v_stat_data                            : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0);
-    VARIABLE v_len, v_span, v_offset, v_addr, v_sel : NATURAL;  -- address ranges, indices
-    VARIABLE v_W, v_P, v_S, v_A, v_B, v_G           : NATURAL;  -- array indicies
-    VARIABLE v_re, v_im, v_weight                   : INTEGER;
-    VARIABLE v_re_exp, v_im_exp                     : REAL := 0.0;
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
-
-    ----------------------------------------------------------------------------
-    -- Set and check SDP info
-    ----------------------------------------------------------------------------
-    --     TYPE t_disturb_info IS RECORD
-    --   7   station_id              : STD_LOGIC_VECTOR(15 DOWNTO 0);
-    --   6   antenna_band_index      : STD_LOGIC;
-    --   5   observation_id          : STD_LOGIC_VECTOR(31 DOWNTO 0);
-    --   4   nyquist_zone_index      : STD_LOGIC_VECTOR(1 DOWNTO 0);
-    --   3   f_adc                   : STD_LOGIC;
-    --   2   fsub_type               : STD_LOGIC;
-    --   1   beam_repositioning_flag : STD_LOGIC;
-    --   0   block_period            : STD_LOGIC_VECTOR(15 DOWNTO 0);
-    --     END RECORD;
-    -- . Write
-    mmf_mm_bus_wr(c_mm_file_reg_disturb_info,  7, TO_UINT(c_exp_disturb_info.station_id), tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_disturb_info,  6, TO_UINT(slv(c_exp_disturb_info.antenna_band_index)), tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_disturb_info,  5, TO_UINT(c_exp_disturb_info.observation_id), tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_disturb_info,  4, TO_UINT(c_exp_disturb_info.nyquist_zone_index), tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_disturb_info,  1, TO_UINT(slv(c_exp_disturb_info.beam_repositioning_flag)), tb_clk);
-    -- . Read
-    mmf_mm_bus_rd(c_mm_file_reg_disturb_info,  3, rd_data, tb_clk); rd_disturb_info.f_adc <= rd_data(0);
-    mmf_mm_bus_rd(c_mm_file_reg_disturb_info,  2, rd_data, tb_clk); rd_disturb_info.fsub_type <= rd_data(0);
-    mmf_mm_bus_rd(c_mm_file_reg_disturb_info,  0, rd_data, tb_clk); rd_disturb_info.block_period <= rd_data(15 DOWNTO 0);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    -- . Verify read
-    ASSERT c_exp_disturb_info.f_adc              = rd_disturb_info.f_adc REPORT "Wrong MM read SDP info f_adc" SEVERITY ERROR;
-    ASSERT c_exp_disturb_info.fsub_type          = rd_disturb_info.fsub_type REPORT "Wrong MM read SDP info fsub_type" SEVERITY ERROR;
-    ASSERT c_exp_disturb_info.block_period       = rd_disturb_info.block_period REPORT "Wrong MM read SDP info block_period" SEVERITY ERROR;
-
-    ------------------------------------------------------------------------------
-    ---- Set and check BF per beamset
-    ------------------------------------------------------------------------------
-    FOR bset IN 0 TO c_disturb_N_beamsets-1 LOOP
-      -- MM beamlet_scale
-      -- . write
-      v_offset := bset * c_mm_span_reg_bf_scale;
-      mmf_mm_bus_wr(c_mm_file_reg_bf_scale, v_offset + 0, c_exp_beamlet_scale, tb_clk);
-      proc_common_wait_cross_clock_domain_latency(c_mm_clk_period, c_ext_clk_period);
-
-      -- . readback
-      mmf_mm_bus_rd(c_mm_file_reg_bf_scale, v_offset + 0, rd_data, tb_clk);
-      rd_beamlet_scale <= rd_data(15 DOWNTO 0);
-      proc_common_wait_some_cycles(tb_clk, 1);
-      ASSERT TO_UINT(rd_beamlet_scale) = c_exp_beamlet_scale REPORT "Wrong MM read beamlet_scale for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR;
-
-      -- CEP beamlet output header
-      --     c_disturb_cep_hdr_field_arr : t_common_field_arr(c_disturb_cep_nof_hdr_fields-1 DOWNTO 0) := (
-      --  40   "eth_dst_mac"                        ), "RW", 48, field_default(c_disturb_cep_eth_dst_mac) ),
-      --  38   "eth_src_mac"                        ), "RW", 48, field_default(0) ),
-      --  37   "eth_type"                           ), "RW", 16, field_default(x"0800") ),
-      --
-      --  36   "ip_version"                         ), "RW",  4, field_default(4) ),
-      --  35   "ip_header_length"                   ), "RW",  4, field_default(5) ),
-      --  34   "ip_services"                        ), "RW",  8, field_default(0) ),
-      --  33   "ip_total_length"                    ), "RW", 16, field_default(c_disturb_cep_ip_total_length) ),
-      --  32   "ip_identification"                  ), "RW", 16, field_default(0) ),
-      --  31   "ip_flags"                           ), "RW",  3, field_default(2) ),
-      --  30   "ip_fragment_offset"                 ), "RW", 13, field_default(0) ),
-      --  29   "ip_time_to_live"                    ), "RW",  8, field_default(127) ),
-      --  28   "ip_protocol"                        ), "RW",  8, field_default(17) ),
-      --  27   "ip_header_checksum"                 ), "RW", 16, field_default(0) ),
-      --  26   "ip_src_addr"                        ), "RW", 32, field_default(0) ),
-      --  25   "ip_dst_addr"                        ), "RW", 32, field_default(c_disturb_cep_ip_dst_addr) ),
-      --
-      --  24   "udp_src_port"                       ), "RW", 16, field_default(0) ),
-      --  23   "udp_dst_port"                       ), "RW", 16, field_default(c_disturb_cep_udp_dst_port) ),
-      --  22   "udp_total_length"                   ), "RW", 16, field_default(c_disturb_cep_udp_total_length) ),
-      --  21   "udp_checksum"                       ), "RW", 16, field_default(0) ),
-      --
-      --  20   "disturb_marker"                         ), "RW",  8, field_default(c_disturb_marker_beamlets) ),
-      --  19   "disturb_version_id"                     ), "RW",  8, field_default(c_disturb_cep_version_id) ),
-      --  18   "disturb_observation_id"                 ), "RW", 32, field_default(0) ),
-      --  17   "disturb_station_id"                     ), "RW", 16, field_default(0) ),
-      --
-      --  16   "disturb_source_info_antenna_band_id"    ), "RW",  1, field_default(0) ),
-      --  15   "disturb_source_info_nyquist_zone_id"    ), "RW",  2, field_default(0) ),
-      --  14   "disturb_source_info_f_adc"              ), "RW",  1, field_default(0) ),
-      --  13   "disturb_source_info_fsub_type"          ), "RW",  1, field_default(0) ),
-      --  12   "disturb_source_info_payload_error"      ), "RW",  1, field_default(0) ),
-      --  11   "disturb_source_info_repositioning_flag" ), "RW",  1, field_default(0) ),
-      --  10   "disturb_source_info_beamlet_width"      ), "RW",  4, field_default(c_disturb_W_beamlet) ),
-      --   9   "disturb_source_info_gn_id"              ), "RW",  5, field_default(0) ),
-      --
-      --   7   "disturb_reserved"                       ), "RW", 40, field_default(0) ),
-      --   6   "disturb_beamlet_scale"                  ), "RW", 16, field_default(c_disturb_beamlet_scale_default) ),
-      --   5   "disturb_beamlet_index"                  ), "RW", 16, field_default(0) ),
-      --   4   "disturb_nof_blocks_per_packet"          ), "RW",  8, field_default(c_disturb_cep_nof_blocks_per_packet) ),
-      --   3   "disturb_nof_beamlets_per_block"         ), "RW", 16, field_default(c_disturb_cep_nof_beamlets_per_block) ),
-      --   2   "disturb_block_period"                   ), "RW", 16, field_default(c_disturb_block_period) ),
-      --
-      --   0   "dp_bsn"                             ), "RW", 64, field_default(0) )
-      --     );
-
-      v_offset := bset * c_mm_span_reg_hdr_dat;
-      -- . Use defaults, so no need to write
-      -- . Read
-      mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 41, rd_data, tb_clk); rd_cep_eth_dst_mac(47 DOWNTO 32) <= rd_data(15 DOWNTO 0);
-      mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 40, rd_data, tb_clk); rd_cep_eth_dst_mac(31 DOWNTO  0) <= rd_data;
-      mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 25, rd_data, tb_clk); rd_cep_ip_dst_addr <= rd_data;
-      mmf_mm_bus_rd(c_mm_file_reg_hdr_dat, v_offset + 23, rd_data, tb_clk); rd_cep_udp_dst_port <= rd_data(15 DOWNTO 0);
-      proc_common_wait_some_cycles(tb_clk, 1);
-      -- verify read
-      ASSERT rd_cep_eth_dst_mac = c_disturb_cep_eth_dst_mac REPORT "Wrong MM read rd_cep_eth_dst_mac for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR;  -- 00074306C700 = DOP36-eth0
-      ASSERT rd_cep_ip_dst_addr = c_disturb_cep_ip_dst_addr REPORT "Wrong MM read rd_cep_ip_dst_addr for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR;  -- C0A80001 = '192.168.0.1' = DOP36-eth0
-      ASSERT rd_cep_udp_dst_port = c_disturb_cep_udp_dst_port REPORT "Wrong MM read rd_cep_udp_dst_port for beamset " & NATURAL'IMAGE(bset) SEVERITY ERROR;  -- 5000
-
-      ----------------------------------------------------------------------------
-      -- Enable beamlet UDP offload (dp_xonoff)
-      ----------------------------------------------------------------------------
-      v_offset := bset * c_mm_span_reg_dp_xonoff;
-      mmf_mm_bus_wr(c_mm_file_reg_dp_xonoff, v_offset + 0, 1, tb_clk);
-    END LOOP;
-
-    ----------------------------------------------------------------------------
-    -- Enable BS
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,         c_init_bsn, tb_clk);  -- Init BSN
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                  0, tb_clk);  -- Write high part activates the init BSN
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,       16#00000003#, tb_clk);  -- Enable BS at PPS
-    
-    -- Release PPS pulser, to get first PPS now and to start BSN source
-    WAIT FOR 1 us;
-    pps_rst <= '0';
-
-    ----------------------------------------------------------------------------
-    -- Enable and start WG
-    ----------------------------------------------------------------------------
-    --   0 : mode[7:0]           --> off=0, calc=1, repeat=2, single=3)
-    --       nof_samples[31:16]  --> <= c_ram_wg_size=1024
-    --   1 : phase[15:0]
-    --   2 : freq[30:0]
-    --   3 : ampl[16:0]
-    -- . Put wanted signal on g_sp input
-    v_offset := g_sp * c_mm_span_reg_diag_wg;
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
-
-    -- Read current BSN
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    -- Write scheduler BSN to trigger start of WG at next block
-    v_bsn := TO_UINT(current_bsn_wg) + 2;
-    ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR;
-    v_bsn := c_bsn_start_wg;
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, v_bsn, tb_clk);  -- first write low then high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1,     0, tb_clk);  -- assume v_bsn < 2**31-1
-    
-    ----------------------------------------------------------------------------
-    -- Read weighted subband selector
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_rd(c_mm_file_reg_dp_selector, 0, rd_data, tb_clk);
-    sst_offload_weighted_subbands <= NOT rd_data(0);
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    ----------------------------------------------------------------------------
-    -- Subband weight
-    ----------------------------------------------------------------------------
-
-    -- . MM format: (cint16)RAM_EQUALIZER_GAINS[S_pn/Q_fft]_[Q_fft][N_sub] = [S_pn][N_sub]
-    v_addr := g_sp * c_disturb_N_sub + g_subband;
-    -- . read
-    mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk);
-    v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight);
-    v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight);
-    sp_subband_weight_re <= v_re;
-    sp_subband_weight_im <= v_im;
-    sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight);
-    sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI;
-
-    -- No need to write subband weight, because default it is unit weight
-
-    ----------------------------------------------------------------------------
-    -- Subband select to map subband to beamlet
-    ----------------------------------------------------------------------------
-    -- . MM format: (uint16)RAM_SS_SS_WIDE[N_beamsets][A_pn]_[S_sub_bf][Q_fft], Q_fft = N_pol = 2
-
-    -- . write selection, only for g_beamlet to save sim time
-    v_span := true_log_pow2(c_disturb_N_pol * c_disturb_S_sub_bf);  -- = 1024
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      -- Same selection for both beamsets
-      -- Select beamlet g_beamlet to subband g_subband
-      FOR A IN 0 TO c_disturb_A_pn-1 LOOP
-        -- Same selection to all SP
-        FOR P IN 0 TO c_disturb_N_pol-1 LOOP
-          v_addr := P + g_beamlet * c_disturb_N_pol + A * v_span + U * c_mm_span_ram_ss_ss_wide;
-          v_sel := P + g_subband * c_disturb_N_pol;
-          mmf_mm_bus_wr(c_mm_file_ram_ss_ss_wide, v_addr, v_sel, tb_clk);
-        END LOOP;
-      END LOOP;
-    END LOOP;
-
-    -- . read back selection for g_sp = c_pfb_index * c_disturb_N_pol + c_pol_index
-    v_P := c_pol_index;
-    v_A := c_pfb_index;
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      -- Same selection for both beamsets, so fine to use only one sp_subband_select_arr()
-      FOR B IN 0 TO c_disturb_S_sub_bf-1 LOOP
-        -- Same selection for all SP, so fine to only read subband selection for g_sp
-        v_addr := v_P + B * c_disturb_N_pol + v_A * v_span + U * c_mm_span_ram_ss_ss_wide;
-        mmf_mm_bus_rd(c_mm_file_ram_ss_ss_wide, v_addr, rd_data, tb_clk);
-        v_sel := (TO_UINT(rd_data) - v_P) / c_disturb_N_pol;
-        sp_subband_select_arr(B) <= v_sel;
-        sp_subband_select <= v_sel;  -- for time series view in Wave window
-      END LOOP;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-    proc_common_wait_some_cycles(ext_clk, 100);  -- delay for ease of view in Wave window
-
-    ----------------------------------------------------------------------------
-    -- Write beamlet weight for g_beamlet
-    ----------------------------------------------------------------------------
-    -- . MM format: (cint16)RAM_BF_WEIGHTS[N_beamsets][N_pol_bf][A_pn]_[N_pol][S_sub_bf]
-
-    -- . write BF weights, only for g_beamlet to save sim time
-    v_span := true_log_pow2(c_disturb_N_pol * c_disturb_S_sub_bf);  -- = 1024
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      -- Same BF weights for both beamsets
-      FOR A IN 0 TO c_disturb_A_pn-1 LOOP
-        FOR P IN 0 TO c_disturb_N_pol-1 LOOP
-          v_S := A * c_disturb_N_pol + P;
-          IF v_S = g_sp THEN
-            -- use generic BF weight for g_sp in g_beamlet
-            v_weight := pack_complex(re => c_bf_weight_re, im => c_bf_weight_im, w => c_disturb_W_bf_weight);
-          ELSE
-            -- default set all weights to zero
-            v_weight := 0;
-          END IF;
-          v_addr := g_beamlet + A * v_span + U * c_mm_span_ram_bf_weights;
-          v_addr := v_addr + P * c_disturb_S_sub_bf;
-          mmf_mm_bus_wr(c_mm_file_ram_bf_weights, v_addr, v_weight, tb_clk);
-        END LOOP;
-      END LOOP;
-    END LOOP;
-
-    -- . read back BF weights for g_beamlet
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      FOR A IN 0 TO c_disturb_A_pn-1 LOOP
-        FOR P IN 0 TO c_disturb_N_pol-1 LOOP
-          v_addr := g_beamlet + A * v_span + U * c_mm_span_ram_bf_weights;
-          v_addr := v_addr + P * c_disturb_S_sub_bf;
-          mmf_mm_bus_rd(c_mm_file_ram_bf_weights, v_addr, rd_data, tb_clk);
-          v_re := unpack_complex_re(rd_data, c_disturb_W_bf_weight);
-          v_im := unpack_complex_im(rd_data, c_disturb_W_bf_weight);
-          -- same BF weights for both beamsets, so fine to use only one sp_bf_weights_*_arr()
-          v_S := A * c_disturb_N_pol + P;
-          sp_bf_weights_re_arr(v_S) <= v_re;
-          sp_bf_weights_im_arr(v_S) <= v_im;
-          sp_bf_weights_gain_arr(v_S) <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_bf_weight);
-          sp_bf_weights_phase_arr(v_S) <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI;
-        END LOOP;
-      END LOOP;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-    proc_common_wait_some_cycles(ext_clk, 100);  -- delay for ease of view in Wave window
-
-    ----------------------------------------------------------------------------
-    -- Wait for enough WG data and start of sync interval
-    ----------------------------------------------------------------------------
-    mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                               -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_init_bsn + c_nof_block_per_sync*3,  -- this is the wait until condition
-                            c_disturb_T_sub, tb_clk);
-
-    -- Stimuli done, now verify results at end of test
-    stimuli_done <= '1';
-
-    ---------------------------------------------------------------------------
-    -- Read subband statistics
-    ---------------------------------------------------------------------------   
-    -- . the subband statistics are c_stat_data_sz = 2 word power values.
-    -- . there are c_disturb_S_pn = 12 signal inputs A, B, C, D, E, F, G, H, I, J, K, L
-    -- . there are c_disturb_N_sub = 512 subbands per signal input (SI, = signal path, SP)
-    -- . one complex WPFB can process two real inputs A, B, so there are c_disturb_P_pfb = 6 WPFB units,
-    --   but only read for the 1 WPFB unit of the selected g_sp, to save sim time
-    -- . the outputs for A, B are time multiplexed, c_disturb_Q_fft = 2, assume that they
-    --   correspond to the c_disturb_N_pol = 2 signal polarizations
-    -- . the subbands are output alternately so A0 B0 A1 B1 ... A511 B511 for input A, B
-    -- . the subband statistics multiple WPFB units appear in order in the ram_st_sst address map
-    -- . the subband statistics are stored first lo word 0 then hi word 1
-    v_len := c_disturb_N_sub * c_disturb_N_pol * c_stat_data_sz;  -- 2048 = 512 * 2 * 64/32
-    v_span := true_log_pow2(v_len);                       -- = 2048
-    FOR I IN 0 TO v_len-1 LOOP
-      v_W := I MOD c_stat_data_sz;                   -- 0, 1 per statistics word, word index
-      v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol;   -- 0, 1 per SP pol, polarization index
-      v_B := I / (c_disturb_N_pol * c_stat_data_sz);     -- subband index, range(N_sub = 512) per dual pol
-      v_addr := I + c_pfb_index * v_span;            -- MM address
-      -- Only read SST for g_subband for dual pol SP, to save sim time
-      IF g_read_all_SST = TRUE OR v_B = g_subband THEN
-        IF v_W = 0 THEN
-          -- low part
-          mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk);
-          v_data_lo := rd_data;
-        ELSE
-          -- high part
-          mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk);
-          v_data_hi := rd_data;
-          v_stat_data := v_data_hi & v_data_lo;
-
-          sp_subband_ssts_arr2(v_P)(v_B) <= v_stat_data;
-          stat_data <= v_stat_data;  -- for time series view in Wave window
-        END IF;
-      END IF;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    -- Subband power of g_subband in g_sp
-    -- . For the selected g_subband in g_sp the sp_subband_sst will be close
-    --   to sp_subband_sst_sum_arr(c_pol_index), because the input is a
-    --   sinus, so most power will be in 1 subband.
-    sp_subband_sst <= TO_UREAL(sp_subband_ssts_arr2(c_pol_index)(g_subband));
-    proc_common_wait_some_cycles(tb_clk, 1);
-    proc_common_wait_some_cycles(ext_clk, 100);  -- delay for ease of view in Wave window
-
-    ---------------------------------------------------------------------------
-    -- Read beamlet statistics
-    ---------------------------------------------------------------------------
-    -- . the beamlet statistics are c_stat_data_sz = 2 word power values.
-    -- . there are c_disturb_S_sub_bf = 488 dual pol beamlets per beamset
-    -- . the beamlets are output alternately so X0 Y0 X1 Y1 ... X487 Y487 for polarizations X, Y
-    -- . the beamlet statistics for multiple beamsets appear in order in the ram_st_bst address map
-    -- . the beamlet statistics are stored first lo word 0 then hi word 1
-    v_len := c_disturb_S_sub_bf * c_disturb_N_pol_bf * c_stat_data_sz;  -- = 1952 = 488 * 2 * 64/32
-    v_span := true_log_pow2(v_len);                             -- = 2048
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      FOR I IN 0 TO v_len-1 LOOP
-        v_W := I MOD c_stat_data_sz;                     -- 0, 1 per statistics word, word index
-        v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol_bf;  -- 0, 1 per BF pol, polarization index
-        v_B := I / (c_disturb_N_pol_bf * c_stat_data_sz);    -- beamlet index in beamset, range(S_sub_bf = 488) per dual pol
-        v_G := v_B + U * c_disturb_S_sub_bf;                 -- global beamlet index, range(c_disturb_N_beamlets_disturb)
-        v_addr := I + U * v_span;                        -- MM address
-        --Only read BST for g_beamlet and dual pol_bf 0 and 1 and for both beamsets, to save sim time
-        IF g_read_all_BST = TRUE OR v_B = g_beamlet THEN
-          IF v_W = 0 THEN
-            -- low part
-            mmf_mm_bus_rd(c_mm_file_ram_st_bst, v_addr, rd_data, tb_clk);
-            v_data_lo := rd_data;
-          ELSE
-            -- high part
-            mmf_mm_bus_rd(c_mm_file_ram_st_bst, v_addr, rd_data, tb_clk);
-            v_data_hi := rd_data;
-            v_stat_data := v_data_hi & v_data_lo;
-
-            pol_beamlet_bsts_arr2(v_P)(v_G) <= v_stat_data;
-            stat_data <= v_stat_data;  -- for time series view in Wave window
-          END IF;
-        END IF;
-      END LOOP;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    -- Beamlet power of g_beamlet X and Y, same for both beamsets
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      v_G := g_beamlet + U * c_disturb_S_sub_bf;  -- global beamlet index, range(c_disturb_N_beamlets_disturb)
-      pol_beamlet_bst_X_arr(U) <= TO_UREAL(pol_beamlet_bsts_arr2(0)(v_G));  -- X pol beamlet
-      pol_beamlet_bst_Y_arr(U) <= TO_UREAL(pol_beamlet_bsts_arr2(1)(v_G));  -- Y pol beamlet
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-    proc_common_wait_some_cycles(ext_clk, 100);  -- delay for ease of view in Wave window
-
-    ---------------------------------------------------------------------------
-    -- Log WG, subband and beamlet statistics
-    ---------------------------------------------------------------------------
-
-    print_str("");
-    print_str("WG:");
-    print_str(". c_wg_ampl                            = " & int_to_str(c_wg_ampl));
-    print_str(". c_exp_sp_power                       = " & real_to_str(c_exp_sp_power, 20, 1));
-    print_str(". c_exp_sp_ast                         = " & real_to_str(c_exp_sp_ast, 20, 1));
-
-    print_str("");
-    print_str("Subband selector:");
-    print_str(". sst_offload_weighted_subbands        = " & sl_to_str(sst_offload_weighted_subbands));
-
-    print_str("");
-    print_str("Subband weight:");
-    print_str(". sp_subband_weight_gain               = " & real_to_str(sp_subband_weight_gain, 20, 6));
-    print_str(". sp_subband_weight_phase              = " & real_to_str(sp_subband_weight_phase, 20, 6));
-
-    print_str("");
-    print_str("SST results:");
-    print_str(". c_exp_subband_ampl                   = " & int_to_str(NATURAL(c_exp_subband_ampl)));
-    print_str(". c_exp_subband_power                  = " & real_to_str(c_exp_subband_power, 20, 1));
-    print_str(". c_exp_subband_sst                    = " & real_to_str(c_exp_subband_sst, 20, 1));
-    print_str("");
-    print_str(". sp_subband_sst                       = " & real_to_str(sp_subband_sst, 20, 1));
-    print_str(". sp_subband_sst / c_exp_subband_sst   = " & real_to_str(sp_subband_sst / c_exp_subband_sst, 20, 6));
-
-    print_str("");
-    print_str("BST results:");
-    print_str(". c_exp_beamlet_ampl                   = " & int_to_str(NATURAL(c_exp_beamlet_ampl)));
-    print_str(". c_exp_beamlet_power                  = " & real_to_str(c_exp_beamlet_power, 20, 1));
-    print_str(". c_exp_beamlet_bst                    = " & real_to_str(c_exp_beamlet_bst, 20, 1));
-    print_str("");
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      v_G := g_beamlet + U * c_disturb_S_sub_bf;  -- global beamlet index, range(c_disturb_N_beamlets_disturb)
-      print_str(". pol_beamlet_bst_X beamlet(" & INTEGER'IMAGE(v_G) & ") = " & real_to_str(pol_beamlet_bst_X_arr(U), 20, 1));
-      print_str(". pol_beamlet_bst_Y beamlet(" & INTEGER'IMAGE(v_G) & ") = " & real_to_str(pol_beamlet_bst_Y_arr(U), 20, 1));
-    END LOOP;
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      v_G := g_beamlet + U * c_disturb_S_sub_bf;  -- global beamlet index, range(c_disturb_N_beamlets_disturb)
-      print_str(". pol_beamlet_bst_X beamlet(" & INTEGER'IMAGE(v_G) & ") / c_exp_beamlet_bst = " & real_to_str(pol_beamlet_bst_X_arr(U) / c_exp_beamlet_bst, 20, 6));
-      print_str(". pol_beamlet_bst_Y beamlet(" & INTEGER'IMAGE(v_G) & ") / c_exp_beamlet_bst = " & real_to_str(pol_beamlet_bst_Y_arr(U) / c_exp_beamlet_bst, 20, 6));
-    END LOOP;
-
-    print_str("");
-    print_str("Beamlet output:");
-    print_str(". rd_beamlet_scale                     = " & int_to_str(TO_UINT(rd_beamlet_scale)));
-    print_str(". c_exp_beamlet_output_ampl            = " & int_to_str(NATURAL(c_exp_beamlet_output_ampl)));
-
-    ---------------------------------------------------------------------------
-    -- Verify SST and BST
-    ---------------------------------------------------------------------------
-
-    -- verify expected subband power based on WG power
-    ASSERT sp_subband_sst > c_stat_lo_factor * c_exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-    ASSERT sp_subband_sst < c_stat_hi_factor * c_exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-
-    -- verify expected beamlet power based on WG power and BF weigths
-    --
-    -- All co and cross polarization weights are equal: w = w_xx = w_xy = w_yx = w_yy
-    -- With one g_sp either SP X or SP Y is used, so the other antenna polarization is 0
-    -- Hence the c_exp_beamlet_bst will be the same for beamlet X and Y independent of whether g_sp is an X or Y signal input:
-    --   g_sp = X --> w_xx --> beamlet X = c_exp_beamlet_bst
-    --   g_sp = Y --> w_xy --> beamlet X = c_exp_beamlet_bst
-    --   g_sp = X --> w_yx --> beamlet Y = c_exp_beamlet_bst
-    --   g_sp = Y --> w_yy --> beamlet Y = c_exp_beamlet_bst
-    --
-    FOR U IN 0 TO c_disturb_N_beamsets-1 LOOP
-      ASSERT pol_beamlet_bst_X_arr(U) > c_stat_lo_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for X in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR;
-      ASSERT pol_beamlet_bst_X_arr(U) < c_stat_hi_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for X in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR;
-      ASSERT pol_beamlet_bst_Y_arr(U) > c_stat_lo_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for Y in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR;
-      ASSERT pol_beamlet_bst_Y_arr(U) < c_stat_hi_factor * c_exp_beamlet_bst REPORT "Wrong beamlet power for Y in beamset " & NATURAL'IMAGE(U) SEVERITY ERROR;
-    END LOOP;
-
-    ---------------------------------------------------------------------------
-    -- Verify beamlet output in 10GbE UDP offload
-    --------------------------------------------------------------------------- 
-    v_re := TO_SINT(rx_beamlet_list_re(c_exp_beamlet_index)); v_re_exp := c_exp_beamlet_output_re;
-    v_im := TO_SINT(rx_beamlet_list_im(c_exp_beamlet_index)); v_im_exp := c_exp_beamlet_output_im;
-    ASSERT v_re > INTEGER(v_re_exp) - c_beamlet_output_delta REPORT "Wrong 10GbE output (re) " & INTEGER'IMAGE(v_re) & " != " & REAL'IMAGE(v_re_exp) SEVERITY ERROR;
-    ASSERT v_re < INTEGER(v_re_exp) + c_beamlet_output_delta REPORT "Wrong 10GbE output (re) " & INTEGER'IMAGE(v_re) & " != " & REAL'IMAGE(v_re_exp) SEVERITY ERROR;
-    ASSERT v_im > INTEGER(v_im_exp) - c_beamlet_output_delta REPORT "Wrong 10GbE output (im) " & INTEGER'IMAGE(v_im) & " != " & REAL'IMAGE(v_im_exp) SEVERITY ERROR;
-    ASSERT v_im < INTEGER(v_im_exp) + c_beamlet_output_delta REPORT "Wrong 10GbE output (im) " & INTEGER'IMAGE(v_im) & " != " & REAL'IMAGE(v_im_exp) SEVERITY ERROR;
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------
-    tb_almost_end <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);  -- delay for ease of view in Wave window
-    proc_common_stop_simulation(TRUE, ext_clk, tb_almost_end, tb_end);
-    WAIT;
-  END PROCESS;
-
-  -----------------------------------------------------------------------------
-  -- Verify beamlet offload packet header
-  -----------------------------------------------------------------------------
-
-  -- Counters to time expected exp_disturb_cep_header fields per offload packet
-  p_test_counters : PROCESS(ext_clk)
-  BEGIN
-    IF rising_edge(ext_clk) THEN
-      -- Count test_offload_sosi packets
-      IF test_offload_sosi.sop = '1' THEN
-        test_offload_sop_cnt <= test_offload_sop_cnt + 1;  -- early count
-      END IF;
-      IF test_offload_sosi.eop = '1' THEN
-        test_offload_eop_cnt <= test_offload_eop_cnt + 1;  -- after count
-      END IF;
-    END IF;
-  END PROCESS;
-
-  -- Count sync intervals using in_sosi.sync, because there is no test_offload_sosi.sync
-  in_sync_cnt <= in_sync_cnt + 1 WHEN rising_edge(ext_clk) AND in_sync = '1';
-  test_sync_cnt <= in_sync_cnt - 1;  -- optionally adjust to fit test_offload_sosi
-
-  -- Prepare exp_disturb_cep_header before test_offload_sosi.eop, so that
-  -- p_exp_disturb_cep_header can verify it at test_offload_sosi.eop.
-
-  p_exp_disturb_cep_header : PROCESS(exp_dp_bsn)
-  BEGIN
-    -- eth header
-    exp_disturb_cep_header.eth.dst_mac        <= c_cep_eth_dst_mac;
-    exp_disturb_cep_header.eth.src_mac        <= c_cep_eth_src_mac;
-    exp_disturb_cep_header.eth.eth_type       <= x"0800";
-
-    -- ip header
-    exp_disturb_cep_header.ip.version         <= TO_UVEC(                        4, c_network_ip_version_w);
-    exp_disturb_cep_header.ip.header_length   <= TO_UVEC(                        5, c_network_ip_header_length_w);
-    exp_disturb_cep_header.ip.services        <= TO_UVEC(                        0, c_network_ip_services_w);
-    exp_disturb_cep_header.ip.total_length    <=         c_disturb_cep_ip_total_length;  -- 7868, see ICD STAT-CEP
-    exp_disturb_cep_header.ip.identification  <= TO_UVEC(                        0, c_network_ip_identification_w);
-    exp_disturb_cep_header.ip.flags           <= TO_UVEC(                        2, c_network_ip_flags_w);
-    exp_disturb_cep_header.ip.fragment_offset <= TO_UVEC(                        0, c_network_ip_fragment_offset_w);
-    exp_disturb_cep_header.ip.time_to_live    <= TO_UVEC(                      127, c_network_ip_time_to_live_w);
-    exp_disturb_cep_header.ip.protocol        <= TO_UVEC(                       17, c_network_ip_protocol_w);
-    exp_disturb_cep_header.ip.header_checksum <= TO_UVEC( c_exp_ip_header_checksum, c_network_ip_header_checksum_w);
-    exp_disturb_cep_header.ip.src_ip_addr     <=                 c_cep_ip_src_addr;  -- c_network_ip_addr_w
-    exp_disturb_cep_header.ip.dst_ip_addr     <=                 c_cep_ip_dst_addr;  -- c_network_ip_addr_w
-
-    -- udp header
-    exp_disturb_cep_header.udp.src_port       <=                 c_cep_udp_src_port;
-    exp_disturb_cep_header.udp.dst_port       <=                 c_cep_udp_dst_port;
-    exp_disturb_cep_header.udp.total_length   <=         c_disturb_cep_udp_total_length;  -- 7848, see ICD STAT-CEP
-    exp_disturb_cep_header.udp.checksum       <= TO_UVEC(                         0, c_network_udp_checksum_w);
-
-    -- app header
-    exp_disturb_cep_header.app.disturb_marker         <= TO_UVEC(c_disturb_marker_beamlets, 8);  -- 98 = x"62" = 'b'
-    exp_disturb_cep_header.app.disturb_version_id     <= TO_UVEC(c_disturb_cep_version_id, 8);  -- 5
-    exp_disturb_cep_header.app.disturb_observation_id <= c_exp_disturb_info.observation_id;
-    exp_disturb_cep_header.app.disturb_station_id     <= c_exp_disturb_info.station_id;
-
-    exp_disturb_cep_header.app.disturb_source_info_antenna_band_id    <= slv(c_exp_disturb_info.antenna_band_index);
-    exp_disturb_cep_header.app.disturb_source_info_nyquist_zone_id    <=     c_exp_disturb_info.nyquist_zone_index;
-    exp_disturb_cep_header.app.disturb_source_info_f_adc              <= slv(c_exp_disturb_info.f_adc);
-    exp_disturb_cep_header.app.disturb_source_info_fsub_type          <= slv(c_exp_disturb_info.fsub_type);
-    exp_disturb_cep_header.app.disturb_source_info_payload_error      <= TO_UVEC(0, 1);
-    exp_disturb_cep_header.app.disturb_source_info_repositioning_flag <= slv(c_exp_disturb_info.beam_repositioning_flag);
-    exp_disturb_cep_header.app.disturb_source_info_beamlet_width      <= TO_UVEC(c_disturb_W_beamlet, 4);
-    exp_disturb_cep_header.app.disturb_source_info_gn_id              <= TO_UVEC(c_gn_index, 5);
-
-    exp_disturb_cep_header.app.disturb_reserved                       <= TO_UVEC(                               0, 40);
-    exp_disturb_cep_header.app.disturb_beamlet_scale                  <= TO_UVEC(             c_exp_beamlet_scale, 16);
-    exp_disturb_cep_header.app.disturb_beamlet_index                  <= TO_UVEC(                               0, 16);  -- depends on bset
-    exp_disturb_cep_header.app.disturb_nof_blocks_per_packet          <= TO_UVEC( c_disturb_cep_nof_blocks_per_packet,  8);
-    exp_disturb_cep_header.app.disturb_nof_beamlets_per_block         <= TO_UVEC(c_disturb_cep_nof_beamlets_per_block, 16);
-    exp_disturb_cep_header.app.disturb_block_period                   <= c_exp_disturb_info.block_period;
-
-    exp_disturb_cep_header.app.dp_bsn <= TO_UVEC(exp_dp_bsn, 64);   -- depends on bset and time
-  END PROCESS;
-
-  rx_disturb_cep_header <= func_disturb_map_cep_header(rx_hdr_fields_raw);
-
-  p_verify_cep_header : PROCESS
-    VARIABLE v_bool : BOOLEAN;
-  BEGIN
-    WAIT UNTIL rising_edge(ext_clk);
-
-    -- Prepare exp_disturb_cep_header at sop, so that it can be verified at eop
-    IF test_offload_sosi.sop = '1' THEN
-      -- Expected BSN increments by c_disturb_cep_nof_blocks_per_packet = 4 blocks per packet
-      IF test_offload_sop_cnt MOD c_disturb_N_beamsets = 0 THEN
-        exp_dp_bsn <= c_init_bsn + (test_offload_sop_cnt / c_disturb_N_beamsets) * c_disturb_cep_nof_blocks_per_packet;
-      END IF;
-    END IF;
-
-    -- Verify header at eop
-    -- . The expected beamlet_index 0 or S_sub_bf = 488 depends on beamset 0
-    --   or 1, but the order in which the packets arrive is undetermined.
-    --   Therefore accept any beamlet_index MOD c_disturb_S_sub_bf = 0 as correct
-    --   in func_disturb_verify_cep_header().
-    IF test_offload_sosi.eop = '1' THEN
-      v_bool := func_disturb_verify_cep_header(rx_disturb_cep_header, exp_disturb_cep_header);
-    END IF;
-  END PROCESS;
-
-  -----------------------------------------------------------------------------
-  -- CEP Read Rx 10GbE Stream
-  -----------------------------------------------------------------------------
-  -- Show received beamlets from 10GbE stream in Wave Window
-  -- . The packet header is 9.25 longwords wide. The dp_offload_rx has stripped
-  --   the header and has realigned the payload at a longword boundary.
-  -- . expect c_nof_block_per_sync / c_disturb_cep_nof_blocks_per_packet *
-  --   c_disturb_N_beamsets = 16 / 4 * 2 = 4 * 2 = 8 packets per sync interval
-  -- . expect c_disturb_cep_nof_beamlets_per_block = c_disturb_S_sub_bf = 488 dual pol
-  --   and complex beamlets per packet, so 2 dual pol beamlets/64b data word.
-  -- . Beamlets array is stored big endian in the data, so X index 0 first in
-  --   MSByte of test_offload_sosi.data.
-  p_rx_cep_beamlets : PROCESS
-  BEGIN
-    rx_beamlet_cnt <= 0;
-    rx_beamlet_valid <= '0';
-    -- Wait until start of a beamlet packet, capture only first block in packet
-    proc_common_wait_until_high(ext_clk, test_offload_sosi.sop);
-    -- 2 dual pol beamlets (= XY, XY) per 64b data word
-    FOR I IN 0 TO (c_disturb_cep_nof_blocks_per_packet * c_disturb_cep_nof_beamlets_per_block/2)-1 LOOP
-      proc_common_wait_until_high(ext_clk, test_offload_sosi.valid);
-      rx_beamlet_valid <= '1';
-      -- Capture rx beamlets per longword in rx_beamlet_arr, for time series view in Wave window
-      rx_beamlet_arr_re(0) <= test_offload_sosi.data(55 DOWNTO 48);  -- X
-      rx_beamlet_arr_im(0) <= test_offload_sosi.data(63 DOWNTO 56);
-      rx_beamlet_arr_re(1) <= test_offload_sosi.data(39 DOWNTO 32);  -- Y
-      rx_beamlet_arr_im(1) <= test_offload_sosi.data(47 DOWNTO 40);
-      rx_beamlet_arr_re(2) <= test_offload_sosi.data(23 DOWNTO 16);  -- X
-      rx_beamlet_arr_im(2) <= test_offload_sosi.data(31 DOWNTO 24);
-      rx_beamlet_arr_re(3) <= test_offload_sosi.data( 7 DOWNTO 0);   -- Y
-      rx_beamlet_arr_im(3) <= test_offload_sosi.data(15 DOWNTO 8);
-      IF I < c_disturb_cep_nof_beamlets_per_block/2 THEN
-        -- Only capture the first beamlets block of each packet in rx_beamlet_list
-        rx_beamlet_list_re(I*4 + 0) <= test_offload_sosi.data(55 DOWNTO 48);  -- X
-        rx_beamlet_list_im(I*4 + 0) <= test_offload_sosi.data(63 DOWNTO 56);
-        rx_beamlet_list_re(I*4 + 1) <= test_offload_sosi.data(39 DOWNTO 32);  -- Y
-        rx_beamlet_list_im(I*4 + 1) <= test_offload_sosi.data(47 DOWNTO 40);
-        rx_beamlet_list_re(I*4 + 2) <= test_offload_sosi.data(23 DOWNTO 16);  -- X
-        rx_beamlet_list_im(I*4 + 2) <= test_offload_sosi.data(31 DOWNTO 24);
-        rx_beamlet_list_re(I*4 + 3) <= test_offload_sosi.data( 7 DOWNTO 0);   -- Y
-        rx_beamlet_list_im(I*4 + 3) <= test_offload_sosi.data(15 DOWNTO 8);
-      END IF;
-      proc_common_wait_until_high(ext_clk, test_offload_sosi.valid);
-      -- Use at least one WAIT instead of proc_common_wait_some_cycles() to
-      -- avoid Modelsim warning: (vcom-1090) Possible infinite loop: Process
-      -- contains no WAIT statement.
-      WAIT UNTIL rising_edge(ext_clk);
-      rx_beamlet_valid <= '0';
-      rx_beamlet_cnt   <= (rx_beamlet_cnt + 4) MOD c_disturb_cep_nof_beamlets_per_block;  -- 4 blocks/packet
-    END LOOP;
-  END PROCESS;
-
-  -- To view the 64 bit 10GbE offload data more easily in the Wave window
-  test_offload_data <= test_offload_sosi.data(c_longword_w-1 DOWNTO 0);
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd
deleted file mode 100644
index 7aeac51d37..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_bf/tb_disturb2_unb2b_station_bf_bst_offload.vhd
+++ /dev/null
@@ -1,250 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_bf capturing BST UDP offload packets.
---
--- Description:
---   MM control actions:
---
---   1) Enable BSN source and enable BST offload
---   
---   2) Verify ethernet statistics using eth_statistics, it checks the number of 
---      received packets and the total number of valid data. The content of the packets is not verified.   
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a  
---   Takes about 10 m
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib, eth_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_bf_bst_offload IS
-END tb_disturb2_unb2b_station_bf_bst_offload;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_bf_bst_offload IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0; 
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 16; -- long enough to stream out udp data
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-
-  -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2   : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_stat_enable_bst : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_BST";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-  SIGNAL eth_done            : STD_LOGIC := '0';
-
-  -- . 1GbE output
-  CONSTANT c_eth_check_nof_packets        : NATURAL := 1; -- received packets in 1 sync period
-  CONSTANT c_eth_header_size              : NATURAL := 19; -- words
-  CONSTANT c_eth_crc_size                 : NATURAL := 1; -- word
-  CONSTANT c_eth_packet_size              : NATURAL := c_eth_header_size + c_eth_crc_size + (c_disturb_W_statistic / c_word_w) * c_disturb_S_sub_bf * c_disturb_N_pol; -- 20 + 2 * 488 * 2 = 1972 
-  CONSTANT c_eth_check_nof_valid          : NATURAL := c_eth_check_nof_packets * c_eth_packet_size;  
-  CONSTANT c_eth_runtime_timeout          : TIME := 2 * c_nof_clk_per_sync * c_ext_clk_period;  -- eth statistics should be done at the second sync interval
-  
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '0';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_bf : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_bf",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
- 
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000001#, tb_clk);  -- Enable BSN immediately 
-    
-    ----------------------------------------------------------------------------
-    -- Offload enable
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_stat_enable_bst, 0, 1, tb_clk);
-
-    -- wait for udp offload is done
-    proc_common_wait_until_high(ext_clk, eth_done);
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-  -------------------------------------------------------------------------
-  -- Verify proper DUT 1GbE offload output using Ethernet packet statistics 
-  -------------------------------------------------------------------------
-  u_eth_statistics : ENTITY eth_lib.eth_statistics
-    GENERIC MAP (
-      g_runtime_nof_packets => c_eth_check_nof_packets,
-      g_runtime_timeout     => c_eth_runtime_timeout,
-      g_check_nof_valid     => TRUE,
-      g_check_nof_valid_ref => c_eth_check_nof_valid
-   )
-  PORT MAP (  
-    eth_serial_in => eth_txp(0),
-    tb_end        => eth_done
-  );
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd
deleted file mode 100644
index 9bd8e7b1b8..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub.vhd
+++ /dev/null
@@ -1,162 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--- Author : R. van der Walle
--- Purpose:  
---   Wrapper for Lofar2 SDP Station filterbank design
--- Description:
---   Unb2b version for lab testing
---   Contains complete AIT input stage with 12 ADC streams and FSUB
-
-
-LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_station_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE technology_lib.technology_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-
-ENTITY disturb2_unb2b_station_fsub IS
-  GENERIC (
-    g_design_name      : STRING  := "disturb2_unb2b_station_fsub";
-    g_design_note      : STRING  := "Lofar2 SDP station filterbank design";
-    g_sim              : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr       : NATURAL := 0;
-    g_sim_node_nr      : NATURAL := 0;
-    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_revision_id      : STRING := ""   -- revision ID     -- set by QSF
-  );
-  PORT (
-    -- GENERAL
-    CLK          : IN    STD_LOGIC; -- System Clock
-    PPS          : IN    STD_LOGIC; -- System Sync
-    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
-    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
-    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
-
-    -- Others
-    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0);
-    ID           : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0);
-    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0);
-    
-    -- I2C Interface to Sensors
-    SENS_SC      : INOUT STD_LOGIC;
-    SENS_SD      : INOUT STD_LOGIC;
-  
-    PMBUS_SC     : INOUT STD_LOGIC;
-    PMBUS_SD     : INOUT STD_LOGIC;
-    PMBUS_ALERT  : IN    STD_LOGIC := '0';
-
-    -- 1GbE Control Interface
-    ETH_CLK      : IN    STD_LOGIC;
-    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-
-    -- LEDs
-    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0);
-
-     -- back transceivers (note only 6 are used in unb2b)
-    BCK_RX       : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b);  -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12
-    BCK_REF_CLK  : IN    STD_LOGIC; -- Use as JESD204B_REFCLK
- 
-    -- jesd204b syncronization signals (2 syncs)
-    JESD204B_SYSREF : IN    STD_LOGIC;
-    JESD204B_SYNC_N : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0)  -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4
-  );
-END disturb2_unb2b_station_fsub;
- 
-ARCHITECTURE str OF disturb2_unb2b_station_fsub IS
-
-  SIGNAL JESD204B_SERIAL_DATA       : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL jesd204b_sync_n_arr        : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL JESD204B_REFCLK            : STD_LOGIC;
-
-BEGIN
-
-  -- Mapping between JESD signal names and UNB2B pin/schematic names
-  JESD204B_REFCLK <=  BCK_REF_CLK;
-  JESD204B_SERIAL_DATA(0) <= BCK_RX(42);
-  JESD204B_SERIAL_DATA(1) <= BCK_RX(43);
-  JESD204B_SERIAL_DATA(2) <= BCK_RX(44);
-  JESD204B_SERIAL_DATA(3) <= BCK_RX(45);
-  JESD204B_SERIAL_DATA(4) <= BCK_RX(46);
-  JESD204B_SERIAL_DATA(5) <= BCK_RX(47);
-  JESD204B_SERIAL_DATA(6) <= '0';
-  JESD204B_SERIAL_DATA(7) <= '0';
-  JESD204B_SERIAL_DATA(8) <= '0';
-  JESD204B_SERIAL_DATA(9) <= '0';
-  JESD204B_SERIAL_DATA(10) <= '0';
-  JESD204B_SERIAL_DATA(11) <= '0';
-  JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0);
-
-
-  u_revision : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name => g_design_name,
-    g_design_note => g_design_note,
-    g_sim         => g_sim,
-    g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr,
-    g_stamp_date  => g_stamp_date,
-    g_stamp_time  => g_stamp_time,
-    g_revision_id => g_revision_id
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => CLK,
-    PPS          => PPS,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => VERSION,
-    ID           => ID,
-    TESTIO       => TESTIO,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => SENS_SC,
-    SENS_SD      => SENS_SD,
-
-    PMBUS_SC     => PMBUS_SC,
-    PMBUS_SD     => PMBUS_SD,
-    PMBUS_ALERT  => PMBUS_ALERT,
-
-    -- 1GbE Control Interface
-    ETH_clk      => ETH_clk,
-    ETH_SGIN     => ETH_SGIN,
-    ETH_SGOUT    => ETH_SGOUT,
-
-    -- LEDs
-    QSFP_LED     => QSFP_LED,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA   => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK        => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF        => JESD204B_SYSREF,
-    JESD204B_SYNC_N        => jesd204b_sync_n_arr
-  );
-END str;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl
deleted file mode 100644
index af0a453b32..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/disturb2_unb2b_station_fsub_pins.tcl
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-#
-# Copyright (C) 2022
-# 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/>.
-#
-###############################################################################
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl
-
-
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg
deleted file mode 100644
index 1d4fb559e5..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/hdllib.cfg
+++ /dev/null
@@ -1,134 +0,0 @@
-hdl_lib_name = disturb2_unb2b_station_fsub
-hdl_library_clause_name = disturb2_unb2b_station_fsub_lib
-hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station 
-hdl_lib_uses_sim = eth 
-hdl_lib_technology = ip_arria10_e1sg
-                     
- synth_files =
-    disturb2_unb2b_station_fsub.vhd
-
-test_bench_files = 
-    tb_disturb2_unb2b_station_fsub.vhd
-    tb_disturb2_unb2b_station_fsub_sst_offload.vhd
-
-regression_test_vhdl =
-    tb_disturb2_unb2b_station_fsub.vhd
-    tb_disturb2_unb2b_station_fsub_sst_offload.vhd
-
-
-[modelsim_project_file]
-modelsim_copy_files =
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-
-[quartus_project_file]
-synth_top_level_entity =
-
-quartus_copy_files =
-     # Note: path $RADIOHDL_WORK is equivalent to relative path ../../../../../../
-    ../../quartus .
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-    
-quartus_qsf_files =
-    $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
-
-# use disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz.
-quartus_sdc_files =
-    ../../quartus/disturb2_unb2b_station.sdc
-    #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
-
-quartus_tcl_files =
-    disturb2_unb2b_station_fsub_pins.tcl
-
-quartus_vhdl_files = 
-
-quartus_qip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_fsub/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip
-
-quartus_ip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip
-
-nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd
deleted file mode 100644
index 52e5db9b6c..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub.vhd
+++ /dev/null
@@ -1,535 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle (original), E. Kooistra (updates)
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_fsub using WG data.
---
--- Description:
---   MM control actions:
---
---   1) Enable calc mode for WG via reg_diag_wg with:
---        freq = 19.921875MHz
---        ampl = 0.5 * 2**13
---   
---   2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg 
---      to trigger start of WG at BSN.
---     
---   3) Read subband statistics (SST) via MM and verify with exp_subband_sst at g_subband.
---      . use weighted subbands (default selected by MM)
---
---   4) View in wave window
---      . in_sosi.sop and in_data in u_si_arr(g_sp) to check that:
---        - WG starts with zero phase sine when c_subband_phase = 0.0 degrees
---        - WG amplitude = 8191 (is full scale - 1) when wg_ampl = 1.0
---      . pfb_sosi_arr(c_pfb_index).im/re and fsub_sosi_arr(c_pfb_index).im/re
---        in u_fsub in decimal radix and analog format to check that subband
---        phase is g_subband_weight_phase phase as set by the subband weight.
---        - Raw: pfb_sosi_arr = atan2(-65195 / 0) = -90 degrees
---        - Weighted: fsub_sosi_arr = atan2(-56457 / 32598) = -60 degrees
---          --> rotated expected g_subband_weight_phase = -60 - -90 = +30 degrees.
---   
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   # Manually add missing signal
---   > add wave -position insertpoint  \
---     sim:/tb_disturb2_unb2b_station_fsub/sp_subband_ssts_arr2
---   > run -a
---   # Takes about 30 m when g_read_all_SST = FALSE
---   # Takes about 40 m when g_read_all_SST = TRUE
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.math_real.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_fsub IS
-  GENERIC (
-    g_sp                   : NATURAL := 3;    -- signal path index in range(S_pn = 12)
-    g_wg_ampl              : REAL := 1.0;     -- WG normalized amplitude
-    g_subband              : NATURAL := 102;  -- select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz
-    g_subband_weight_gain  : REAL := 1.0;     -- subband weight normalized gain
-    g_subband_weight_phase : REAL := 30.0;    -- subband weight phase rotation in degrees
-    g_read_all_SST         : BOOLEAN := TRUE  -- when FALSE only read SST for g_subband, to save sim time
-  );
-END tb_disturb2_unb2b_station_fsub;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_fsub IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0;
-  CONSTANT c_init_bsn        : NATURAL := 17;  -- some recognizable value >= 0
-
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 16;
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync * c_disturb_N_fft;
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-  CONSTANT c_stat_data_sz        : NATURAL := c_wpfb_sim.stat_data_sz;  -- = 2
-
-  CONSTANT c_percentage          : REAL := 0.05;  -- percentage that actual value may differ from expected value
-  CONSTANT c_lo_factor           : REAL := 1.0 - c_percentage;  -- lower boundary  
-  CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
-
-  -- WG
-  CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_disturb_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
-  CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
-  CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
-  -- . phase
-  CONSTANT c_subband_phase        : REAL := 0.0;  -- wanted subband phase in degrees = WG phase at sop
-  CONSTANT c_subband_freq         : REAL := REAL(g_subband) / REAL(c_disturb_N_fft);                   -- normalized by fs = f_adc = 200 MHz is dp_clk
-  CONSTANT c_wg_latency           : INTEGER := c_diag_wg_latency - 0;  -- -0 to account for BSN scheduler start trigger latency
-  CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
-  CONSTANT c_wg_phase             : REAL := c_subband_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-
-  -- FSUB
-  -- . WPFB
-  CONSTANT c_pol_index                      : NATURAL := g_sp MOD c_disturb_Q_fft;
-  CONSTANT c_pfb_index                      : NATURAL := g_sp / c_disturb_Q_fft;  -- only read used WPFB unit out of range(c_disturb_P_pfb = 6)
-  CONSTANT c_exp_subband_sp_ampl_ratio      : REAL := 7.96;  -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_subband_ampl_raw           : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio;
-  CONSTANT c_exp_subband_ampl_weighted      : REAL := c_exp_subband_ampl_raw * g_subband_weight_gain;
-  CONSTANT c_exp_subband_power_raw          : REAL := c_exp_subband_ampl_raw**2.0;  -- complex, so no divide by 2
-  CONSTANT c_exp_subband_power_weighted     : REAL := c_exp_subband_ampl_weighted**2.0;  -- complex, so no divide by 2
-  CONSTANT c_exp_subband_sst_raw            : REAL := c_exp_subband_power_raw * REAL(c_nof_block_per_sync);
-  CONSTANT c_exp_subband_sst_weighted       : REAL := c_exp_subband_power_weighted * REAL(c_nof_block_per_sync);
-
-  -- . expected limit values, obtained with print_str() for g_subband = 102,
-  --   g_wg_ampl = 1.0, g_subband_weight_gain = 1.0, g_subband_weight_phase = 30.0
-  CONSTANT c_exp_subband_sst_leakage_snr_dB   : REAL := 70.0;  -- < 74.913
-  CONSTANT c_exp_subband_sst_crosstalk_snr_dB : REAL := 90.0;  -- < 96.284
-
-  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; 
-  TyPE t_slv_64_subbands_arr IS ARRAY (INTEGER RANGE <>) OF t_slv_64_arr(0 TO c_disturb_N_sub-1);
-
-  -- . Subband weights for selected g_sp
-  CONSTANT c_subband_weight_re   : INTEGER := INTEGER(g_subband_weight_gain * REAL(c_disturb_unit_sub_weight) * COS(g_subband_weight_phase * MATH_2_PI / 360.0));
-  CONSTANT c_subband_weight_im   : INTEGER := INTEGER(g_subband_weight_gain * REAL(c_disturb_unit_sub_weight) * SIN(g_subband_weight_phase * MATH_2_PI / 360.0));
-
-  -- MM
-  -- . Address widths of a single MM instance
-  CONSTANT c_addr_w_reg_diag_wg           : NATURAL := 2;
-  -- . Address spans of a single MM instance
-  CONSTANT c_mm_span_reg_diag_wg          : NATURAL := 2**c_addr_w_reg_diag_wg;
-
-  CONSTANT c_mm_file_reg_bsn_source_v2    : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_bsn_scheduler_wg : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER";
-  CONSTANT c_mm_file_reg_diag_wg          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG";
-  CONSTANT c_mm_file_ram_equalizer_gains  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_EQUALIZER_GAINS";
-  CONSTANT c_mm_file_reg_dp_selector      : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_DP_SELECTOR";
-  CONSTANT c_mm_file_ram_st_sst           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-
-  SIGNAL pps_rst             : STD_LOGIC := '1';
-  SIGNAL gen_pps             : STD_LOGIC := '0';
-
-  -- WG
-  SIGNAL current_bsn_wg      : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
-
-  -- FSUB
-  -- . WPFB
-  SIGNAL sp_subband_ssts_arr2            : t_slv_64_subbands_arr(c_disturb_N_pol-1 DOWNTO 0);   -- [pol][sub]
-  SIGNAL sp_subband_sst_sum_arr          : t_real_arr(c_disturb_N_pol-1 DOWNTO 0) := (OTHERS => 0.0);
-  SIGNAL sp_subband_sst                  : REAL := 0.0;
-  SIGNAL sp_subband_sst_leakage          : REAL := 0.0;
-  SIGNAL sp_subband_sst_leakage_snr_dB   : REAL := 0.0;  -- signal to noise (leakage) ratio
-  SIGNAL sp_subband_sst_crosstalk        : REAL := 0.0;
-  SIGNAL sp_subband_sst_crosstalk_snr_dB : REAL := 0.0;  -- signal to noise (crosstalk) ration
-
-  SIGNAL exp_subband_ampl    : REAL := 0.0;
-  SIGNAL exp_subband_power   : REAL := 0.0;
-  SIGNAL exp_subband_sst     : REAL := 0.0;
-  SIGNAL stat_data           : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0);
-
-  -- . Selector
-  SIGNAL sst_offload_weighted_subbands     : STD_LOGIC;
-
-  -- . Subband equalizer
-  SIGNAL sp_subband_weight_re    : INTEGER := 0;
-  SIGNAL sp_subband_weight_im    : INTEGER := 0;
-  SIGNAL sp_subband_weight_gain  : REAL := 0.0;
-  SIGNAL sp_subband_weight_phase : REAL := 0.0;
-
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, gen_pps);
-  jesd204b_sysref <= gen_pps;
-  ext_pps <= gen_pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_fsub : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_fsub",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,
-    g_scope_selected_subband => g_subband
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => ext_pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  -- Raw or weighted subbands
-  exp_subband_ampl  <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_ampl_raw, c_exp_subband_ampl_weighted);
-  exp_subband_power <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_power_raw, c_exp_subband_power_weighted);
-  exp_subband_sst   <= sel_a_b(sst_offload_weighted_subbands = '0', c_exp_subband_sst_raw, c_exp_subband_sst_weighted);
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-    VARIABLE v_bsn                           : NATURAL;
-    VARIABLE v_data_lo, v_data_hi            : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
-    VARIABLE v_stat_data                     : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0);
-    VARIABLE v_len, v_span, v_offset, v_addr : NATURAL;  -- address ranges, indices
-    VARIABLE v_W, v_P, v_U, v_S, v_B         : NATURAL;  -- array indicies
-    VARIABLE v_re, v_im, v_weight            : INTEGER;
-    VARIABLE v_power                         : REAL;
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
-
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,         c_init_bsn, tb_clk);  -- Init BSN
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                  0, tb_clk);  -- Write high part activates the init BSN
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1, c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,       16#00000003#, tb_clk);  -- Enable BSN at PPS
-
-    -- Release PPS pulser, to get first PPS now and to start BSN source
-    WAIT FOR 1 us;
-    pps_rst <= '0';
-
-    ----------------------------------------------------------------------------
-    -- Read weighted subband selector
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_rd(c_mm_file_reg_dp_selector, 0, rd_data, tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    sst_offload_weighted_subbands <= NOT rd_data(0);
-
-    ----------------------------------------------------------------------------
-    -- Enable and start WG
-    ----------------------------------------------------------------------------
-    --   0 : mode[7:0]           --> off=0, calc=1, repeat=2, single=3)
-    --       nof_samples[31:16]  --> <= c_ram_wg_size=1024
-    --   1 : phase[15:0]
-    --   2 : freq[30:0]
-    --   3 : ampl[16:0]
-    v_offset := g_sp * c_mm_span_reg_diag_wg;
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
-
-    -- Read current BSN
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    
-    -- Write scheduler BSN to trigger start of WG at next block
-    v_bsn := TO_UINT(current_bsn_wg) + 2;
-    ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR;
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, c_bsn_start_wg, tb_clk);  -- first write low then high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1,              0, tb_clk);  -- assume v_bsn < 2**31-1
-
-    ----------------------------------------------------------------------------
-    -- Write subband weight for selected g_sp and g_subband
-    ----------------------------------------------------------------------------
-    -- . MM format: (cint16)RAM_EQUALIZER_GAINS[S_pn/Q_fft]_[Q_fft][N_sub] = [S_pn][N_sub]
-    v_addr := g_sp * c_disturb_N_sub + g_subband;
-    -- . read
-    mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk);
-    v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight);
-    v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight);
-    sp_subband_weight_re <= v_re;
-    sp_subband_weight_im <= v_im;
-    sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight);
-    sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI;
-    -- . write
-    v_weight := pack_complex(re => c_subband_weight_re, im => c_subband_weight_im, w => c_disturb_W_sub_weight);  -- c_disturb_W_sub_weight = 16 bit
-    mmf_mm_bus_wr(c_mm_file_ram_equalizer_gains, v_addr, v_weight, tb_clk);
-    -- . read back
-    mmf_mm_bus_rd(c_mm_file_ram_equalizer_gains, v_addr, rd_data, tb_clk);
-    v_re := unpack_complex_re(rd_data, c_disturb_W_sub_weight);
-    v_im := unpack_complex_im(rd_data, c_disturb_W_sub_weight);
-    sp_subband_weight_re <= v_re;
-    sp_subband_weight_im <= v_im;
-    sp_subband_weight_gain <= SQRT(REAL(v_re)**2.0 + REAL(v_im)**2.0) / REAL(c_disturb_unit_sub_weight);
-    sp_subband_weight_phase <= atan2(Y => REAL(v_im), X => REAL(v_re)) * 360.0 / MATH_2_PI;
-
-    ----------------------------------------------------------------------------
-    -- Wait for enough WG data and start of sync interval
-    ----------------------------------------------------------------------------
-    mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                                 -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_init_bsn + c_nof_block_per_sync * 3,  -- this is the wait until condition
-                            c_disturb_T_sub, tb_clk);
-
-    ---------------------------------------------------------------------------
-    -- Read subband statistics
-    ---------------------------------------------------------------------------
-    -- . the subband statistics are c_stat_data_sz = 2 word power values.
-    -- . there are c_disturb_S_pn = 12 signal inputs A, B, C, D, E, F, G, H, I, J, K, L
-    -- . there are c_disturb_N_sub = 512 subbands per signal input (SI, = signal path, SP)
-    -- . one complex WPFB can process two real inputs A, B, so there are c_disturb_P_pfb = 6 WPFB units,
-    --   but only read for the 1 WPFB unit of the selected g_sp, to save sim time
-    -- . the outputs for A, B are time multiplexed, c_disturb_Q_fft = 2, assume that they
-    --   correspond to the c_disturb_N_pol = 2 signal polarizations
-    -- . the subbands are output alternately so A0 B0 A1 B1 ... A511 B511 for input A, B
-    -- . the subband statistics multiple WPFB units appear in order in the ram_st_sst address map
-    -- . the subband statistics are stored first lo word 0 then hi word 1
-    v_len := c_disturb_N_sub * c_disturb_N_pol * c_stat_data_sz;  -- 2048 = 512 * 2 * 64/32
-    v_span := true_log_pow2(v_len);                       -- = 2048
-    FOR I IN 0 TO v_len-1 LOOP
-      v_W := I MOD c_stat_data_sz;                   -- 0, 1 per statistics word, word index
-      v_P := (I / c_stat_data_sz) MOD c_disturb_N_pol;   -- 0, 1 per SP pol, polarization index
-      v_B := I / (c_disturb_N_pol * c_stat_data_sz);     -- subband index, range(N_sub = 512) per dual pol
-      v_addr := I + c_pfb_index * v_span;            -- MM address for WPFB unit of selected g_sp
-      -- Only read SST for g_subband for dual pol SP, to save sim time
-      IF g_read_all_SST = TRUE OR v_B = g_subband THEN
-        IF v_W = 0 THEN
-          -- low part
-          mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk);
-          v_data_lo := rd_data;
-        ELSE
-          -- high part
-          mmf_mm_bus_rd(c_mm_file_ram_st_sst, v_addr, rd_data, tb_clk);
-          v_data_hi := rd_data;
-          v_stat_data := v_data_hi & v_data_lo;
-
-          sp_subband_ssts_arr2(v_P)(v_B) <= v_stat_data;
-          stat_data <= v_stat_data;  -- for time series view in Wave window
-
-          -- sum of all subband powers per pol
-          sp_subband_sst_sum_arr(v_P) <= sp_subband_sst_sum_arr(v_P) + TO_UREAL(v_stat_data);
-        END IF;
-      END IF;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    -- Subband power of g_subband in g_sp
-    -- . For the selected g_subband in g_sp the sp_subband_sst will be close
-    --   to sp_subband_sst_sum_arr(c_pol_index), because the input is a
-    --   sinus, so most power will be in 1 subband.
-    sp_subband_sst <= TO_UREAL(sp_subband_ssts_arr2(c_pol_index)(g_subband));
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    -- The sp_subband_sst_leakage shows how much power from the input sinus at a specific
-    -- subband has leaked into the N_sub-1 = 511 other subbands. The power ratio yields an
-    -- indication of the SNR, although that also depends on the SNR of the WG sinus.
-    v_power := sp_subband_sst_sum_arr(c_pol_index) - sp_subband_sst;
-    sp_subband_sst_leakage <= v_power;
-    IF sp_subband_sst > c_eps AND v_power > c_eps THEN
-      sp_subband_sst_leakage_snr_dB <= 10.0 * LOG10(sp_subband_sst / v_power);
-    ELSIF g_read_all_SST THEN
-      REPORT "Wrong, zero leakage is unexpected for SP-" & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-    END IF;
-
-    -- The sp_subband_sst_crosstalk shows how much power from one WPFB input cross talks
-    -- into the other output, due to quantization cross talk in the complex FFT. The power
-    -- ration indicates the suppression, provided that the other input was zero.
-    v_power := sp_subband_sst_sum_arr(not_int(c_pol_index));
-    sp_subband_sst_crosstalk <= v_power;
-    IF sp_subband_sst > c_eps AND v_power > c_eps THEN
-      sp_subband_sst_crosstalk_snr_dB <= 10.0 * LOG10(sp_subband_sst / v_power);
-    ELSIF g_read_all_SST THEN
-      REPORT "Wrong, zero crosstalk is unexpected for SP-" & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-    END IF;
-
-    proc_common_wait_some_cycles(tb_clk, 10);
-
-    ---------------------------------------------------------------------------
-    -- Log WG, subband statistics
-    ---------------------------------------------------------------------------
-    print_str("");
-    print_str("WG:");
-    print_str(". c_wg_ampl                            = " & int_to_str(c_wg_ampl));
-    print_str(". c_exp_sp_power                       = " & real_to_str(c_exp_sp_power, 20, 1));
-    print_str(". c_exp_sp_ast                         = " & real_to_str(c_exp_sp_ast, 20, 1));
-
-    print_str("");
-    print_str("Subband selector:");
-    print_str(". sst_offload_weighted_subbands        = " & sl_to_str(sst_offload_weighted_subbands));
-
-    print_str("");
-    print_str("Subband weight:");
-    print_str(". sp_subband_weight_gain               = " & real_to_str(sp_subband_weight_gain, 20, 6));
-    print_str(". sp_subband_weight_phase              = " & real_to_str(sp_subband_weight_phase, 20, 6));
-
-    print_str("");
-    print_str("SST results:");
-    print_str(". exp_subband_ampl                     = " & int_to_str(NATURAL(exp_subband_ampl)));
-    print_str(". exp_subband_power                    = " & real_to_str(exp_subband_power, 20, 1));
-    print_str(". exp_subband_sst                      = " & real_to_str(exp_subband_sst, 20, 1));
-    print_str("");
-    print_str(". sp_subband_sst                       = " & real_to_str(sp_subband_sst, 20, 1));
-    print_str(". sp_subband_sst / exp_subband_sst     = " & real_to_str(sp_subband_sst / exp_subband_sst, 20, 6));
-
-    IF g_read_all_SST THEN
-      -- Log WPFB details, these are allready verified in tb of wpfb_unit_dev.vhd, so here
-      -- quality indicators like leakage and crosstalk are also reported out of interest.
-      print_str("");
-      print_str("SST quality indicators");
-      print_str(". sp_subband_sst_leakage               = " & real_to_str(sp_subband_sst_leakage, 20, 0));
-      print_str(". sp_subband_sst_leakage_snr_dB        = " & real_to_str(sp_subband_sst_leakage_snr_dB, 20, 3));
-      print_str(". sp_subband_sst_crosstalk             = " & real_to_str(sp_subband_sst_crosstalk, 20, 0));
-      print_str(". sp_subband_sst_crosstalk_snr_db      = " & real_to_str(sp_subband_sst_crosstalk_snr_db, 20, 3));
-    END IF;
-
-    ---------------------------------------------------------------------------
-    -- Verify SST
-    ---------------------------------------------------------------------------
-    -- verify expected subband power based on WG power
-    ASSERT sp_subband_sst > c_lo_factor * exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-    ASSERT sp_subband_sst < c_hi_factor * exp_subband_sst REPORT "Wrong subband power for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-
-    IF g_read_all_SST THEN
-      -- Verify expected SNR quality measures
-      ASSERT sp_subband_sst_leakage_snr_dB   > c_exp_subband_sst_leakage_snr_dB   REPORT "Wrong to much leakage for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-      ASSERT sp_subband_sst_crosstalk_snr_dB > c_exp_subband_sst_crosstalk_snr_dB REPORT "Wrong to much crosstalk for SP " & NATURAL'IMAGE(g_sp) SEVERITY ERROR;
-    END IF;
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd
deleted file mode 100644
index 54490ceb63..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_fsub/tb_disturb2_unb2b_station_fsub_sst_offload.vhd
+++ /dev/null
@@ -1,249 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_fsub capturing SST UDP offload packets.
---
--- Description:
---   MM control actions:
---
---   1) Enable BSN source and enable UDP offload
---   
---   2) Verify ethernet statistics using eth_statistics, it checks the number of 
---      received packets and the total number of valid data. The content of the packets is not verified.   
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a  
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib, eth_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_fsub_sst_offload IS
-END tb_disturb2_unb2b_station_fsub_sst_offload;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_fsub_sst_offload IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 2;
-  CONSTANT c_node_nr         : NATURAL := 1;
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb_nr * 4 + c_node_nr, 8);  -- c_unb2b_board_nof_node = 4, c_unb2b_board_aux.id_w = 8
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 80; -- long enough to stream out udp data
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-
-  -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2    : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_stat_enable_sst  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_SST";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-  SIGNAL eth_done            : STD_LOGIC := '0';
-
-  -- . 1GbE output
-  CONSTANT c_eth_check_nof_packets        : NATURAL := c_disturb_S_pn; -- received packets in 1 sync period
-  CONSTANT c_eth_header_size              : NATURAL := 19; -- words
-  CONSTANT c_eth_crc_size                 : NATURAL := 1; -- word
-  CONSTANT c_eth_packet_size              : NATURAL := c_eth_header_size + c_eth_crc_size + c_disturb_N_sub * (c_disturb_W_statistic / c_word_w); -- 20 + 512 * 2 = 1044 
-  CONSTANT c_eth_check_nof_valid          : NATURAL := c_eth_check_nof_packets * c_eth_packet_size;  
-  CONSTANT c_eth_runtime_timeout          : TIME := 2 * c_nof_clk_per_sync * c_ext_clk_period;  -- eth statistics should be done at the second sync interval
-  
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '0';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_fsub : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_fsub",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
- 
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000001#, tb_clk);  -- Enable BSN immediately 
-    
-    ----------------------------------------------------------------------------
-    -- Offload enable
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_stat_enable_sst, 0, 1, tb_clk);
-
-    -- wait for udp offload is done
-    proc_common_wait_until_high(ext_clk, eth_done);
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-  -------------------------------------------------------------------------
-  -- Verify proper DUT 1GbE offload output using Ethernet packet statistics 
-  -------------------------------------------------------------------------
-  u_eth_statistics : ENTITY eth_lib.eth_statistics
-    GENERIC MAP (
-      g_runtime_nof_packets => c_eth_check_nof_packets,
-      g_runtime_timeout     => c_eth_runtime_timeout,
-      g_check_nof_valid     => TRUE,
-      g_check_nof_valid_ref => c_eth_check_nof_valid
-   )
-  PORT MAP (  
-    eth_serial_in => eth_txp(0),
-    tb_end        => eth_done
-  );
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd
deleted file mode 100644
index 6637e3d666..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one.vhd
+++ /dev/null
@@ -1,162 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--- Author : R. van der Walle
--- Purpose:  
---   Wrapper for Lofar2 SDP Station subband correlator design
--- Description:
---   Unb2b version for lab testing
---   Contains complete AIT input stage with 12 ADC streams, FSUB and XSUB for XST from one node.
-
-
-LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_station_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE technology_lib.technology_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-
-ENTITY disturb2_unb2b_station_xsub_one IS
-  GENERIC (
-    g_design_name      : STRING  := "disturb2_unb2b_station_xsub_one";
-    g_design_note      : STRING  := "Lofar2 SDP station subband correlator design";
-    g_sim              : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr       : NATURAL := 0;
-    g_sim_node_nr      : NATURAL := 0;
-    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_revision_id      : STRING := ""   -- revision ID     -- set by QSF
-  );
-  PORT (
-    -- GENERAL
-    CLK          : IN    STD_LOGIC; -- System Clock
-    PPS          : IN    STD_LOGIC; -- System Sync
-    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
-    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
-    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
-
-    -- Others
-    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0);
-    ID           : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0);
-    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0);
-    
-    -- I2C Interface to Sensors
-    SENS_SC      : INOUT STD_LOGIC;
-    SENS_SD      : INOUT STD_LOGIC;
-  
-    PMBUS_SC     : INOUT STD_LOGIC;
-    PMBUS_SD     : INOUT STD_LOGIC;
-    PMBUS_ALERT  : IN    STD_LOGIC := '0';
-
-    -- 1GbE Control Interface
-    ETH_CLK      : IN    STD_LOGIC;
-    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-
-    -- LEDs
-    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0);
-
-     -- back transceivers (note only 6 are used in unb2b)
-    BCK_RX       : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b);  -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12
-    BCK_REF_CLK  : IN    STD_LOGIC; -- Use as JESD204B_REFCLK
- 
-    -- jesd204b syncronization signals (2 syncs)
-    JESD204B_SYSREF : IN    STD_LOGIC;
-    JESD204B_SYNC_N : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0)  -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4
-  );
-END disturb2_unb2b_station_xsub_one;
- 
-ARCHITECTURE str OF disturb2_unb2b_station_xsub_one IS
-
-  SIGNAL JESD204B_SERIAL_DATA       : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL jesd204b_sync_n_arr        : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL JESD204B_REFCLK            : STD_LOGIC;
-
-BEGIN
-
-  -- Mapping between JESD signal names and UNB2B pin/schematic names
-  JESD204B_REFCLK <=  BCK_REF_CLK;
-  JESD204B_SERIAL_DATA(0) <= BCK_RX(42);
-  JESD204B_SERIAL_DATA(1) <= BCK_RX(43);
-  JESD204B_SERIAL_DATA(2) <= BCK_RX(44);
-  JESD204B_SERIAL_DATA(3) <= BCK_RX(45);
-  JESD204B_SERIAL_DATA(4) <= BCK_RX(46);
-  JESD204B_SERIAL_DATA(5) <= BCK_RX(47);
-  JESD204B_SERIAL_DATA(6) <= '0';
-  JESD204B_SERIAL_DATA(7) <= '0';
-  JESD204B_SERIAL_DATA(8) <= '0';
-  JESD204B_SERIAL_DATA(9) <= '0';
-  JESD204B_SERIAL_DATA(10) <= '0';
-  JESD204B_SERIAL_DATA(11) <= '0';
-  JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0);
-
-
-  u_revision : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name => g_design_name,
-    g_design_note => g_design_note,
-    g_sim         => g_sim,
-    g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr,
-    g_stamp_date  => g_stamp_date,
-    g_stamp_time  => g_stamp_time,
-    g_revision_id => g_revision_id
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => CLK,
-    PPS          => PPS,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => VERSION,
-    ID           => ID,
-    TESTIO       => TESTIO,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => SENS_SC,
-    SENS_SD      => SENS_SD,
-
-    PMBUS_SC     => PMBUS_SC,
-    PMBUS_SD     => PMBUS_SD,
-    PMBUS_ALERT  => PMBUS_ALERT,
-
-    -- 1GbE Control Interface
-    ETH_clk      => ETH_clk,
-    ETH_SGIN     => ETH_SGIN,
-    ETH_SGOUT    => ETH_SGOUT,
-
-    -- LEDs
-    QSFP_LED     => QSFP_LED,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA   => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK        => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF        => JESD204B_SYSREF,
-    JESD204B_SYNC_N        => jesd204b_sync_n_arr
-  );
-END str;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl
deleted file mode 100644
index af0a453b32..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/disturb2_unb2b_station_xsub_one_pins.tcl
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-#
-# Copyright (C) 2022
-# 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/>.
-#
-###############################################################################
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl
-
-
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg
deleted file mode 100644
index a47af0eda8..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/hdllib.cfg
+++ /dev/null
@@ -1,134 +0,0 @@
-hdl_lib_name = disturb2_unb2b_station_xsub_one
-hdl_library_clause_name = disturb2_unb2b_station_xsub_one_lib
-hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station 
-hdl_lib_uses_sim = eth 
-hdl_lib_technology = ip_arria10_e1sg
-                     
- synth_files =
-    disturb2_unb2b_station_xsub_one.vhd
-
-test_bench_files = 
-    tb_disturb2_unb2b_station_xsub_one.vhd
-    tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd
-
-regression_test_vhdl =
-    tb_disturb2_unb2b_station_xsub_one.vhd
-    tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd
-
-
-[modelsim_project_file]
-modelsim_copy_files =
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-
-[quartus_project_file]
-synth_top_level_entity =
-
-quartus_copy_files =
-     # Note: path $RADIOHDL_WORK is equivalent to relative path ../../../../../../
-    ../../quartus .
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-    
-quartus_qsf_files =
-    $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
-
-# use disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz.
-quartus_sdc_files =
-    ../../quartus/disturb2_unb2b_station.sdc
-    #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
-
-quartus_tcl_files =
-    disturb2_unb2b_station_xsub_one_pins.tcl
-
-quartus_vhdl_files = 
-
-quartus_qip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_xsub_one/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip
-
-quartus_ip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip
-
-nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd
deleted file mode 100644
index 97b3ab1629..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one.vhd
+++ /dev/null
@@ -1,374 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_xsub_one using WG data.
---
--- Description:
---   MM control actions:
---
---   1) Enable calc mode for WG via reg_diag_wg with:
---        freq = 19.921875MHz = subband index 102
---        ampl = 0.5 * 2**13, full scale amplitude is 2**13
---   
---   2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg 
---      to trigger start of WG at BSN.
---     
---   3) Read crosslets statistics (XST) via ram_st_xsq and verify that the values
---      are as expected. This is done by comparing the values in the outgoing square
---      correlation matrix.
---         
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a  
---   Takes about 40 m
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_xsub_one IS
-END tb_disturb2_unb2b_station_xsub_one;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_one IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0; 
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 24;
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-  CONSTANT c_ctrl_interval_size  : NATURAL := c_nof_clk_per_sync;
-
-  CONSTANT c_percentage          : REAL := 0.05;  -- percentage that actual value may differ from expected value
-  CONSTANT c_lo_factor           : REAL := 1.0 - c_percentage;  -- lower boundary  
-  CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
-
-  -- WG
-  CONSTANT c_FS_adc               : REAL := REAL(c_disturb_FS_adc);  -- = full scale of WG
-  CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := c_disturb_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-  CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
-  CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_FS_adc;  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
-
-  -- WPFB
-  CONSTANT c_nof_pfb                        : NATURAL := 1; -- Verifying 1 of c_disturb_P_pfb = 6 pfb to speed up simulation.
-  CONSTANT c_wb_leakage_bin                 : NATURAL := c_wpfb_sim.nof_points / c_wpfb_sim.wb_factor;   -- = 256, leakage will occur in this bin if FIR wb_factor is reversed 
-  CONSTANT c_exp_sp_subband_power_ratio     : REAL := 1.0/8.0;   -- depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_sp_subband_power_sum_ratio : REAL := c_exp_sp_subband_power_ratio;   -- because all sinus power is expected in one subband
-  CONSTANT c_exp_subband_power_sp_0         : REAL := c_exp_wg_power_sp_0 * c_exp_sp_subband_power_ratio;
-
-  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; 
-
-  -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_bsn_scheduler_wg        : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER";
-  CONSTANT c_mm_file_reg_diag_wg                 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG";
-  CONSTANT c_mm_file_ram_st_sst                  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST";
-  CONSTANT c_mm_file_reg_crosslets_info          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_CROSSLETS_INFO";
-  CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB";
-  CONSTANT c_mm_file_ram_st_xsq                  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_XSQ";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-
-  -- WG
-  SIGNAL current_bsn_wg          : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
-
-  -- WPFB
-  SIGNAL xsub_stats_arr         : t_slv_64_arr(0 TO c_nof_complex * c_disturb_X_sq -1);
-
-  
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '1';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_xsub_one : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_xsub_one",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,
-    g_scope_selected_subband => NATURAL(c_subband_sp_0)
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-    VARIABLE v_bsn                   : NATURAL;
-    VARIABLE v_sp_subband_power      : REAL;
-    VARIABLE v_W, v_C, v_A, v_X, v_B, v_A_even, v_B_even : NATURAL;  -- array indicies
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
- 
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000003#, tb_clk);  -- Enable BSN at PPS
-
-    -- Release PPS pulser, to get first PPS now and to start BSN source
-    WAIT FOR 1 us;
-    pps_rst <= '0';
-
-    ----------------------------------------------------------------------------
-    -- Crosslets Info
-    ----------------------------------------------------------------------------  
-    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 0,  INTEGER(c_subband_sp_0), tb_clk); -- offset
-    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 15, 0                      , tb_clk); -- stepsize
-
-    ----------------------------------------------------------------------------
-    -- Enable WG
-    ----------------------------------------------------------------------------
-    --   0 : mode[7:0]           --> off=0, calc=1, repeat=2, single=3)
-    --       nof_samples[31:16]  --> <= c_ram_wg_size=1024
-    --   1 : phase[15:0]
-    --   2 : freq[30:0]
-    --   3 : ampl[16:0]
-    FOR I IN 0 TO c_disturb_S_pn-1 LOOP
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
-    END LOOP;
-
-    -- Read current BSN
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    
-    -- Write scheduler BSN to trigger start of WG at next block
-    v_bsn := TO_UINT(current_bsn_wg) + 2;
-    ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR;
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 0, c_bsn_start_wg, tb_clk);  -- first write low then high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_scheduler_wg, 1,              0, tb_clk);  -- assume v_bsn < 2**31-1
-
-    -- bsn_scheduler_xsub
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 1, c_ctrl_interval_size, tb_clk);  -- Interval size
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 2,       c_bsn_start_wg, tb_clk);  -- first write low then high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 3,                    0, tb_clk);  -- assume v_bsn < 2**31-1
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 0,                    1, tb_clk);  -- enable
-
-    -- Wait for enough WG data and start of sync interval
-    mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                    -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 2,  -- this is the wait until condition
-                            c_disturb_T_sub, tb_clk);
-
-    ---------------------------------------------------------------------------
-    -- Read crosslet statistics
-    ---------------------------------------------------------------------------
-    FOR I IN 0 TO c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz) -1 LOOP
-      v_W := I MOD 2;
-      v_B := I / 2;
-      IF v_W=0 THEN
-        -- low part
-        mmf_mm_bus_rd(c_mm_file_ram_st_xsq, I, rd_data, tb_clk);
-        xsub_stats_arr(v_B)(31 DOWNTO 0) <= rd_data;
-      ELSE      
-        -- high part
-        mmf_mm_bus_rd(c_mm_file_ram_st_xsq, I, rd_data, tb_clk);
-        xsub_stats_arr(v_B)(63 DOWNTO 32) <= rd_data;
-      END IF;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    ---------------------------------------------------------------------------
-    -- Verify crosslet statistics
-    --------------------------------------------------------------------------- 
-    -- With all WGs having the same input all crosslets should be identical. Due to quantization cross talk
-    -- between the two real inputs of the filterbank the two signals in the output pairs per P_pfb differ 
-    -- slightly, therefore 3 slightly different correlation values are expected. 1 for each correlation 
-    -- between even indexed signals, 1 for odd indexed signals and 1 for correlations between even and odd 
-    -- indexed signals. This is verified by checking if these values are the same.
-    FOR I IN 0 TO c_nof_complex * c_disturb_X_sq -1 LOOP
-      v_C := I MOD 2;
-      v_X := I /c_nof_complex;
-      v_A := v_X MOD c_disturb_S_pn;
-      v_B := v_X / c_disturb_S_pn;
-      v_A_even := v_A MOD 2;
-      v_B_even := v_B MOD 2;
-      
-      -- Check real values of even indices
-      IF v_C=0 AND v_A_even=0 AND v_B_even=0 THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(0)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check real values of odd indices
-      IF v_C=0 AND v_A_even=1 AND v_B_even=1 THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex)) REPORT "correlation between odd indexed signals (re) is wrong at I = " & int_to_str(I)  SEVERITY ERROR; END IF;
-
-      -- Check real values of even correlated with odd indices
-      IF v_C=0 AND (v_A_even=0 XOR v_B_even=0) THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(1 * c_nof_complex)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-     
-      -- Using absolute value of the imaginary part (force positive) as the sign can be opposite when comparing A to B vs B to A.
-      -- Check im values of even indices
-      IF v_C=1 AND v_A_even=0 AND v_B_even=0 THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1))) REPORT "correlation between even indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check im values of odd indices
-      IF v_C=1 AND v_A_even=1 AND v_B_even=1 THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex + 1))) REPORT "correlation between odd indexed signals (im) is wrong at I = " & int_to_str(I)  SEVERITY ERROR; END IF;
-
-      -- Check im values of even correlated with odd indices
-      IF v_C=1 AND (v_A_even=0 XOR v_B_even=0) THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1 * c_nof_complex + 1))) REPORT "correlation between even/odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check if values are > 0
-      IF v_C=0 THEN ASSERT (SIGNED(xsub_stats_arr(I)) > TO_SIGNED(0, c_longword_w)) REPORT "correlation is 0 which is unexpected! at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-    END LOOP; 
- 
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd
deleted file mode 100644
index 78df44f1ac..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_one/tb_disturb2_unb2b_station_xsub_one_xst_offload.vhd
+++ /dev/null
@@ -1,264 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2020
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_xsub_one capturing BST UDP offload packets.
---
--- Description:
---   MM control actions:
---
---   1) Enable BSN source and enable BST offload
---   
---   2) Verify ethernet statistics using eth_statistics, it checks the number of 
---      received packets and the total number of valid data. The content of the packets is not verified.   
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a
---   Takes about 10 m
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, disturb2_unb2b_station_lib, eth_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_xsub_one_xst_offload IS
-END tb_disturb2_unb2b_station_xsub_one_xst_offload;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_one_xst_offload IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 2;
-  CONSTANT c_node_nr         : NATURAL := 1;
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := TO_UVEC(c_unb_nr * 4 + c_node_nr, 8);  -- c_unb2b_board_nof_node = 4, c_unb2b_board_aux.id_w = 8
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 16; -- long enough to stream out udp data
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-  CONSTANT c_ctrl_interval_size  : NATURAL := c_nof_clk_per_sync;
-
-  -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_stat_enable_xst         : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_STAT_ENABLE_XST";
-  CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-  SIGNAL eth_done            : STD_LOGIC := '0';
-
-  -- . 1GbE output
-  CONSTANT c_eth_check_nof_packets        : NATURAL := 1; -- received packets in 1 sync period
-  CONSTANT c_eth_header_size              : NATURAL := 19; -- words
-  CONSTANT c_eth_crc_size                 : NATURAL := 1; -- word
-  CONSTANT c_eth_packet_size              : NATURAL := c_eth_header_size + c_eth_crc_size + (c_disturb_W_statistic / c_word_w) * c_disturb_S_pn * c_disturb_S_pn * c_nof_complex; -- 20 + 2 * 12 * 12 * 2 = 596 
-  CONSTANT c_eth_check_nof_valid          : NATURAL := c_eth_check_nof_packets * c_eth_packet_size;  
-  CONSTANT c_eth_runtime_timeout          : TIME := 3 * c_nof_clk_per_sync * c_ext_clk_period;  -- eth statistics should be done at the third sync interval
-  
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '1';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  u_lofar_unb2b_disturb_station_xsub_one : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name            => "disturb2_unb2b_station_xsub_one",
-    g_design_note            => "",
-    g_sim                    => c_sim,
-    g_sim_unb_nr             => c_unb_nr,
-    g_sim_node_nr            => c_node_nr,
-    g_wpfb                   => c_wpfb_sim,
-    g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => ext_clk,
-    PPS          => pps,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => c_version,
-    ID           => c_id,
-    TESTIO       => open,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => sens_scl,
-    SENS_SD      => sens_sda,
-
-    PMBUS_SC     => pmbus_scl,
-    PMBUS_SD     => pmbus_sda,
-    PMBUS_ALERT  => open,
-
-    -- 1GbE Control Interface
-    ETH_CLK      => eth_clk,
-    ETH_SGIN     => eth_rxp,
-    ETH_SGOUT    => eth_txp,
-
-    -- LEDs
-    QSFP_LED     => open,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK      => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF => jesd204b_sysref,
-    JESD204B_SYNC_N => jesd204b_sync_n
-  );
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
- 
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 3,                    0, tb_clk);
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 2,                    0, tb_clk);  -- Init BSN = 0
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_source_v2, 0,         16#00000001#, tb_clk);  -- Enable BSN immediately 
-
-    -- Release PPS pulser, to get first PPS now and to start BSN source
-    WAIT FOR 1 us;
-    pps_rst <= '0';
-
-    ----------------------------------------------------------------------------
-    -- Enable xsub
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 1, c_ctrl_interval_size, tb_clk);  -- Interval size
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 2, c_nof_block_per_sync, tb_clk);  -- first write bsn low then bsn high part
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 3,                    0, tb_clk);  -- bsn high, assume v_bsn < 2**31-1
-    mmf_mm_bus_wr(c_mm_file_reg_bsn_sync_scheduler_xsub, 0,                    1, tb_clk);  -- enable
-
-    ----------------------------------------------------------------------------
-    -- Offload enable
-    ----------------------------------------------------------------------------
-    mmf_mm_bus_wr(c_mm_file_reg_stat_enable_xst, 0, 1, tb_clk);
-
-    -- wait for udp offload is done
-    proc_common_wait_until_high(ext_clk, eth_done);
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-  -------------------------------------------------------------------------
-  -- Verify proper DUT 1GbE offload output using Ethernet packet statistics 
-  -------------------------------------------------------------------------
-  u_eth_statistics : ENTITY eth_lib.eth_statistics
-    GENERIC MAP (
-      g_runtime_nof_packets => c_eth_check_nof_packets,
-      g_runtime_timeout     => c_eth_runtime_timeout,
-      g_check_nof_valid     => TRUE,
-      g_check_nof_valid_ref => c_eth_check_nof_valid
-   )
-  PORT MAP (  
-    eth_serial_in => eth_txp(0),
-    tb_end        => eth_done
-  );
-
-END tb;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd
deleted file mode 100644
index ff25b18ed0..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring.vhd
+++ /dev/null
@@ -1,195 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2022
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--- Author : R. van der Walle
--- Purpose:  
---   Wrapper for Lofar2 SDP Station xsub_ring design
--- Description:
---   Unb2b version for lab testing
---   Contains complete SDP station design with AIT input stage with 12 ADC streams, FSUB, XSUB with ring
-
-
-LIBRARY IEEE, common_lib, unb2b_board_lib, technology_lib, diag_lib, dp_lib, tech_jesd204b_lib, disturb2_unb2b_station_lib;
-USE IEEE.STD_LOGIC_1164.ALL;
-USE IEEE.NUMERIC_STD.ALL;
-USE common_lib.common_pkg.ALL;
-USE common_lib.common_mem_pkg.ALL;
-USE technology_lib.technology_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-
-ENTITY disturb2_unb2b_station_xsub_ring IS
-  GENERIC (
-    g_design_name      : STRING  := "disturb2_unb2b_station_xsub_ring";
-    g_design_note      : STRING  := "Lofar2 SDP station xsub_ring design";
-    g_sim              : BOOLEAN := FALSE; --Overridden by TB
-    g_sim_unb_nr       : NATURAL := 0;
-    g_sim_node_nr      : NATURAL := 0;
-    g_stamp_date       : NATURAL := 0;  -- Date (YYYYMMDD) -- set by QSF
-    g_stamp_time       : NATURAL := 0;  -- Time (HHMMSS)   -- set by QSF
-    g_revision_id      : STRING := ""   -- revision ID     -- set by QSF
-  );
-  PORT (
-    -- GENERAL
-    CLK          : IN    STD_LOGIC; -- System Clock
-    PPS          : IN    STD_LOGIC; -- System Sync
-    WDI          : OUT   STD_LOGIC; -- Watchdog Clear
-    INTA         : INOUT STD_LOGIC; -- FPGA interconnect line
-    INTB         : INOUT STD_LOGIC; -- FPGA interconnect line
-
-    -- Others
-    VERSION      : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.version_w-1 DOWNTO 0);
-    ID           : IN    STD_LOGIC_VECTOR(c_unb2b_board_aux.id_w-1 DOWNTO 0);
-    TESTIO       : INOUT STD_LOGIC_VECTOR(c_unb2b_board_aux.testio_w-1 DOWNTO 0);
-    
-    -- I2C Interface to Sensors
-    SENS_SC      : INOUT STD_LOGIC;
-    SENS_SD      : INOUT STD_LOGIC;
-  
-    PMBUS_SC     : INOUT STD_LOGIC;
-    PMBUS_SD     : INOUT STD_LOGIC;
-    PMBUS_ALERT  : IN    STD_LOGIC := '0';
-
-    -- 1GbE Control Interface
-    ETH_CLK      : IN    STD_LOGIC;
-    ETH_SGIN     : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-    ETH_SGOUT    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 DOWNTO 0);
-
-    -- Transceiver clocks
-    SA_CLK        : IN    STD_LOGIC := '0'; -- Clock 10GbE front (qsfp) and ring lines
-
-    -- front transceivers QSFP0 for Ring.
-    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);
-
-    -- front transceivers QSFP1 for 10GbE output to CEP.
-    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);
-    -- LEDs
-    QSFP_LED     : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp_nof_leds-1 DOWNTO 0);
-
-    -- ring transceivers
-    RING_0_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS => '0'); -- Using qsfp bus width also for ring interfaces
-    RING_0_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
-    RING_1_RX    : IN    STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0) := (OTHERS=>'0');
-    RING_1_TX    : OUT   STD_LOGIC_VECTOR(c_unb2b_board_tr_qsfp.bus_w-1 DOWNTO 0);
-
-     -- back transceivers (note only 6 are used in unb2b)
-    BCK_RX       : IN    STD_LOGIC_VECTOR(c_unb2b_board_nof_tr_jesd204b + c_unb2b_board_start_tr_jesd204b-1 downto c_unb2b_board_nof_tr_jesd204b);  -- c_unb2b_board_nof_tr_jesd204b = 6, c_disturb_S_pn = 12
-    BCK_REF_CLK  : IN    STD_LOGIC; -- Use as JESD204B_REFCLK
- 
-    -- jesd204b syncronization signals (2 syncs)
-    JESD204B_SYSREF : IN    STD_LOGIC;
-    JESD204B_SYNC_N : OUT   STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0)  -- c_unb2b_board_nof_sync_jesd204b = c_disturb_N_sync_jesd = 4
-  );
-END disturb2_unb2b_station_xsub_ring;
- 
-ARCHITECTURE str OF disturb2_unb2b_station_xsub_ring IS
-
-  SIGNAL JESD204B_SERIAL_DATA       : STD_LOGIC_VECTOR((c_unb2b_board_tr_jesd204b.bus_w*c_unb2b_board_tr_jesd204b.nof_bus)-1  downto 0);
-  SIGNAL jesd204b_sync_n_arr        : STD_LOGIC_VECTOR(c_unb2b_board_nof_sync_jesd204b-1  downto 0);
-  SIGNAL JESD204B_REFCLK            : STD_LOGIC;
-
-
-BEGIN
-
-  -- Mapping between JESD signal names and UNB2B pin/schematic names
-  JESD204B_REFCLK <=  BCK_REF_CLK;
-  JESD204B_SERIAL_DATA(0) <= BCK_RX(42);
-  JESD204B_SERIAL_DATA(1) <= BCK_RX(43);
-  JESD204B_SERIAL_DATA(2) <= BCK_RX(44);
-  JESD204B_SERIAL_DATA(3) <= BCK_RX(45);
-  JESD204B_SERIAL_DATA(4) <= BCK_RX(46);
-  JESD204B_SERIAL_DATA(5) <= BCK_RX(47);
-  JESD204B_SERIAL_DATA(6) <= '0';
-  JESD204B_SERIAL_DATA(7) <= '0';
-  JESD204B_SERIAL_DATA(8) <= '0';
-  JESD204B_SERIAL_DATA(9) <= '0';
-  JESD204B_SERIAL_DATA(10) <= '0';
-  JESD204B_SERIAL_DATA(11) <= '0';
-  JESD204B_SYNC_N(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0) <= jesd204b_sync_n_arr(c_unb2b_board_nof_sync_jesd204b-1 DOWNTO 0);
-
-
-  u_revision : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-  GENERIC MAP (
-    g_design_name => g_design_name,
-    g_design_note => g_design_note,
-    g_sim         => g_sim,
-    g_sim_unb_nr  => g_sim_unb_nr,
-    g_sim_node_nr => g_sim_node_nr,
-    g_stamp_date  => g_stamp_date,
-    g_stamp_time  => g_stamp_time,
-    g_revision_id => g_revision_id
-  )
-  PORT MAP (
-    -- GENERAL
-    CLK          => CLK,
-    PPS          => PPS,
-    WDI          => WDI,
-    INTA         => INTA,
-    INTB         => INTB,
-
-    -- Others
-    VERSION      => VERSION,
-    ID           => ID,
-    TESTIO       => TESTIO,
-
-    -- I2C Interface to Sensors
-    SENS_SC      => SENS_SC,
-    SENS_SD      => SENS_SD,
-
-    PMBUS_SC     => PMBUS_SC,
-    PMBUS_SD     => PMBUS_SD,
-    PMBUS_ALERT  => PMBUS_ALERT,
-
-    -- 1GbE Control Interface
-    ETH_clk      => ETH_clk,
-    ETH_SGIN     => ETH_SGIN,
-    ETH_SGOUT    => ETH_SGOUT,
-
-    -- Transceiver clocks
-    SA_CLK       => SA_CLK,
-
-    -- front transceivers QSFP0 for Ring.
-    QSFP_0_RX    => QSFP_0_RX,   
-    QSFP_0_TX    => QSFP_0_TX,   
-
-    -- front transceivers QSFP1 for 10GbE output to CEP.
-    QSFP_1_RX    => QSFP_1_RX,  
-    QSFP_1_TX    => QSFP_1_TX,  
-    -- LEDs
-    QSFP_LED     => QSFP_LED, 
-
-    -- ring transceivers
-    RING_0_RX    => RING_0_RX,
-    RING_0_TX    => RING_0_TX,
-    RING_1_RX    => RING_1_RX,
-    RING_1_TX    => RING_1_TX,
-
-    -- back transceivers
-    JESD204B_SERIAL_DATA   => JESD204B_SERIAL_DATA,
-    JESD204B_REFCLK        => JESD204B_REFCLK,
-  
-    -- jesd204b syncronization signals
-    JESD204B_SYSREF        => JESD204B_SYSREF,
-    JESD204B_SYNC_N        => jesd204b_sync_n_arr
-  );
-END str;
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl
deleted file mode 100644
index f9917ffc36..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/disturb2_unb2b_station_xsub_ring_pins.tcl
+++ /dev/null
@@ -1,25 +0,0 @@
-###############################################################################
-#
-# Copyright (C) 2022
-# 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/>.
-#
-###############################################################################
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_jesd_pins.tcl
-source $::env(RADIOHDL_WORK)/applications/lofar2/designs/disturb2_unb2b_station/quartus/disturb2_unb2b_station_ring_pins.tcl
-
-
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg
deleted file mode 100644
index 53de362dd0..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/hdllib.cfg
+++ /dev/null
@@ -1,132 +0,0 @@
-hdl_lib_name = disturb2_unb2b_station_xsub_ring
-hdl_library_clause_name = disturb2_unb2b_station_xsub_ring_lib
-hdl_lib_uses_synth = common mm technology unb2b_board disturb2_unb2b_station 
-hdl_lib_uses_sim = eth 
-hdl_lib_technology = ip_arria10_e1sg
-                     
- synth_files =
-    disturb2_unb2b_station_xsub_ring.vhd
-
-test_bench_files = 
-    tb_disturb2_unb2b_station_xsub_ring.vhd
-
-regression_test_vhdl =
-
-[modelsim_project_file]
-modelsim_copy_files =
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-    # Overwrite bf weights with sim data
-    ../../tb/data data
-
-[quartus_project_file]
-synth_top_level_entity =
-
-quartus_copy_files =
-     # Note: path $RADIOHDL_WORK is equivalent to relative path ../../../../../../
-    ../../quartus .
-    ../../src/data data
-    $RADIOHDL_WORK/libraries/dsp/filter/src/hex  data   # FIR filter coefficients
-
-quartus_qsf_files =
-    $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.qsf
-
-# use disturb2_unb2b_station.sdc instead because BCK_REF_CLK is 200MHz, not 644.33MHz.
-quartus_sdc_files =
-    ../../quartus/disturb2_unb2b_station.sdc
-    #$RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc
-
-quartus_tcl_files =
-    disturb2_unb2b_station_xsub_ring_pins.tcl
-
-quartus_vhdl_files = 
-
-quartus_qip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station_xsub_ring/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station.qip
-
-quartus_ip_files =
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_common_mm_1.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_avs_eth_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_clk_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_cpu_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jesd204b.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_jtag_uart_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_onchip_memory2_0.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_jesd_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_pps.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_pio_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_bf_weights.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_equalizer_gains.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_fil_coefs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_scrap.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_ss_ss_wide.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_histogram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_st_xsq.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_ram_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_aduh_monitor.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bf_scale.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_align_v2_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_input.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_aligned_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_beamlet_output.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_bst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_rx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_ring_tx_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_rx_align_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_sst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_monitor_v2_xst_offload.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_scheduler.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_source_v2.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_bsn_sync_scheduler_xsub.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_crosslets_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_diag_data_buffer_bsn.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_bsn_at_sync_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_block_validate_err_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dpmm_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_selector.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_shiftram.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_dp_xonoff.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_epcs.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_temp_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_fpga_voltage_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_hdr_dat.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_ctrl.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_mmdp_data.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nof_crosslets.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_nw_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_remu.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_bf.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_ring_lane_info_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_disturb_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_si.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_enable_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_bst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_sst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_stat_hdr_dat_xst.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_eth10g.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_tr_10gbe_mac.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_pmbus.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_unb_sens.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wdi.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_reg_wg.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_rom_system_info.ip
-    $RADIOHDL_BUILD_DIR/unb2b/quartus/disturb2_unb2b_station/ip/qsys_disturb2_unb2b_station/qsys_disturb2_unb2b_station_timer_0.ip
-
-nios2_app_userflags = -DCOMPILE_FOR_GEN2_UNB2
diff --git a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd b/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd
deleted file mode 100644
index 217705f07a..0000000000
--- a/applications/disturb2/designs/disturb2_unb2b_station/revisions/disturb2_unb2b_station_xsub_ring/tb_disturb2_unb2b_station_xsub_ring.vhd
+++ /dev/null
@@ -1,491 +0,0 @@
--------------------------------------------------------------------------------
---
--- Copyright 2021
--- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
--- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
---
--- Licensed under the Apache License, Version 2.0 (the "License");
--- you may not use this file except in compliance with the License.
--- You may obtain a copy of the License at
---
---     http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
---
--- Author: R. van der Walle
--- Purpose: Self-checking testbench for simulating disturb2_unb2b_station_xsub_ring using WG data.
---
--- Description:
---   MM control actions:
---
---   1) Enable calc mode for WG via reg_diag_wg with:
---        freq = 19.921875MHz = subband index 102
---        ampl = 0.5 * 2**13, full scale amplitude is 2**13
---   
---   2) Read current BSN from reg_bsn_scheduler_wg and write reg_bsn_scheduler_wg 
---      to trigger start of WG at BSN.
---     
---   3) Read crosslets statistics (XST) via ram_st_xsq and verify that the values
---      are as expected. This is done by comparing the values in the outgoing square
---      correlation matrix.
---         
---
--- Usage:
---   > as 7    # default
---   > as 12   # for detailed debugging
---   > run -a  
---   Takes about 40 m
---
--------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, unb2b_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, disturb_lib, wpfb_lib, tech_pll_lib, disturb2_unb2b_station_lib;
-USE IEEE.std_logic_1164.ALL;
-USE IEEE.numeric_std.ALL;
-USE IEEE.MATH_REAL.ALL;
-USE common_lib.common_pkg.ALL;
-USE unb2b_board_lib.unb2b_board_pkg.ALL;
-USE common_lib.tb_common_pkg.ALL;
-USE common_lib.common_str_pkg.ALL;
-USE mm_lib.mm_file_pkg.ALL;
-USE dp_lib.dp_stream_pkg.ALL;
-USE mm_lib.mm_file_unb_pkg.ALL;
-USE diag_lib.diag_pkg.ALL;
-USE wpfb_lib.wpfb_pkg.ALL;
-USE tech_pll_lib.tech_pll_component_pkg.ALL;
-USE disturb_lib.disturb_pkg.ALL;
-
-ENTITY tb_disturb2_unb2b_station_xsub_ring IS
-END tb_disturb2_unb2b_station_xsub_ring;
-
-ARCHITECTURE tb OF tb_disturb2_unb2b_station_xsub_ring IS
-
-  CONSTANT c_sim             : BOOLEAN := TRUE;
-  CONSTANT c_unb_nr          : NATURAL := 0; -- UniBoard 0
-  CONSTANT c_node_nr         : NATURAL := 0; 
-  CONSTANT c_nof_rn          : NATURAL := 2;
-  CONSTANT c_P_sq            : NATURAL := (c_nof_rn / 2) + 1;
-  CONSTANT c_id              : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
-  CONSTANT c_version         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
-  CONSTANT c_fw_version      : t_unb2b_board_fw_version := (1, 0);
-
-  CONSTANT c_eth_clk_period      : TIME := 8 ns;  -- 125 MHz XO on UniBoard
-  CONSTANT c_ext_clk_period      : TIME := 5 ns;
-  CONSTANT c_bck_ref_clk_period  : TIME := 5 ns;
-  CONSTANT c_sa_clk_period       : TIME := tech_pll_clk_644_period; -- 644MHz
-
-  CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
-
-  CONSTANT c_nof_block_per_sync  : NATURAL := 24;
-  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_disturb_N_fft; 
-  CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
-  CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_disturb_wpfb_subbands, c_nof_block_per_sync);
-  CONSTANT c_ctrl_interval_size  : NATURAL := c_nof_clk_per_sync;
-
-  CONSTANT c_percentage          : REAL := 0.05;  -- percentage that actual value may differ from expected value
-  CONSTANT c_lo_factor           : REAL := 1.0 - c_percentage;  -- lower boundary  
-  CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
-  CONSTANT c_nof_lanes           : NATURAL := 1;
-
-  -- WG
-  CONSTANT c_FS_adc               : REAL := REAL(c_disturb_FS_adc);  -- = full scale of WG
-  CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := c_disturb_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_disturb_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-  CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
-  CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_FS_adc;  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
-
-  -- WPFB
-  CONSTANT c_nof_pfb                        : NATURAL := 1; -- Verifying 1 of c_disturb_P_pfb = 6 pfb to speed up simulation.
-  CONSTANT c_wb_leakage_bin                 : NATURAL := c_wpfb_sim.nof_points / c_wpfb_sim.wb_factor;   -- = 256, leakage will occur in this bin if FIR wb_factor is reversed 
-  CONSTANT c_exp_sp_subband_power_ratio     : REAL := 1.0/8.0;   -- depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_sp_subband_power_sum_ratio : REAL := c_exp_sp_subband_power_ratio;   -- because all sinus power is expected in one subband
-  CONSTANT c_exp_subband_power_sp_0         : REAL := c_exp_wg_power_sp_0 * c_exp_sp_subband_power_ratio;
-
-  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; 
-
-  -- MM  
-  CONSTANT c_mm_file_reg_bsn_source_v2           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
-  CONSTANT c_mm_file_reg_bsn_scheduler_wg        : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SCHEDULER";
-  CONSTANT c_mm_file_reg_diag_wg                 : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_WG";
-  CONSTANT c_mm_file_ram_st_sst                  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_SST";
-  CONSTANT c_mm_file_reg_crosslets_info          : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_CROSSLETS_INFO";
-  CONSTANT c_mm_file_reg_bsn_sync_scheduler_xsub : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SYNC_SCHEDULER_XSUB";
-  CONSTANT c_mm_file_ram_st_xsq                  : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "RAM_ST_XSQ";
-
-  -- Tb
-  SIGNAL tb_end              : STD_LOGIC := '0';
-  SIGNAL sim_done            : STD_LOGIC := '0';
-  SIGNAL tb_clk              : STD_LOGIC := '0';  
-  SIGNAL rd_data             : STD_LOGIC_VECTOR(c_32-1 DOWNTO 0) := (OTHERS => '0');
-
-  SIGNAL i_QSFP_0_TX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-  SIGNAL i_QSFP_0_RX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-  SIGNAL i_RING_0_TX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-  SIGNAL i_RING_0_RX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-  SIGNAL i_RING_1_TX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-  SIGNAL i_RING_1_RX         : t_unb2b_board_qsfp_bus_2arr(c_nof_rn -1 DOWNTO 0) := (OTHERS => (OTHERS => '0'));
-
-  -- WG
-  SIGNAL current_bsn_wg          : STD_LOGIC_VECTOR(c_dp_stream_bsn_w-1 DOWNTO 0);
-
-  -- WPFB
-  SIGNAL xsub_stats_arr         : t_slv_64_arr(0 TO c_P_sq * c_nof_complex * c_disturb_X_sq -1);
-
-  
-  -- DUT
-  SIGNAL ext_clk             : STD_LOGIC := '0';
-  SIGNAL pps                 : STD_LOGIC := '0';
-  SIGNAL ext_pps             : STD_LOGIC := '0'; 
-  SIGNAL pps_rst             : STD_LOGIC := '1';
-  SIGNAL SA_CLK              : STD_LOGIC := '0';
-
-  SIGNAL WDI                 : STD_LOGIC;
-  SIGNAL INTA                : STD_LOGIC;
-  SIGNAL INTB                : STD_LOGIC;
-
-  SIGNAL eth_clk             : STD_LOGIC := '0';
-  SIGNAL eth_txp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-  SIGNAL eth_rxp             : STD_LOGIC_VECTOR(c_unb2b_board_nof_eth-1 downto 0) := (OTHERS => '0');
-
-  SIGNAL sens_scl            : STD_LOGIC;
-  SIGNAL sens_sda            : STD_LOGIC;
-  SIGNAL pmbus_scl           : STD_LOGIC;
-  SIGNAL pmbus_sda           : STD_LOGIC;
-
-  -- back transceivers
-  SIGNAL JESD204B_SERIAL_DATA : STD_LOGIC_VECTOR(c_disturb_S_pn-1 downto 0);
-  SIGNAL JESD204B_REFCLK      : STD_LOGIC := '1';
-
-  -- jesd204b syncronization signals
-  SIGNAL jesd204b_sysref     : STD_LOGIC;
-  SIGNAL jesd204b_sync_n     : STD_LOGIC_VECTOR(c_disturb_N_sync_jesd-1 DOWNTO 0);
-
-BEGIN
-
-  ----------------------------------------------------------------------------
-  -- System setup
-  ----------------------------------------------------------------------------
-  ext_clk <= NOT ext_clk AFTER c_ext_clk_period/2;  -- External clock (200 MHz)
-  JESD204B_REFCLK <= NOT JESD204B_REFCLK AFTER c_bck_ref_clk_period/2;  -- JESD sample clock (200MHz) 
-  eth_clk <= NOT eth_clk AFTER c_eth_clk_period/2;  -- Ethernet ref clock (125 MHz)
-  SA_CLK <= NOT SA_CLK AFTER c_sa_clk_period/2; -- Serial Gigabit IO sa clock (644 MHz)
-
-  INTA <= 'H';  -- pull up
-  INTB <= 'H';  -- pull up
-
-  sens_scl <= 'H';  -- pull up
-  sens_sda <= 'H';  -- pull up
-  pmbus_scl <= 'H';  -- pull up
-  pmbus_sda <= 'H';  -- pull up
-
-  ------------------------------------------------------------------------------
-  -- External PPS
-  ------------------------------------------------------------------------------  
-  proc_common_gen_pulse(5, c_pps_period, '1', pps_rst, ext_clk, pps);
-  jesd204b_sysref <= pps;
-  ext_pps <= pps;
-
-  ------------------------------------------------------------------------------
-  -- DUT
-  ------------------------------------------------------------------------------
-  gen_dut : FOR RN IN 0 TO c_nof_rn -1 GENERATE
-    u_lofar_unb2b_disturb_station_xsub_ring : ENTITY disturb2_unb2b_station_lib.disturb2_unb2b_station
-    GENERIC MAP (
-      g_design_name            => "disturb2_unb2b_station_xsub_ring",
-      g_design_note            => "",
-      g_sim                    => c_sim,
-      g_sim_unb_nr             => c_unb_nr + (RN / c_quad),
-      g_sim_node_nr            => RN MOD c_quad,
-      g_wpfb                   => c_wpfb_sim,
-      g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,
-      g_scope_selected_subband => NATURAL(c_subband_sp_0)
-    )
-    PORT MAP (
-      -- GENERAL
-      CLK          => ext_clk,
-      PPS          => pps,
-      WDI          => WDI,
-      INTA         => INTA,
-      INTB         => INTB,
-  
-      -- Others
-      VERSION      => c_version,
-      ID           => ( TO_UVEC(RN / c_quad, c_unb2b_board_nof_uniboard_w) & TO_UVEC(RN MOD c_quad, c_unb2b_board_nof_chip_w) ),
-      TESTIO       => open,
-  
-      -- I2C Interface to Sensors
-      SENS_SC      => sens_scl,
-      SENS_SD      => sens_sda,
-  
-      PMBUS_SC     => pmbus_scl,
-      PMBUS_SD     => pmbus_sda,
-      PMBUS_ALERT  => open,
-  
-      -- 1GbE Control Interface
-      ETH_CLK      => eth_clk,
-      ETH_SGIN     => eth_rxp,
-      ETH_SGOUT    => eth_txp,
-    
-      -- Transceiver clocks
-      SA_CLK       => SA_CLK,
-      -- front transceivers
-      QSFP_0_RX    => i_QSFP_0_RX(RN), 
-      QSFP_0_TX    => i_QSFP_0_TX(RN),
-   
-      -- ring transceivers
-      RING_0_RX    => i_RING_0_RX(RN), 
-      RING_0_TX    => i_RING_0_TX(RN), 
-      RING_1_RX    => i_RING_1_RX(RN), 
-      RING_1_TX    => i_RING_1_TX(RN), 
-
-      -- LEDs
-      QSFP_LED     => open,
-  
-      -- back transceivers
-      JESD204B_SERIAL_DATA => JESD204B_SERIAL_DATA,
-      JESD204B_REFCLK      => JESD204B_REFCLK,
-    
-      -- jesd204b syncronization signals
-      JESD204B_SYSREF => jesd204b_sysref,
-      JESD204B_SYNC_N => jesd204b_sync_n
-    );
-  END GENERATE;
-
-  -- Ring connections
-  gen_ring : FOR I IN 0 TO c_nof_rn -2 GENERATE
-    -- Connect consecutive nodes with RING interfaces (PCB)
-    i_RING_0_RX(I+1) <= i_RING_1_TX(I);
-    i_RING_1_RX(I)   <= i_RING_0_TX(I+1);
-  END GENERATE;
-  -- Connect first and last nodes with QSFP interface. 
-  i_QSFP_0_RX(0)          <= i_QSFP_0_TX(c_nof_rn-1);
-  i_QSFP_0_RX(c_nof_rn-1) <= i_QSFP_0_TX(0);
-  
-
-  ------------------------------------------------------------------------------
-  -- MM slave accesses via file IO
-  ------------------------------------------------------------------------------
-  tb_clk  <= NOT tb_clk AFTER c_tb_clk_period/2;    -- Testbench MM clock
-  
-  p_mm_stimuli : PROCESS
-    VARIABLE v_bsn                   : NATURAL;
-    VARIABLE v_sp_subband_power      : REAL;
-    VARIABLE v_W, v_C, v_A, v_X, v_B, v_A_even, v_B_even, v_SQ_offset: NATURAL;  -- array indicies
-  BEGIN
-    -- Wait for DUT power up after reset
-    WAIT FOR 1 us;
-
-    ----------------------------------------------------------------------------
-    -- Enable BSN
-    ----------------------------------------------------------------------------
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 3,                    0, tb_clk);
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 2,                    0, tb_clk);  -- Init BSN = 0
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 1,   c_nof_clk_per_sync, tb_clk);  -- nof_block_per_sync
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SOURCE_V2", 0,         16#00000003#, tb_clk);  -- Enable BSN at PPS
-    END LOOP;
-
-    -- Release PPS pulser, to get first PPS now and to start BSN source
-    WAIT FOR 1 us;
-    pps_rst <= '0';
-    proc_common_wait_until_hi_lo(ext_clk, ext_pps);
-
-    ----------------------------------------------------------------------------
-    -- Ring config
-    ----------------------------------------------------------------------------
-    -- Write ring configuration to all nodes.
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_INFO", 2, c_nof_rn, tb_clk); -- N_rn
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_INFO", 3, 0,        tb_clk); -- O_rn
-    END LOOP;
-
-    -- Start node specific settings
-    mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr, 0) & "REG_RING_INFO", 0, 1, tb_clk); -- use_ring_to_previous_rn = 1
-    mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr, 0) & "REG_RING_INFO", 1, 0, tb_clk); -- use_ring_to_next_rn = 0
-  
-    -- End node specific settings
-    mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + ((c_nof_rn-1) / c_quad), (c_nof_rn-1) MOD c_quad) & "REG_RING_INFO", 0, 0, tb_clk); -- use_ring_to_previous_rn = 0
-    mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + ((c_nof_rn-1) / c_quad), (c_nof_rn-1) MOD c_quad) & "REG_RING_INFO", 1, 1, tb_clk); -- use_ring_to_next_rn = 1
-     
-    -- Access scheme 3. Each RN creates packets and sends them along the ring.
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      FOR I IN 0 TO c_nof_lanes-1 LOOP
-        -- Set transport_nof_hops to N_rn-1 on all nodes.
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_RING_LANE_INFO_XST", I*2+1, c_nof_rn-1, tb_clk);
-      END LOOP;
-
-    ----------------------------------------------------------------------------
-    -- Disable unused streams in dp_bsn_align_v2
-    ----------------------------------------------------------------------------
-      FOR I IN 0 TO c_disturb_P_sq-1 LOOP
-        IF I >= c_P_sq THEN
-          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_ALIGN_V2_XSUB", I, 0, tb_clk);
-        END IF;
-      END LOOP;
-
-    ----------------------------------------------------------------------------
-    -- Crosslets Info
-    ----------------------------------------------------------------------------  
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_CROSSLETS_INFO", 0,  INTEGER(c_subband_sp_0), tb_clk); -- offset
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_CROSSLETS_INFO", 15, 0                      , tb_clk); -- stepsize
-    END LOOP;
-    ----------------------------------------------------------------------------
-    -- Enable WG
-    ----------------------------------------------------------------------------
-    --   0 : mode[7:0]           --> off=0, calc=1, repeat=2, single=3)
-    --       nof_samples[31:16]  --> <= c_ram_wg_size=1024
-    --   1 : phase[15:0]
-    --   2 : freq[30:0]
-    --   3 : ampl[16:0]
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      FOR I IN 0 TO c_disturb_S_pn-1 LOOP
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
-      END LOOP;
-    END LOOP;
-
-    -- Read current BSN
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
-    mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 1, current_bsn_wg(63 DOWNTO 32), tb_clk);
-    proc_common_wait_some_cycles(tb_clk, 1);
-    
-    -- Write scheduler BSN to trigger start of WG at next block
-    v_bsn := TO_UINT(current_bsn_wg) + 2;
-    ASSERT v_bsn <= c_bsn_start_wg REPORT "Too late to start WG: " & int_to_str(v_bsn) & " > " & int_to_str(c_bsn_start_wg) SEVERITY ERROR;
-
-
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SCHEDULER", 0, c_bsn_start_wg, tb_clk);  -- first write low then high part
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SCHEDULER", 1,              0, tb_clk);  -- assume v_bsn < 2**31-1
-
-      -- bsn_scheduler_xsub
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 1, c_ctrl_interval_size, tb_clk);  -- Interval size
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 2,       c_bsn_start_wg, tb_clk);  -- first write low then high part
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 3,                    0, tb_clk);  -- assume v_bsn < 2**31-1
-      mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_SYNC_SCHEDULER_XSUB", 0,                    1, tb_clk);  -- enable
-    END LOOP;
-
-    -- Wait for enough WG data and start of sync interval
-    mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                    -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 2,  -- this is the wait until condition
-                            c_disturb_T_sub, tb_clk);
-
-    ---------------------------------------------------------------------------
-    -- Read crosslet statistics
-    ---------------------------------------------------------------------------
-    -- Only checking P_sq index = 1 (correlating singnals from node 0 and 1) as P_sq index = 0 is verified in tb_disturb2_unb2b_station_xsub_one.
-    -- Also in simulation, the MM file IO is too slow to read and verify more than 1 P_sq during 1 sync interval. Also, this way the simulation duration is shorter.
-    FOR I IN 0 TO c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz) -1 LOOP
-      v_W := I MOD 2;
-      v_B := I / 2;
-      v_SQ_offset := 2**ceil_log2(c_disturb_N_crosslets_max * c_nof_complex * c_disturb_X_sq * (c_longword_sz/c_word_sz)); -- Address offset for next P_sq.
-      IF v_W=0 THEN
-        -- low part
-        mmf_mm_bus_rd(c_mm_file_ram_st_xsq, v_SQ_offset + I, rd_data, tb_clk);
-        xsub_stats_arr(v_B)(31 DOWNTO 0) <= rd_data;
-      ELSE      
-        -- high part
-        mmf_mm_bus_rd(c_mm_file_ram_st_xsq, v_SQ_offset + I, rd_data, tb_clk);
-        xsub_stats_arr(v_B)(63 DOWNTO 32) <= rd_data;
-      END IF;
-    END LOOP;
-    proc_common_wait_some_cycles(tb_clk, 1);
-
-    ---------------------------------------------------------------------------
-    -- Verify crosslet statistics
-    --------------------------------------------------------------------------- 
-    -- With all WGs having the same input all crosslets should be identical. Due to quantization cross talk
-    -- between the two real inputs of the filterbank the two signals in the output pairs per P_pfb differ 
-    -- slightly, therefore 3 slightly different correlation values are expected. 1 for each correlation 
-    -- between even indexed signals, 1 for odd indexed signals and 1 for correlations between even and odd 
-    -- indexed signals. This is verified by checking if these values are the same.
-    FOR I IN 0 TO c_nof_complex * c_disturb_X_sq -1 LOOP
-      v_C := I MOD 2;
-      v_X := I /c_nof_complex;
-      v_A := v_X MOD c_disturb_S_pn;
-      v_B := v_X / c_disturb_S_pn;
-      v_A_even := v_A MOD 2;
-      v_B_even := v_B MOD 2;
-      
-      -- Check real values of even indices
-      IF v_C=0 AND v_A_even=0 AND v_B_even=0 THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(0)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check real values of odd indices
-      IF v_C=0 AND v_A_even=1 AND v_B_even=1 THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex)) REPORT "correlation between odd indexed signals (re) is wrong at I = " & int_to_str(I)  SEVERITY ERROR; END IF;
-
-      -- Check real values of even correlated with odd indices
-      IF v_C=0 AND (v_A_even=0 XOR v_B_even=0) THEN 
-        ASSERT SIGNED(xsub_stats_arr(I)) = SIGNED(xsub_stats_arr(1 * c_nof_complex)) REPORT "correlation between even indexed signals (re) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-     
-      -- Using absolute value of the imaginary part (force positive) as the sign can be opposite when comparing A to B vs B to A.
-      -- Check im values of even indices
-      IF v_C=1 AND v_A_even=0 AND v_B_even=0 THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1))) REPORT "correlation between even indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check im values of odd indices
-      IF v_C=1 AND v_A_even=1 AND v_B_even=1 THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr((c_disturb_S_pn + 1) * c_nof_complex + 1))) REPORT "correlation between odd indexed signals (im) is wrong at I = " & int_to_str(I)  SEVERITY ERROR; END IF;
-
-      -- Check im values of even correlated with odd indices
-      IF v_C=1 AND (v_A_even=0 XOR v_B_even=0) THEN 
-        ASSERT ABS(SIGNED(xsub_stats_arr(I))) = ABS(SIGNED(xsub_stats_arr(1 * c_nof_complex + 1))) REPORT "correlation between even/odd indexed signals (im) is wrong at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-
-      -- Check if values are > 0
-      IF v_C=0 THEN ASSERT (SIGNED(xsub_stats_arr(I)) > TO_SIGNED(0, c_longword_w)) REPORT "correlation is 0 which is unexpected! at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-    END LOOP; 
- 
-    ----------------------------------------------------------------------------
-    -- Reporting BSN monitors of the bsn_align_v2
-    ----------------------------------------------------------------------------
-    FOR RN IN 0 TO c_nof_rn-1 LOOP
-      FOR J IN 0 TO c_P_sq-1 LOOP  -- bsn_monitor index
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+0, rd_data, tb_clk); --status bits
-        REPORT "sync_timeout = " & INTEGER'IMAGE(TO_UINT(rd_data(2 DOWNTO 2)))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+1, rd_data, tb_clk); --bsn at sync
-        REPORT "bsn_at_sync  = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+3, rd_data, tb_clk); --nof_sop
-        REPORT "nof_sop      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+4, rd_data, tb_clk); --nof_valid
-        REPORT "nof_valid    = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+5, rd_data, tb_clk); --nof_err
-        REPORT "nof_err      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-        mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_RX_ALIGN_XSUB", J * 8+6, rd_data, tb_clk); --latency
-        REPORT "latency      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_rx_align_xsub on RN_" & INTEGER'IMAGE(RN) & ", CH_" & INTEGER'IMAGE(J) & "." SEVERITY NOTE;  
-      END LOOP;
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 0, rd_data, tb_clk); --status bits
-      REPORT "sync_timeout = " & INTEGER'IMAGE(TO_UINT(rd_data(2 DOWNTO 2)))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE;  
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 1, rd_data, tb_clk); --bsn at sync
-      REPORT "bsn_at_sync  = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE;  
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 3, rd_data, tb_clk); --nof_sop
-      REPORT "nof_sop      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE;  
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 4, rd_data, tb_clk); --nof_valid
-      REPORT "nof_valid    = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE;  
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 5, rd_data, tb_clk); --nof_err
-      REPORT "nof_err      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; 
-      mmf_mm_bus_rd(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_BSN_MONITOR_V2_ALIGNED_XSUB", 6, rd_data, tb_clk); --latency
-      REPORT "latency      = " & INTEGER'IMAGE(TO_UINT(rd_data))  & " from reg_bsn_monitor_v2_aligned_xsub on RN_" & INTEGER'IMAGE(RN) & "." SEVERITY NOTE; 
-    END LOOP;
-
-    ---------------------------------------------------------------------------
-    -- End Simulation 
-    ---------------------------------------------------------------------------  
-    sim_done <= '1';
-    proc_common_wait_some_cycles(ext_clk, 100);
-    proc_common_stop_simulation(TRUE, ext_clk, sim_done, tb_end);
-    WAIT;
-  END PROCESS;
-
-END tb;
-- 
GitLab