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

Define sdp_nof_bytes_per_statistic (without s) via data path in c_sdp_stat_hdr_field_sel.

parent dfc69443
No related branches found
No related tags found
1 merge request!175Added t_sdp_sim. Add func_sdp_get_stat_*() functions to determine the header...
...@@ -166,6 +166,7 @@ PACKAGE sdp_pkg is ...@@ -166,6 +166,7 @@ PACKAGE sdp_pkg is
-- packet lengths, see ICD SC-SDP -- 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_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_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_stat_app_header_len : NATURAL := 32; CONSTANT c_sdp_stat_app_header_len : NATURAL := 32;
...@@ -193,7 +194,7 @@ PACKAGE sdp_pkg is ...@@ -193,7 +194,7 @@ PACKAGE sdp_pkg is
CONSTANT c_sdp_stat_version_id : NATURAL := 5; CONSTANT c_sdp_stat_version_id : NATURAL := 5;
CONSTANT c_sdp_stat_nof_hdr_fields : NATURAL := 1+3+12+4+20+1; -- 608b; 19 32b words CONSTANT c_sdp_stat_nof_hdr_fields : NATURAL := 1+3+12+4+20+1; -- 608b; 19 32b words
CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111011111001"&"0100"&"0100"&"000000010"&"1000100"&"0"; -- 0=data path, 1=MM controlled CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111011111001"&"0100"&"0100"&"000000010"&"1000000"&"0"; -- 0=data path, 1=MM controlled
--CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111011111001"&"0101"&"0100"&"000000000"&"0000100"&"0"; -- 0=data path, 1=MM controlled TODO (26 nov 2021) --CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "1"&"101"&"111011111001"&"0101"&"0100"&"000000000"&"0000100"&"0"; -- 0=data path, 1=MM controlled TODO (26 nov 2021)
--CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "0"&"100"&"000000010001"&"0100"&"0100"&"000000010"&"1000000"&"0"; -- 0=data path, 1=MM controlled TODO --CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "0"&"100"&"000000010001"&"0100"&"0100"&"000000010"&"1000000"&"0"; -- 0=data path, 1=MM controlled TODO
...@@ -240,7 +241,7 @@ PACKAGE sdp_pkg is ...@@ -240,7 +241,7 @@ PACKAGE sdp_pkg is
( field_name_pad("sdp_integration_interval" ), "RW", 24, field_default(0) ), ( field_name_pad("sdp_integration_interval" ), "RW", 24, field_default(0) ),
( field_name_pad("sdp_data_id" ), "RW", 32, field_default(0) ), ( field_name_pad("sdp_data_id" ), "RW", 32, field_default(0) ),
( field_name_pad("sdp_nof_signal_inputs" ), "RW", 8, field_default(0) ), ( field_name_pad("sdp_nof_signal_inputs" ), "RW", 8, field_default(0) ),
( field_name_pad("sdp_nof_bytes_per_statistics" ), "RW", 8, field_default(8) ), ( field_name_pad("sdp_nof_bytes_per_statistic" ), "RW", 8, field_default(c_sdp_nof_bytes_per_statistic) ),
( field_name_pad("sdp_nof_statistics_per_packet" ), "RW", 16, field_default(0) ), ( field_name_pad("sdp_nof_statistics_per_packet" ), "RW", 16, field_default(0) ),
( field_name_pad("sdp_block_period" ), "RW", 16, field_default(c_sdp_block_period) ), ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(c_sdp_block_period) ),
...@@ -273,7 +274,7 @@ PACKAGE sdp_pkg is ...@@ -273,7 +274,7 @@ PACKAGE sdp_pkg is
sdp_data_id_xst_signal_input_A_index : STD_LOGIC_VECTOR(15 DOWNTO 8); -- sdp_data_id sub field sdp_data_id_xst_signal_input_A_index : STD_LOGIC_VECTOR(15 DOWNTO 8); -- sdp_data_id sub field
sdp_data_id_xst_signal_input_B_index : STD_LOGIC_VECTOR( 7 DOWNTO 0); -- sdp_data_id sub field sdp_data_id_xst_signal_input_B_index : STD_LOGIC_VECTOR( 7 DOWNTO 0); -- sdp_data_id sub field
sdp_nof_signal_inputs : STD_LOGIC_VECTOR( 7 DOWNTO 0); sdp_nof_signal_inputs : STD_LOGIC_VECTOR( 7 DOWNTO 0);
sdp_nof_bytes_per_statistics : STD_LOGIC_VECTOR( 7 DOWNTO 0); sdp_nof_bytes_per_statistic : STD_LOGIC_VECTOR( 7 DOWNTO 0);
sdp_nof_statistics_per_packet : STD_LOGIC_VECTOR(15 DOWNTO 0); sdp_nof_statistics_per_packet : STD_LOGIC_VECTOR(15 DOWNTO 0);
sdp_block_period : STD_LOGIC_VECTOR(15 DOWNTO 0); sdp_block_period : STD_LOGIC_VECTOR(15 DOWNTO 0);
...@@ -454,6 +455,15 @@ PACKAGE sdp_pkg is ...@@ -454,6 +455,15 @@ PACKAGE sdp_pkg is
nof_dat => 16, -- 15 offsets + 1 step nof_dat => 16, -- 15 offsets + 1 step
init_sl => '0'); init_sl => '0');
CONSTANT c_sdp_crosslets_info_reg_w : NATURAL := c_sdp_mm_reg_crosslets_info.nof_dat*c_sdp_mm_reg_crosslets_info.dat_w; CONSTANT c_sdp_crosslets_info_reg_w : NATURAL := c_sdp_mm_reg_crosslets_info.nof_dat*c_sdp_mm_reg_crosslets_info.dat_w;
CONSTANT c_sdp_crosslets_info_nof_offsets : NATURAL := c_sdp_mm_reg_crosslets_info.nof_dat - 1;
TYPE t_sdp_crosslets_info IS RECORD
offset_arr : t_natural_arr(0 TO c_sdp_crosslets_info_nof_offsets-1);
step : NATURAL;
END RECORD;
FUNCTION func_extract_crosslets_info(info_slv : STD_LOGIC_VECTOR) RETURN t_sdp_crosslets_info;
FUNCTION func_construct_crosslets_info(info_rec : t_sdp_crosslets_info) RETURN STD_LOGIC_VECTOR;
CONSTANT c_sdp_mm_reg_nof_crosslets : t_c_mem := (latency => 1, CONSTANT c_sdp_mm_reg_nof_crosslets : t_c_mem := (latency => 1,
adr_w => 1, adr_w => 1,
...@@ -618,7 +628,7 @@ PACKAGE BODY sdp_pkg IS ...@@ -618,7 +628,7 @@ PACKAGE BODY sdp_pkg IS
v.app.sdp_data_id_xst_signal_input_A_index := v.app.sdp_data_id(15 DOWNTO 8); v.app.sdp_data_id_xst_signal_input_A_index := v.app.sdp_data_id(15 DOWNTO 8);
v.app.sdp_data_id_xst_signal_input_B_index := v.app.sdp_data_id( 7 DOWNTO 0); v.app.sdp_data_id_xst_signal_input_B_index := v.app.sdp_data_id( 7 DOWNTO 0);
v.app.sdp_nof_signal_inputs := hdr_fields_raw(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")); v.app.sdp_nof_signal_inputs := hdr_fields_raw(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"));
v.app.sdp_nof_bytes_per_statistics := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistics") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistics")); v.app.sdp_nof_bytes_per_statistic := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic"));
v.app.sdp_nof_statistics_per_packet := hdr_fields_raw(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")); v.app.sdp_nof_statistics_per_packet := hdr_fields_raw(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"));
v.app.sdp_block_period := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period")); v.app.sdp_block_period := hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_block_period") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_block_period"));
...@@ -681,4 +691,25 @@ PACKAGE BODY sdp_pkg IS ...@@ -681,4 +691,25 @@ PACKAGE BODY sdp_pkg IS
RETURN v; RETURN v;
END sdp_extract_cep_header; END sdp_extract_cep_header;
FUNCTION func_extract_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 c_sdp_crosslets_info_nof_offsets-1 LOOP
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_extract_crosslets_info;
FUNCTION func_construct_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 c_sdp_crosslets_info_nof_offsets-1 LOOP
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_construct_crosslets_info;
END sdp_pkg; END sdp_pkg;
...@@ -78,12 +78,13 @@ ENTITY sdp_statistics_offload IS ...@@ -78,12 +78,13 @@ ENTITY sdp_statistics_offload IS
eth_src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); eth_src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0);
udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0);
ip_src_addr : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); ip_src_addr : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0);
gn_index : IN NATURAL;
sdp_info : IN t_sdp_info; sdp_info : IN t_sdp_info;
subband_calibrated_flag : IN STD_LOGIC := '0'; subband_calibrated_flag : IN STD_LOGIC := '0';
nof_crosslets : IN STD_LOGIC_VECTOR(c_sdp_nof_crosslets_reg_w-1 DOWNTO 0) := (OTHERS => '0'); nof_crosslets : IN STD_LOGIC_VECTOR(c_sdp_nof_crosslets_reg_w-1 DOWNTO 0) := (OTHERS => '0');
crosslets_info : IN STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0) := (OTHERS => '0'); crosslets_info : IN STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0) := (OTHERS => '0')
gn_index : IN NATURAL
); );
END sdp_statistics_offload; END sdp_statistics_offload;
...@@ -160,7 +161,7 @@ BEGIN ...@@ -160,7 +161,7 @@ BEGIN
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Assemble offload header info, for data path fields that are selected by: -- Assemble offload header info, for data path fields that are selected by:
-- c_sdp_stat_hdr_field_sel = "1"&"101"&"111011111001"&"0100"&"0100"&"000000010"&"1000100"&"0" -- c_sdp_stat_hdr_field_sel = "1"&"101"&"111011111001"&"0100"&"0100"&"000000010"&"1000000"&"0"
-- eth ip udp app -- eth ip udp app
-- where 0 = data path, 1 = MM controlled. The '0' fields are assigned here in dp_header_info -- where 0 = data path, 1 = MM controlled. The '0' fields are assigned here in dp_header_info
-- in order: -- in order:
...@@ -182,6 +183,7 @@ BEGIN ...@@ -182,6 +183,7 @@ BEGIN
-- sdp_source_info_subband_calibrated_flag, -- sdp_source_info_subband_calibrated_flag,
-- sdp_source_info_gn_id, -- sdp_source_info_gn_id,
-- - sdp_integration_interval, sdp_data_id, sdp_nof_signal_inputs, -- - sdp_integration_interval, sdp_data_id, sdp_nof_signal_inputs,
-- sdp_nof_bytes_per_statistic,
-- sdp_nof_statistics_per_packet, sdp_block_period -- sdp_nof_statistics_per_packet, sdp_block_period
-- - dp_bsn -- - dp_bsn
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -204,6 +206,7 @@ BEGIN ...@@ -204,6 +206,7 @@ BEGIN
dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" )) <= TO_UVEC(r.integration_interval, 24); dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_integration_interval" )) <= TO_UVEC(r.integration_interval, 24);
dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id" )) <= r.data_id; dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_data_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_data_id" )) <= r.data_id;
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_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_bytes_per_statistic" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_bytes_per_statistic" )) <= TO_UVEC(c_sdp_nof_bytes_per_statistic, 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_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, "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;
......
...@@ -107,7 +107,7 @@ PACKAGE BODY tb_sdp_pkg IS ...@@ -107,7 +107,7 @@ PACKAGE BODY tb_sdp_pkg IS
END IF; END IF;
ASSERT in_hdr.app.sdp_nof_signal_inputs = exp_hdr.app.sdp_nof_signal_inputs REPORT "Wrong " & g_statistics_type & " app.sdp_nof_signal_inputs" SEVERITY ERROR; ASSERT in_hdr.app.sdp_nof_signal_inputs = exp_hdr.app.sdp_nof_signal_inputs REPORT "Wrong " & g_statistics_type & " app.sdp_nof_signal_inputs" SEVERITY ERROR;
ASSERT in_hdr.app.sdp_nof_bytes_per_statistics = exp_hdr.app.sdp_nof_bytes_per_statistics REPORT "Wrong " & g_statistics_type & " app.sdp_nof_bytes_per_statistics" SEVERITY ERROR; ASSERT in_hdr.app.sdp_nof_bytes_per_statistic = exp_hdr.app.sdp_nof_bytes_per_statistic REPORT "Wrong " & g_statistics_type & " app.sdp_nof_bytes_per_statistic" SEVERITY ERROR;
ASSERT in_hdr.app.sdp_nof_statistics_per_packet = exp_hdr.app.sdp_nof_statistics_per_packet REPORT "Wrong " & g_statistics_type & " app.sdp_nof_statistics_per_packet" SEVERITY ERROR; ASSERT in_hdr.app.sdp_nof_statistics_per_packet = exp_hdr.app.sdp_nof_statistics_per_packet REPORT "Wrong " & g_statistics_type & " app.sdp_nof_statistics_per_packet" SEVERITY ERROR;
ASSERT in_hdr.app.sdp_block_period = sdp_info.block_period REPORT "Wrong " & g_statistics_type & " app.sdp_block_period" SEVERITY ERROR; ASSERT in_hdr.app.sdp_block_period = sdp_info.block_period REPORT "Wrong " & g_statistics_type & " app.sdp_block_period" SEVERITY ERROR;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment