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 fc0d0c32ff772128e93e60c7abaf905c48a582bd..016b6bb8ca3fb8953ca3ce66650e4e4cbf5c505d 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 @@ -286,13 +286,23 @@ BEGIN BEGIN proc_common_wait_until_high(mm_clk, init_ram_done); proc_common_wait_some_cycles(dp_clk, 10); + -- Mark first in_sosi.sync interval, starting and ending somewhat before in_sosi.sync, to + -- ensure that one in_sosi.sync occurs during new_interval. Use c_nof_clk_per_block as + -- sufficient margin to allow for some latency between new_interval and in_sosi.sync. + new_interval <= '1'; + proc_common_wait_some_cycles(dp_clk, c_nof_clk_per_block); + -- Start active in_sosi in_sosi.bsn <= TO_DP_BSN(c_bsn_init); in_sosi.valid <= '1'; in_crosslets_info_rec <= c_crosslets_info_rec; - new_interval <= '1'; -- mark first in_sosi.sync interval WHILE TRUE LOOP - -- One in_sosi.sync interval + -- One in_sosi.sync interval per LOOP FOR i IN 0 TO c_nof_block_per_sync-1 LOOP + -- End new_interval somewhat before next in_sosi.sync + IF i = c_nof_block_per_sync-1 THEN + new_interval <= '0'; + END IF; + -- One in_sosi.sop/eop block per LOOP FOR j IN 0 TO c_nof_clk_per_block-1 LOOP in_sosi.sync <= '0'; in_sosi.sop <= '0'; @@ -314,7 +324,6 @@ BEGIN proc_common_wait_some_cycles(dp_clk, 1); END LOOP; END LOOP; - new_interval <= '0'; END LOOP; WAIT; END PROCESS;