Skip to content
Snippets Groups Projects
Commit b566b3a9 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Corrected g_reverse_word_order to swap only per c_mm_user_size = c_sdp_W_statistic_sz = 2 words.

parent 489d74bb
No related branches found
No related tags found
1 merge request!182Resolve L2SDP-551
Pipeline #22509 passed
......@@ -106,7 +106,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS
CONSTANT c_beamlet_id : NATURAL := g_beamset_id * c_sdp_S_sub_bf;
-- MM access settings per packet for u_dp_block_from_mm_dc
CONSTANT c_mm_user_size : NATURAL := func_sdp_get_stat_from_mm_data_size(g_statistics_type);
CONSTANT c_mm_user_size : NATURAL := c_sdp_W_statistic_sz;
CONSTANT c_mm_data_size : NATURAL := func_sdp_get_stat_from_mm_data_size(g_statistics_type);
CONSTANT c_mm_step_size : NATURAL := func_sdp_get_stat_from_mm_step_size(g_statistics_type);
CONSTANT c_mm_nof_data : NATURAL := func_sdp_get_stat_from_mm_nof_data(g_statistics_type);
......
......@@ -32,7 +32,8 @@
-- Usage:
-- > as 8
-- > run -a
-- e.g. view test_offload_sosi and the rx_sdp_stat_header.app fields
-- . for header: view test_offload_sosi and the rx_sdp_stat_header.app fields
-- . for payload: view rx_val, rx_data and exp_data
-------------------------------------------------------------------------------
LIBRARY IEEE, common_lib, dp_lib, ring_lib;
......@@ -53,7 +54,7 @@ USE work.tb_sdp_pkg.ALL;
ENTITY tb_sdp_statistics_offload IS
GENERIC (
-- All
g_statistics_type : STRING := "XST";
g_statistics_type : STRING := "SST";
g_offload_time : NATURAL := 50;
g_reverse_word_order : BOOLEAN := TRUE; -- when TRUE then stream LSB word after MSB word.
g_gn_index : NATURAL := 5; -- global node (GN) index, must be in range(O_rn, O_rn + N_rn), use > 0 to see effect of g_offload_time
......@@ -113,11 +114,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
-- RAM dimensions
-- . nof_statistics_per_packet = c_mm_nof_data * c_mm_data_size / c_sdp_W_statistic_sz
CONSTANT c_mm_user_size : NATURAL := c_sdp_W_statistic_sz;
CONSTANT c_mm_data_size : NATURAL := func_sdp_get_stat_from_mm_data_size(g_statistics_type);
CONSTANT c_mm_step_size : NATURAL := func_sdp_get_stat_from_mm_step_size(g_statistics_type);
CONSTANT c_mm_nof_data : NATURAL := func_sdp_get_stat_from_mm_nof_data(g_statistics_type);
CONSTANT c_mm_ram_size : NATURAL := c_mm_nof_data * c_mm_data_size * c_nof_packets_max; -- = c_ram_size
CONSTANT c_mm_nof_step : NATURAL := c_mm_step_size / c_mm_data_size;
CONSTANT c_mm_Xsq_span : NATURAL := 2**ceil_log2(c_sdp_N_crosslets_max * c_packet_size); -- XST: 2**ceil_log2(7 * 576) = 4096
-- Define block timing.
CONSTANT c_bsn_init : NATURAL := 0;
-- Sufficient c_nof_block_per_sync to fit more than c_nof_packets_max offload packets per sync interval.
......@@ -222,10 +227,13 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS
SIGNAL dbg_c_nof_packets_max : NATURAL := c_nof_packets_max;
SIGNAL dbg_c_beamlet_index : NATURAL := c_beamlet_index;
SIGNAL dbg_c_packet_size : NATURAL := c_packet_size;
SIGNAL dbg_c_mm_user_size : NATURAL := c_mm_user_size;
SIGNAL dbg_c_mm_data_size : NATURAL := c_mm_data_size;
SIGNAL dbg_c_mm_step_size : NATURAL := c_mm_step_size;
SIGNAL dbg_c_mm_nof_data : NATURAL := c_mm_nof_data;
SIGNAL dbg_c_mm_ram_size : NATURAL := c_mm_ram_size;
SIGNAL dbg_c_mm_nof_step : NATURAL := c_mm_nof_step;
SIGNAL dbg_c_mm_Xsq_span : NATURAL := c_mm_Xsq_span;
SIGNAL dbg_c_ram_size : NATURAL := c_ram_size;
SIGNAL dbg_c_crosslets_info_rec : t_sdp_crosslets_info := c_crosslets_info_rec;
SIGNAL dbg_c_crosslets_info_slv : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0) := c_crosslets_info_slv;
......@@ -470,7 +478,6 @@ BEGIN
END PROCESS;
p_verify_payload : PROCESS(dp_clk)
CONSTANT c_nof_step : NATURAL := c_mm_step_size / c_mm_data_size;
VARIABLE W : NATURAL; -- 32bit Words
VARIABLE D : NATURAL; -- Data values of c_mm_data_size
VARIABLE S : NATURAL; -- Statistic values of c_sdp_W_statistic_sz
......@@ -499,8 +506,8 @@ BEGIN
-- ... ...
-- 11 1 10242 10243 10246 10247 10250 10251 ... 12286 12287
--
-- g_reverse_word_order = TRUE: swaps odd and even W columns,
-- because c_sdp_W_statistic_sz = 2
-- g_reverse_word_order = TRUE: swaps odd and even W columns, because
-- c_mm_user_size = c_sdp_W_statistic_sz = 2
W := rx_valid_cnt; -- range c_packet_size = 1024 32bit Words
S := W / c_sdp_W_statistic_sz; -- range c_nof_statistics_per_packet = 512 Statistic values
......@@ -509,16 +516,16 @@ BEGIN
U := S; -- range c_sdp_N_sub = 512 SST values
I := W MOD c_sdp_W_statistic_sz; -- range c_sdp_W_statistic_sz = 2 words
P := rx_packet_cnt; -- range c_nof_packets_max = 12 = c_sdp_S_pn Packets
J := P MOD c_nof_step; -- range c_nof_step = 2 = c_sdp_Q_fft
J := P MOD c_mm_nof_step; -- range c_mm_nof_step = 2 = c_sdp_Q_fft
v_exp_data := S * 4; -- due to c_mm_step_size = 4 = c_sdp_W_statistic_sz * c_sdp_Q_fft;
IF I = sel_a_b(g_reverse_word_order, 0, 1) THEN
v_exp_data := v_exp_data + 1; -- due to odd, even of c_sdp_W_statistic_sz = 2
v_exp_data := v_exp_data + 1; -- due to c_mm_user_size = c_sdp_W_statistic_sz = 2
END IF;
IF J = 1 THEN
v_exp_data := v_exp_data + 2; -- due to c_sdp_W_statistic_sz = 2 and c_nof_step = 2 > 1
v_exp_data := v_exp_data + 2; -- due to c_sdp_W_statistic_sz = 2 and c_mm_nof_step = 2 > 1
END IF;
v_exp_data := v_exp_data + (P/2) * 2048; -- due to c_packet_size = 1024 and c_nof_step = 2 > 1
v_exp_data := v_exp_data + (P/2) * 2048; -- due to c_packet_size = 1024 and c_mm_nof_step = 2 > 1
ASSERT v_exp_data = v_rx_data REPORT "Wrong SST payload data Rx" SEVERITY ERROR;
ELSIF g_statistics_type = "BST" THEN
......@@ -529,31 +536,30 @@ BEGIN
-- I: 0 1 2 3 0 ... 0 1 2 3
-- P: Words values:
-- 0 0 1 2 3 4 5 ... 1948 1949 1950 1951
-- g_reverse_word_order = TRUE: swaps every c_mm_data_size = 4 D columns.
-- g_reverse_word_order occurs per c_mm_data_size = 4 words, so the
-- c_sdp_N_pol_bf = 2 beam polarizations also get swapped.
--
-- g_reverse_word_order = TRUE: swaps odd and even W columns, because
-- c_mm_user_size = c_sdp_W_statistic_sz = 2
W := rx_valid_cnt; -- range c_packet_size = 1952
S := W / c_sdp_W_statistic_sz; -- range c_nof_statistics_per_packet = 976 Statistic values
D := S / c_sdp_N_pol_bf; -- range c_mm_nof_data = 488 Data values, because
-- c_mm_data_size / c_sdp_W_statistic_sz = 2 = c_sdp_N_pol_bf
B := D; -- range c_sdp_S_sub_bf = 488 dual polarization BST values
I := W MOD c_mm_data_size; -- range c_mm_data_size = 4 = c_sdp_W_statistic_sz * c_sdp_N_pol_bf
I := W MOD c_sdp_W_statistic_sz; -- range c_sdp_W_statistic_sz = 2 words
P := rx_packet_cnt; -- range c_nof_packets_max = 1
v_exp_data := B * c_mm_data_size;
v_exp_data := S * c_sdp_W_statistic_sz;
IF g_reverse_word_order = FALSE THEN
v_exp_data := v_exp_data + I;
ELSE
v_exp_data := v_exp_data - I + c_mm_data_size-1;
v_exp_data := v_exp_data - I + c_mm_user_size-1; -- c_mm_user_size = c_sdp_W_statistic_sz = 2
END IF;
ASSERT v_exp_data = v_rx_data REPORT "Wrong BST payload data Rx" SEVERITY ERROR;
ELSIF g_statistics_type = "XST" THEN
-- . g_P_sq = 4
-- . g_nof_crosslets = 3
-- . c_sdp_N_crosslets_max = 7 --> 2**ceil_log2(7 * 576) = 4096
-- . c_sdp_N_crosslets_max = 7 --> c_mm_Xsq_span = 2**ceil_log2(7 * 576) = 4096
--
-- W: 0 1 2 3 4 5 ... 572 573 574 575
-- S: 0 1 2 ... 286 287
......@@ -571,29 +577,28 @@ BEGIN
-- 9 0 3 12288 ...
-- 10 1 12864 ...
-- 11 2 13436 ...
-- g_reverse_word_order = TRUE: swaps every c_mm_data_size = 4 D columns.
-- g_reverse_word_order occurs per c_mm_data_size = 4 words, so the
-- c_nof_complex = 2 parts also get swapped.
--
-- g_reverse_word_order = TRUE: swaps odd and even W columns, because
-- c_mm_user_size = c_sdp_W_statistic_sz = 2
W := rx_valid_cnt; -- range c_packet_size = 576
S := W / c_sdp_W_statistic_sz; -- range c_nof_statistics_per_packet = 288 Statistic values
D := S / c_nof_complex; -- range c_mm_nof_data = 144 Data values, because
-- c_mm_data_size / c_sdp_W_statistic_sz = 2 = c_nof_complex
X := D; -- range c_sdp_X_sq = 144 complex XST values
I := W MOD c_mm_data_size; -- range c_mm_data_size = 4 = c_sdp_W_statistic_sz * c_nof_complex
I := W MOD c_sdp_W_statistic_sz; -- range c_sdp_W_statistic_sz = 2 words
P := rx_packet_cnt; -- range c_mm_nof_packets
J := P MOD g_nof_crosslets; -- range g_nof_crosslets
K := P / g_nof_crosslets; -- range g_P_sq
v_exp_data := X * c_mm_data_size;
v_exp_data := S * c_sdp_W_statistic_sz;
IF g_reverse_word_order = FALSE THEN
v_exp_data := v_exp_data + I;
ELSE
v_exp_data := v_exp_data - I + c_mm_data_size-1;
v_exp_data := v_exp_data - I + c_mm_user_size-1; -- c_mm_user_size = c_sdp_W_statistic_sz = 2
END IF;
v_exp_data := v_exp_data + J * 576;
v_exp_data := v_exp_data + K * 4096;
v_exp_data := v_exp_data + J * c_packet_size; -- c_packet_size = 576
v_exp_data := v_exp_data + K * c_mm_Xsq_span; -- c_mm_Xsq_span = 4096
ASSERT v_exp_data = v_rx_data REPORT "Wrong XST payload data Rx" SEVERITY ERROR;
END IF;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment