From 614e885b38c80b86f51341fa25edbf8e1ac6df91 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Thu, 31 Aug 2023 09:47:17 +0200
Subject: [PATCH] Add debug constant c_transpose_indices_inv and swap transpose
 order in p_rx_reordered_list to undo tranpose of sdp_beamformer_output.

---
 .../tb_lofar2_unb2c_sdp_station_bf.vhd        | 30 ++++++++++++-------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
index 7acfa22c2a..b1d36877af 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd
@@ -246,14 +246,21 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is
                                      x"1400"  -- block_period = 5120
                                    );
 
-  -- Expected transposed indices order by func_reorder_transpose_packet().
-  -- Yields same c_reorder_transpose_indices order as:
+  -- Expected transposed indices order by func_sdp_bdo_transpose_packet().
+  -- Yields same c_transpose_indices order as func_reorder_transpose_packet():
   -- > python applications/lofar2/libraries/sdp/src/python/test_func_sdp_bdo_transpose_packet.py
-  constant c_nof_ch                    : natural := c_sdp_cep_nof_beamlets_per_packet * c_sdp_N_pol_bf;
-  constant c_reorder_transpose_indices : t_natural_arr(0 to c_nof_ch - 1) :=
-    func_reorder_transpose_indices(c_sdp_cep_nof_blocks_per_packet,
-                                   c_sdp_cep_nof_beamlets_per_block,
-                                   c_sdp_N_pol_bf);
+  constant c_nof_ch                : natural := c_sdp_cep_nof_beamlets_per_packet * c_sdp_N_pol_bf;
+  -- Use c_transpose_indices and c_transpose_indices_inv for view in Objects window.
+  -- The c_transpose_indices is used in sdp_beamformer_output, therefore use
+  -- c_transpose_indices_inv for func_reorder_transpose_packet() in the tb.
+  constant c_transpose_indices     : t_natural_arr(0 to c_nof_ch - 1) :=
+                                       func_reorder_transpose_indices(c_sdp_cep_nof_blocks_per_packet,
+                                                                      c_sdp_cep_nof_beamlets_per_block,
+                                                                      c_sdp_N_pol_bf);
+  constant c_transpose_indices_inv : t_natural_arr(0 to c_nof_ch - 1) :=
+                                       func_reorder_transpose_indices(c_sdp_cep_nof_beamlets_per_block,
+                                                                      c_sdp_cep_nof_blocks_per_packet,
+                                                                      c_sdp_N_pol_bf);
 
   -- WG
   constant c_bsn_start_wg         : natural := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
@@ -1404,11 +1411,12 @@ begin
     -- Wait until end of a beamlet packet
     wait until rising_edge(ext_clk);  -- to avoid Modelsim warning: (vcom-1090)
     proc_common_wait_until_hi_lo(ext_clk, rx_beamlet_sosi.eop);  -- to reduce simulation effort
-    rx_reordered_list_re <= func_sdp_bdo_transpose_packet(c_sdp_cep_nof_blocks_per_packet,
-                                                          c_sdp_cep_nof_beamlets_per_block,
+    -- Inverse tranpose
+    rx_reordered_list_re <= func_sdp_bdo_transpose_packet(c_sdp_cep_nof_beamlets_per_block,
+                                                          c_sdp_cep_nof_blocks_per_packet,
                                                           rx_packet_list_re);
-    rx_reordered_list_im <= func_sdp_bdo_transpose_packet(c_sdp_cep_nof_blocks_per_packet,
-                                                          c_sdp_cep_nof_beamlets_per_block,
+    rx_reordered_list_im <= func_sdp_bdo_transpose_packet(c_sdp_cep_nof_beamlets_per_block,
+                                                          c_sdp_cep_nof_blocks_per_packet,
                                                           rx_packet_list_im);
   end process;
 
-- 
GitLab