diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4.vhd index 85f5fa36a04819348b9c9f8f0737590eacb8a5c4..ed8b3fd0fc18cb71b0f97141abff48180b607852 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4.vhd @@ -49,7 +49,7 @@ ENTITY arts_unb1_sc4 IS GENERIC ( g_sim : BOOLEAN := FALSE; -- Overridden by simulation test bench g_omit_proc : BOOLEAN := FALSE; -- Overridden by simulation test bench - g_use_10GbE : BOOLEAN := FALSE; -- Overridden by simulation test bench, change to TRUE to synthesise full design + g_use_10GbE : BOOLEAN := FALSE; -- Overridden by simulation test bench, change to TRUE to synthesise full design g_stamp_date : NATURAL := 0; -- Date (YYYYMMDD) -- set by QSF g_stamp_time : NATURAL := 0; -- Time (HHMMSS) -- set by QSF g_stamp_svn : NATURAL := 0; -- SVN revision -- set by QSF @@ -359,7 +359,6 @@ BEGIN GENERIC MAP ( g_sim => g_sim, g_nof_telescopes => c_nof_telescopes, - --g_use_wpfb => TRUE, -- normally should be in g_nof_tabs => c_nof_tabs ) PORT MAP ( diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_packetizer.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_packetizer.vhd index a91920fa6fafba5b89a887fdedff13ab4c0d5fb0..5619f1e76348620305f5c58e782f0f1bb6c50c14 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_packetizer.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_packetizer.vhd @@ -110,21 +110,23 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_packetizer IS CONSTANT c_nof_blocks_per_packet : NATURAL := 1; CONSTANT c_nof_offloadstreams : NATURAL := 5; CONSTANT c_udp_dst_prt_base : NATURAL := 5000; - CONSTANT c_nof_bytes_per_header : NATURAL := 94; + CONSTANT c_nof_bytes_per_header : NATURAL := 90; CONSTANT c_fifo_fill_fill : NATURAL := ceil_div((g_nof_bytes_per_packet + c_nof_bytes_per_header), 8); CONSTANT c_fifo_fill_size : NATURAL := 1024; - CONSTANT c_nof_hdr_fields : NATURAL := 1 + 3 + 12 + 4 + 9 + 8; - CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "1" & "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input + --CONSTANT c_nof_hdr_fields : NATURAL := 1 + 3 + 12 + 4 + 9 + 8; + --CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "1" & "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input + CONSTANT c_nof_hdr_fields : NATURAL := 3 + 12 + 4 + 9 + 8; + CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input -- Notes: -- . pre-calculated ip_header_checksum is valid only for UNB0, FN0 targeting IP 10.10.10.10 - -- . udp_total_length = 6250B + 24 flag bytes + 16 ID bytes + 8 UDP bytes = B + -- . udp_total_length = 6250B + 24 flag bytes + 24 ID bytes + 8 UDP bytes = 6306 -- . id_channel carries subband index shifted 4b for IQUV packets (always carry 4 channels): -- . channel = 0 : sb0/ch0,1,2,3 -- . channel = 4 : sb1/ch0,1,2,3 -- . etc. - CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("word_align" ), "RW", 16, field_default(0) ), + CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( --( field_name_pad("word_align" ), "RW", 16, field_default(0) ), ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"7cfe90927c30") ), ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), @@ -152,7 +154,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_packetizer IS ( field_name_pad("id_application_payload_size" ), "RW", 16, field_default(6250) ), ( field_name_pad("id_timestamp" ), "RW", 64, field_default(0) ), ( field_name_pad("id_sequence_number" ), "RW", 8, field_default(0) ), - ( field_name_pad("id_reserved" ), "RW", 72, field_default(0) ), + ( field_name_pad("id_reserved" ), "RW", 56, field_default(0) ), ( field_name_pad("flags_crc_error" ), "RW", 24, field_default(0) ), ( field_name_pad("flags_no_input_present" ), "RW", 24, field_default(0) ), ( field_name_pad("flags_uploading_weights" ), "RW", 24, field_default(0) ), diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_buffer.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_buffer.vhd index 972261e02465759bd2b7f7bdb576c6d8067d653b..c31072c7fdff4ae1a0cb1cd2efc8a610083eda94 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_buffer.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_buffer.vhd @@ -78,6 +78,8 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_buffer IS SIGNAL dp_pipeline_ready_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs-1); SIGNAL dp_counter_count_src_out_arr : t_dp_sosi_arr(0 DOWNTO 0); SIGNAL dp_mux_src_in : t_dp_siso; + SIGNAL dp_mux_src_out : t_dp_sosi; + SIGNAL dp_pipeline_ready_postmux_src_in : t_dp_siso; SIGNAL end_of_packet : STD_LOGIC; SIGNAL end_of_packet_latched : STD_LOGIC; @@ -225,14 +227,26 @@ BEGIN snk_in_arr => dp_pipeline_ready_src_out_arr, -- ST source src_in => dp_mux_src_in, -- IN = request from downstream ST sink + src_out => dp_mux_src_out + ); + + u_dp_pipeline_ready_postmux : ENTITY dp_lib.dp_pipeline_ready + PORT MAP( + rst => dp_rst, + clk => dp_clk, + + snk_in => dp_mux_src_out, + snk_out => dp_mux_src_in, + + src_in => dp_pipeline_ready_postmux_src_in, src_out => src_out ); ----------------------------------------------------------------------------- -- Enable fifo readout ----------------------------------------------------------------------------- - dp_mux_src_in.ready <= src_in.ready and end_of_packet_latched and not dp_fifo_sc_src_out_arr(c_nof_fifos-1).eop; - dp_mux_src_in.xon <= src_in.xon ; + dp_pipeline_ready_postmux_src_in.ready <= src_in.ready and end_of_packet_latched and not dp_fifo_sc_src_out_arr(c_nof_fifos-1).eop; + dp_pipeline_ready_postmux_src_in.xon <= src_in.xon ; ----------------------------------------------------------------------------- diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_packetizer.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_packetizer.vhd index f785d7d7c9daaadb4ef5026e8ee24e9b43043a09..da02ccca000376b96c2adcb67b70272eae4a58ce 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_packetizer.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_iquv_packetizer.vhd @@ -110,21 +110,23 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_packetizer IS CONSTANT c_nof_blocks_per_packet : NATURAL := 1; CONSTANT c_nof_offloadstreams : NATURAL := 5; CONSTANT c_udp_dst_prt_base : NATURAL := 5000; - CONSTANT c_nof_bytes_per_header : NATURAL := 94; + CONSTANT c_nof_bytes_per_header : NATURAL := 90; CONSTANT c_fifo_fill_fill : NATURAL := ceil_div((g_nof_bytes_per_packet + c_nof_bytes_per_header), 8); CONSTANT c_fifo_fill_size : NATURAL := 1024; - CONSTANT c_nof_hdr_fields : NATURAL := 1 + 3 + 12 + 4 + 9 + 8; - CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "1" & "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input + --CONSTANT c_nof_hdr_fields : NATURAL := 1 + 3 + 12 + 4 + 9 + 8; + --CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "1" & "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input + CONSTANT c_nof_hdr_fields : NATURAL := 3 + 12 + 4 + 9 + 8; + CONSTANT c_hdr_field_sel : STD_LOGIC_VECTOR(c_nof_hdr_fields-1 DOWNTO 0) := "101"&"111111111101"&"1011"&"110101001"&"11111111"; -- Make field 'udp_dst_port' an input -- Notes: -- . pre-calculated ip_header_checksum is valid only for UNB0, FN0 targeting IP 10.10.10.10 - -- . udp_total_length = 8000B + 24 flag bytes + 16 ID bytes + 8 UDP bytes = B + -- . udp_total_length = 8000B + 24 flag bytes + 24 ID bytes + 8 UDP bytes = 8056 -- . id_channel carries subband index shifted 4b for IQUV packets (always carry 4 channels): -- . channel = 0 : sb0/ch0,1,2,3 -- . channel = 4 : sb1/ch0,1,2,3 -- . etc. - CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("word_align" ), "RW", 16, field_default(0) ), + CONSTANT c_hdr_field_arr : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( --( field_name_pad("word_align" ), "RW", 16, field_default(0) ), ( field_name_pad("eth_dst_mac" ), "RW", 48, field_default(x"7cfe90927c30") ), ( field_name_pad("eth_src_mac" ), "RW", 48, field_default(0) ), ( field_name_pad("eth_type" ), "RW", 16, field_default(x"0800") ), @@ -152,7 +154,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_packetizer IS ( field_name_pad("id_application_payload_size" ), "RW", 16, field_default(6250) ), ( field_name_pad("id_timestamp" ), "RW", 64, field_default(0) ), ( field_name_pad("id_sequence_number" ), "RW", 8, field_default(0) ), - ( field_name_pad("id_reserved" ), "RW", 72, field_default(0) ), + ( field_name_pad("id_reserved" ), "RW", 56, field_default(0) ), ( field_name_pad("flags_crc_error" ), "RW", 24, field_default(0) ), ( field_name_pad("flags_no_input_present" ), "RW", 24, field_default(0) ), ( field_name_pad("flags_uploading_weights" ), "RW", 24, field_default(0) ),