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