From 3cff2b3589d29a5e4cb0c04c24e1eec1a5ea4450 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Thu, 9 Dec 2021 09:16:21 +0100 Subject: [PATCH] Fix Quartus error : Can only use constant for LOOP range in func_sdp_map_crosslets_info() and func_sdp_step_crosslets_info(). --- .../lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd | 30 ++++++------------- .../sdp/src/vhdl/sdp_statistics_offload.vhd | 2 +- .../sdp/tb/vhdl/tb_sdp_statistics_offload.vhd | 4 +-- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index f73c96a143..86106d66d3 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 e3852bd367..ef138ef401 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 46d605ba96..8aebbf2dac 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 -- GitLab