diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
index 4de55d25959335102e7ca10392fc9daf5ea01253..751119c7d17c5a81dc1d7a0544e5f43001d2cf3c 100644
--- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
+++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_statistics_offload.vhd
@@ -55,8 +55,8 @@ ENTITY tb_sdp_statistics_offload IS
 END tb_sdp_statistics_offload;
 
 ARCHITECTURE tb OF tb_sdp_statistics_offload IS
-  CONSTANT c_dp_clk_period        : TIME := 5 ns;     -- 200 MHz
-  CONSTANT c_mm_clk_period        : TIME := 20 ns;    -- 50 MHz
+  CONSTANT c_dp_clk_period : TIME := 5 ns;     -- 200 MHz
+  CONSTANT c_mm_clk_period : TIME := 20 ns;    -- 50 MHz
 
   CONSTANT c_cross_clock_domain_latency : NATURAL := 20;
 
@@ -64,29 +64,30 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
   CONSTANT c_ip_src_addr  : STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0) := x"0A090807";
   CONSTANT c_udp_src_port : STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0) := x"D001";
 
-  -- used mm_adresses on mm bus "enable_mosi/miso"
+  -- Used mm_adresses on mm bus "enable_mosi/miso".
   CONSTANT c_reg_enable_mm_addr_enable : NATURAL := 0;
-  -- used mm_adresses on mm bus "hdr_dat_mosi/miso"
+  
+  -- Used mm_adresses on mm bus "hdr_dat_mosi/miso".
   CONSTANT c_hdr_dat_mm_addr_eth_src_mac  : NATURAL := 1;
   CONSTANT c_hdr_dat_mm_addr_ip_src_addr  : NATURAL := 13;
   CONSTANT c_hdr_dat_mm_addr_udp_src_port : NATURAL := 15;
   
-  -- Define SST RAM structure
+  -- Define SST RAM structure.
   CONSTANT c_nof_data  : NATURAL := 512;
   CONSTANT c_data_size : NATURAL := 2;
   CONSTANT c_step_size : NATURAL := 4;
   
-  -- Define SST RAM size for g_nof_signal_inputs_per_pn
+  -- Define SST RAM size for g_nof_signal_inputs_per_pn.
   CONSTANT c_ram_size  : NATURAL := c_nof_data * c_data_size * g_nof_signal_inputs_per_pn;
   CONSTANT c_ram_w     : NATURAL := ceil_log2(c_ram_size);
   --CONSTANT c_ram_buf   : t_c_mem := (c_mem_ram_rd_latency, c_ram_w,  32, 2**c_ram_w, 'X');
   CONSTANT c_ram_buf   : t_c_mem := (1, c_ram_w,  32, 2**c_ram_w, 'X');
 
-  -- Define block timing
-  CONSTANT c_nof_block_per_sync : NATURAL := 20;  -- sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval
-  CONSTANT c_nof_clk_per_block : NATURAL := c_nof_data * c_data_size;
+  -- Define block timing.
+  CONSTANT c_nof_block_per_sync : NATURAL := 20;  -- Sufficient to fit more than g_nof_signal_inputs_per_pn offload packets per sync interval.
+  CONSTANT c_nof_clk_per_block  : NATURAL := c_nof_data * c_data_size;
 
-  -- based on g_statistics_type: 'S'=0x53="SST", 'B'=0x42="BST", 'X'=0x58="XST"
+  -- Based on g_statistics_type: 'S'=0x53="SST", 'B'=0x42="BST", 'X'=0x58="XST".
   CONSTANT c_marker                    : NATURAL := sel_a_b(g_statistics_type="BST", c_sdp_marker_bst,
                                                     sel_a_b(g_statistics_type="XST", c_sdp_marker_xst, 
                                                                                      c_sdp_marker_sst));  -- SST
@@ -100,20 +101,19 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
                                                                                       c_sdp_N_sub));  -- SST
 
   CONSTANT c_nof_valid_per_block : NATURAL := c_nof_data * c_data_size;
+  CONSTANT c_nof_sync            : NATURAL := 5;
+  CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync * c_nof_clk_per_block;
 
-  CONSTANT c_nof_sync         : NATURAL := 5;
-  CONSTANT c_nof_clk_per_sync : NATURAL := c_nof_block_per_sync * c_nof_clk_per_block;
-
-  SIGNAL tb_end              : STD_LOGIC := '0';
+  SIGNAL tb_end : STD_LOGIC := '0';
 
-  SIGNAL dp_clk              : STD_LOGIC := '1';   -- digital data path clock = 200 MHz (deser factor 4);
-  SIGNAL dp_rst              : STD_LOGIC;
+  SIGNAL dp_clk : STD_LOGIC := '1';   -- Digital data path clock = 200 MHz (deser factor 4);
+  SIGNAL dp_rst : STD_LOGIC;
 
-  SIGNAL mm_clk              : STD_LOGIC := '1';   -- MM control clock = 50 MHz
-  SIGNAL mm_rst              : STD_LOGIC;
+  SIGNAL mm_clk : STD_LOGIC := '1';   -- MM control clock = 50 MHz
+  SIGNAL mm_rst : STD_LOGIC;
   
-  SIGNAL master_mosi         : t_mem_mosi := c_mem_mosi_rst;
-  SIGNAL master_miso         : t_mem_miso;
+  SIGNAL master_mosi : t_mem_mosi := c_mem_mosi_rst;
+  SIGNAL master_miso : t_mem_miso;
 
   SIGNAL enable_mosi : t_mem_mosi := c_mem_mosi_rst;
   SIGNAL enable_miso : t_mem_miso;
@@ -134,7 +134,7 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
   SIGNAL rx_hdr_fields_out   : STD_LOGIC_VECTOR(1023 DOWNTO 0);
   SIGNAL rx_hdr_fields_raw   : STD_LOGIC_VECTOR(1023 DOWNTO 0) := (OTHERS => '0');
 
-  -- signals used to change settings of sdp_info 
+  -- Signals used to change settings of sdp_info. 
   SIGNAL gn_index  : NATURAL := 1;  -- select > 0 to see effect of g_offload_time 
   
   SIGNAL sdp_info  :  t_sdp_info := (
@@ -154,16 +154,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
                         x"0000"             -- beamlet_scale
                       );
 
-  -- signals used for starting processes
+  -- Signals used for starting processes.
   SIGNAL ram_wr_data   : STD_LOGIC_VECTOR(c_ram_buf.dat_w-1 DOWNTO 0);
   SIGNAL ram_wr_addr   : STD_LOGIC_VECTOR(c_ram_buf.adr_w-1 DOWNTO 0);
   SIGNAL ram_wr_en     : STD_LOGIC;
   SIGNAL init_ram_done : STD_LOGIC := '0';
 
-  SIGNAL rx_request       : STD_LOGIC := '0';
+  SIGNAL in_sync_hold     : STD_LOGIC := '0';
   SIGNAL rx_prev_bsn      : NATURAL := 0;
   SIGNAL rx_bsn           : NATURAL := 0;
-  SIGNAL rx_data_id       : NATURAL := 0;
   SIGNAL rx_block_cnt     : NATURAL := 0;
   SIGNAL rx_valid_clk_cnt : NATURAL := 0;
 
@@ -174,11 +173,11 @@ BEGIN
   mm_rst <= '1', '0' AFTER c_mm_clk_period*7;
   mm_clk <= (NOT mm_clk) OR tb_end AFTER c_mm_clk_period/2;
 
-  -- fill ram with data, data is same as address number.
+  -- Fill ram with data, data is same as address number.
   p_mm_statistics_ram : PROCESS
   BEGIN
     ram_wr_en <= '0';
-    -- initialyze
+    -- Initialyze
     proc_common_wait_until_low(mm_clk, mm_rst);
     proc_common_wait_some_cycles(mm_clk, 10);
 
@@ -198,7 +197,7 @@ BEGIN
   p_enable_trigger : PROCESS
   BEGIN
     proc_common_wait_until_high(mm_clk, init_ram_done);
-    -- enable common variabel delay
+    -- Enable common variabel delay.
     proc_mem_mm_bus_wr(c_reg_enable_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi);  
     proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency);
     WAIT;
@@ -238,105 +237,110 @@ BEGIN
     WAIT;
   END PROCESS;
 
-  p_verify_header : PROCESS
+  p_verify_header : PROCESS(test_offload_sosi)
   BEGIN
-    proc_common_wait_until_high(mm_clk, init_ram_done);
-    proc_common_wait_until_high(mm_clk, test_offload_sosi.sop);
-    -- bsn is not fully received (bit 0-15 is missing) because 32 bit allignment not working in dp_offload_rx.vhd.   
-    -- check fixed settings
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"00074306C700"
-      REPORT "wrong eth_dst_mac" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_type")) = x"0800"
-      REPORT "wrong eth_type" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_version") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_version")) = TO_UVEC(4, 4)
-      REPORT "wrong ip_version" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_header_length")) = TO_UVEC(5, 4)
-      REPORT "wrong ip_header_length" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8)
-      REPORT "wrong ip_services" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(7868, 16)
-      REPORT "wrong ip_total_length" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16)
-      REPORT "wrong ip_identification" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_flags") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_flags")) = TO_UVEC(2, 3)
-      REPORT "wrong ip_flags" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_fragment_offset") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_fragment_offset")) = TO_UVEC(0, 13)
-      REPORT "wrong ip_fragment_offset" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_time_to_live") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_time_to_live")) = TO_UVEC(127, 8)
-      REPORT "wrong ip_time_to_live" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")) = TO_UVEC(17, 8)
-      REPORT "wrong ip_protocol" SEVERITY ERROR;  
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"C0A80001"
-      REPORT "wrong ip_dst_addr" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(0, 16)
-      REPORT "wrong udp_dst_port" SEVERITY ERROR;  
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(7848, 16)
-      REPORT "wrong udp_total_length" SEVERITY ERROR; 
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8)
-      REPORT "wrong sdp_version_id" SEVERITY ERROR;  
-    
-    -- check settings set by mm interface in this test bench
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac")) = c_eth_src_mac
-      REPORT "wrong eth_src_mac" SEVERITY ERROR;    
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr")) = c_ip_src_addr
-      REPORT "wrong ip_src_addr" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port")) = c_udp_src_port
-      REPORT "wrong udp_src_port" SEVERITY ERROR;
-    
-    -- check g_statistics_type settings set by sdp_statistics_offload.vhd 
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker")) = TO_UVEC(c_marker, 8)
-      REPORT "wrong sdp_marker" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs")) = TO_UVEC(c_nof_signal_inputs, 8)
-      REPORT "wrong sdp_nof_signal_inputs" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet")) = TO_UVEC(c_nof_statistics_per_packet, 16)
-      REPORT "wrong sdp_nof_statistics_per_packet: " SEVERITY ERROR;
-    
-    -- check some values from sdp_source_info
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id")) = sdp_info.observation_id
-      REPORT "wrong sdp_observation_id" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_id")) = sdp_info.station_id
-      REPORT "wrong sdp_station_id" SEVERITY ERROR;
-    ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id"))) = sdp_info.antenna_band_index
-      REPORT "wrong sdp_source_info_antenna_band_id" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id")) = sdp_info.nyquist_zone_index
-      REPORT "wrong sdp_source_info_nyquist_zone_id" SEVERITY ERROR;
-    ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc"))) = sdp_info.f_adc
-      REPORT "wrong sdp_source_info_f_adc" SEVERITY ERROR;
-    ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type"))) = sdp_info.fsub_type
-      REPORT "wrong sdp_source_info_fsub_type" SEVERITY ERROR;
-    ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag"))) = sdp_info.beam_repositioning_flag
-      REPORT "wrong sdp_source_info_beam_repositioning_flag" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id")) = TO_UVEC(gn_index, 5)
-      REPORT "wrong sdp_source_info_gn_id" SEVERITY ERROR;
-    ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")) = sdp_info.block_period
-      REPORT "wrong sdp_block_period" SEVERITY ERROR;
-    WAIT;
+    IF test_offload_sosi.eop = '1' THEN
+      -- bsn is not fully received (bit 0-15 is missing) because 32 bit allignment not working in dp_offload_rx.vhd.   
+      -- Check fixed settings.
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_dst_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_dst_mac")) = x"00074306C700"
+        REPORT "wrong eth_dst_mac" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_type")) = x"0800"
+        REPORT "wrong eth_type" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_version") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_version")) = TO_UVEC(4, 4)
+        REPORT "wrong ip_version" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_header_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_header_length")) = TO_UVEC(5, 4)
+        REPORT "wrong ip_header_length" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8)
+        REPORT "wrong ip_services" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(7868, 16)
+        REPORT "wrong ip_total_length" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16)
+        REPORT "wrong ip_identification" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_flags") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_flags")) = TO_UVEC(2, 3)
+        REPORT "wrong ip_flags" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_fragment_offset") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_fragment_offset")) = TO_UVEC(0, 13)
+        REPORT "wrong ip_fragment_offset" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_time_to_live") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_time_to_live")) = TO_UVEC(127, 8)
+        REPORT "wrong ip_time_to_live" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_protocol") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_protocol")) = TO_UVEC(17, 8)
+        REPORT "wrong ip_protocol" SEVERITY ERROR;  
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_dst_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_dst_addr")) = x"C0A80001"
+        REPORT "wrong ip_dst_addr" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(0, 16)
+        REPORT "wrong udp_dst_port" SEVERITY ERROR;  
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(7848, 16)
+        REPORT "wrong udp_total_length" SEVERITY ERROR; 
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8)
+        REPORT "wrong sdp_version_id" SEVERITY ERROR;  
+      
+      -- Check settings set by mm interface in this test bench.
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac")) = c_eth_src_mac
+        REPORT "wrong eth_src_mac" SEVERITY ERROR;    
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr")) = c_ip_src_addr
+        REPORT "wrong ip_src_addr" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port")) = c_udp_src_port
+        REPORT "wrong udp_src_port" SEVERITY ERROR;
+      
+      -- Check g_statistics_type settings set by sdp_statistics_offload.vhd.
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker")) = TO_UVEC(c_marker, 8)
+        REPORT "wrong sdp_marker" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs")) = TO_UVEC(c_nof_signal_inputs, 8)
+        REPORT "wrong sdp_nof_signal_inputs" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet")) = TO_UVEC(c_nof_statistics_per_packet, 16)
+        REPORT "wrong sdp_nof_statistics_per_packet: " SEVERITY ERROR;
+      
+      -- Check some values from sdp_source_info.
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id")) = sdp_info.observation_id
+        REPORT "wrong sdp_observation_id" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_id")) = sdp_info.station_id
+        REPORT "wrong sdp_station_id" SEVERITY ERROR;
+      ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id"))) = sdp_info.antenna_band_index
+        REPORT "wrong sdp_source_info_antenna_band_id" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id")) = sdp_info.nyquist_zone_index
+        REPORT "wrong sdp_source_info_nyquist_zone_id" SEVERITY ERROR;
+      ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc"))) = sdp_info.f_adc
+        REPORT "wrong sdp_source_info_f_adc" SEVERITY ERROR;
+      ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type"))) = sdp_info.fsub_type
+        REPORT "wrong sdp_source_info_fsub_type" SEVERITY ERROR;
+      ASSERT SL(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag"))) = sdp_info.beam_repositioning_flag
+        REPORT "wrong sdp_source_info_beam_repositioning_flag" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id")) = TO_UVEC(gn_index, 5)
+        REPORT "wrong sdp_source_info_gn_id" SEVERITY ERROR;
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")) = sdp_info.block_period
+        REPORT "wrong sdp_block_period" SEVERITY ERROR;
+      
+      -- Check variable header info.
+      ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")) = TO_UVEC(rx_block_cnt + c_sdp_S_pn * gn_index, 32)
+        REPORT "wrong block count number, received data_id not same as counted blocks" SEVERITY ERROR;
+    END IF;
   END PROCESS;
 
-  -- Count number of blocks in a sync interval, rx_request is used to start counting from 0.
+  -- Count number of blocks in a sync interval.
+  -- There is no active test_offload_sosi.sync to restart the count. Therefore capture the in_sosi.sync in in_sync_hold, and 
+  -- use in_sync_hold with test_offload_sosi.sop to start counting blocks (packets) from 0, at the start of every sync interval.
   p_rx_block_cnt : PROCESS(dp_clk)
   BEGIN
     IF rising_edge(dp_clk) THEN
       IF test_offload_sosi.sop = '1' THEN
-        IF rx_request = '1' THEN 
+        IF in_sync_hold = '1' THEN 
           rx_block_cnt <= 0;
-          rx_request   <= '0';
+          in_sync_hold <= '0';
         ELSE
           rx_block_cnt <= rx_block_cnt + 1;
         END IF;
       END IF;
       IF in_sosi.sync = '1' THEN
-        rx_request <= '1';
+        in_sync_hold <= '1';
       END IF;
     END IF;
   END PROCESS;
 
-  -- Capture rx_bsn from header
+  -- Capture rx_bsn from header.
   rx_bsn <= TO_UINT(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn")+16));
-  -- Keep rx_bsn from previous header
+  -- Keep rx_bsn from previous header.
   rx_prev_bsn <= rx_bsn WHEN rising_edge(dp_clk);
 
-  -- verify number of blocks between 2 syncs and between 2 changed bsn numbers 
+  -- Verify number of blocks between 2 syncs and between 2 changed bsn numbers.
   p_verify_nof_blocks : PROCESS(dp_clk)
   BEGIN
     IF rising_edge(dp_clk) THEN
@@ -346,17 +350,11 @@ BEGIN
           ASSERT rx_block_cnt = g_nof_signal_inputs_per_pn - 1 REPORT "wrong number of blocks between 2 sync" SEVERITY ERROR;
         END IF;
         
-        -- rx_prev_bsn > 0 is needed for the first time , when there is no previous BSN.
+        -- rx_prev_bsn > 0 is needed for the first time, when there is no previous BSN.
         -- rx_bsn > rx_prev_bsn is needed to detect a new rx_bsn.
         IF rx_prev_bsn > 0 AND rx_bsn > rx_prev_bsn THEN
           ASSERT (rx_bsn - rx_prev_bsn) = c_nof_block_per_sync REPORT "wrong number of blocks between 2 bsn numbers" SEVERITY ERROR;
         END IF;
-
-        rx_data_id <= TO_UINT(rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id")));
-        IF test_offload_sosi.eop = '1' THEN
-          ASSERT rx_data_id = rx_block_cnt + c_sdp_S_pn * gn_index REPORT "wrong block count number, received data_id not same as counted blocks" SEVERITY ERROR;
-        END IF;
-
       END IF;
       test_offload_siso <= c_dp_siso_rdy;
     END IF;
@@ -379,7 +377,7 @@ BEGIN
   BEGIN
     proc_common_wait_until_low(mm_clk, mm_rst);
     proc_common_wait_some_cycles(mm_clk, 10);
-    -- write ethernet destinations via reg_hdr_dat_mosi
+    -- Write ethernet destinations via reg_hdr_dat_mosi.
     proc_mem_mm_bus_wr(c_hdr_dat_mm_addr_udp_src_port, TO_UINT(c_udp_src_port), mm_clk, hdr_dat_miso, hdr_dat_mosi);  
     proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency);
     
@@ -404,14 +402,14 @@ BEGIN
     g_ram => c_ram_buf
   )
   PORT MAP (
-    -- MM write port clock domain
+    -- MM write port clock domain.
     rst_a    => mm_rst,
     clk_a    => mm_clk,
     wr_en_a  => ram_wr_en,
     wr_dat_a => ram_wr_data,
     adr_a    => ram_wr_addr,
 
-    -- DP read only port clock domain
+    -- DP read only port clock domain.
     rst_b    => dp_rst,
     clk_b    => dp_clk,
     adr_b    => master_mosi.address(c_ram_buf.adr_w-1 DOWNTO 0),