diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_mm_master.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_mm_master.vhd index 2cf7286d9f9eadc29916fb9655ea99e3777b5f73..6d464cde5dd91303448c89a6c59b2c4746ecd9d8 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_mm_master.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_mm_master.vhd @@ -431,7 +431,7 @@ ARCHITECTURE str OF arts_unb1_sc4_mm_master IS reg_tab_dest_ip_write_export : OUT STD_LOGIC; reg_tab_dest_ip_writedata_export : OUT STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); - reg_tab_dest_mac_address_export : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); + reg_tab_dest_mac_address_export : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); reg_tab_dest_mac_read_export : OUT STD_LOGIC; reg_tab_dest_mac_readdata_export : IN STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); reg_tab_dest_mac_write_export : OUT STD_LOGIC; @@ -849,7 +849,7 @@ BEGIN reg_tab_dest_ip_write_export => reg_tab_dest_ip_mosi.wr, reg_tab_dest_ip_writedata_export => reg_tab_dest_ip_mosi.wrdata(c_word_w-1 DOWNTO 0), - reg_tab_dest_mac_address_export => reg_tab_dest_mac_mosi.address(2 DOWNTO 0), + reg_tab_dest_mac_address_export => reg_tab_dest_mac_mosi.address(3 DOWNTO 0), reg_tab_dest_mac_read_export => reg_tab_dest_mac_mosi.rd, reg_tab_dest_mac_readdata_export => reg_tab_dest_mac_miso.rddata(c_word_w-1 DOWNTO 0), reg_tab_dest_mac_write_export => reg_tab_dest_mac_mosi.wr, diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab.vhd index 72941b7ebd107cd218ec9858f7ef126ca40452bf..8a81e17d6aa459b8b7308f646bf06ff1b0256198 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab.vhd @@ -118,15 +118,14 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab IS SIGNAL dp_pipeline_ready_snk_in_arr : t_dp_sosi_arr(2-1 DOWNTO 0); SIGNAL dp_pipeline_ready_snk_out_arr : t_dp_siso_arr(2-1 DOWNTO 0); - SIGNAL dp_mux_src_out : t_dp_sosi; CONSTANT c_nof_cbs_per_node : NATURAL := 5; -- Signals for getting the destination ip and mac addresses from Python CONSTANT c_mm_reg_dest_ip : t_c_mem := (1, ceil_log2(c_nof_cbs_per_node), 32, c_nof_cbs_per_node, '0'); -- latency, adr_w, dat_w, optional actual data words used (<= 2^adr_w), optional init value - CONSTANT c_mm_reg_dest_mac : t_c_mem := (1, ceil_log2(c_nof_cbs_per_node), 48, c_nof_cbs_per_node, '0'); + CONSTANT c_mm_reg_dest_mac : t_c_mem := (1, ceil_log2(c_nof_cbs_per_node*2), 32, c_nof_cbs_per_node*2, '0'); CONSTANT c_mm_reg_init_dest_ip : STD_LOGIC_VECTOR(c_mem_reg_init_w-1 DOWNTO 0) := RESIZE_UVEC( X"05050505" & X"04040404" & X"03030303" & X"02020202" & X"01010101", c_mem_reg_init_w); - CONSTANT c_mm_reg_init_dest_mac : STD_LOGIC_VECTOR(c_mem_reg_init_w-1 DOWNTO 0) := RESIZE_UVEC(X"AAAA05050505" & X"AAAA04040404" & X"AAAA03030303" & X"AAAA02020202" & X"AAAA01010101", c_mem_reg_init_w); + CONSTANT c_mm_reg_init_dest_mac : STD_LOGIC_VECTOR(c_mem_reg_init_w-1 DOWNTO 0) := RESIZE_UVEC(X"0000AAAA05050505" & X"0000AAAA04040404" & X"0000AAAA03030303" & X"0000AAAA02020202" & X"0000AAAA01010101", c_mem_reg_init_w); SIGNAL reg_dest_ip : STD_LOGIC_VECTOR(32*c_nof_cbs_per_node-1 downto 0); - SIGNAL reg_dest_mac : STD_LOGIC_VECTOR(48*c_nof_cbs_per_node-1 downto 0); + SIGNAL reg_dest_mac : STD_LOGIC_VECTOR(32*2*c_nof_cbs_per_node-1 downto 0); BEGIN @@ -312,27 +311,31 @@ BEGIN ----------------------------------------------------------------------------- -- Mux IQUV and I streams onto single 64b stream ----------------------------------------------------------------------------- - dp_pipeline_ready_snk_in_arr(0) <= arts_unb1_sc4_output_iquv_packetizer_src_out; - arts_unb1_sc4_output_iquv_packetizer_src_in <= dp_pipeline_ready_snk_out_arr(0); - - dp_pipeline_ready_snk_in_arr(1) <= arts_unb1_sc4_output_i_packetizer_src_out; - arts_unb1_sc4_output_i_packetizer_src_in <= dp_pipeline_ready_snk_out_arr(1); +-- dp_pipeline_ready_snk_in_arr(0) <= arts_unb1_sc4_output_iquv_packetizer_src_out; + dp_mux_snk_in_arr(0) <= arts_unb1_sc4_output_iquv_packetizer_src_out; +-- arts_unb1_sc4_output_iquv_packetizer_src_in <= dp_pipeline_ready_snk_out_arr(0); + arts_unb1_sc4_output_iquv_packetizer_src_in <= dp_mux_snk_out_arr(0); + +-- dp_pipeline_ready_snk_in_arr(1) <= arts_unb1_sc4_output_i_packetizer_src_out; + dp_mux_snk_in_arr(1) <= arts_unb1_sc4_output_i_packetizer_src_out; +-- arts_unb1_sc4_output_i_packetizer_src_in <= dp_pipeline_ready_snk_out_arr(1); + arts_unb1_sc4_output_i_packetizer_src_in <= dp_mux_snk_out_arr(1); -- arts_unb1_sc4_output_i_packetizer_src_in <= c_dp_siso_rdy; -- dp_mux_snk_in_arr(1) <= c_dp_sosi_rst; - gen_pipeline_ready : FOR i IN 0 TO 1 GENERATE - u_dp_pipeline_ready : ENTITY dp_lib.dp_pipeline_ready - PORT MAP( - rst => dp_rst, - clk => dp_clk, - - snk_in => dp_pipeline_ready_snk_in_arr(i), - snk_out => dp_pipeline_ready_snk_out_arr(i), - - src_in => dp_mux_snk_out_arr(i), - src_out => dp_mux_snk_in_arr(i) - ); - END GENERATE; +-- gen_pipeline_ready : FOR i IN 0 TO 1 GENERATE +-- u_dp_pipeline_ready : ENTITY dp_lib.dp_pipeline_ready +-- PORT MAP( +-- rst => dp_rst, +-- clk => dp_clk, +-- +-- snk_in => dp_pipeline_ready_snk_in_arr(i), +-- snk_out => dp_pipeline_ready_snk_out_arr(i), +-- +-- src_in => dp_mux_snk_out_arr(i), +-- src_out => dp_mux_snk_in_arr(i) +-- ); +-- END GENERATE; u_dp_mux : ENTITY dp_lib.dp_mux GENERIC 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 7ca14de0911839f2368ebc6cd3af21b96af8f03b..8247e3b4a191f283264785d98fd3c941b406f913 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 @@ -61,7 +61,7 @@ ENTITY arts_unb1_sc4_output_tab_i_packetizer IS general_bsn : IN STD_LOGIC_VECTOR(63 DOWNTO 0); reg_dest_ip : STD_LOGIC_VECTOR(32*5-1 downto 0); - reg_dest_mac : STD_LOGIC_VECTOR(48*5-1 downto 0); + reg_dest_mac : STD_LOGIC_VECTOR(64*5-1 downto 0); src_out : OUT t_dp_sosi; src_in : IN t_dp_siso; @@ -161,7 +161,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_packetizer IS CONSTANT c_udp_dst_prt_base : NATURAL := 5000; CONSTANT c_nof_bytes_per_header : NATURAL := 90; - CONSTANT c_dp_fifo_sc_large_size : NATURAL := 16384; + CONSTANT c_dp_fifo_sc_large_size : NATURAL := 4096;--16384; 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; @@ -199,14 +199,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_packetizer IS SIGNAL dp_xonoff_snk_in : t_dp_sosi; SIGNAL dp_xonoff_snk_out : t_dp_siso; SIGNAL dp_xonoff_src_out : t_dp_sosi; --- SIGNAL dp_xonoff_src_in : t_dp_siso; --- SIGNAL dp_field_blk_snk_in_arr : t_dp_sosi_arr(c_nof_offloadstreams-1 DOWNTO 0); --- SIGNAL dp_field_blk_snk_out_arr : t_dp_siso_arr(c_nof_offloadstreams-1 DOWNTO 0); --- SIGNAL dp_field_blk_src_out_arr : t_dp_sosi_arr(c_nof_offloadstreams-1 DOWNTO 0); --- SIGNAL dp_field_blk_src_in_arr : t_dp_siso_arr(c_nof_offloadstreams-1 DOWNTO 0); - --- SIGNAL arts_unb1_sc4_output_i_framer_src_out : t_dp_sosi; SIGNAL dp_fifo_sc_large_snk_in : t_dp_sosi; SIGNAL dp_fifo_sc_large_src_out : t_dp_sosi; SIGNAL dp_fifo_sc_large_src_in : t_dp_siso; @@ -214,12 +207,6 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_packetizer IS SIGNAL dp_fifo_info_src_out : t_dp_sosi; SIGNAL dp_fifo_fill_sc_snk_in : t_dp_sosi; SIGNAL dp_fifo_fill_sc_snk_out : t_dp_siso; --- SIGNAL dp_demux_inverted_src_out_arr : t_dp_sosi_arr(0 TO c_nof_offloadstreams-1); --- SIGNAL dp_demux_inverted_src_in_arr : t_dp_siso_arr(0 TO c_nof_offloadstreams-1); --- SIGNAL dp_mux_inverted_snk_in_arr : t_dp_sosi_arr(0 TO c_nof_offloadstreams-1); --- SIGNAL dp_mux_inverted_snk_out_arr : t_dp_siso_arr(0 TO c_nof_offloadstreams-1); --- SIGNAL dp_mux_src_out : t_dp_sosi; --- SIGNAL dp_mux_src_in : t_dp_siso; BEGIN @@ -415,7 +402,7 @@ BEGIN ); -- Large dp_fifo - -- This Fifo is 16k deep x 64 wide data + control signals + -- This Fifo is 4k deep x 64 wide data + control signals -- The channel and empty fields go through dp_fifo_info instead, to save blockram -- Its purpose is to hold enough data ahead of the I/IQUV mux that the backpressure path -- all the way back through the packetizer and reordering logic can be broken @@ -467,69 +454,12 @@ BEGIN ); - ----------------------------------------------------------------------------- - -- Distribute the packets to the five concat blocks - ----------------------------------------------------------------------------- --- u_dp_demux : ENTITY dp_lib.dp_demux --- GENERIC MAP ( --- g_mode => 2, -- Use sel ctrl --- g_combined => FALSE, -- Only the current channel needs to be ready --- g_nof_output => c_nof_offloadstreams, --- g_remove_channel_lo => FALSE --- ) --- PORT MAP ( --- clk => dp_clk, --- rst => dp_rst, --- --- sel_ctrl => TO_UINT(dp_xonoff_src_out.channel(15 DOWNTO 13)), -- Field that contains the 3 bits needed to encode beam index 0..4 --- --- snk_in => dp_xonoff_src_out, --- snk_out => dp_xonoff_src_in, --- --- src_out_arr => dp_demux_inverted_src_out_arr, -- output: 5 streams (0 TO 4) --- src_in_arr => dp_demux_inverted_src_in_arr -- backpressure input: 5 streams (0 TO 4) --- ); ----------------------------------------------------------------------------- -- Header insertion ----------------------------------------------------------------------------- --- gen_reorder_demux_src : FOR i IN 0 to c_nof_offloadstreams-1 GENERATE --- BEGIN --- dp_field_blk_snk_in_arr(i) <= dp_demux_inverted_src_out_arr(i); --- dp_demux_inverted_src_in_arr(i) <= dp_field_blk_snk_out_arr(i); --- END GENERATE; - - --- u_dp_concat_field_blk : ENTITY dp_lib.dp_concat_field_blk --- GENERIC MAP ( --- g_nof_streams => c_nof_offloadstreams, --- g_data_w => c_data_w, --- g_hdr_field_arr => c_hdr_field_arr, --- g_hdr_field_sel => c_hdr_field_sel, --- g_in_symbol_w => c_byte_w, --- g_out_symbol_w => c_byte_w --- ) --- PORT MAP ( --- mm_rst => mm_rst, --- mm_clk => mm_clk, --- --- dp_rst => dp_rst, --- dp_clk => dp_clk, --- - -- reg_hdr_dat_mosi => reg_dp_offload_tx_hdr_dat_mosi, --- reg_hdr_dat_miso => reg_dp_offload_tx_hdr_dat_miso, --- --- snk_in_arr => dp_field_blk_snk_in_arr, --- snk_out_arr => dp_field_blk_snk_out_arr, --- - -- src_out_arr => dp_field_blk_src_out_arr, --- src_in_arr => dp_field_blk_src_in_arr, --- --- hdr_fields_in_arr => hdr_fields_in_arr --- ); - --------------------------------------------------------------------------------------- -- Extract the chip and backplane numbers from ID --------------------------------------------------------------------------------------- @@ -556,7 +486,7 @@ BEGIN id_tab <= RESIZE_UVEC(dp_fifo_info_src_out.channel(19 DOWNTO 16), c_byte_w); id_udp_dst_prt <= TO_UVEC(c_udp_dst_prt_base + TO_UINT(id_cb), 16); id_dest_ip <= reg_dest_ip(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*32+31 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*32); - id_dest_mac <= reg_dest_ip(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*48+47 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*48); + id_dest_mac <= reg_dest_mac(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*64+47 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*64); --------------------------------------------------------------------------------------- @@ -607,53 +537,6 @@ BEGIN hdr_fields_in_arr => hdr_fields_in_arr ); - ----------------------------------------------------------------------------- - -- dp_mux the 5 streams into a single stream again - -- TODO: better to pass the channel through dp_concat_field_blk - -- TODO: save resources by not muxing the data - ----------------------------------------------------------------------------- --- gen_reorder_mux_snk : FOR i IN 0 to c_nof_offloadstreams-1 GENERATE --- BEGIN --- dp_mux_inverted_snk_in_arr(i) <= dp_field_blk_src_out_arr(i); --- dp_field_blk_src_in_arr(i) <= dp_mux_inverted_snk_out_arr(i); --- END GENERATE; --- --- u_mux : ENTITY dp_lib.dp_mux --- GENERIC MAP ( --- g_data_w => c_data_w, --- g_empty_w => c_empty_w, --- g_use_empty => TRUE, --- g_error_w => 1, --- g_mode => 2, -- use sel ctrl input --- g_nof_input => c_nof_offloadstreams, --- g_fifo_size => array_init(1024, c_nof_offloadstreams), -- FIFO is not used, but generic must match g_nof_input --- g_fifo_fill => array_init(0, c_nof_offloadstreams) -- FIFO is not used, but generic must match g_nof_input --- ) --- PORT MAP ( --- rst => dp_rst, --- clk => dp_clk, --- --- sel_ctrl => TO_UINT(dp_xonoff_src_out.channel(15 DOWNTO 13)), -- Field that contains the 3 bits needed to encode beam index 0..4 --- --- -- ST sinks --- snk_out_arr => dp_mux_inverted_snk_out_arr, --- snk_in_arr => dp_mux_inverted_snk_in_arr, --- -- ST source --- src_in => dp_mux_src_in, --- 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 => c_dp_siso_rdy, --dp_fifo_fill_sc_snk_out, --- src_out => dp_fifo_sc_large_snk_in --- ); ----------------------------------------------------------------------------- -- Fill FIFO to buffer 8000 Bytes @@ -671,6 +554,7 @@ BEGIN g_use_complex => FALSE, g_fifo_fill => c_fifo_fill_fill, g_fifo_size => c_fifo_fill_size + --g_fifo_af_margin => 16 -- margin below full ) PORT MAP ( rst => dp_rst, diff --git a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_reorder.vhd b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_reorder.vhd index 3252ea5e2103b3c0cc52d516e0faa372f4ac0c60..d57ca792d401a6c277fd3ac890fc0a3c081a4659 100644 --- a/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_reorder.vhd +++ b/applications/arts/designs/arts_unb1_sc4/src/vhdl/arts_unb1_sc4_output_tab_i_reorder.vhd @@ -63,6 +63,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_reorder IS CONSTANT c_data_w : NATURAL := c_indata_w * 8; CONSTANT c_empty_w : NATURAL := ceil_log2(c_data_w /c_byte_w); CONSTANT c_nof_fifos : NATURAL := g_nof_tabs * g_nof_frequency_channels; + CONSTANT c_gap : NATURAL := 1024; CONSTANT c_nof_words_per_packet : NATURAL := ceil_div(g_nof_bytes_per_packet, (c_data_w/c_byte_w)); CONSTANT c_dp_fifo_sc_size : NATURAL := 1024; --8192/8; @@ -73,11 +74,12 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_i_reorder IS SIGNAL dp_repack_snk_in_arr : t_dp_sosi_arr(g_nof_tabs*g_nof_frequency_channels-1 DOWNTO 0); SIGNAL dp_fifo_sc_snk_in_arr : t_dp_sosi_arr(g_nof_tabs*g_nof_frequency_channels-1 DOWNTO 0); SIGNAL dp_fifo_sc_src_out_arr : t_dp_sosi_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); + SIGNAL dp_folder_snk_in_arr : t_dp_sosi_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); SIGNAL dp_fifo_sc_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); SIGNAL dp_fifo_sc_src_in_arr_1 : t_dp_siso_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); SIGNAL dp_folder_src_out_arr : t_dp_sosi_arr(0 TO 0); - SIGNAL dp_pipeline_ready_src_out_arr : t_dp_sosi_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); - SIGNAL dp_pipeline_ready_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); +-- SIGNAL dp_pipeline_ready_src_out_arr : t_dp_sosi_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); +-- SIGNAL dp_pipeline_ready_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs*g_nof_frequency_channels-1); SIGNAL dp_counter_count_src_out_arr : t_dp_sosi_arr(1 DOWNTO 0); SIGNAL dp_mux_src_in : t_dp_siso; SIGNAL dp_mux_src_out : t_dp_sosi; @@ -224,32 +226,12 @@ BEGIN src_out => dp_fifo_sc_src_out_arr(tabno*g_nof_frequency_channels + i) ); --- u_dp_pipeline_ready : ENTITY dp_lib.dp_pipeline_ready --- PORT MAP( --- rst => dp_rst, --- clk => dp_clk, --- --- snk_in => dp_fifo_sc_src_out_arr(tabno*g_nof_frequency_channels + i), --- snk_out => dp_fifo_sc_src_in_arr(tabno*g_nof_frequency_channels + i), --- --- src_in => dp_pipeline_ready_src_in_arr(tabno*g_nof_frequency_channels + i), --- src_out => dp_pipeline_ready_src_out_arr(tabno*g_nof_frequency_channels + i) --- ); --- --- u_dp_src_out_timer : ENTITY dp_lib.dp_src_out_timer --- GENERIC MAP ( --- g_init_valid_delay => (c_nof_words_per_packet + 16) * (tabno*g_nof_frequency_channels + i), --- g_block_period => c_nof_words_per_packet, --- g_block_len => c_nof_words_per_packet --- ) --- PORT MAP ( --- rst => dp_rst, --- clk => dp_clk, --- --- init_valid_delay_ref => dp_counter_count_src_out_arr(1).eop, --- snk_in => dp_pipeline_ready_src_out_arr(tabno*g_nof_frequency_channels + i), --- snk_out => dp_pipeline_ready_src_in_arr(tabno*g_nof_frequency_channels + i) --- ); + + p_emptytochannel : PROCESS(dp_fifo_sc_src_out_arr(tabno*g_nof_frequency_channels + i)) + BEGIN + dp_folder_snk_in_arr(tabno*g_nof_frequency_channels + i) <= dp_fifo_sc_src_out_arr(tabno*g_nof_frequency_channels + i); + dp_folder_snk_in_arr(tabno*g_nof_frequency_channels + i).channel(c_empty_w-1 downto 0) <= dp_fifo_sc_src_out_arr(tabno*g_nof_frequency_channels + i).empty(c_empty_w-1 downto 0); + END PROCESS; END GENERATE; END GENERATE; @@ -257,23 +239,29 @@ BEGIN ------------------------------------------------------------------------------ -- Alternative to mux. Assumes no backpressure. -- Fold onto one stream + -- It doesn't forward the empty field, so use channel instead ------------------------------------------------------------------------------ u_dp_folder : ENTITY dp_lib.dp_folder GENERIC MAP ( g_nof_inputs => g_nof_tabs * g_nof_frequency_channels, - g_nof_folds => -1 + g_nof_folds => -1, + g_use_channel => TRUE ) PORT MAP ( rst => dp_rst, clk => dp_clk, - snk_in_arr => dp_fifo_sc_src_out_arr, + snk_in_arr => dp_folder_snk_in_arr, src_out_arr => dp_folder_src_out_arr ); - src_out <= dp_folder_src_out_arr(0); + p_channeltoempty : PROCESS(dp_folder_src_out_arr(0)) + BEGIN + src_out <= dp_folder_src_out_arr(0); + src_out.empty(c_empty_w-1 downto 0) <= dp_folder_src_out_arr(0).channel(c_empty_w-1 downto 0); + END PROCESS; ----------------------------------------------------------------------------- @@ -358,7 +346,7 @@ BEGIN GENERIC MAP ( g_nof_counters => 2, g_range_start => (0,0,0,0,0,0,0,0, 0, 0), - g_range_stop => (0,0,0,0,0,0,0,0, g_nof_frequency_channels*g_nof_tabs, c_nof_words_per_packet), + g_range_stop => (0,0,0,0,0,0,0,0, g_nof_frequency_channels*g_nof_tabs, c_nof_words_per_packet+c_gap), g_range_step => (0,0,0,0,0,0,0,0, 1, 1), g_pipeline_src_out => 1, g_pipeline_src_in => 0 @@ -379,7 +367,8 @@ BEGIN gen_readout_ready : FOR i IN 0 TO g_nof_frequency_channels*g_nof_tabs - 1 GENERATE dp_fifo_sc_src_in_arr(i).xon <= '1'; - dp_fifo_sc_src_in_arr(i).ready <= '1' WHEN dp_counter_readout_enable_1 = '1' and dp_counter_readout_count_src_out_arr(1).data(5 DOWNTO 0) = TO_UVEC(i, 6) ELSE '0'; + dp_fifo_sc_src_in_arr(i).ready <= '1' WHEN dp_counter_readout_enable_1 = '1' and dp_counter_readout_count_src_out_arr(1).data(5 DOWNTO 0) = TO_UVEC(i, 6) + and dp_counter_readout_count_src_out_arr(0).data(10 DOWNTO 0) < TO_UVEC(c_nof_words_per_packet,11) ELSE '0'; END GENERATE; 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 7a6c76e7106f6d7851f7cf17da9766204447eee4..8f949e5522ca02e9249987419367f0609e2dffc8 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 @@ -76,6 +76,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_buffer IS SIGNAL dp_fifo_sc_src_out_arr : t_dp_sosi_arr(0 TO g_nof_tabs-1); SIGNAL dp_fifo_sc_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs-1); SIGNAL dp_fifo_sc_src_in_arr_1 : t_dp_siso_arr(0 TO g_nof_tabs-1); + SIGNAL dp_folder_snk_in_arr : t_dp_sosi_arr(0 TO g_nof_tabs-1); SIGNAL dp_folder_src_out_arr : t_dp_sosi_arr(0 TO 0); SIGNAL dp_pipeline_ready_src_out_arr : t_dp_sosi_arr(0 TO g_nof_tabs-1); SIGNAL dp_pipeline_ready_src_in_arr : t_dp_siso_arr(0 TO g_nof_tabs-1); @@ -198,33 +199,12 @@ BEGIN src_out => dp_fifo_sc_src_out_arr(tabno) ); --- u_dp_pipeline_ready : ENTITY dp_lib.dp_pipeline_ready --- PORT MAP( --- rst => dp_rst, --- clk => dp_clk, --- --- snk_in => dp_fifo_sc_src_out_arr(tabno), --- snk_out => dp_fifo_sc_src_in_arr(tabno), --- --- src_in => dp_pipeline_ready_src_in_arr(tabno), --- src_out => dp_pipeline_ready_src_out_arr(tabno) --- ); --- --- --- u_dp_src_out_timer : ENTITY dp_lib.dp_src_out_timer --- GENERIC MAP ( --- g_init_valid_delay => (c_nof_words_per_packet + 16) * tabno, --- g_block_period => c_nof_words_per_packet + 16, --- g_block_len => c_nof_words_per_packet --- ) --- PORT MAP ( --- rst => dp_rst, --- clk => dp_clk, --- --- init_valid_delay_ref => dp_counter_count_src_out_arr(0).eop, --- snk_in => dp_pipeline_ready_src_out_arr(tabno), --- snk_out => dp_pipeline_ready_src_in_arr(tabno) --- ); + + p_emptytochannel : PROCESS(dp_fifo_sc_src_out_arr(tabno)) + BEGIN + dp_folder_snk_in_arr(tabno) <= dp_fifo_sc_src_out_arr(tabno); + dp_folder_snk_in_arr(tabno).channel(c_empty_w-1 downto 0) <= dp_fifo_sc_src_out_arr(tabno).empty(c_empty_w-1 downto 0); + END PROCESS; END GENERATE; @@ -236,61 +216,23 @@ BEGIN u_dp_folder : ENTITY dp_lib.dp_folder GENERIC MAP ( g_nof_inputs => g_nof_tabs, - g_nof_folds => -1 + g_nof_folds => -1, + g_use_channel => TRUE ) PORT MAP ( rst => dp_rst, clk => dp_clk, - snk_in_arr => dp_fifo_sc_src_out_arr, + snk_in_arr => dp_folder_snk_in_arr, src_out_arr => dp_folder_src_out_arr ); - src_out <= dp_folder_src_out_arr(0); - - ----------------------------------------------------------------------------- - -- dp_mux the g_nof_tabs streams into a single stream - ----------------------------------------------------------------------------- --- u_mux : ENTITY dp_lib.dp_mux --- GENERIC MAP ( --- g_data_w => c_data_w, --- g_empty_w => c_empty_w, --- g_use_empty => TRUE, --- g_error_w => 1, --- g_mode => 1, -- forced round robin mode --- g_nof_input => g_nof_tabs, --- g_fifo_size => array_init(1024, g_nof_tabs), -- FIFO is not used, but generic must match g_nof_input --- g_fifo_fill => array_init(0, g_nof_tabs) -- FIFO is not used, but generic must match g_nof_input --- ) --- PORT MAP ( --- rst => dp_rst, --- clk => dp_clk, - -- ST sinks --- snk_out_arr => dp_pipeline_ready_src_in_arr, -- OUT = request to upstream ST source --- snk_in_arr => dp_pipeline_ready_src_out_arr, - -- ST source --- src_in => c_dp_siso_rdy, --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 => open --src_out --- ); - - ----------------------------------------------------------------------------- - -- Enable fifo readout - ----------------------------------------------------------------------------- --- 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 ; + p_channeltoempty : PROCESS(dp_folder_src_out_arr(0)) + BEGIN + src_out <= dp_folder_src_out_arr(0); + src_out.empty(c_empty_w-1 downto 0) <= dp_folder_src_out_arr(0).channel(c_empty_w-1 downto 0); + END PROCESS; ----------------------------------------------------------------------------- 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 b3289064760595d025cafda8d56a78d424180702..6e3c1fc27b2aa2edb1921adda599cd05073fe9a5 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 @@ -61,7 +61,7 @@ ENTITY arts_unb1_sc4_output_tab_iquv_packetizer IS general_bsn : IN STD_LOGIC_VECTOR(63 DOWNTO 0); reg_dest_ip : STD_LOGIC_VECTOR(32*5-1 downto 0); - reg_dest_mac : STD_LOGIC_VECTOR(48*5-1 downto 0); + reg_dest_mac : STD_LOGIC_VECTOR(64*5-1 downto 0); snk_in : IN t_dp_sosi; snk_out : OUT t_dp_siso; @@ -111,7 +111,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_packetizer IS CONSTANT c_nof_words_per_block : NATURAL := 8000; CONSTANT c_nof_blocks_per_packet : NATURAL := 1; CONSTANT c_nof_offloadstreams : NATURAL := 5; - CONSTANT c_udp_dst_prt_base : NATURAL := 5000; + CONSTANT c_udp_dst_prt_base : NATURAL := 6000; CONSTANT c_nof_bytes_per_header : NATURAL := 90; CONSTANT c_dp_fifo_sc_large_size : NATURAL := 8192; CONSTANT c_fifo_fill_fill : NATURAL := ceil_div((g_nof_bytes_per_packet + c_nof_bytes_per_header), 8); @@ -155,7 +155,7 @@ ARCHITECTURE str OF arts_unb1_sc4_output_tab_iquv_packetizer IS ( field_name_pad("id_cb_index" ), "RW", 8, field_default(0) ), ( field_name_pad("id_tab_index" ), "RW", 8, field_default(0) ), ( field_name_pad("id_channel_index" ), "RW", 16, field_default(0) ), - ( field_name_pad("id_application_payload_size" ), "RW", 16, field_default(6250) ), + ( field_name_pad("id_application_payload_size" ), "RW", 16, field_default(8000) ), ( 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", 56, field_default(0) ), @@ -397,7 +397,7 @@ BEGIN g_nof_streams => 1, g_combine_streams => TRUE, g_bypass => FALSE, - g_timeout_time => 10, +-- g_timeout_time => 10, g_default_value => sel_a_b(g_sim, '1', '0') -- Sim: on by default like block gens ) PORT MAP( @@ -556,7 +556,7 @@ BEGIN id_tab <= RESIZE_UVEC(dp_fifo_info_src_out.channel(19 DOWNTO 16), c_byte_w); id_udp_dst_prt <= TO_UVEC(c_udp_dst_prt_base + TO_UINT(id_cb), 16); id_dest_ip <= reg_dest_ip(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*32+31 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*32); - id_dest_mac <= reg_dest_ip(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*48+47 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*48); + id_dest_mac <= reg_dest_mac(TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*64+47 DOWNTO TO_UINT(dp_fifo_info_src_out.channel(15 DOWNTO 13))*64); --------------------------------------------------------------------------------------- -- Wire the hardwired header fields to DP signals and ID