diff --git a/libraries/base/reorder/src/vhdl/reorder_pkg.vhd b/libraries/base/reorder/src/vhdl/reorder_pkg.vhd index 80136add774ed7aa11555f523ede39a27e7183f6..0921c3ce26555a41c0403267e463aa528231100e 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;