Skip to content
Snippets Groups Projects
Commit e3ec2b2b authored by Reinier van der Walle's avatar Reinier van der Walle
Browse files

Merge branch 'L2SDP-961b' into 'master'

Add debug constant c_transpose_indices_inv and swap transpose order in...

Closes L2SDP-961

See merge request !350
parents ae00769e 614e885b
No related branches found
No related tags found
1 merge request!350Add debug constant c_transpose_indices_inv and swap transpose order in...
Pipeline #56732 passed
......@@ -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;
......
......@@ -92,18 +92,31 @@ architecture str of sdp_beamformer_output is
constant c_fifo_size : natural := true_log_pow2(c_sdp_cep_payload_nof_longwords) * c_sdp_N_beamsets; -- 2048
-- Reorder c_nof_ch = c_nof_ch_sel = c_nof_ch_in
constant c_nof_ch : natural := c_sdp_S_sub_bf * c_sdp_cep_nof_blocks_per_packet;
constant c_nof_blocks_per_packet : natural := c_sdp_cep_nof_blocks_per_packet; -- = 4
constant c_nof_data_per_block : natural := c_sdp_S_sub_bf; -- = 488 dual pol beamlets
constant c_nof_words_per_data : natural := 1; -- 1 dual pol beamlet data per 32b word
constant c_nof_ch : natural := c_nof_blocks_per_packet * c_nof_data_per_block * c_nof_words_per_data; -- = 1952
-- Use c_transpose_indices and c_transpose_indices_inv for debug view in Objects window.
-- Use c_transpose_indices for func_reorder_transpose() in this sdp_beamformer_output,
-- a tb can then use c_transpose_indices_inv to undo the transpose.
constant c_transpose_indices : t_natural_arr(0 to c_nof_ch - 1) :=
func_reorder_transpose_indices(c_nof_blocks_per_packet,
c_nof_data_per_block,
c_nof_words_per_data);
constant c_transpose_indices_inv : t_natural_arr(0 to c_nof_ch - 1) :=
func_reorder_transpose_indices(c_nof_data_per_block,
c_nof_blocks_per_packet,
c_nof_words_per_data);
-- Dynamic reorder block size control input
-- . The data consists of 1 word = 1 ch, because 1 word contains 1 dual pol
-- beamlet.
-- . The input packet has nof_ch = nof_data_per_block * nof_blocks_per_packet
-- of data per packet.
-- . The data consists of 1 word = 1 ch, because 1 word contains 1 dual pol beamlet.
-- . The input packet has nof_ch of data per packet.
-- . The transposed output packet will have blocks with nof_blocks_per_packet
-- data per block and nof_data_per_block blocks per packet.
signal nof_ch : natural := c_nof_ch;
signal nof_data_per_block : natural := c_sdp_S_sub_bf;
signal nof_blocks_per_packet : natural := c_sdp_cep_nof_blocks_per_packet;
signal nof_blocks_per_packet : natural := c_nof_blocks_per_packet;
signal nof_data_per_block : natural := c_nof_data_per_block;
signal select_copi : t_mem_copi := c_mem_copi_rst;
signal select_cipo : t_mem_cipo := c_mem_cipo_rst;
signal r_identity : t_reorder_identity;
......@@ -175,11 +188,11 @@ begin
-- first block.
v_ref_time := NOW;
-- Offset the v_ref_time to the second block of the
-- c_sdp_cep_nof_blocks_per_packet = 4 blocks that will be merged.
-- c_nof_blocks_per_packet = 4 blocks that will be merged.
v_ref_time := v_ref_time + c_sdp_block_period * 1 ns;
end if;
elsif NOW > v_ref_time + 1 * c_sdp_cep_nof_blocks_per_packet * c_sdp_block_period * 1 ns and
NOW < v_ref_time + 4 * c_sdp_cep_nof_blocks_per_packet * c_sdp_block_period * 1 ns then
elsif NOW > v_ref_time + 1 * c_nof_blocks_per_packet * c_sdp_block_period * 1 ns and
NOW < v_ref_time + 4 * c_nof_blocks_per_packet * c_sdp_block_period * 1 ns then
-- Disturb BSN to cause merged payload error. Expected results for the
-- merged blocks:
-- . index 0 : First merged block bsn ok and payload_error = '0'.
......@@ -231,7 +244,7 @@ begin
-----------------------------------------------------------------------------
u_dp_packet_merge : entity dp_lib.dp_packet_merge
generic map(
g_nof_pkt => c_sdp_cep_nof_blocks_per_packet,
g_nof_pkt => c_nof_blocks_per_packet,
g_bsn_increment => 1
)
port map(
......@@ -322,12 +335,12 @@ begin
end process;
p_reorder_transpose : process(dp_rst, select_cipo,
nof_data_per_block, nof_blocks_per_packet, r_transpose)
nof_blocks_per_packet, nof_data_per_block, r_transpose)
variable v : t_reorder_transpose;
begin
if select_cipo.waitrequest = '0' then
-- Read from reorder_col_select page
v := func_reorder_transpose(nof_data_per_block, nof_blocks_per_packet, r_transpose);
v := func_reorder_transpose(nof_blocks_per_packet, nof_data_per_block, r_transpose);
else
-- No read, new reorder_col_select page not available yet
v := c_reorder_transpose_rst;
......
......@@ -136,6 +136,12 @@ package reorder_pkg is
transpose : t_reorder_transpose)
return t_reorder_transpose;
-- Variant with nof_words_per_data = 1
function func_reorder_transpose(nof_blocks_per_packet : natural;
nof_data_per_block : natural;
transpose : t_reorder_transpose)
return t_reorder_transpose;
-- Alternative implementation using a look up list:
-- func_reorder_transpose_look_up() = func_reorder_transpose()
function func_reorder_transpose_look_up(nof_blocks_per_packet : natural;
......@@ -144,12 +150,6 @@ package reorder_pkg is
transpose : t_reorder_transpose)
return t_reorder_transpose;
-- Variant with nof_words_per_data = 1
function func_reorder_transpose(nof_blocks_per_packet : natural;
nof_data_per_block : natural;
transpose : t_reorder_transpose)
return t_reorder_transpose;
-----------------------------------------------------------------------------
-- Reorder identity
-- . so no reordering, same out as in, but delayed due to dual page
......@@ -358,6 +358,17 @@ package body reorder_pkg is
return v;
end;
function func_reorder_transpose(nof_blocks_per_packet : natural;
nof_data_per_block : natural;
transpose : t_reorder_transpose)
return t_reorder_transpose is
begin
return func_reorder_transpose(nof_blocks_per_packet,
nof_data_per_block,
1,
transpose);
end;
function func_reorder_transpose_look_up(nof_blocks_per_packet : natural;
nof_data_per_block : natural;
nof_words_per_data : natural;
......@@ -388,17 +399,6 @@ package body reorder_pkg is
return v;
end;
function func_reorder_transpose(nof_blocks_per_packet : natural;
nof_data_per_block : natural;
transpose : t_reorder_transpose)
return t_reorder_transpose is
begin
return func_reorder_transpose(nof_blocks_per_packet,
nof_data_per_block,
1,
transpose);
end;
function func_reorder_identity(nof_ch_per_packet : natural;
identity : t_reorder_identity)
return t_reorder_identity is
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment