diff --git a/libraries/base/diag/src/vhdl/diag_block_gen.vhd b/libraries/base/diag/src/vhdl/diag_block_gen.vhd
index 678b55c471096d9927d0cf3818bc1d5c35c489f8..6935c8ddb5f832b8fd6e284a6c93483dd4d3f0ff 100644
--- a/libraries/base/diag/src/vhdl/diag_block_gen.vhd
+++ b/libraries/base/diag/src/vhdl/diag_block_gen.vhd
@@ -96,7 +96,8 @@ entity diag_block_gen is
     ctrl_hold    : out t_diag_block_gen;  -- hold current active ctrl
     en_sync      : in  std_logic := '1';
     out_siso     : in  t_dp_siso := c_dp_siso_rdy;
-    out_sosi     : out t_dp_sosi
+    out_sosi     : out t_dp_sosi;
+    out_bsn      : out std_logic_vector(c_diag_bg_bsn_init_w-1 downto 0)
   );
   
 end diag_block_gen;
@@ -296,11 +297,13 @@ begin
     out_sosi_i.re    <= RESIZE_DP_DSP_DATA(buf_rddat(g_buf_dat_w/2-1 downto 0));               -- treat as signed
     out_sosi_i.im    <= RESIZE_DP_DSP_DATA(buf_rddat(g_buf_dat_w-1   downto g_buf_dat_w/2));   -- treat as signed
     out_sosi_i.data  <= RESIZE_DP_DATA(    buf_rddat(g_buf_dat_w-1   downto 0));               -- treat as unsigned
-    
+
     out_sosi <= out_sosi_i;
     buf_addr <= TO_UVEC(r.mem_cnt, g_buf_addr_w);
     buf_rden <= r.rd_ena;
 
+    out_bsn <= rin.bsn_cnt when rising_edge(clk) and rin.sop = '1';
+
     ctrl_hold <= r.ctrl_hold;
  
 end rtl;
diff --git a/libraries/base/diag/src/vhdl/diag_block_gen_reg.vhd b/libraries/base/diag/src/vhdl/diag_block_gen_reg.vhd
index 198c4fcddcd4c9da8f485fa79dff385c3ed17998..e5e618122bcf801d80f3a584175df6a138e91091 100644
--- a/libraries/base/diag/src/vhdl/diag_block_gen_reg.vhd
+++ b/libraries/base/diag/src/vhdl/diag_block_gen_reg.vhd
@@ -39,7 +39,8 @@ entity diag_block_gen_reg is
     dp_clk  : in  std_logic;
     mm_mosi : in  t_mem_mosi;                  -- Memory Mapped Slave in mm_clk domain
     mm_miso : out t_mem_miso       := c_mem_miso_rst;
-    bg_ctrl : out t_diag_block_gen := g_diag_block_gen_rst                        
+    bg_ctrl : out t_diag_block_gen := g_diag_block_gen_rst;
+    bg_bsn  : in  std_logic_vector(c_diag_bg_bsn_init_w-1 downto 0)
   ); 
 end diag_block_gen_reg;  
 
@@ -109,9 +110,9 @@ begin
           when 5 =>
             mm_miso.rddata(c_diag_bg_mem_high_adrs_w      -1 downto 0) <= mm_bg_ctrl.mem_high_adrs;
           when 6 =>
-            mm_miso.rddata(31 downto 0) <= mm_bg_ctrl.bsn_init(31 downto 0);
+            mm_miso.rddata(31 downto 0) <= bg_bsn(31 downto 0);
           when 7 =>
-            mm_miso.rddata(31 downto 0) <= mm_bg_ctrl.bsn_init(63 downto 32);  
+            mm_miso.rddata(31 downto 0) <= bg_bsn(63 downto 32);
           when others => null;  -- not used MM addresses
         end case;
       end if; 
diff --git a/libraries/base/diag/src/vhdl/mms_diag_block_gen.vhd b/libraries/base/diag/src/vhdl/mms_diag_block_gen.vhd
index 93839197c820227c38c773b7a93429bef4e087a6..2d3d2ef172b27d33b71839639e905eb346e6bc70 100644
--- a/libraries/base/diag/src/vhdl/mms_diag_block_gen.vhd
+++ b/libraries/base/diag/src/vhdl/mms_diag_block_gen.vhd
@@ -174,7 +174,8 @@ ARCHITECTURE rtl OF mms_diag_block_gen IS
   SIGNAL ram_bg_data_mosi_arr  : t_mem_mosi_arr(g_nof_streams   -1 DOWNTO 0);
   SIGNAL ram_bg_data_miso_arr  : t_mem_miso_arr(g_nof_streams   -1 DOWNTO 0); 
   SIGNAL bg_ctrl               : t_diag_block_gen;
-  
+  SIGNAL bg_bsn                : STD_LOGIC_VECTOR(c_diag_bg_bsn_init_w-1 downto 0);
+
   SIGNAL mux_ctrl              : NATURAL RANGE 0 TO c_mux_nof_input-1;
   SIGNAL mux_snk_out_2arr_2    : t_dp_siso_2arr_2(g_nof_streams-1 DOWNTO 0);  -- [g_nof_streams-1:0][c_mux_nof_input-1:0] = [1:0]
   SIGNAL mux_snk_in_2arr_2     : t_dp_sosi_2arr_2(g_nof_streams-1 DOWNTO 0);  -- [g_nof_streams-1:0][c_mux_nof_input-1:0] = [1:0]
@@ -216,7 +217,8 @@ BEGIN
       dp_clk  => dp_clk,
       mm_mosi => reg_bg_ctrl_mosi,
       mm_miso => reg_bg_ctrl_miso,
-      bg_ctrl => bg_ctrl                       
+      bg_ctrl => bg_ctrl,
+      bg_bsn  => bg_bsn
     );
     
     -- Combine the internal array of mm interfaces for the bg_data to one array that is connected to the port of the MM bus
@@ -288,7 +290,8 @@ BEGIN
         ctrl_hold  => bg_ctrl_hold_arr(I),  -- active BG control can differ in time per stream
         en_sync    => en_sync,
         out_siso   => bg_src_in_arr(I),
-        out_sosi   => bg_src_out_arr(I)
+        out_sosi   => bg_src_out_arr(I),
+        out_bsn    => bg_bsn
       );
     END GENERATE;
   END GENERATE;
diff --git a/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd b/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd
index 946c94c3b784fe8c59714861cbe9a0319d7edef2..20cc5d3d49a8c6e2ea87a9d746ea78892f1a998b 100644
--- a/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd
+++ b/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd
@@ -158,9 +158,11 @@ ARCHITECTURE tb OF tb_eth_tester IS
   SIGNAL eth_rxp             : STD_LOGIC;
   SIGNAL eth_corrupt         : STD_LOGIC := '0';
 
-  -- Use same bg_ctrl for all streams, this provides sufficient test coverage
+  -- Use same bg_ctrl for all others streams, this provides sufficient test coverage
   SIGNAL bg_ctrl_arr         : t_diag_block_gen_integer_arr(g_nof_streams-1 DOWNTO 0);
 
+  SIGNAL bg_bsn              : STD_LOGIC_VECTOR(c_diag_bg_bsn_init_w-1 downto 0);
+
   SIGNAL tx_fifo_rd_emp_arr  : STD_LOGIC_VECTOR(g_nof_streams-1 DOWNTO 0);
 
   -- ETH UDP data path interface
@@ -360,6 +362,22 @@ BEGIN
     END IF;
     ASSERT c_bg_nof_bps_total < 10.0**9 REPORT "Tx flow control will keep ETH bitrate < 1Gbps." SEVERITY NOTE;
 
+    -------------------------------------------------------------------------
+    -- Manually verify: BG nof blocks and BSN
+    -------------------------------------------------------------------------
+    FOR I IN g_nof_streams-1 DOWNTO 0 LOOP
+      v_offset := I * c_diag_bg_reg_adr_span;
+
+      -- Read current BSN from BG
+      proc_mem_mm_bus_rd(v_offset + 6, mm_clk, reg_bg_ctrl_cipo, reg_bg_ctrl_copi);  -- low part
+      proc_mem_mm_bus_rd_latency(1, mm_clk);
+      bg_bsn(31 DOWNTO 0) <= reg_bg_ctrl_cipo.rddata(c_word_w-1 DOWNTO 0);
+      proc_mem_mm_bus_rd(v_offset + 7, mm_clk, reg_bg_ctrl_cipo, reg_bg_ctrl_copi);  -- high part
+      proc_mem_mm_bus_rd_latency(1, mm_clk);
+      bg_bsn(63 DOWNTO 32) <= reg_bg_ctrl_cipo.rddata(c_word_w-1 DOWNTO 0);
+      proc_common_wait_some_cycles(mm_clk, 1);
+    END LOOP;
+
     -------------------------------------------------------------------------
     -- Verification: Total counts
     -------------------------------------------------------------------------