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
index 173423f11bf7e4cc2dc316ceb9b864175c5c5065..52843298d1163625c6e04489a017bf6d0555d035 100644
--- 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
@@ -133,7 +133,6 @@ BEGIN
     );
 
   -- discarded counter
-  cnt_discarded_en <= '1' WHEN in_sosi.sync = '1' AND bsn_ok = '0' ELSE '0';
   u_discarded_counter : ENTITY common_lib.common_counter
   GENERIC MAP (
     g_width => c_word_w,
@@ -187,19 +186,48 @@ BEGIN
     -- MM registers in st_clk domain
     reg_wr_arr  => OPEN,
     reg_rd_arr  => OPEN,
-    in_reg      => count_reg,   -- read only
+    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;
+  p_bsn_check : PROCESS(bs_sosi, in_sosi, bsn_at_sync_reg, bsn_ok_reg)
+    VARIABLE v_bsn_ok      : STD_LOGIC;
+    VARIABLE v_bsn_at_sync : STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0);  
+  BEGIN
+    v_bsn_at_sync := bsn_at_sync_reg;     
+    v_bsn_ok      := bsn_ok_reg;
+    out_valid     <= out_valid_reg;
+ 
+    IF bs_sosi.sync = '1' THEN
+      v_bsn_at_sync := bs_sosi.bsn;
+    END IF;
 
-  bsn_ok      <= bsn_ok_reg WHEN in_sosi.sync = '0' OR TO_UINT(in_sosi.channel) /= g_check_channel ELSE 
-                 '1'        WHEN in_sosi.bsn = bsn_at_sync ELSE '0';
+    IF in_sosi.sync = '1' AND TO_UINT(in_sosi.channel) = g_check_channel THEN 
+      IF in_sosi.bsn = v_bsn_at_sync THEN
+        v_bsn_ok := '1';
+      ELSE
+        v_bsn_ok := '0';
+      END IF;
+    END IF;
 
-  out_valid   <= '1'    WHEN in_sosi.sop = '1' AND TO_UINT(in_sosi.channel) /= g_check_channel ELSE
-                 bsn_ok WHEN in_sosi.sop = '1' AND TO_UINT(in_sosi.channel) = g_check_channel ELSE
-                 out_valid_reg;
+    IF in_sosi.sop = '1' THEN
+      IF TO_UINT(in_sosi.channel) = g_check_channel THEN
+        out_valid <= v_bsn_ok;
+      ELSE
+        out_valid <= '1';
+      END IF;
+    END IF;
+ 
+    IF TO_UINT(in_sosi.channel) = g_check_channel THEN
+      cnt_discarded_en <= in_sosi.sync AND NOT v_bsn_ok;
+    ELSE
+      cnt_discarded_en <= '0';
+    END IF;
 
+    bsn_ok      <= v_bsn_ok;
+    bsn_at_sync <= v_bsn_at_sync;
+  END PROCESS;
+  
   p_dp_clk : PROCESS(dp_rst, dp_clk)
   BEGIN
     IF dp_rst='1' THEN
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
index 9483cfab0d228c49774aaaadea4e3ee978b62d30..5269a6923cb0b3a05c6b651dd4074591d49a2c04 100644
--- 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
@@ -46,8 +46,7 @@ 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. 
+    g_bsn_init             : NATURAL := 7  -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync.
   );
 END tb_dp_block_validate_bsn_at_sync;
 
@@ -64,6 +63,7 @@ ARCHITECTURE tb OF tb_dp_block_validate_bsn_at_sync IS
   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;
+  CONSTANT c_check_channel  : NATURAL := g_nof_blocks_per_sync;
   
   SIGNAL dp_clk             : STD_LOGIC := '1';
   SIGNAL mm_clk             : STD_LOGIC := '1';
@@ -146,7 +146,7 @@ BEGIN
   ------------------------------------------------------------------------------     
   u_dut : ENTITY work.dp_block_validate_bsn_at_sync
   GENERIC MAP (
-    g_check_channel => g_check_channel
+    g_check_channel => c_check_channel
   )
   PORT MAP (
     dp_rst       => rst,
@@ -192,7 +192,7 @@ BEGIN
   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
+        IF g_bsn_init >= g_nof_blocks_per_sync AND TO_UINT(reference_sosi.channel) = c_check_channel THEN
           v_valid_blk := FALSE;
         ELSE
           v_valid_blk := TRUE;
@@ -220,10 +220,8 @@ BEGIN
 
     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;
+    IF g_bsn_init >= g_nof_blocks_per_sync THEN -- should have 1 discarded sync
+      ASSERT 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;
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
index 6828a0964eebc0d01f5d017ed4866020a4ce2b1d..8832d49c0fd983f40f24ff114ce48be1d0fb7821 100644
--- 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
@@ -43,13 +43,10 @@ ARCHITECTURE tb OF tb_tb_dp_block_validate_bsn_at_sync IS
 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
+--    g_bsn_init             : NATURAL := 7 -- >= g_nof_blocks_per_sync for discarded sync, < g_nof_blocks_per_sync for no discarded sync.
+
+  u_smaller    : ENTITY work.tb_dp_block_validate_bsn_at_sync GENERIC MAP(c_blk_per_sync, c_data_per_blk, c_blk_per_sync - 4); -- 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, c_blk_per_sync);     -- 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, c_blk_per_sync + 4); -- g_bsn_init > g_nof_blocks_per_sync
   
 END tb;