From 73cd845b7af466c40e7199338c4004bc3c5b7d3d Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Tue, 30 Nov 2021 17:03:21 +0100 Subject: [PATCH] Use c_sdp_W_statistics_sz. Add func_sdp_get_stat_from_mm_*(). --- .../lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 411e19c0f3..5512ee4aac 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -99,6 +99,7 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_W_beamlet : NATURAL := 8; CONSTANT c_sdp_W_gn_id : NATURAL := 5; CONSTANT c_sdp_W_statistic : NATURAL := 64; + CONSTANT c_sdp_W_statistic_sz : NATURAL := 2; -- = c_sdp_W_statistic / c_word_w CONSTANT c_sdp_W_sub_weight : NATURAL := 16; -- = w in s(w, p), s = signed CONSTANT c_sdp_W_sub_weight_fraction : NATURAL := 13; -- = p in s(w, p) CONSTANT c_sdp_W_sub_weight_magnitude : NATURAL := c_sdp_W_sub_weight - c_sdp_W_sub_weight_fraction - 1; -- = 2 @@ -146,7 +147,7 @@ PACKAGE sdp_pkg is (1, c_sdp_N_fft, 0, c_sdp_P_pfb, c_sdp_N_taps, 0, c_sdp_W_adc, 17, c_sdp_W_fir_coef, true, false, true, 17, c_sdp_W_subband, 0, 22, 1, - true, 54, 2, 195313, c_fft_pipeline, c_fft_pipeline, + true, 54, c_sdp_W_statistic_sz, 195313, c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); ----------------------------------------------------------------------------- @@ -161,17 +162,18 @@ PACKAGE sdp_pkg is -- https://git.astron.nl/desp/hdl/-/blob/master/boards/uniboard2b/libraries/unb2b_board/src/vhdl/ctrl_unb2b_board.vhd --CONSTANT c_sdp_offload_time : NATURAL := 13000; -- from wave window 62855nS / 5nS = 12571 cycles. - CONSTANT c_sdp_offload_time : NATURAL := 600000; -- L2SDP-452 + CONSTANT c_sdp_offload_time : NATURAL := 600000; -- see L2SDP-452 -- packet lengths, see ICD SC-SDP - CONSTANT c_sdp_stat_data_sz : NATURAL := 2; -- = 2 words = 64 bit data (= c_sdp_wpfb_subbands.stat_data_sz) - CONSTANT c_sdp_stat_data_byte_sz : NATURAL := c_sdp_stat_data_sz * c_word_sz; -- = 8 bytes = 64 bit data - CONSTANT c_sdp_nof_bytes_per_statistic : NATURAL := 8; + CONSTANT c_sdp_nof_bytes_per_statistic : NATURAL := 8; -- c_sdp_W_statistic_sz * c_word_sz = 2 * 4 = 8 CONSTANT c_sdp_stat_app_header_len : NATURAL := 32; FUNCTION func_sdp_get_stat_marker(g_statistics_type : STRING) RETURN NATURAL; FUNCTION func_sdp_get_stat_nof_signal_inputs(g_statistics_type : STRING) RETURN NATURAL; + FUNCTION func_sdp_get_stat_from_mm_data_size(g_statistics_type : STRING) RETURN NATURAL; + FUNCTION func_sdp_get_stat_from_mm_step_size(g_statistics_type : STRING) RETURN NATURAL; + FUNCTION func_sdp_get_stat_from_mm_nof_data(g_statistics_type : STRING) RETURN NATURAL; FUNCTION func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type : STRING) RETURN NATURAL; FUNCTION func_sdp_get_stat_app_total_length(g_statistics_type : STRING) RETURN NATURAL; FUNCTION func_sdp_get_stat_udp_total_length(g_statistics_type : STRING) RETURN NATURAL; @@ -180,7 +182,7 @@ PACKAGE sdp_pkg is -- . For XST func_sdp_get_stat_nof_packets returns the maximum nof_packets. -- The actual nof_packets for XST will depend on the MM programmable -- nof_crosslets <= c_sdp_N_crosslets_max in sdp_statistics_offload. - FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING; S_pn, P_sq : NATURAL) RETURN NATURAL; + FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING; S_pn, P_sq, nof_crosslets : NATURAL) RETURN NATURAL; FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING) RETURN NATURAL; CONSTANT c_sdp_stat_eth_dst_mac : STD_LOGIC_VECTOR(47 DOWNTO 0) := x"001B217176B9"; -- 001B217176B9 = DOP36-enp2s0 @@ -429,7 +431,7 @@ PACKAGE sdp_pkg is -- FSUB MM address widths CONSTANT c_sdp_ram_fil_coefs_addr_w : NATURAL := ceil_log2(c_sdp_N_fft * c_sdp_N_taps); - CONSTANT c_sdp_ram_st_sst_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb * c_sdp_N_sub * c_sdp_Q_fft * c_sdp_stat_data_sz); + CONSTANT c_sdp_ram_st_sst_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb * c_sdp_N_sub * c_sdp_Q_fft * c_sdp_W_statistic_sz); CONSTANT c_sdp_reg_si_addr_w : NATURAL := 1; --enable/disable CONSTANT c_sdp_ram_equalizer_gains_addr_w : NATURAL := ceil_log2(c_sdp_P_pfb*c_sdp_N_sub*c_sdp_Q_fft); CONSTANT c_sdp_reg_dp_selector_addr_w : NATURAL := 1; --Select input 0 or 1. @@ -443,7 +445,7 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_ram_bf_weights_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_N_pol_bf * c_sdp_P_pfb * c_sdp_S_sub_bf * c_sdp_Q_fft); CONSTANT c_sdp_reg_bf_scale_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; CONSTANT c_sdp_reg_dp_xonoff_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + 1; - CONSTANT c_sdp_ram_st_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_S_sub_bf * c_sdp_N_pol_bf * c_sdp_stat_data_sz); + CONSTANT c_sdp_ram_st_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + ceil_log2(c_sdp_S_sub_bf * c_sdp_N_pol_bf * c_sdp_W_statistic_sz); CONSTANT c_sdp_reg_stat_enable_bst_addr_w : NATURAL := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_stat_enable_addr_w; CONSTANT c_sdp_reg_stat_hdr_dat_bst_addr_w: NATURAL := ceil_log2(c_sdp_N_beamsets) + c_sdp_reg_stat_hdr_dat_addr_w; @@ -478,7 +480,7 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_reg_crosslets_info_addr_w : NATURAL := c_sdp_mm_reg_crosslets_info.adr_w; CONSTANT c_sdp_reg_nof_crosslets_addr_w : NATURAL := c_sdp_mm_reg_nof_crosslets.adr_w; CONSTANT c_sdp_reg_bsn_sync_scheduler_xsub_addr_w : NATURAL := 4; - CONSTANT c_sdp_ram_st_xsq_addr_w : NATURAL := ceil_log2(c_sdp_P_sq) + ceil_log2(c_sdp_N_crosslets_max * c_sdp_X_sq * c_nof_complex * c_sdp_stat_data_sz ); + CONSTANT c_sdp_ram_st_xsq_addr_w : NATURAL := ceil_log2(c_sdp_P_sq) + ceil_log2(c_sdp_N_crosslets_max * c_sdp_X_sq * c_nof_complex * c_sdp_W_statistic_sz ); -- RING MM address widths CONSTANT c_sdp_reg_bsn_monitor_v2_ring_rx_addr_w : NATURAL := ceil_log2(c_sdp_N_ring_lanes_max) + ceil_log2(c_sdp_N_pn_max) + ceil_Log2(7); @@ -525,11 +527,33 @@ PACKAGE BODY sdp_pkg IS 1)); -- SST END func_sdp_get_stat_nof_signal_inputs; + FUNCTION func_sdp_get_stat_from_mm_data_size(g_statistics_type : STRING) RETURN NATURAL IS + BEGIN + RETURN sel_a_b(g_statistics_type="BST", c_sdp_N_pol_bf * c_sdp_W_statistic_sz, -- = 4 + sel_a_b(g_statistics_type="XST", c_nof_complex * c_sdp_W_statistic_sz, -- = 4 + c_sdp_W_statistic_sz)); -- = 2, SST + END func_sdp_get_stat_from_mm_data_size; + + FUNCTION func_sdp_get_stat_from_mm_step_size(g_statistics_type : STRING) RETURN NATURAL IS + CONSTANT c_data_size : NATURAL := func_sdp_get_stat_from_mm_data_size(g_statistics_type); + BEGIN + RETURN sel_a_b(g_statistics_type="BST", c_data_size, -- = 4 + sel_a_b(g_statistics_type="XST", c_data_size, -- = 4 + c_sdp_Q_fft * c_data_size)); -- = 4, SST + END func_sdp_get_stat_from_mm_step_size; + + FUNCTION func_sdp_get_stat_from_mm_nof_data(g_statistics_type : STRING) RETURN NATURAL IS + BEGIN + RETURN sel_a_b(g_statistics_type="BST", c_sdp_S_sub_bf, -- = 488 + sel_a_b(g_statistics_type="XST", c_sdp_X_sq, -- = 144 + c_sdp_N_sub)); -- = 512, SST + END func_sdp_get_stat_from_mm_nof_data; + FUNCTION func_sdp_get_stat_nof_statistics_per_packet(g_statistics_type : STRING) RETURN NATURAL IS BEGIN - RETURN sel_a_b(g_statistics_type="BST", c_sdp_N_pol_bf * c_sdp_S_sub_bf, -- = 976 - sel_a_b(g_statistics_type="XST", c_sdp_S_pn * c_sdp_S_pn * c_nof_complex, -- = 288 - c_sdp_N_sub)); -- = 512, SST + RETURN sel_a_b(g_statistics_type="BST", c_sdp_S_sub_bf * c_sdp_N_pol_bf, -- = 976 + sel_a_b(g_statistics_type="XST", c_sdp_X_sq * c_nof_complex, -- = 288 + c_sdp_N_sub)); -- = 512, SST END func_sdp_get_stat_nof_statistics_per_packet; FUNCTION func_sdp_get_stat_app_total_length(g_statistics_type : STRING) RETURN NATURAL IS @@ -539,7 +563,7 @@ PACKAGE BODY sdp_pkg IS -- . SST : 4128 (= 4096 + 32) -- . BST : 7840 (= 7808 + 32) -- . XST : 2336 (= 2304 + 32) - RETURN c_nof_statistics_per_packet * c_sdp_stat_data_byte_sz + c_sdp_stat_app_header_len; + RETURN c_nof_statistics_per_packet * c_sdp_nof_bytes_per_statistic + c_sdp_stat_app_header_len; END func_sdp_get_stat_app_total_length; FUNCTION func_sdp_get_stat_udp_total_length(g_statistics_type : STRING) RETURN NATURAL IS @@ -562,16 +586,16 @@ PACKAGE BODY sdp_pkg IS RETURN c_sdp_udp_total_length + c_network_ip_header_len; END func_sdp_get_stat_ip_total_length; - FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING; S_pn, P_sq : NATURAL) RETURN NATURAL IS + FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING; S_pn, P_sq, nof_crosslets : NATURAL) RETURN NATURAL IS BEGIN RETURN sel_a_b(g_statistics_type="BST", 1, - sel_a_b(g_statistics_type="XST", P_sq * c_sdp_N_crosslets_max, + sel_a_b(g_statistics_type="XST", P_sq * nof_crosslets, S_pn)); -- SST END func_sdp_get_stat_nof_packets; FUNCTION func_sdp_get_stat_nof_packets(g_statistics_type : STRING) RETURN NATURAL IS BEGIN - RETURN func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, c_sdp_P_sq); + RETURN func_sdp_get_stat_nof_packets(g_statistics_type, c_sdp_S_pn, c_sdp_P_sq, c_sdp_N_crosslets_max); END func_sdp_get_stat_nof_packets; -- GitLab