diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 2668b93b27041cb0af04bc4e7c717d0028f6279d..b434b86e188fba88d402d506328b46700be37eff 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -199,6 +199,58 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_reg_nw_10GbE_mac_addr_w : NATURAL := 13; CONSTANT c_sdp_reg_nw_10GbE_eth10g_addr_w : NATURAL := 1; + -- statistics SST offload + CONSTANT c_sdp_stat_nof_hdr_fields : NATURAL := 3+12+4+20+1; -- 592b; 9.25 64b words + CONSTANT c_sdp_stat_hdr_field_sel : STD_LOGIC_VECTOR(c_sdp_stat_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"11111111111111111110"&"1"; -- 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) := ( + ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"00074306C700") ), -- 00074306C700=DOP36-eth0 + ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), + ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), + + ( 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(7868) ), + ( 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) ), + ( field_name_pad("ip_time_to_live" ), "RW", 8, field_default(127) ), + ( 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(x"C0A80001") ), -- C0A80001=DOP36-eth0 '192.168.0.1' + + ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), + ( field_name_pad("udp_total_length" ), "RW", 16, field_default(7848) ), + ( field_name_pad("udp_checksum" ), "RW", 16, field_default(0) ), + + ( field_name_pad("sdp_marker" ), "RW", 8, field_default(0) ), + ( field_name_pad("sdp_version_id" ), "RW", 8, field_default(1) ), + ( field_name_pad("sdp_observation_id" ), "RW", 32, field_default(0) ), + ( field_name_pad("sdp_station_id" ), "RW", 16, field_default(0) ), + + ( field_name_pad("sdp_source_info_antenna_band_id" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_nyquist_zone_id" ), "RW", 2, field_default(0) ), + ( field_name_pad("sdp_source_info_f_adc" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_fsub_type" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_payload_error" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_beam_repositioning_flag" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_subband_calibrated_flag" ), "RW", 1, field_default(0) ), + ( field_name_pad("sdp_source_info_reserved" ), "RW", 3, field_default(0) ), + ( field_name_pad("sdp_source_info_gn_id" ), "RW", 5, field_default(0) ), + + ( field_name_pad("sdp_reserved" ), "RW", 8, 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_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_statistics_per_package" ), "RW", 16, field_default(0) ), + ( field_name_pad("sdp_block_period" ), "RW", 16, field_default(5120) ), + + ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) + ); END PACKAGE sdp_pkg; PACKAGE BODY sdp_pkg IS 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 1e364d312a7e91a0a00f14098c023513f7769ef5..397b3b9d9d33b65619a5150c445a7dc4951a787a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_statistics_offload.vhd @@ -86,7 +86,9 @@ ENTITY sdp_statistics_offload IS reg_hdr_dat_miso : OUT t_mem_miso; in_sosi : IN t_dp_sosi; -- from selector (sst_sosi_arr[0]) + out_sosi : OUT t_dp_sosi; -- output from SST UDP offload (sst_udp_sosi) + out_siso : IN t_dp_siso; -- input from SST UDP offload (sst_udp_siso) -- inputs from other blocks eth_src_mac : IN STD_LOGIC_VECTOR(c_network_eth_mac_addr_w-1 DOWNTO 0); @@ -127,8 +129,9 @@ ARCHITECTURE str OF sdp_statistics_offload IS SIGNAL r : t_reg; SIGNAL d : t_reg; - SIGNAL m_mosi : t_mem_mosi; - SIGNAL m_miso : t_mem_miso; + SIGNAL m_mosi : t_mem_mosi; + SIGNAL m_miso : t_mem_miso; + SIGNAL trigger : STD_LOGIC := '0'; SIGNAL nof_cycles_dly : NATURAL := 0; SIGNAL mm_done : STD_LOGIC := '0'; @@ -140,65 +143,11 @@ ARCHITECTURE str OF sdp_statistics_offload IS SIGNAL dp_header_info : STD_LOGIC_VECTOR(1023 DOWNTO 0):= (OTHERS => '0'); SIGNAL payload_err : STD_LOGIC := '0'; SIGNAL integration_interval_cnt : NATURAL := 0; - SIGNAL integration_interval : STD_LOGIC_VECTOR(24-1 DOWNTO 0) := (OTHERS => '0'); - SIGNAL bsn_at_sync : STD_LOGIC_VECTOR(64-1 DOWNTO 0) := (OTHERS => '0'); - - SIGNAL sdp_data_id : STD_LOGIC_VECTOR(32-1 DOWNTO 0); - - ------------------------------------------------------------------------------- - -- dp_offload_tx - ------------------------------------------------------------------------------- - CONSTANT c_nof_hdr_fields : NATURAL := 3+12+4+20+1; -- 592b; 9.25 64b words - -- c_hdr_field_sel for each field: 0=data path, 1=MM controlled - CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111001"&"0111"&"00000000000000000000"&"0"; -- TODO - - CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"00074306C700") ), -- 00074306C700=DOP36-eth0 - ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), - ( field_name_pad("eth_type" ), "RO", 16, field_default(x"0800") ), - - ( field_name_pad("ip_version" ), "RO", 4, field_default(4) ), - ( field_name_pad("ip_header_length" ), "RO", 4, field_default(5) ), - ( field_name_pad("ip_services" ), "RO", 8, field_default(0) ), - ( field_name_pad("ip_total_length" ), "RO", 16, field_default(7868) ), - ( field_name_pad("ip_identification" ), "RO", 16, field_default(0) ), - ( field_name_pad("ip_flags" ), "RO", 3, field_default(2) ), - ( field_name_pad("ip_fragment_offset" ), "RO", 13, field_default(0) ), - ( field_name_pad("ip_time_to_live" ), "RO", 8, field_default(127) ), - ( field_name_pad("ip_protocol" ), "RO", 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(x"C0A80001") ), -- C0A80001=DOP36-eth0 '192.168.0.1' - - ( field_name_pad("udp_src_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_dst_port" ), "RW", 16, field_default(0) ), - ( field_name_pad("udp_total_length" ), "RO", 16, field_default(7848) ), - ( field_name_pad("udp_checksum" ), "RO", 16, field_default(0) ), - - ( field_name_pad("sdp_marker" ), "RO", 8, field_default(c_marker) ), - ( field_name_pad("sdp_version_id" ), "RO", 8, field_default(c_version) ), - ( field_name_pad("sdp_observation_id" ), "RW", 32, field_default(0) ), - ( field_name_pad("sdp_station_id" ), "RW", 16, field_default(0) ), - - ( field_name_pad("sdp_source_info_antenna_band_id" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_nyquist_zone_id" ), "RW", 2, field_default(0) ), - ( field_name_pad("sdp_source_info_f_adc" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_fsub_type" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_payload_error" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_beam_repositioning_flag" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_subband_calibrated_flag" ), "RW", 1, field_default(0) ), - ( field_name_pad("sdp_source_info_reserved" ), "RO", 3, field_default(0) ), - ( field_name_pad("sdp_source_info_gn_id" ), "RW", 5, field_default(0) ), - - ( field_name_pad("sdp_reserved" ), "RO", 8, 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_nof_signal_inputs" ), "RO", 8, field_default(c_nof_signal_inputs) ), - ( field_name_pad("sdp_nof_bytes_per_statistics" ), "RO", 8, field_default(8) ), - ( field_name_pad("sdp_nof_statistics_per_package" ), "RO", 16, field_default(c_nof_statistics_per_package) ), - ( field_name_pad("sdp_block_period" ), "RO", 16, field_default(5120) ), - - ( field_name_pad("dp_bsn" ), "RW", 64, field_default(0) ) ); + SIGNAL integration_interval : STD_LOGIC_VECTOR(23 DOWNTO 0) := (OTHERS => '0'); + SIGNAL bsn_at_sync : STD_LOGIC_VECTOR(63 DOWNTO 0) := x"f0f0f0f0f0f0f0f0"; -- (OTHERS => '0'); + SIGNAL sdp_data_id : STD_LOGIC_VECTOR(31 DOWNTO 0); + BEGIN m_mosi <= master_mosi; @@ -208,7 +157,7 @@ BEGIN p_bsn_at_sync : PROCESS(in_sosi) BEGIN IF in_sosi.sync = '1' THEN - bsn_at_sync <= in_sosi.bsn(63 DOWNTO 0); + bsn_at_sync(63 DOWNTO 0) <= in_sosi.bsn(63 DOWNTO 0); END IF; END PROCESS; @@ -243,27 +192,30 @@ BEGIN ------------------------------------------------------------------------------- -- Assemble offload info ------------------------------------------------------------------------------- - dp_header_info(field_hi(c_hdr_field_arr, "eth_src_mac" ) DOWNTO field_lo(c_hdr_field_arr, "eth_src_mac" )) <= eth_src_mac; - dp_header_info(field_hi(c_hdr_field_arr, "udp_src_port") DOWNTO field_lo(c_hdr_field_arr, "udp_src_port")) <= udp_src_port; - dp_header_info(field_hi(c_hdr_field_arr, "ip_src_addr" ) DOWNTO field_lo(c_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_hdr_field_arr, "sdp_observation_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_observation_id" )) <= sdp_info.observation_id; - dp_header_info(field_hi(c_hdr_field_arr, "sdp_station_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_station_id" )) <= sdp_info.station_id; - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_antenna_band_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_f_adc" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_fsub_type" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(sdp_info.fsub_type); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_payload_error" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_payload_error" )) <= SLV(payload_err); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_subband_calibrated_flag" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_subband_calibrated_flag" )) <= SLV(sdp_info.subband_calibrated_flag); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_reserved" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_reserved" )) <= (OTHERS => '0'); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_source_info_gn_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_source_info_gn_id" )) <= TO_UVEC(gn_index, 5); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_reserved" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_reserved" )) <= (OTHERS => '0'); - dp_header_info(field_hi(c_hdr_field_arr, "sdp_integration_interval" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_integration_interval" )) <= integration_interval; - dp_header_info(field_hi(c_hdr_field_arr, "sdp_data_id" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_data_id" )) <= sdp_data_id; - dp_header_info(field_hi(c_hdr_field_arr, "sdp_block_period" ) DOWNTO field_lo(c_hdr_field_arr, "sdp_block_period" )) <= sdp_info.block_period; - - dp_header_info(field_hi(c_hdr_field_arr, "dp_bsn" ) DOWNTO field_lo(c_hdr_field_arr, "dp_bsn" )) <= bsn_at_sync; + 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; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_antenna_band_id" )) <= SLV(sdp_info.antenna_band_index); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_nyquist_zone_id" )) <= sdp_info.nyquist_zone_index; + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_f_adc" )) <= SLV(sdp_info.f_adc); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_fsub_type" )) <= SLV(sdp_info.fsub_type); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_payload_error" )) <= SLV(payload_err); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_beam_repositioning_flag" )) <= SLV(sdp_info.beam_repositioning_flag); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_subband_calibrated_flag" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_subband_calibrated_flag" )) <= SLV(sdp_info.subband_calibrated_flag); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_reserved" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_reserved" )) <= (OTHERS => '0'); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_source_info_gn_id" )) <= TO_UVEC(gn_index, 5); + dp_header_info(field_hi(c_sdp_stat_hdr_field_arr, "sdp_reserved" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_reserved" )) <= (OTHERS => '0'); + 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" )) <= integration_interval; + 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" )) <= sdp_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_statistics_per_package" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "sdp_nof_statistics_per_package" )) <= TO_UVEC(c_nof_statistics_per_package, 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, "dp_bsn" ) DOWNTO field_lo(c_sdp_stat_hdr_field_arr, "dp_bsn" )) <= bsn_at_sync; @@ -319,7 +271,7 @@ BEGIN u_mms_common_variable_delay : ENTITY common_lib.mms_common_variable_delay GENERIC MAP ( - g_max_delay => 1 + g_max_delay => 4 ) PORT MAP ( mm_rst => mm_rst, @@ -359,8 +311,8 @@ BEGIN g_nof_streams => c_nof_streams, g_data_w => c_word_w, g_symbol_w => c_byte_w, - g_hdr_field_arr => c_hdr_field_arr, - g_hdr_field_sel => c_hdr_field_sel + g_hdr_field_arr => c_sdp_stat_hdr_field_arr, + g_hdr_field_sel => c_sdp_stat_hdr_field_sel ) PORT MAP( mm_rst => mm_rst, @@ -372,6 +324,7 @@ BEGIN snk_in_arr(0) => dp_block_from_mm_src_out, snk_out_arr(0) => dp_block_from_mm_src_in, src_out_arr(0) => out_sosi, + src_in_arr(0) => out_siso, hdr_fields_in_arr(0) => r.dp_header_info -- hdr_fields_in_arr(i) is considered valid @ snk_in_arr(i).sop ); END str; 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 0f95f9a467771a3254ac791b060cee4769931b32..b03f7979aab618b8831e1bd8ca58965b0e382d7e 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 @@ -92,14 +92,17 @@ ARCHITECTURE tb OF tb_sdp_statistics_offload IS SIGNAL hdr_dat_miso : t_mem_miso; SIGNAL in_sosi : t_dp_sosi := c_dp_sosi_rst; - SIGNAL out_sosi : t_dp_sosi; + SIGNAL offload_sosi : t_dp_sosi; + SIGNAL offload_siso : t_dp_siso := c_dp_siso_rst; + + SIGNAL test_offload_sosi : t_dp_sosi; -- signals used to change settings of sdp_info SIGNAL gn_index : NATURAL := 15; SIGNAL f_adc : STD_LOGIC := '0'; SIGNAL fsub_type : STD_LOGIC := '0'; - SIGNAL sdp_info : t_sdp_info; + SIGNAL sdp_info : t_sdp_info := ( x"0001", '0', x"00000003", b"01", '0', '0', '0', '0', x"00", x"00", x"00", x"00", x"0000", x"0000"); -- signals used for response of mm bus SIGNAL mm_natural_response : NATURAL; @@ -146,6 +149,8 @@ BEGIN -- enable common variabel delay proc_mem_mm_bus_wr(c_mm_addr_enable, 1, mm_clk, enable_miso, enable_mosi); proc_common_wait_some_cycles(mm_clk, c_cross_clock_domain_latency); + --offload_siso <= c_dp_siso_rdy; + proc_common_wait_some_cycles(mm_clk, 1); FOR i IN 0 TO g_nof_signal_inputs_per_pn LOOP in_sosi.sync <= '1'; in_sosi.valid <= '1'; @@ -172,9 +177,9 @@ BEGIN proc_common_wait_some_cycles(mm_clk, 100); -- station_id, antenna_band_index, observation_id, nyquist_zone_index, f_adc, fsub_type, beam_repositioning_flag, subband_calibrated_flag, O_si, N_si, O_rn, N_rn, block_period, beamlet_scale - sdp_info <= ( x"0001", '0', x"00000003", b"01", '0', '0', '0', '0', x"00", x"00", x"00", x"00", x"0000", x"0000"); + --sdp_info <= ( x"0001", '0', x"00000003", b"01", '0', '0', '0', '0', x"00", x"00", x"00", x"00", x"0000", x"0000"); proc_common_wait_some_cycles(mm_clk, 1); - out_sosi.sync <= '1'; + --in_sosi.sync <= '1'; proc_common_wait_some_cycles(mm_clk, 100); tb_end <= '1'; @@ -209,6 +214,21 @@ BEGIN rd_val_b => OPEN ); + p_test_offload : PROCESS(offload_sosi, in_sosi) + BEGIN + offload_siso <= c_dp_siso_rst; + IF init_ram_done = '1' THEN + test_offload_sosi <= c_dp_sosi_rst; + test_offload_sosi.data <= offload_sosi.data; + test_offload_sosi.empty <= offload_sosi.empty; + test_offload_sosi.valid <= offload_sosi.valid; + test_offload_sosi.sop <= offload_sosi.sop; + test_offload_sosi.eop <= offload_sosi.eop; + + offload_siso <= c_dp_siso_rdy; + END IF; + END PROCESS; + -- SDP info u_dut: ENTITY work.sdp_statistics_offload GENERIC MAP ( @@ -236,7 +256,8 @@ BEGIN gn_index => gn_index, in_sosi => in_sosi, - out_sosi => out_sosi, + out_sosi => offload_sosi, + out_siso => offload_siso, eth_src_mac => c_eth_src_mac, udp_src_port => c_udp_src_port,