From 00028b8ae2f540ad683ae5d379dd43c59de42415 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Fri, 26 Nov 2021 10:20:34 +0100
Subject: [PATCH] Use func_sdp_get_stat_*() functions to determine the header
 field parameters.

---
 .../sdp/src/vhdl/sdp_statistics_offload.vhd   | 48 +++++++------------
 1 file changed, 17 insertions(+), 31 deletions(-)

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 e756819c79..64aaceceee 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd
@@ -90,42 +90,28 @@ END sdp_statistics_offload;
 
 ARCHITECTURE str OF sdp_statistics_offload IS
 
-
   CONSTANT c_nof_streams               : NATURAL := 1;
-  CONSTANT c_data_size                 : NATURAL := 2; 
-  CONSTANT c_nof_data_per_step         : NATURAL := 2; 
+  
+  -- header fields
+  CONSTANT c_marker                    : NATURAL := func_sdp_get_stat_marker(g_statistics_type);
+  CONSTANT c_nof_signal_inputs         : NATURAL := func_sdp_get_stat_nof_signal_inputs(g_statistics_type);
+  CONSTANT c_nof_statistics_per_packet : NATURAL := func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type);
+  CONSTANT c_udp_total_length          : NATURAL := func_sdp_get_stat_udp_total_length(g_statistics_type);
+  CONSTANT c_ip_total_length           : NATURAL := func_sdp_get_stat_ip_total_length(g_statistics_type);
+  CONSTANT c_nof_packets               : NATURAL := func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, g_P_sq);
+
+  CONSTANT c_beamlet_id                : NATURAL := g_beamset_id * c_sdp_S_sub_bf;
 
+  -- payload data
+  CONSTANT c_data_size                 : NATURAL := 2;
+  CONSTANT c_nof_data_per_step         : NATURAL := 2;
   CONSTANT c_step_size                 : NATURAL := sel_a_b(g_statistics_type="BST",  c_data_size,
-                                                    sel_a_b(g_statistics_type="XST",  c_data_size, 
+                                                    sel_a_b(g_statistics_type="XST",  c_data_size,
                                                                                       c_data_size * c_nof_data_per_step));  -- SST
-
-  CONSTANT c_nof_data                  : NATURAL := sel_a_b(g_statistics_type="BST",  c_sdp_N_pol_bf * c_sdp_S_sub_bf,
-                                                    sel_a_b(g_statistics_type="XST",  c_sdp_S_pn * c_sdp_S_pn * c_nof_complex, 
-                                                                                      c_sdp_N_sub));  -- SST
+  CONSTANT c_nof_data                  : NATURAL := c_nof_statistics_per_packet;
   CONSTANT c_block_size                : NATURAL := c_nof_data * c_step_size;
-  
-  CONSTANT c_nof_packets               : NATURAL := sel_a_b(g_statistics_type="BST", 1,
-                                                    sel_a_b(g_statistics_type="XST", g_P_sq * c_sdp_N_crosslets_max,
-                                                                                     c_sdp_S_pn));  -- SST
-  
-  CONSTANT c_marker                    : NATURAL := sel_a_b(g_statistics_type="BST", c_sdp_marker_bst,
-                                                    sel_a_b(g_statistics_type="XST", c_sdp_marker_xst,
-                                                                                     c_sdp_marker_sst));
-  
-  CONSTANT c_nof_signal_inputs         : NATURAL := sel_a_b(g_statistics_type="BST", 0,
-                                                    sel_a_b(g_statistics_type="XST", c_sdp_S_pn,
-                                                                                     1));  -- SST
-  
-  CONSTANT c_nof_statistics_per_packet : NATURAL := sel_a_b(g_statistics_type="BST",  c_sdp_N_pol_bf * c_sdp_S_sub_bf,
-                                                    sel_a_b(g_statistics_type="XST", (c_sdp_S_pn * c_sdp_S_pn * c_nof_complex), 
-                                                                                      c_sdp_N_sub));  -- SST
-  
-  CONSTANT c_beamlet_id                : NATURAL := g_beamset_id * c_sdp_S_sub_bf;
-
-  CONSTANT c_app_total_length : NATURAL := c_sdp_stat_app_header_len + c_nof_data * c_longword_sz;
-  CONSTANT c_udp_total_length : NATURAL := c_app_total_length + c_network_udp_header_len;
-  CONSTANT c_ip_total_length  : NATURAL := c_app_total_length + c_network_udp_header_len + c_network_ip_header_len;
 
+  -- offload control
   TYPE t_reg IS RECORD
     block_count          : NATURAL;
     start_address        : NATURAL;
@@ -193,7 +179,7 @@ BEGIN
   dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_signal_inputs"                   ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr,  "sdp_nof_signal_inputs"                   )) <= TO_UVEC(c_nof_signal_inputs, 8);
   dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_packet"           ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr,  "sdp_nof_statistics_per_packet"           )) <= TO_UVEC(c_nof_statistics_per_packet, 16);
   dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period"                        ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr,  "sdp_block_period"                        )) <= sdp_info.block_period;
-  dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn"                                  ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr,  "dp_bsn"                                  )) <= bsn_at_sync; 
+  dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "dp_bsn"                                  ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr,  "dp_bsn"                                  )) <= bsn_at_sync;
 
   p_reg : PROCESS(dp_rst, dp_clk)
   BEGIN
-- 
GitLab