From fc69ae7814c0d9d0d0ea2f37355a3f8771a2ef37 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Thu, 17 Aug 2023 10:27:18 +0200 Subject: [PATCH] Support reorder identity control. --- .../base/reorder/src/vhdl/reorder_pkg.vhd | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/libraries/base/reorder/src/vhdl/reorder_pkg.vhd b/libraries/base/reorder/src/vhdl/reorder_pkg.vhd index 80136add77..0921c3ce26 100644 --- a/libraries/base/reorder/src/vhdl/reorder_pkg.vhd +++ b/libraries/base/reorder/src/vhdl/reorder_pkg.vhd @@ -77,6 +77,10 @@ package reorder_pkg is (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) ); + ----------------------------------------------------------------------------- + -- Reorder transpose + ----------------------------------------------------------------------------- + -- Block and data counters to derive select_copi.address for transpose -- reording between nof_blocks_per_packet and nof_data_per_block. type t_reorder_transpose is record @@ -96,6 +100,24 @@ package reorder_pkg is transpose : t_reorder_transpose) return t_reorder_transpose; + ----------------------------------------------------------------------------- + -- Reorder identity + -- . so no reordering, same out as in, but delayed due to dual page + -- buffering of reorder + ----------------------------------------------------------------------------- + + -- Pass on input to output in same order. + type t_reorder_identity is record + select_copi : t_mem_copi; + addr : natural; + end record; + + constant c_reorder_identity_rst : t_reorder_identity := (c_mem_copi_rst, 0); + + function func_reorder_identity(nof_ch_per_packet : natural; + identity : t_reorder_identity) + return t_reorder_identity; + end reorder_pkg; package body reorder_pkg is @@ -167,4 +189,22 @@ package body reorder_pkg is return v; end; + function func_reorder_identity(nof_ch_per_packet : natural; + identity : t_reorder_identity) + return t_reorder_identity is + variable v : t_reorder_identity; + begin + v := identity; + -- read at current address + v.select_copi.address := TO_MEM_ADDRESS(v.addr); + v.select_copi.rd := '1'; + -- prepare next read address + if v.addr < nof_ch_per_packet - 1 then + v.addr := v.addr + 1; + else + v.addr := 0; + end if; + return v; + end; + end reorder_pkg; -- GitLab