diff --git a/libraries/base/dp/tb/vhdl/tb_mms_dp_bsn_source_v2.vhd b/libraries/base/dp/tb/vhdl/tb_mms_dp_bsn_source_v2.vhd
index bd571b81e9033627b0983c66739032d173fd0cce..4f4439c85daee6a8e4cdee465f4bd665731b5e43 100644
--- a/libraries/base/dp/tb/vhdl/tb_mms_dp_bsn_source_v2.vhd
+++ b/libraries/base/dp/tb/vhdl/tb_mms_dp_bsn_source_v2.vhd
@@ -53,11 +53,11 @@ architecture tb of tb_mms_dp_bsn_source_v2 is
 
   constant c_block_size                 : natural := 100;
   constant c_nof_block_per_sync         : natural := 15;
-  constant c_sync_interval              : natural := c_nof_block_per_sync * c_block_size;
-  constant c_bsn_init                   : natural := c_nof_block_per_sync;
+  constant c_nof_clk_per_sync           : natural := c_nof_block_per_sync * c_block_size;
+  constant c_bsn_init                   : natural := 7;
 
   constant c_mm_addr_dp_on              : natural := 0;
-  constant c_mm_addr_nof_block_per_sync : natural := 1;
+  constant c_mm_addr_nof_clk_per_sync   : natural := 1;
   constant c_mm_addr_bsn_lo             : natural := 2;
   constant c_mm_addr_bsn_hi             : natural := 3;
   constant c_mm_addr_bsn_time_offset    : natural := 4;
@@ -75,8 +75,6 @@ architecture tb of tb_mms_dp_bsn_source_v2 is
 
   signal mm_dp_on_status      : natural;
   signal mm_bsn               : std_logic_vector(c_dp_stream_bsn_w - 1 downto 0) := (others => '0');
-  signal mm_bsn_prev          : std_logic_vector(c_dp_stream_bsn_w - 1 downto 0) := (others => '0');
-
   signal mm_bsn_time_offset   : std_logic_vector(c_bsn_time_offset_w - 1 downto 0) := (others => '0');
 
   signal mm_mosi              : t_mem_mosi := c_mem_mosi_rst;
@@ -93,15 +91,15 @@ begin
      proc_common_wait_some_cycles(clk, 10);
 
      -- Write initial BSN and number of block per sync interval
-     proc_mem_mm_bus_wr(c_mm_addr_bsn_lo,                       c_bsn_init, clk, mm_miso, mm_mosi);
-     proc_mem_mm_bus_wr(c_mm_addr_bsn_hi,                                0, clk, mm_miso, mm_mosi);  -- must also write hi part to trigger transfer accross clock domain
-     proc_mem_mm_bus_wr(c_mm_addr_nof_block_per_sync, c_nof_block_per_sync, clk, mm_miso, mm_mosi);
+     -- .   -- must also write hi part to trigger transfer across clock domain
+     proc_mem_mm_bus_wr(c_mm_addr_bsn_lo,                   c_bsn_init, clk, mm_miso, mm_mosi);
+     proc_mem_mm_bus_wr(c_mm_addr_bsn_hi,                            0, clk, mm_miso, mm_mosi);
+     proc_mem_mm_bus_wr(c_mm_addr_nof_clk_per_sync, c_nof_clk_per_sync, clk, mm_miso, mm_mosi);
      proc_common_wait_some_cycles(clk, c_cross_clock_domain_latency);
 
      --------------------------------------------------------------------------
      -- DP on immediate
      --------------------------------------------------------------------------
-
      -- Wait until after PPS
      proc_common_wait_until_hi_lo(clk, pps);
 
@@ -118,19 +116,21 @@ begin
        report "Wrong DP on status, expected DP on immediate."
        severity ERROR;
 
-     -- Read BSN twice in same PPS interval
-     proc_common_wait_some_cycles(clk, c_block_size);
-
+     -- Read BSN in first sync interval
+     proc_common_wait_some_cycles(clk, c_nof_clk_per_sync / 2);
      proc_mem_mm_bus_rd(c_mm_addr_bsn_lo, clk, mm_miso, mm_mosi);
      proc_mem_mm_bus_rd_latency(1, clk);
      mm_bsn(c_word_w - 1 downto 0) <= mm_miso.rddata(c_word_w - 1 downto 0);
      proc_mem_mm_bus_rd(c_mm_addr_bsn_hi, clk, mm_miso, mm_mosi);
      proc_mem_mm_bus_rd_latency(1, clk);
      mm_bsn(2 * c_word_w - 1 downto c_word_w) <= mm_miso.rddata(c_word_w - 1 downto 0);
+     proc_common_wait_some_cycles(clk, 1);
+     assert TO_UINT(mm_bsn) = c_bsn_init
+       report "Wrong BSN at sync in first interval."
+       severity ERROR;
 
-     proc_common_wait_some_cycles(clk, c_block_size);
-
-     mm_bsn_prev <= mm_bsn;
+     -- Read BSN in second sync interval
+     proc_common_wait_some_cycles(clk, c_nof_clk_per_sync);
      proc_mem_mm_bus_rd(c_mm_addr_bsn_lo, clk, mm_miso, mm_mosi);
      proc_mem_mm_bus_rd_latency(1, clk);
      mm_bsn(c_word_w - 1 downto 0) <= mm_miso.rddata(c_word_w - 1 downto 0);
@@ -138,15 +138,12 @@ begin
      proc_mem_mm_bus_rd_latency(1, clk);
      mm_bsn(2 * c_word_w - 1 downto c_word_w) <= mm_miso.rddata(c_word_w - 1 downto 0);
      proc_common_wait_some_cycles(clk, 1);
-
-     -- Uncomment appropriate assert line dependent on fixed code for capture_bsn in mms_dp_bsn_source:
-     --ASSERT mm_bsn_prev<mm_bsn REPORT "Wrong BSN, expected incrementing BSN during PPS or sync interval." SEVERITY ERROR;
-     assert mm_bsn_prev = mm_bsn
-       report "Wrong BSN, expected constant BSN during PPS or sync interval."
+     assert TO_UINT(mm_bsn) = c_bsn_init + c_nof_block_per_sync
+       report "Wrong BSN at sync in second interval."
        severity ERROR;
 
      -- Run few sync intervals
-     proc_common_wait_some_cycles(clk, 3 * c_sync_interval);
+     proc_common_wait_some_cycles(clk, 3 * c_nof_clk_per_sync);
 
      -- Write DP off
      proc_mem_mm_bus_wr(c_mm_addr_dp_on, c_mm_dp_off, clk, mm_miso, mm_mosi);
@@ -184,14 +181,14 @@ begin
        report "Wrong offset, expected 5"
        severity ERROR;
 
-     proc_common_wait_some_cycles(clk, c_sync_interval);
+     proc_common_wait_some_cycles(clk, c_nof_clk_per_sync);
      tb_end <= '1';
      wait;
   end process;
 
   u_dut : entity work.mms_dp_bsn_source_v2
   generic map (
-    g_cross_clock_domain => true,  -- use FALSE when mm_clk and st_clk are the same, else use TRUE to cross the clock domain
+    g_cross_clock_domain => true,
     g_block_size         => c_block_size,
     g_nof_clk_per_sync   => 200 * 10**6,  -- overrule via MM write
     g_bsn_w              => c_dp_stream_bsn_w