From 785f5332ded199130f83ce5b51edff9c27a55bd6 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Thu, 29 Sep 2022 14:36:03 +0200 Subject: [PATCH] Clarify use of c_sdp_cep_hdr_field_sel. --- .../sdp/src/vhdl/sdp_beamformer_output.vhd | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd index 091abd86db..d41061f0c0 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd @@ -64,6 +64,7 @@ ENTITY sdp_beamformer_output IS beamlet_scale : IN STD_LOGIC_VECTOR(c_sdp_W_beamlet_scale-1 DOWNTO 0); gn_id : IN STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0); + -- Source MAC/IP/UDP are not used, c_sdp_cep_hdr_field_sel selects MM programmable instead eth_src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); ip_src_addr : IN STD_LOGIC_VECTOR(c_network_ip_addr_w-1 DOWNTO 0); udp_src_port : IN STD_LOGIC_VECTOR(c_network_udp_port_w-1 DOWNTO 0); @@ -204,6 +205,62 @@ BEGIN ------------------------------------------------------------------------------- -- Assemble offload info ------------------------------------------------------------------------------- + -- Whether the dp_offload_tx_hdr_fields value is actually used in the Tx header depends on c_sdp_cep_hdr_field_sel + -- . c_sdp_cep_hdr_field_sel = "111"&"111111111011"&"1110"&"1100"&"00000010"&"100110"&"0"; + -- eth ip udp app + -- where 0 = data path, 1 = MM controlled. The '0' fields are assigned here via dp_offload_tx_hdr_fields. + -- in order: + -- access field + -- MM eth_dst_mac + -- MM eth_src_mac + -- MM eth_type + -- + -- MM ip_version + -- MM ip_header_length + -- MM ip_services + -- MM ip_total_length + -- MM ip_identification + -- MM ip_flags + -- MM ip_fragment_offset + -- MM ip_time_to_live + -- MM ip_protocol + -- DP ip_header_checksum --> added by u_tr_10GbE_ip_checksum + -- MM ip_src_addr + -- MM ip_dst_addr + -- + -- MM udp_src_port + -- MM udp_dst_port + -- MM udp_total_length + -- DP udp_checksum --> default fixed 0, so not used, not calculated here or in tr_10GbE + -- because would require store and forward + -- + -- MM sdp_marker + -- MM sdp_version_id + -- DP sdp_observation_id + -- DP sdp_station_id + -- + -- DP sdp_source_info_antenna_band_id + -- DP sdp_source_info_nyquist_zone_id + -- DP sdp_source_info_f_adc + -- DP sdp_source_info_fsub_type + -- DP sdp_source_info_payload_error + -- DP sdp_source_info_repositioning_flag + -- MM sdp_source_info_beamlet_width + -- DP sdp_source_info_gn_id + -- + -- MM sdp_reserved + -- DP sdp_beamlet_scale + -- DP sdp_beamlet_index + -- MM sdp_nof_blocks_per_packet + -- MM sdp_nof_beamlets_per_block + -- DP sdp_block_period + -- + -- DP dp_bsn + + -- Use MM programmable source MAC/IP/UDP instead of source MAC/IP/UDP based on node ID. This is necessary because + -- beamlet packets from different stations must have different source MAC/IP/UDP. + -- Hence the eth_src_mac, udp_src_port and ip_src_addr are ignored, because c_sdp_cep_hdr_field_sel selects MM control, + -- but keep the code to be able to enable using them by just changing the selection bit. dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "udp_src_port")) <= udp_src_port; dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "ip_src_addr" )) <= ip_src_addr; @@ -217,7 +274,7 @@ BEGIN dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_payload_error" )) <= payload_err; dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_repositioning_flag" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_source_info_gn_id" )) <= gn_id; - dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_reserved" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_reserved" )) <= (OTHERS => '0'); + dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_scale" )) <= beamlet_scale; dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_beamlet_index" )) <= TO_UVEC(c_beamlet_index, c_halfword_w); dp_offload_tx_hdr_fields(field_hi(c_sdp_cep_hdr_field_arr, "sdp_block_period" ) DOWNTO field_lo(c_sdp_cep_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; -- GitLab