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