diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index b56659d1cbd979a31db04feb6da4a07b52a2db6d..2d7c4e025a92d8189eddbde55e5d217f758dd9fa 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -237,9 +237,11 @@ PACKAGE sdp_pkg is --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"; -- previous 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"; -- initial + -- Default use destination MAC/IP/UDP = 0, so these have to be MM programmed before + -- statistics offload packets can be send. CONSTANT c_sdp_stat_hdr_field_arr : t_common_field_arr(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("word_align" ), "RW", 16, field_default(0) ), -- Tx TSE IP will strip these 2 padding bytes - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(c_sdp_stat_eth_dst_mac) ), + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), -- c_sdp_stat_eth_dst_mac ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), @@ -254,10 +256,10 @@ PACKAGE sdp_pkg is ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), - ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(c_sdp_stat_ip_dst_addr) ), + ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_sdp_stat_ip_dst_addr ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(c_sdp_stat_udp_dst_port) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_sdp_stat_udp_dst_port ( field_name_pad("udp_total_length" ), "RW", 16, field_default(0) ), -- differs for SST, BST, XST so set by data path ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), @@ -370,8 +372,10 @@ PACKAGE sdp_pkg is --CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"1100"&"00000010"&"000110"&"0"; -- previous 27 sep 2022 --CONSTANT c_sdp_cep_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := "100"&"000000010001"&"0100"&"0100"&"00000000"&"101000"&"0"; -- initial - CONSTANT c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := ( - ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(c_sdp_cep_eth_dst_mac) ), + -- Default use source MAC/IP/UDP = 0 and destination MAC/IP/UDP = 0, so these have to be MM programmed + -- before beamlet output packets can be send. + CONSTANT c_sdp_cep_hdr_field_arr : t_common_field_arr(c_sdp_cep_nof_hdr_fields-1 DOWNTO 0) := ( + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(0) ), -- c_sdp_cep_eth_dst_mac ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), @@ -386,10 +390,10 @@ PACKAGE sdp_pkg is ( field_name_pad("ip_protocol" ), "RW", 8, field_default(17) ), ( field_name_pad("ip_header_checksum" ), "RW", 16, field_default(0) ), ( field_name_pad("ip_src_addr" ), "RW", 32, field_default(0) ), - ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(c_sdp_cep_ip_dst_addr) ), + ( field_name_pad("ip_dst_addr" ), "RW", 32, field_default(0) ), -- c_sdp_cep_ip_dst_addr ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(c_sdp_cep_udp_dst_port) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), -- c_sdp_cep_udp_dst_port ( field_name_pad("udp_total_length" ), "RW", 16, field_default(c_sdp_cep_udp_total_length) ), ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), 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 fa06e0c1e3a4df6b9e42e0e8ebec979e3bbd489a..f7463f09656b2d0eea9446b78ae297644308ba19 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 @@ -322,6 +322,13 @@ BEGIN BEGIN proc_common_wait_until_low(dp_clk, mm_rst); proc_common_wait_some_cycles(mm_clk, 10); + -- Write statistics offload destination MAC/IP/UDP + -- . obtain relative MM word addresses e.g. from lofar2_unb2c_sdp_station.mmap or from sdp.peripheral.yaml + proc_mem_mm_bus_wr(16#18#, TO_UINT(c_sdp_stat_udp_dst_port), mm_clk, hdr_dat_miso, hdr_dat_mosi); + proc_mem_mm_bus_wr(16#1A#, TO_UINT(c_sdp_stat_ip_dst_addr), mm_clk, hdr_dat_miso, hdr_dat_mosi); + proc_mem_mm_bus_wr(16#29#, TO_SINT(c_sdp_stat_eth_dst_mac(31 DOWNTO 0)), mm_clk, hdr_dat_miso, hdr_dat_mosi); -- use signed to fit 32 b in INTEGER + proc_mem_mm_bus_wr(16#2A#, TO_UINT(c_sdp_stat_eth_dst_mac(47 DOWNTO 32)), mm_clk, hdr_dat_miso, hdr_dat_mosi); + -- Enable common variable delay. proc_mem_mm_bus_wr(c_reg_enable_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi); proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency);