From b986ac993f74e2aa6760aa13237d13e6d0d2cf92 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Wed, 11 May 2022 16:25:17 +0200
Subject: [PATCH] Corrected c_block_size_w, by using +1 to ensure that
 g_block_size that is power of 2 (e.g. 16) also fits in c_block_size_slv.

---
 libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd      | 3 ++-
 libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_align_v2.vhd | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

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 125a82f533..3325d3d9cc 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 ef221c4db9..aec4974d6a 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);
-- 
GitLab