diff --git a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd index 125a82f533fd942e12b3da0f7331e7a7973881c7..3325d3d9ccdc252fd59cc89665111559c36cf8a6 100644 --- a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd +++ b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd @@ -105,7 +105,8 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS nof_dat => c_ram_size, init_sl => '0'); - CONSTANT c_block_size_w : NATURAL := ceil_log2(g_block_size); + -- Use +1 to ensure that g_block_size that is power of 2 also fits in c_block_size_slv + CONSTANT c_block_size_w : NATURAL := ceil_log2(g_block_size + 1); CONSTANT c_block_size_slv : STD_LOGIC_VECTOR(c_block_size_w-1 DOWNTO 0) := TO_UVEC(g_block_size, c_block_size_w); CONSTANT c_blk_pointer_w : NATURAL := ceil_log2(c_buffer_nof_blocks); 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 ef221c4db9fd01e6622269fab904880517c55c75..aec4974d6ac70fc5ea4960e99041d567984649d4 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 @@ -67,9 +67,11 @@ BEGIN -- 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, 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, 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, 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, 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, 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, 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, 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, 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, c_block, c_period, 32, 16, 17, 0, 0, 0, 3, FALSE, 1, 1, 1, 0, 2, c_nof_blk);