diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd index ef138ef401394ac4bc761ad43bb35c2141114224..56f91879bf03794f81ad23870ae24cf2e45d1b9b 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -108,26 +108,28 @@ ARCHITECTURE str OF sdp_statistics_offload IS CONSTANT c_mm_data_size : NATURAL := func_sdp_get_stat_from_mm_data_size(g_statistics_type); CONSTANT c_mm_step_size : NATURAL := func_sdp_get_stat_from_mm_step_size(g_statistics_type); CONSTANT c_mm_nof_data : NATURAL := func_sdp_get_stat_from_mm_nof_data(g_statistics_type); + CONSTANT c_mm_ram_size : NATURAL := c_mm_nof_data * c_mm_data_size * c_nof_packets_max; -- offload control TYPE t_reg IS RECORD - packet_count : NATURAL; - start_address : NATURAL; + packet_count : NATURAL RANGE 0 TO c_nof_packets_max; + start_address : NATURAL RANGE 0 TO c_mm_ram_size; start_pulse : STD_LOGIC; dp_header_info : STD_LOGIC_VECTOR(1023 DOWNTO 0); payload_err : STD_LOGIC; in_sop_cnt : NATURAL; integration_interval : NATURAL; interleave_count : NATURAL RANGE 0 TO c_sdp_Q_fft; + interleave_address : NATURAL RANGE 0 TO c_mm_ram_size; crosslet_count : NATURAL RANGE 0 TO c_sdp_N_crosslets_max; instance_count : NATURAL RANGE 0 TO c_sdp_P_sq; - instance_address : NATURAL; + instance_address : NATURAL RANGE 0 TO c_mm_ram_size; nof_crosslets : NATURAL RANGE 0 TO c_sdp_N_crosslets_max; crosslets_info_rec : t_sdp_crosslets_info; END RECORD; CONSTANT c_crosslets_info_rst : t_sdp_crosslets_info := (offset_arr => (OTHERS => 0), step => 0); - CONSTANT c_reg_rst : t_reg := (0, 0, '0', (OTHERS => '0'), '0', 0, 0, 0, 0, 0, 0, 0, c_crosslets_info_rst); + CONSTANT c_reg_rst : t_reg := (0, 0, '0', (OTHERS => '0'), '0', 0, 0, 0, 0, 0, 0, 0, 0, c_crosslets_info_rst); SIGNAL r : t_reg; SIGNAL nxt_r : t_reg; @@ -158,6 +160,18 @@ ARCHITECTURE str OF sdp_statistics_offload IS SIGNAL bsn_at_sync : STD_LOGIC_VECTOR(63 DOWNTO 0) := (OTHERS => '0'); SIGNAL dp_header_info : STD_LOGIC_VECTOR(1023 DOWNTO 0):= (OTHERS => '0'); + -- Debug signals for view in Wave window + SIGNAL dbg_c_marker : NATURAL := c_marker; + SIGNAL dbg_c_nof_signal_inputs : NATURAL := c_nof_signal_inputs; + SIGNAL dbg_c_nof_statistics_per_packet : NATURAL := c_nof_statistics_per_packet; + SIGNAL dbg_c_udp_total_length : NATURAL := c_udp_total_length; + SIGNAL dbg_c_ip_total_length : NATURAL := c_ip_total_length; + SIGNAL dbg_c_nof_packets_max : NATURAL := c_nof_packets_max; + SIGNAL dbg_c_beamlet_id : NATURAL := c_beamlet_id; + SIGNAL dbg_c_mm_data_size : NATURAL := c_mm_data_size; + SIGNAL dbg_c_mm_step_size : NATURAL := c_mm_step_size; + SIGNAL dbg_c_mm_nof_data : NATURAL := c_mm_nof_data; + BEGIN bsn_at_sync <= RESIZE_UVEC(in_sosi.bsn, 64) WHEN rising_edge(dp_clk) AND in_sosi.sync = '1'; @@ -286,13 +300,14 @@ BEGIN -- Issue start_pulse per packet offload IF trigger_offload = '1' THEN -- Use trigger_offload to start first packet offload, all g_statistics_type start from start address 0 - v.start_pulse := '1'; - v.start_address := 0; - v.packet_count := 0; - v.interleave_count := 0; -- only used for SST - v.crosslet_count := 0; -- only used for XST - v.instance_count := 0; -- only used for XST - v.instance_address := 0; -- only used for XST + v.start_pulse := '1'; + v.start_address := 0; + v.packet_count := 0; + v.interleave_count := 0; -- only used for SST + v.interleave_address := 0; -- only used for SST + v.crosslet_count := 0; -- only used for XST + v.instance_count := 0; -- only used for XST + v.instance_address := 0; -- only used for XST ELSIF mm_done = '1' THEN -- Use mm_done to start next packets offloads. @@ -303,8 +318,10 @@ BEGIN v.start_address := r.start_address + c_mm_data_size; -- default step to next packet in this step v.interleave_count := r.interleave_count + 1; IF r.interleave_count = c_sdp_Q_fft - 1 THEN - v.start_address := r.packet_count * c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_sz; -- jump to first packet for next step + -- jump to first packet for next step, + v.start_address := r.interleave_address + c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_sz; -- = + 512 * 2 * 2 = + 2048 v.interleave_count := 0; + v.interleave_address := v.start_address; END IF; v.start_pulse := '1'; v.packet_count := r.packet_count + 1;