diff --git a/libraries/base/dp/tb/vhdl/tb_dp_bsn_align_v2.vhd b/libraries/base/dp/tb/vhdl/tb_dp_bsn_align_v2.vhd index fbe08de291163f2d1febfa3cb41a9310f381b717..110c9a62fcd8717840e9e9d72ebc1ae4ce47e017 100644 --- a/libraries/base/dp/tb/vhdl/tb_dp_bsn_align_v2.vhd +++ b/libraries/base/dp/tb/vhdl/tb_dp_bsn_align_v2.vhd @@ -106,7 +106,8 @@ entity tb_dp_bsn_align_v2 is g_tb_diff_delay : integer := 0; -- 0 = aligned inputs, -1 = max input delay for no loss, -- >~ g_bsn_latency_max * g_block_period will give loss g_tb_nof_restart : natural := 2; -- number of times to restart the input stimuli - g_tb_nof_blocks : natural := 20 -- number of input blocks per restart + g_tb_nof_blocks : natural := 20 -- number of input blocks per restart, choose > circular buffer size, so + -- > c_align_latency_nof_blocks ); end tb_dp_bsn_align_v2; @@ -140,7 +141,8 @@ architecture tb of tb_dp_bsn_align_v2 is constant c_gap_size : natural := g_block_period - g_block_size; - constant c_lost_bsn_stream_id : natural := sel_a_b(g_nof_streams > 1, 1, 0); -- fixed use stream 1 to verify g_lost_bsn_id. Use 0 for g_nof_streams = 1. + -- Fixed use stream 1 to verify g_lost_bsn_id. Use 0 for g_nof_streams = 1. + constant c_lost_bsn_stream_id : natural := sel_a_b(g_nof_streams > 1, 1, 0); -- In tb no support (yet) for immediate aligned output at first node, when c_nof_aligners_max > 1 constant c_use_aligner_at_first_node : boolean := true; @@ -155,9 +157,11 @@ architecture tb of tb_dp_bsn_align_v2 is constant c_dut_latency : natural := g_pipeline_input + g_rd_latency + c_mm_to_dp_latency + g_pipeline_output; -- DUT buffer latency for chain of DUTs - constant c_align_latency_nof_blocks : natural := g_bsn_latency_max * c_nof_aligners_max; -- in number blocks - constant c_align_latency_nof_valid : natural := g_bsn_latency_max * c_nof_aligners_max * g_block_size; -- in number of data samples - constant c_align_latency_nof_clk : natural := g_bsn_latency_max * c_nof_aligners_max * g_block_period; -- in number clk cycles + constant c_align_latency_nof_blocks : natural := sel_a_b(c_nof_aligners_max = 1, + g_bsn_latency_max, + g_bsn_latency_max * (c_nof_aligners_max - 1) + g_bsn_latency_first_node); -- number blocks + constant c_align_latency_nof_valid : natural := c_align_latency_nof_blocks * g_block_size; -- number of data samples + constant c_align_latency_nof_clk : natural := c_align_latency_nof_blocks * g_block_period; -- number clk cycles -- Total DUT chain latency constant c_total_latency : natural := c_dut_latency + c_align_latency_nof_clk; diff --git a/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_align_v2.vhd b/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_align_v2.vhd index 31076e6e0ea274f4056684d4779c62db406e7aa9..8c9a3bdc2ba244940a8a6b7c6018170d3e611b81 100644 --- a/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_align_v2.vhd +++ b/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_align_v2.vhd @@ -23,8 +23,9 @@ -- > as 3 -- > run -all -library IEEE; +library IEEE, common_lib; use IEEE.std_logic_1164.all; +use common_lib.common_pkg.all; use work.tb_dp_pkg.all; entity tb_tb_dp_bsn_align_v2 is @@ -33,7 +34,7 @@ end tb_tb_dp_bsn_align_v2; architecture tb of tb_tb_dp_bsn_align_v2 is constant c_block : natural := 11; constant c_period : natural := 20; - constant c_nof_blk : natural := 30; + constant c_nof_blk : natural := 20; -- choose > circular buffer size signal tb_end : std_logic := '0'; -- declare tb_end to avoid 'No objects found' error on 'when -label tb_end' begin @@ -62,25 +63,34 @@ begin -- g_tb_nof_restart : NATURAL := 1; -- number of times to restart the input stimuli -- g_tb_nof_blocks : NATURAL := 10 -- number of input blocks per restart - u_mm_output : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); - u_mm_output_pow2 : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, 16, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); -- g_block_size = 2**4 = 16 - u_mm_output_large_bsn : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3000, true, 0, 0, 1, 0, 2, c_nof_blk); -- test where bsn * g_block_size > 2^10 to test address resizing - u_mm_output_single : entity work.tb_dp_bsn_align_v2 generic map (1, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); - u_dp_output : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_dp_output_pow2 : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, 16, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); -- g_block_size = 2**4 = 16 - u_dp_output_large_bsn : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3000, false, 0, 0, 1, 0, 2, c_nof_blk); -- test where bsn * g_block_size > 2^10 to test address resizing - u_dp_output_single : entity work.tb_dp_bsn_align_v2 generic map (1, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_dp_output_p1 : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 1, 1, 1, 0, 2, c_nof_blk); - u_bsn_lat_max_2 : entity work.tb_dp_bsn_align_v2 generic map (2, 2, 2, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_bsn_lat_max_3 : entity work.tb_dp_bsn_align_v2 generic map (2, 3, 3, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_p1_rd2 : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 1, 0, 2, 0, 2, c_nof_blk); - u_zero_gap : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_block, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_zero_gap_p1_rd2 : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 1, c_block, c_block, 32, 16, 17, 0, 0, 0, 3, false, 1, 1, 2, 0, 2, c_nof_blk); - u_stream_disable : entity work.tb_dp_bsn_align_v2 generic map (3, 1, 1, 1, c_block, c_period, 32, 16, 17, 2, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_stream_lost : entity work.tb_dp_bsn_align_v2 generic map (3, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 2, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_stream_disable_lost : entity work.tb_dp_bsn_align_v2 generic map (4, 1, 1, 1, c_block, c_period, 32, 16, 17, 1, 2, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_bsn_lost : entity work.tb_dp_bsn_align_v2 generic map (3, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 10, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_diff_delay : entity work.tb_dp_bsn_align_v2 generic map (3, 1, 1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, -1, 2, c_nof_blk); - u_nof_aligners : entity work.tb_dp_bsn_align_v2 generic map (2, 1, 1, 8, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); - u_nof_aligners_diff_delay : entity work.tb_dp_bsn_align_v2 generic map (4, 1, 1, 3, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, -1, 2, c_nof_blk); + u_mm_output : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); + u_mm_output_single : entity work.tb_dp_bsn_align_v2 generic map (1, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); + u_output : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_output_single : entity work.tb_dp_bsn_align_v2 generic map (1, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_output_pipe1 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 1, 1, 1, 0, 2, c_nof_blk); + u_pipe1_rdlat2 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 1, 0, 2, 0, 2, c_nof_blk); + u_zero_gap : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_block, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_zero_gap_pipe1_rdlat2 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_block, 32, 16, 17, 0, 0, 0, 3, false, 1, 1, 2, 0, 2, c_nof_blk); + u_stream_disable : entity work.tb_dp_bsn_align_v2 generic map (3, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 2, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_stream_lost : entity work.tb_dp_bsn_align_v2 generic map (3, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 2, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_stream_disable_lost : entity work.tb_dp_bsn_align_v2 generic map (4, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 1, 2, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_bsn_lost : entity work.tb_dp_bsn_align_v2 generic map (3, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 10, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_diff_delay : entity work.tb_dp_bsn_align_v2 generic map (3, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, -1, 2, c_nof_blk); + + -- g_block_size = 2**4 = 16 + u_mm_block_pow2 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, 16, c_period, 32, 16, 17, 0, 0, 0, 3, true, 0, 0, 1, 0, 2, c_nof_blk); + u_block_pow2 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, 16, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + + -- test where bsn * g_block_size > 2^10 to test address resizing + u_mm_large_bsn : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3000, true, 0, 0, 1, 0, 2, c_nof_blk); + u_large_bsn : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3000, false, 0, 0, 1, 0, 2, c_nof_blk); + + -- BSN latency + u_bsn_lat_max_2 : entity work.tb_dp_bsn_align_v2 generic map (2, 2, 2, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + u_bsn_lat_max_3 : entity work.tb_dp_bsn_align_v2 generic map (2, 3, 3, 1, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, c_nof_blk); + + -- chain of aligners + u_nof_aligners_16 : entity work.tb_dp_bsn_align_v2 generic map (2, 2, c_1, 16, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, 100); + u_nof_aligners_8 : entity work.tb_dp_bsn_align_v2 generic map (2, c_1, c_1, 8, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, 0, 2, 50); + u_nof_aligners_diff_delay : entity work.tb_dp_bsn_align_v2 generic map (4, c_1, c_1, 3, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, false, 0, 0, 1, -1, 2, 50); end tb;