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