diff --git a/libraries/base/dp/hdllib.cfg b/libraries/base/dp/hdllib.cfg
index 098d6d381b01823000c3e01c3cccaee5e8b57105..df7d5faad304285832f2a0ebc5dd69219470430f 100644
--- a/libraries/base/dp/hdllib.cfg
+++ b/libraries/base/dp/hdllib.cfg
@@ -31,6 +31,7 @@ synth_files =
     src/vhdl/dp_pipeline_ready.vhd
     src/vhdl/dp_block_resize.vhd
     src/vhdl/dp_block_validate_length.vhd
+    src/vhdl/dp_block_validate_bsn_at_sync.vhd
     src/vhdl/dp_block_select.vhd
     src/vhdl/mms_dp_block_select.vhd
     src/vhdl/dp_force_data_parallel.vhd
@@ -197,6 +198,7 @@ test_bench_files =
     tb/vhdl/tb_dp_block_select.vhd
     tb/vhdl/tb_dp_block_validate_length.vhd
     tb/vhdl/tb_dp_block_validate_err.vhd
+    tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
     tb/vhdl/tb_dp_block_reshape.vhd
     tb/vhdl/tb_dp_block_reshape_sync.vhd
     tb/vhdl/tb_dp_block_gen.vhd
@@ -278,6 +280,7 @@ test_bench_files =
     tb/vhdl/tb_tb_dp_block_select.vhd
     tb/vhdl/tb_tb_dp_block_validate_length.vhd
     tb/vhdl/tb_tb_dp_block_validate_err.vhd
+    tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
     tb/vhdl/tb_tb_dp_block_reshape.vhd
     tb/vhdl/tb_tb_dp_block_reshape_sync.vhd
     tb/vhdl/tb_tb_dp_block_gen.vhd
@@ -345,6 +348,7 @@ regression_test_vhdl =
     tb/vhdl/tb_tb_dp_block_select.vhd
     tb/vhdl/tb_tb_dp_block_validate_length.vhd
     tb/vhdl/tb_tb_dp_block_validate_err.vhd
+    tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
     tb/vhdl/tb_tb_dp_block_reshape.vhd
     tb/vhdl/tb_tb_dp_block_reshape_sync.vhd
     tb/vhdl/tb_tb_dp_block_gen.vhd
diff --git a/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..fab468f1765315784e74068cc35190ef0f045678
--- /dev/null
+++ b/libraries/base/dp/src/vhdl/dp_block_validate_bsn_at_sync.vhd
@@ -0,0 +1,214 @@
+-------------------------------------------------------------------------------
+--
+-- 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 vd Walle
+-- Purpose:
+-- The dp_block_validate_bsn_at_sync.vhd checks whether the remote block 
+-- sequence number (BSN) at the start of an in_sosi.sync interval is equal to 
+-- the local BSN at start of the local bs_sosi.sync interval.
+-- Description:
+-- The dp_block_validate_bsn_at_sync.vhd holds the local BSN that it gets at 
+-- each bs_sosi.sync and uses that when it receives the remote BSN at the 
+-- in_sosi.sync. The dp_validate_bsn_at_sync.vhd compares the entire 
+-- g_bsn_w bit BSN. If the remote BSN at in_sosi.sync and the local BSN at 
+-- bs_sosi.sync are:
+--   . Not equal, then discard all subsequent in_sosi blocks until the next 
+--     in_sosi .sync
+--   . Equal, then pass on all subsequent in_sosi blocks until the next 
+--     in_sosi.sync
+-- Only packets with channel = g_check_channel are checked. Other packets are 
+-- just passed on.
+-- The dp_block_validate_bsn_at_sync.vhd maintains a total number of 
+-- in_sosi.sync counter and a number of discarded sync intervals counter, that 
+-- can be read via the MM interface.
+-- Remarks:
+-------------------------------------------------------------------------------
+-- REGMAP
+-------------------------------------------------------------------------------
+--  wi                  Bits    R/W Name                  Default                                         
+--  =====================================================================
+--  0                   [31..0] RO  nof_sync_discarded      0x0    
+--  1                   [31..0] RO  nof_sync                0x0   
+--  =====================================================================
+-------------------------------------------------------------------------------
+LIBRARY IEEE, common_lib;
+USE IEEE.std_logic_1164.all;
+USE IEEE.numeric_std.all;
+USE work.dp_stream_pkg.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+
+ENTITY dp_block_validate_bsn_at_sync IS
+  GENERIC (
+    g_check_channel  : NATURAL := 0;
+    g_bsn_w          : NATURAL := c_dp_stream_bsn_w
+  );
+  PORT (
+    dp_rst       : IN  STD_LOGIC;
+    dp_clk       : IN  STD_LOGIC;
+    -- ST sink
+    in_sosi       : IN  t_dp_sosi;
+    bs_sosi       : IN  t_dp_sosi;
+    -- ST source
+    out_sosi      : OUT t_dp_sosi;
+
+    mm_rst       : IN  STD_LOGIC;
+    mm_clk       : IN  STD_LOGIC;
+
+    reg_mosi     : IN  t_mem_mosi := c_mem_mosi_rst;
+    reg_miso     : OUT t_mem_miso := c_mem_miso_rst
+  );
+END dp_block_validate_bsn_at_sync;
+
+ARCHITECTURE rtl OF dp_block_validate_bsn_at_sync IS
+
+  -- Define the actual size of the MM slave register
+  CONSTANT c_mm_reg : t_c_mem := (latency  => 1,
+                                  adr_w    => ceil_log2(2),
+                                  dat_w    => c_word_w,       -- Use MM bus data width = c_word_w = 32 for all MM registers
+                                  nof_dat  => 2, -- total counter + discarded counter
+                                  init_sl  => '0');
+
+  -- Registers in st_clk domain
+  SIGNAL count_reg     : STD_LOGIC_VECTOR(c_mm_reg.nof_dat*c_mm_reg.dat_w-1 DOWNTO 0) := (OTHERS=>'0');
+
+  SIGNAL cnt_clr       : STD_LOGIC;
+  SIGNAL cnt_sync      : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
+  SIGNAL cnt_sync_en   : STD_LOGIC;
+  SIGNAL cnt_disc      : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
+  SIGNAL cnt_disc_en   : STD_LOGIC;
+
+  SIGNAL out_valid       : STD_LOGIC;
+  SIGNAL bsn_ok          : STD_LOGIC;
+  SIGNAL bsn_ok_reg      : STD_LOGIC;
+  SIGNAL bsn_at_sync     : STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0);
+  SIGNAL bsn_at_sync_reg : STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0);
+
+  SIGNAL block_sosi       : t_dp_sosi;
+  
+BEGIN
+
+  u_common_spulse_cnt_clr : ENTITY common_lib.common_spulse
+  PORT MAP (
+    in_rst    => mm_rst,
+    in_clk    => mm_clk,
+    in_pulse  => reg_mosi.rd,
+    in_busy   => OPEN,
+    out_rst   => dp_rst,
+    out_clk   => dp_clk,
+    out_pulse => cnt_clr
+  );
+
+  -- sync counter
+  u_blk_counter : ENTITY common_lib.common_counter
+  GENERIC MAP (
+    g_width => c_word_w
+  )
+  PORT MAP ( 
+    rst => dp_rst,
+    clk => dp_clk,
+
+    cnt_clr => cnt_clr, 
+    cnt_en  => in_sosi.sync,
+    count   => cnt_sync
+  );
+
+  -- discarded counter
+  cnt_disc_en <= '1' WHEN in_sosi.sync = '1' AND bsn_ok = '0' ELSE '0';
+  u_disc_counter : ENTITY common_lib.common_counter
+  GENERIC MAP (
+    g_width => c_word_w
+  )
+  PORT MAP ( 
+    rst => dp_rst,
+    clk => dp_clk,
+  
+    cnt_clr => cnt_clr, 
+    cnt_en  => cnt_disc_en,
+    count   => cnt_disc
+  );
+
+  -- Register mapping
+  count_reg(  c_word_w - 1 DOWNTO        0 ) <= cnt_disc;  
+  count_reg(2*c_word_w - 1 DOWNTO c_word_w ) <= cnt_sync;  
+
+  u_reg : ENTITY common_lib.common_reg_r_w_dc
+  GENERIC MAP (
+    g_cross_clock_domain => TRUE,
+    g_readback           => FALSE,
+    g_reg                => c_mm_reg
+  )
+  PORT MAP (
+    -- Clocks and reset
+    mm_rst      => mm_rst,
+    mm_clk      => mm_clk,
+    st_rst      => dp_rst,
+    st_clk      => dp_clk,
+    
+    -- Memory Mapped Slave in mm_clk domain
+    sla_in      => reg_mosi,
+    sla_out     => reg_miso,
+    
+    -- MM registers in st_clk domain
+    reg_wr_arr  => OPEN,
+    reg_rd_arr  => OPEN,
+    in_reg      => count_reg,   -- read only
+    out_reg     => OPEN       -- no write
+  );
+
+  bsn_at_sync <= bs_sosi.bsn WHEN bs_sosi.sync = '1' ELSE bsn_at_sync_reg;
+  bsn_ok      <= bsn_ok_reg WHEN in_sosi.sync = '0' ELSE '1' WHEN in_sosi.bsn = bsn_at_sync ELSE '0';
+  out_valid   <= bsn_ok WHEN TO_UINT(in_sosi.channel) = g_check_channel ELSE '1';
+
+  p_dp_clk : PROCESS(dp_rst, dp_clk)
+  BEGIN
+    IF dp_rst='1' THEN
+      bsn_ok_reg      <= '1';
+      bsn_at_sync_reg <= (OTHERS => '0');
+    ELSIF rising_edge(dp_clk) THEN
+      bsn_ok_reg      <= bsn_ok;
+      bsn_at_sync_reg <= bsn_at_sync;
+    END IF;
+  END PROCESS;
+
+  p_sosi : PROCESS(in_sosi, out_valid)
+  BEGIN
+    block_sosi       <= in_sosi;
+    block_sosi.valid <= in_sosi.valid AND out_valid;
+    block_sosi.sop   <= in_sosi.sop   AND out_valid;
+    block_sosi.eop   <= in_sosi.eop   AND out_valid;
+    block_sosi.sync  <= in_sosi.sync  AND out_valid;
+  END PROCESS;
+  
+  u_pipeline : ENTITY work.dp_pipeline
+  GENERIC MAP (
+    g_pipeline   => 1  -- 0 for wires, > 0 for registers, 
+  )
+  PORT MAP (
+    rst          => dp_rst,
+    clk          => dp_clk,
+    -- ST sink
+    snk_in       => block_sosi,
+    -- ST source
+    src_out      => out_sosi
+  );
+
+END rtl;
diff --git a/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..8d831c78942e1e986006f0d1b4d5413698c9a9c6
--- /dev/null
+++ b/libraries/base/dp/tb/vhdl/tb_dp_block_validate_bsn_at_sync.vhd
@@ -0,0 +1,235 @@
+-------------------------------------------------------------------------------
+--
+-- 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 vd Walle
+-- Purpose:
+-- Test bench for dp_block_validate_bsn_at_sync.
+-- Description:
+-- Verifies the output sosi of the DUT with the expected sosi. 
+-- The TB also reads the register values via MM and verifies them against the 
+-- expected values.  
+-- Usage:
+-- . as 5
+-- . run -all
+
+LIBRARY IEEE, common_lib;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.tb_common_mem_pkg.ALL;
+USE common_lib.common_str_pkg.ALL;
+USE common_lib.common_lfsr_sequences_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE work.dp_stream_pkg.ALL;
+USE work.tb_dp_pkg.ALL;
+
+ENTITY tb_dp_block_validate_bsn_at_sync IS
+  GENERIC (
+    g_nof_blocks_per_sync  : NATURAL := 5;
+    g_nof_data_per_blk     : NATURAL := 6; 
+    g_bsn_init             : NATURAL := 7; -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync,
+    g_check_channel        : NATURAL := 8  -- channel to check, the channel field is a counter value. 
+  );
+END tb_dp_block_validate_bsn_at_sync;
+
+
+ARCHITECTURE tb OF tb_dp_block_validate_bsn_at_sync IS
+
+  ------------------------------------------------------------------------------
+  -- Clock & reset
+  ------------------------------------------------------------------------------
+  CONSTANT c_dp_clk_period  : TIME := 5 ns;
+  CONSTANT c_mm_clk_period  : TIME := 10 ns;
+
+  CONSTANT c_dut_pipeline   : NATURAL := 1;
+  CONSTANT c_gap_size       : NATURAL := 4;
+  CONSTANT c_nof_sync       : NATURAL := 5;
+  CONSTANT c_nof_blk        : NATURAL := g_nof_blocks_per_sync * c_nof_sync;
+  
+  SIGNAL dp_clk             : STD_LOGIC := '1';
+  SIGNAL mm_clk             : STD_LOGIC := '1';
+  SIGNAL rst                : STD_LOGIC := '1';
+  SIGNAL tb_end             : STD_LOGIC := '0';
+  
+  SIGNAL stimuli_end        : STD_LOGIC;
+  SIGNAL stimuli_sosi       : t_dp_sosi;
+  SIGNAL stimuli_siso       : t_dp_siso := c_dp_siso_rdy;
+  SIGNAL bs_sosi            : t_dp_sosi;
+  SIGNAL bs_siso            : t_dp_siso := c_dp_siso_rdy;
+  SIGNAL stimuli_cnt_reg    : NATURAL;
+  SIGNAL stimuli_cnt        : NATURAL;
+  SIGNAL verify_sosi        : t_dp_sosi;
+  SIGNAL verify_siso        : t_dp_siso := c_dp_siso_rdy;
+  SIGNAL reference_cnt      : NATURAL;
+  SIGNAL reference_cnt_reg  : NATURAL;
+  SIGNAL reference_sosi     : t_dp_sosi;
+  SIGNAL reference_siso     : t_dp_siso := c_dp_siso_rdy;
+  SIGNAL reg_mosi           : t_mem_mosi := c_mem_mosi_rst;
+  SIGNAL reg_miso           : t_mem_miso := c_mem_miso_rst;
+BEGIN
+  
+  ------------------------------------------------------------------------------
+  -- Clock & reset
+  ------------------------------------------------------------------------------
+  dp_clk <= (NOT dp_clk) OR tb_end AFTER c_dp_clk_period/2;
+  mm_clk <= (NOT mm_clk) OR tb_end AFTER c_mm_clk_period/2;
+  rst <= '1', '0' AFTER c_dp_clk_period*7;
+  
+  ------------------------------------------------------------------------------
+  -- Stimuli: 
+  ------------------------------------------------------------------------------
+
+  -- Generate in_sosi with data frames
+  u_stimuli_in : ENTITY work.dp_stream_stimuli
+  GENERIC MAP (
+    g_sync_period => g_nof_blocks_per_sync,
+    g_nof_repeat  => c_nof_blk,
+    g_pkt_len     => g_nof_data_per_blk,
+    g_pkt_gap     => c_gap_size,
+    g_channel_init=> 0,
+    g_bsn_init    => TO_DP_BSN(0)
+  )
+  PORT MAP (
+    rst               => rst,
+    clk               => dp_clk,
+  
+    -- Generate stimuli
+    src_in            => stimuli_siso,
+    src_out           => stimuli_sosi,
+
+    -- End of stimuli
+    tb_end            => stimuli_end
+  );
+
+  -- Generate bs_sosi with data frames
+  u_stimuli_bs : ENTITY work.dp_stream_stimuli
+  GENERIC MAP (
+    g_sync_period => g_nof_blocks_per_sync,
+    g_nof_repeat  => c_nof_blk,
+    g_pkt_len     => g_nof_data_per_blk,
+    g_pkt_gap     => c_gap_size,
+    g_channel_init=> 0,
+    g_bsn_init    => TO_DP_BSN(g_bsn_init)
+  )
+  PORT MAP (
+    rst               => rst,
+    clk               => dp_clk,
+  
+    -- Generate stimuli
+    src_in            => bs_siso,
+    src_out           => bs_sosi,
+
+    -- End of stimuli
+    tb_end            => OPEN
+  );
+  ------------------------------------------------------------------------------
+  -- DUT
+  ------------------------------------------------------------------------------     
+  u_dut : ENTITY work.dp_block_validate_bsn_at_sync
+  GENERIC MAP (
+    g_check_channel => g_check_channel
+  )
+  PORT MAP (
+    dp_rst       => rst,
+    dp_clk       => dp_clk,
+
+    mm_rst       => rst,
+    mm_clk       => mm_clk,
+    -- ST sink
+    in_sosi      => stimuli_sosi,
+    bs_sosi      => bs_sosi,
+    -- ST source
+    out_sosi     => verify_sosi,
+
+    reg_mosi     => reg_mosi,
+    reg_miso     => reg_miso
+  );
+
+  
+  ------------------------------------------------------------------------------
+  -- Verification
+  ------------------------------------------------------------------------------
+  
+  u_pipeline : ENTITY work.dp_pipeline
+  GENERIC MAP (
+    g_pipeline   => c_dut_pipeline
+  )
+  PORT MAP (
+    rst         => rst,
+    clk         => dp_clk,
+    -- ST sink
+    snk_out     => OPEN,
+    snk_in      => stimuli_sosi,
+    -- ST source
+    src_in      => reference_siso,
+    src_out     => reference_sosi 
+  );
+  
+  reference_cnt_reg <= reference_cnt WHEN rising_edge(dp_clk);
+  reference_cnt     <= reference_cnt_reg + 1 WHEN reference_sosi.sync='1' ELSE reference_cnt_reg;
+  
+  p_verify : PROCESS(dp_clk)
+  VARIABLE v_valid_blk : BOOLEAN := TRUE;
+  BEGIN
+    IF rising_edge(dp_clk) THEN
+      IF reference_sosi.sop = '1' THEN
+        IF g_bsn_init >= g_nof_blocks_per_sync AND TO_UINT(reference_sosi.channel) = g_check_channel THEN
+          v_valid_blk := FALSE;
+        ELSE
+          v_valid_blk := TRUE;
+        END IF;
+      END IF;
+        
+      IF v_valid_blk THEN -- we expect a block
+        ASSERT verify_sosi  = reference_sosi   REPORT "Unexpected difference between in / out sosi" SEVERITY ERROR;
+      ELSE -- we expect no block
+        ASSERT verify_sosi.valid = '0' REPORT "Wrong, valid is not '0' which is unexpected." SEVERITY ERROR; 
+        ASSERT verify_sosi.sop   = '0' REPORT "Wrong, sop is not '0' which is unexpected." SEVERITY ERROR; 
+        ASSERT verify_sosi.eop   = '0' REPORT "Wrong, eop is not '0' which is unexpected." SEVERITY ERROR; 
+      END IF;
+    END IF;
+  END PROCESS;
+
+  p_verify_mm : PROCESS
+  BEGIN
+    proc_common_wait_until_lo_hi(dp_clk, stimuli_end);
+    proc_common_wait_some_cycles(dp_clk, c_dut_pipeline + 1);
+    proc_common_wait_some_cycles(mm_clk, 1);
+    proc_mem_mm_bus_rd(1, mm_clk, reg_miso, reg_mosi);
+    proc_mem_mm_bus_rd_latency(1, mm_clk);
+    ASSERT c_nof_sync = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong total sync count" SEVERITY ERROR;
+
+    proc_mem_mm_bus_rd(0, mm_clk, reg_miso, reg_mosi);
+    proc_mem_mm_bus_rd_latency(1, mm_clk);
+    IF g_bsn_init = g_nof_blocks_per_sync THEN -- should have c_nof_sync discarded sync
+      ASSERT c_nof_sync = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
+    ELSIF g_bsn_init > g_nof_blocks_per_sync THEN -- should have c_nof_sync -1 discarded sync
+      ASSERT c_nof_sync-1 = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
+    ELSE -- 0 discarded sync
+      ASSERT 0 = TO_UINT(reg_miso.rddata(c_word_w-1 DOWNTO 0)) REPORT "Wrong discarded sync count" SEVERITY ERROR;
+    END IF;
+    proc_common_wait_some_cycles(dp_clk, 10);
+    tb_end <= '1';
+    WAIT;
+  END PROCESS;
+  
+END tb;
diff --git a/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd b/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..6828a0964eebc0d01f5d017ed4866020a4ce2b1d
--- /dev/null
+++ b/libraries/base/dp/tb/vhdl/tb_tb_dp_block_validate_bsn_at_sync.vhd
@@ -0,0 +1,55 @@
+-------------------------------------------------------------------------------
+--
+-- 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 vd Walle
+-- Purpose:
+-- Verify multiple variations of tb_dp_block_validate_bsn_at_sync
+-- Usage:
+-- > as 3
+-- > run -all
+
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY tb_tb_dp_block_validate_bsn_at_sync IS
+END tb_tb_dp_block_validate_bsn_at_sync;
+
+
+ARCHITECTURE tb OF tb_tb_dp_block_validate_bsn_at_sync IS
+
+  SIGNAL tb_end : STD_LOGIC := '0';  -- declare tb_end to avoid 'No objects found' error on 'when -label tb_end'
+  
+  CONSTANT c_blk_per_sync   : NATURAL := 5;
+  CONSTANT c_data_per_blk   : NATURAL := 9;
+
+BEGIN
+--    g_nof_blocks_per_sync  : NATURAL := 5;
+--    g_nof_data_per_blk     : NATURAL := 6; 
+--    g_bsn_init             : NATURAL := 7; -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync,
+--    g_check_channel        : NATURAL := 8  -- channel to check, the channel field is a counter value. 
+
+  u_smaller    : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 0,   8); -- g_bsn_init < g_nof_blocks_per_sync
+  u_equal      : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 5,   8); -- g_bsn_init = g_nof_blocks_per_sync
+  u_larger     : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 8,   8); -- g_bsn_init > g_nof_blocks_per_sync
+  u_ch_on_sync : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 5,  10); -- g_check_channel MOD c_blk_per_sync = 0,
+  u_no_ch      : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, 8, 500); -- channel will never reach 500
+  
+END tb;