From 31f07b1f6a7f40e4bdf14f0141213a20d3495729 Mon Sep 17 00:00:00 2001 From: Reinier van der Walle <walle@astron.nl> Date: Wed, 7 Jun 2023 11:46:47 +0200 Subject: [PATCH] processed review comments --- libraries/base/dp/src/vhdl/dp_repack_data.vhd | 19 ++++++++++++------- libraries/io/eth/src/vhdl/eth_tester_rx.vhd | 4 ++-- libraries/io/eth/src/vhdl/eth_tester_tx.vhd | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libraries/base/dp/src/vhdl/dp_repack_data.vhd b/libraries/base/dp/src/vhdl/dp_repack_data.vhd index 85672c1c21..9469c48397 100644 --- a/libraries/base/dp/src/vhdl/dp_repack_data.vhd +++ b/libraries/base/dp/src/vhdl/dp_repack_data.vhd @@ -139,6 +139,11 @@ -- The src_out.empty will be 2, because: -- (g_out_dat_w*g_out_nof_words-g_in_dat_w*g_in_nof_words)/g_out_symbol_w -- = (32*11 - 42*8*1)/ 8 = 2 octet symbols +-- . Instead of using dp_sosi.data for intermediate results in dp_repack_data, +-- a seperate std_logic_vector is used to carry the sosi data as the required +-- vector width can become larger than c_dp_stream_data_w. Note that for the +-- in/out sosi of dp_repack_data, the dp_sosi.data field is still used such +-- that there is no added complexity for the user of dp_repack_data. -- -- Design steps: -- * In total the development took 5 days. On day 3 I was in distress because @@ -204,13 +209,13 @@ ARCHITECTURE rtl OF dp_repack_in IS TYPE t_dat_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(g_in_dat_w-1 DOWNTO 0); TYPE t_reg IS RECORD - dat_arr : t_dat_arr(g_in_nof_words-1 DOWNTO 0); -- internally use dat_arr[] to represent v.src_out.data - src_out : t_dp_sosi; -- sosi output - src_out_data : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0); - hold_out : t_dp_sosi; -- hold snk_in.sync/sop/eop until end of section and then hold valid src_out until src_in.ready - flush : STD_LOGIC; -- shift when snk_in.valid or flush in case the last subsection has < g_in_nof_words - dat_bit_cnt : NATURAL RANGE 0 TO c_bit_cnt_max; -- actual nof bits in subsection - pack_bit_cnt : NATURAL RANGE 0 TO c_bit_cnt_max; -- count nof bits in subsection + dat_arr : t_dat_arr(g_in_nof_words-1 DOWNTO 0); -- internally use dat_arr[] to represent v.src_out.data + src_out : t_dp_sosi; -- sosi output + src_out_data : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0); -- Use seperate STD_LOGIC_VECTOR to carry the sosi data as c_in_buf_dat_w can be larger than c_dp_stream_data_w. + hold_out : t_dp_sosi; -- hold snk_in.sync/sop/eop until end of section and then hold valid src_out until src_in.ready + flush : STD_LOGIC; -- shift when snk_in.valid or flush in case the last subsection has < g_in_nof_words + dat_bit_cnt : NATURAL RANGE 0 TO c_bit_cnt_max; -- actual nof bits in subsection + pack_bit_cnt : NATURAL RANGE 0 TO c_bit_cnt_max; -- count nof bits in subsection END RECORD; SIGNAL data_vec : STD_LOGIC_VECTOR(c_in_buf_dat_w-1 DOWNTO 0); diff --git a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd index cf1ccec8b4..acaf31d8d3 100644 --- a/libraries/io/eth/src/vhdl/eth_tester_rx.vhd +++ b/libraries/io/eth/src/vhdl/eth_tester_rx.vhd @@ -80,8 +80,8 @@ ARCHITECTURE str OF eth_tester_rx IS -- Rx FIFO size can be much less than rx_block_sz_max, because st_clk > -- eth_clk rate, but with st level tx-rx loopback the Rx FIFO does need -- rx_block_sz_max FIFO size. - CONSTANT rx_block_sz_max : NATURAL := c_eth_tester_rx_block_len_max / g_nof_octet_input; - CONSTANT c_fifo_size : NATURAL := true_log_pow2(rx_block_sz_max); + CONSTANT rx_block_sz_max : NATURAL := ceil_div(c_eth_tester_rx_block_len_max, g_nof_octet_input); + CONSTANT c_fifo_size : NATURAL := true_log_pow2(rx_block_sz_max); SIGNAL rx_udp_data : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); SIGNAL rx_offload_sosi : t_dp_sosi; diff --git a/libraries/io/eth/src/vhdl/eth_tester_tx.vhd b/libraries/io/eth/src/vhdl/eth_tester_tx.vhd index e044f20cb2..c63c25fccd 100644 --- a/libraries/io/eth/src/vhdl/eth_tester_tx.vhd +++ b/libraries/io/eth/src/vhdl/eth_tester_tx.vhd @@ -104,7 +104,7 @@ ARCHITECTURE str OF eth_tester_tx IS CONSTANT c_nof_total_counts : NATURAL := 1; -- one to count Tx packets - CONSTANT c_nof_repack_words : NATURAL := g_nof_octet_output / g_nof_octet_generate; + CONSTANT c_nof_repack_words : NATURAL := g_nof_octet_output / g_nof_octet_generate; -- yields integer as g_nof_octet_output is multiple of g_nof_octet_generate. CONSTANT c_generate_data_w : NATURAL := g_nof_octet_generate * c_octet_w; CONSTANT c_out_data_w : NATURAL := g_nof_octet_output * c_octet_w; CONSTANT c_nof_symbols_max : NATURAL := c_network_eth_payload_jumbo_max; -- GitLab