diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index f73c96a143b62cb07f0daf25237ddb59bc4eef9d..86106d66d3dacd6830867c78b525371220b0c3b7 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -518,11 +518,9 @@ PACKAGE sdp_pkg is FUNCTION func_sdp_map_stat_data_id(g_statistics_type : STRING; data_id_slv : STD_LOGIC_VECTOR) RETURN t_sdp_stat_data_id; FUNCTION func_sdp_map_stat_data_id(g_statistics_type : STRING; data_id_rec : t_sdp_stat_data_id) RETURN STD_LOGIC_VECTOR; - FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR; nof_crosslets : NATURAL) RETURN t_sdp_crosslets_info; -- map only the used offsets - FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR) RETURN t_sdp_crosslets_info; -- map all c_sdp_N_crosslets_max offsets - FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info; nof_crosslets : NATURAL) RETURN STD_LOGIC_VECTOR; -- map only the used offsets - FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN STD_LOGIC_VECTOR; -- map all c_sdp_N_crosslets_max offsets - FUNCTION func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info; nof_crosslets : NATURAL) RETURN t_sdp_crosslets_info; + FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR) RETURN t_sdp_crosslets_info; -- map all c_sdp_N_crosslets_max offsets + FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN STD_LOGIC_VECTOR; -- map all c_sdp_N_crosslets_max offsets + FUNCTION func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN t_sdp_crosslets_info; -- step all c_sdp_N_crosslets_max offsets END PACKAGE sdp_pkg; @@ -794,41 +792,31 @@ PACKAGE BODY sdp_pkg IS END func_sdp_map_stat_data_id; - FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR; nof_crosslets : NATURAL) RETURN t_sdp_crosslets_info IS + FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR) RETURN t_sdp_crosslets_info IS VARIABLE v_info : t_sdp_crosslets_info; BEGIN - FOR I IN 0 TO nof_crosslets-1 LOOP -- map only used offsets + FOR I IN 0 TO c_sdp_crosslets_info_nof_offsets-1 LOOP -- map al offsets v_info.offset_arr(I) := TO_UINT(info_slv((I+1)*c_sdp_crosslets_index_w-1 DOWNTO I*c_sdp_crosslets_index_w)); END LOOP; v_info.step := TO_UINT(info_slv(c_sdp_crosslets_info_reg_w-1 DOWNTO c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w)); RETURN v_info; END func_sdp_map_crosslets_info; - FUNCTION func_sdp_map_crosslets_info(info_slv : STD_LOGIC_VECTOR) RETURN t_sdp_crosslets_info IS - BEGIN - RETURN func_sdp_map_crosslets_info(info_slv, c_sdp_crosslets_info_nof_offsets); -- map all offsets - END func_sdp_map_crosslets_info; - - FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info; nof_crosslets : NATURAL) RETURN STD_LOGIC_VECTOR IS + FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN STD_LOGIC_VECTOR IS VARIABLE v_info : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0); BEGIN - FOR I IN 0 TO nof_crosslets-1 LOOP -- map only used offsets + FOR I IN 0 TO c_sdp_crosslets_info_nof_offsets-1 LOOP -- map all offsets v_info((I+1)*c_sdp_crosslets_index_w-1 DOWNTO I*c_sdp_crosslets_index_w) := TO_UVEC(info_rec.offset_arr(I), c_sdp_crosslets_index_w); END LOOP; v_info(c_sdp_crosslets_info_reg_w-1 DOWNTO c_sdp_crosslets_info_reg_w - c_sdp_crosslets_index_w) := TO_UVEC(info_rec.step, c_sdp_crosslets_index_w); RETURN v_info; END func_sdp_map_crosslets_info; - FUNCTION func_sdp_map_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN STD_LOGIC_VECTOR IS - BEGIN - RETURN func_sdp_map_crosslets_info(info_rec, c_sdp_crosslets_info_nof_offsets); -- map all offsets - END func_sdp_map_crosslets_info; - - FUNCTION func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info; nof_crosslets : NATURAL) RETURN t_sdp_crosslets_info IS + FUNCTION func_sdp_step_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN t_sdp_crosslets_info IS VARIABLE v_info : t_sdp_crosslets_info := info_rec; BEGIN - FOR I IN 0 TO nof_crosslets-1 LOOP -- step only the used offsets + FOR I IN 0 TO c_sdp_crosslets_info_nof_offsets-1 LOOP -- step all offsets v_info.offset_arr(I) := v_info.offset_arr(I) + v_info.step; END LOOP; RETURN v_info; 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 e3852bd36718fe5e2157207eedfae96682eaaf00..ef138ef401394ac4bc761ad43bb35c2141114224 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -280,7 +280,7 @@ BEGIN -- next in_sosi.sync IF in_sosi.sync = '1' THEN v.nof_crosslets := TO_UINT(nof_crosslets); - v.crosslets_info_rec := func_sdp_map_crosslets_info(crosslets_info, TO_UINT(nof_crosslets)); + v.crosslets_info_rec := func_sdp_map_crosslets_info(crosslets_info); END IF; -- Issue start_pulse per packet offload 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 46d605ba9674e5e51cc718884d35180bad76d1a4..8aebbf2dac663a51a35744457c222b43655c8540 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 @@ -261,7 +261,7 @@ BEGIN END IF; IF i = 0 AND j = 1 THEN -- Increment crosslets_info offsets for next sync interval - in_crosslets_info_rec <= func_sdp_step_crosslets_info(in_crosslets_info_rec, g_nof_crosslets); + in_crosslets_info_rec <= func_sdp_step_crosslets_info(in_crosslets_info_rec); END IF; IF j = 0 THEN in_sosi.sop <= '1'; @@ -277,7 +277,7 @@ BEGIN WAIT; END PROCESS; - in_crosslets_info_slv <= func_sdp_map_crosslets_info(in_crosslets_info_rec, g_nof_crosslets); + in_crosslets_info_slv <= func_sdp_map_crosslets_info(in_crosslets_info_rec); -- Enable the statistics offload when input is running p_enable_trigger : PROCESS