From a4b10b99e4c5615544ab5ca6e0b1d2a100b6aeae Mon Sep 17 00:00:00 2001
From: Erik Kooistra <kooistra@astron.nl>
Date: Tue, 25 Oct 2016 07:05:14 +0000
Subject: [PATCH] Added func_wpfb_maximum_sop_latency().

---
 libraries/dsp/wpfb/src/vhdl/wpfb_pkg.vhd | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/libraries/dsp/wpfb/src/vhdl/wpfb_pkg.vhd b/libraries/dsp/wpfb/src/vhdl/wpfb_pkg.vhd
index 259ec63ffe..c986ec0db7 100644
--- a/libraries/dsp/wpfb/src/vhdl/wpfb_pkg.vhd
+++ b/libraries/dsp/wpfb/src/vhdl/wpfb_pkg.vhd
@@ -89,9 +89,30 @@ package wpfb_pkg is
                                                 8, 0, 8, 16, 9,
                                                 true, false, false, 16, 16, 0, c_dsp_mult_w, 2, true, 56, 2,  
                                                 c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
-                                   
+  
+  -- Estimate maximum number of blocks of latency between WPFB input and output
+  function func_wpfb_maximum_sop_latency(wpfb : t_wpfb) return natural;
+
 end package wpfb_pkg;
 
 package body wpfb_pkg is
+
+  function func_wpfb_maximum_sop_latency(wpfb : t_wpfb) return natural is
+    constant c_nof_channels : natural := 2**wpfb.nof_chan;
+    constant c_block_size   : natural := c_nof_channels * wpfb.nof_points / wpfb.wb_factor;
+    constant c_block_dly    : natural := 10;
+  begin
+    -- The prefilter, pipelined FFT, pipelined reorder and the wideband separate reorder
+    -- cause block latency.
+    -- The parallel FFT has no block latency.
+    -- The parallel FFT reorder is merely a rewiring and causes no latency.
+    -- ==> This yields maximim 4 block latency
+    -- ==> Add one extra block latency to round up
+    -- Each block in the Wideband FFT also introduces about c_block_dly clock cycles of
+    -- pipeline latency.
+    -- ==> This yields maximum ( 5 * c_block_dly ) / c_block_size of block latency
+    return 4 + 1 + (5 * c_block_dly) / c_block_size;
+  end func_wpfb_maximum_sop_latency;
+  
 end wpfb_pkg;
 
-- 
GitLab