diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 7296acce10bc4df20ebdd7aad5e7f35d4c3f5913..1fd2d2c1e333e3104de5eef5c38b77fe25b05fc5 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -154,8 +154,11 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_bst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D1"; -- TBC CONSTANT c_sdp_xst_udp_src_port_15_8 : STD_LOGIC_VECTOR(7 DOWNTO 0) := x"D2"; -- TBC + CONSTANT c_sdp_cep_app_header_len : NATURAL := 32; + CONSTANT c_sdp_stat_app_header_len : NATURAL := 32; + 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"&"111111111001"&"0111"&"0100"&"000000000"&"0000100"&"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) := "1"&"101"&"111011111001"&"0101"&"0100"&"000000000"&"0000100"&"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 CONSTANT c_sdp_stat_hdr_field_arr : t_common_field_arr(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := ( @@ -167,7 +170,7 @@ PACKAGE sdp_pkg is ( field_name_pad("ip_version" ), "RW", 4, field_default(4) ), ( field_name_pad("ip_header_length" ), "RW", 4, field_default(5) ), ( field_name_pad("ip_services" ), "RW", 8, field_default(0) ), - ( field_name_pad("ip_total_length" ), "RW", 16, field_default(4156) ), + ( field_name_pad("ip_total_length" ), "RW", 16, field_default(0) ), ( field_name_pad("ip_identification" ), "RW", 16, field_default(0) ), ( field_name_pad("ip_flags" ), "RW", 3, field_default(2) ), ( field_name_pad("ip_fragment_offset" ), "RW", 13, field_default(0) ), @@ -179,7 +182,7 @@ PACKAGE sdp_pkg is ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(5001) ), - ( field_name_pad("udp_total_length" ), "RW", 16, field_default(4136) ), + ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), ( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ), 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 3824502c0b6e1a0bc7634fc3410a3427631f1988..c92f39fbfe91ca8e0c3adcfd0c5a2a2234877571 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -98,7 +98,7 @@ ARCHITECTURE str OF sdp_statistics_offload IS 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 * c_sdp_S_sub_bf, + 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_block_size : NATURAL := c_nof_data * c_step_size; @@ -115,12 +115,16 @@ ARCHITECTURE str OF sdp_statistics_offload IS 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 * c_sdp_S_sub_bf, + 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; + TYPE t_reg IS RECORD block_count : NATURAL; start_address : NATURAL; @@ -160,9 +164,11 @@ BEGIN ------------------------------------------------------------------------------- -- Assemble offload header info ------------------------------------------------------------------------------- - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port" )) <= udp_src_port; - dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "udp_src_port" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_src_port" )) <= udp_src_port; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length" )) <= TO_UVEC(c_ip_total_length, 16); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length" )) <= TO_UVEC(c_udp_total_length, 16); dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_marker" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_marker" )) <= TO_UVEC(c_marker, 8); dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_observation_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_station_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_station_id" )) <= sdp_info.station_id; 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 8b439d303ccfec7cc8b2f173d2f33721c83a18b9..db5a0922e739a0ff5d873df54fe946cb85492438 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 @@ -80,7 +80,7 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS 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 * c_sdp_S_sub_bf, + 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 @@ -108,11 +108,15 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS 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 * c_sdp_S_sub_bf, + 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; CONSTANT c_nof_valid_per_block : NATURAL := c_nof_data * c_data_size; CONSTANT c_nof_sync : NATURAL := 5; @@ -264,7 +268,7 @@ BEGIN REPORT "wrong ip_header_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_services") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_services")) = TO_UVEC(0, 8) REPORT "wrong ip_services" SEVERITY ERROR; - ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(4156, 16) + ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_total_length")) = TO_UVEC(c_ip_total_length, 16) REPORT "wrong ip_total_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "ip_identification") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "ip_identification")) = TO_UVEC(0, 16) REPORT "wrong ip_identification" SEVERITY ERROR; @@ -280,7 +284,7 @@ BEGIN REPORT "wrong ip_dst_addr" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_dst_port") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_dst_port")) = TO_UVEC(5001, 16) REPORT "wrong udp_dst_port" SEVERITY ERROR; - ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(4136, 16) + ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "udp_total_length") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "udp_total_length")) = TO_UVEC(c_udp_total_length, 16) REPORT "wrong udp_total_length" SEVERITY ERROR; ASSERT rx_hdr_fields_raw(field_hi(c_sdp_stat_hdr_field_arr, "sdp_version_id") DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_version_id")) = TO_UVEC(5, 8) REPORT "wrong sdp_version_id" SEVERITY ERROR;