Skip to content
Snippets Groups Projects

Resolve L2SDP-846

Merged Eric Kooistra requested to merge L2SDP-846 into master
37 files
+ 775
293
Compare changes
  • Side-by-side
  • Inline
Files
37
@@ -99,8 +99,8 @@ PACKAGE sdp_pkg is
CONSTANT c_sdp_W_statistic : NATURAL := 64;
CONSTANT c_sdp_W_statistic_sz : NATURAL := 2; -- = c_sdp_W_statistic / c_word_w
CONSTANT c_sdp_W_sub_weight : NATURAL := 16; -- = w in s(w, p), s = signed
CONSTANT c_sdp_W_sub_weight_fraction : NATURAL := 13; -- = p in s(w, p)
CONSTANT c_sdp_W_sub_weight_magnitude : NATURAL := c_sdp_W_sub_weight - c_sdp_W_sub_weight_fraction - 1; -- = 2
CONSTANT c_sdp_W_sub_weight_fraction : NATURAL := 14; -- = p in s(w, p)
CONSTANT c_sdp_W_sub_weight_magnitude : NATURAL := c_sdp_W_sub_weight - c_sdp_W_sub_weight_fraction - 1; -- = 1
CONSTANT c_sdp_W_beamlet_scale : NATURAL := 16; -- = w in u(w, p), u = unsigned
CONSTANT c_sdp_W_beamlet_scale_fraction : NATURAL := 15; -- = p in u(w, p)
CONSTANT c_sdp_W_beamlet_scale_magnitude : NATURAL := c_sdp_W_beamlet_scale - c_sdp_W_beamlet_scale_fraction; -- = 1
@@ -159,9 +159,11 @@ PACKAGE sdp_pkg is
-- . g_fft_guard_w = 1 (was 2)
--CONSTANT c_sdp_wpfb_subbands : t_wpfb :=
-- (1, c_sdp_N_fft, 0, c_sdp_P_pfb,
-- c_sdp_N_taps, 0, c_sdp_W_adc, 17, c_sdp_W_fir_coef,
-- true, false, true, 17, c_sdp_W_subband, 0, 22, 1, true, 54, c_sdp_W_statistic_sz, 195313,
-- c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_lts_2021
-- c_sdp_N_taps, 0, c_sdp_W_adc, 17, c_sdp_W_fir_coef,
-- true, false, true,
-- 17, c_sdp_W_subband, 0, 22, 1, true,
-- 54, c_sdp_W_statistic_sz, 195313,
-- c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_lts_2021
-- DTS 2022-04-04, changes based on results from in tb_tb_verify_pfb_wg.vhd:
-- . fil_backoff_w = 1
@@ -169,11 +171,52 @@ PACKAGE sdp_pkg is
-- . g_fft_out_gain_w = 1 (compensate for fil_backoff_w = 1)
-- . g_fft_stage_dat_w = 24
-- . g_fft_guard_w = 1
--CONSTANT c_sdp_wpfb_subbands : t_wpfb :=
-- (1, c_sdp_N_fft, 0, c_sdp_P_pfb,
-- c_sdp_N_taps, 1, c_sdp_W_adc, 23, c_sdp_W_fir_coef,
-- true, false, true,
-- 23, c_sdp_W_subband, 1, 24, 1, true,
-- 54, c_sdp_W_statistic_sz, 195313,
-- c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_dts_18b
-- L2TS
-- . Use fft_guard_w = 1, instead of 2 to avoid overflow in first FFT stage,
-- because fil_backoff_w = 1 already provides sufficient FFT input margin
-- . Use fft_out_gain_w = 1 + 1 = 2. One to compensate for fil_backoff_w
-- = 1 and one to preserve the W_fft_proc = 5b while using fft_out_dat_w
-- = c_sdp_W_subband = 18b instead of 19b, to fit a 18x19 multiplier for
-- SST.
-- . From hdl/libraries/base/common/python/try_round_weight.py it follows
-- that using -r = 6 extra internal bits per stage is sufficient to have
-- < 1% disturbance on the sigma of the subband noise. The disturbance
-- on the sigma is about proportional to 1/2**r, so with -r = 4 it is
-- about < 4%. Therefore use fft_stage_dat_w = fft_out_dat_w +
-- fft_out_gain_w + 6b = 26b.
-- . The raw_dat_w for FFT output of real input is fft_stage_dat_w + 1,
-- because the use_separate in the FFT feature does not divide by 2.
-- This implies that preferrably fft_stage_dat_w <= 26, to fit the 27b
-- multiplier resources.
-- . Increasing fft_stage_dat_w from 24b to 26b does increase M20K usage:
-- 24b 26b
-- FFT 6 x 27 M20K, 6 x 28 M20K, due to separate
-- BF 2 x 403 M20K, 2 x 397 M20K, due to reorder_col
-- where 6 = c_sdp_P_pfb and 2 = c_sdp_N_beamsets.
-- The total design increase is 18 m20K = 2.5 % and 4000 FF = 1.2 %. The
-- nof DSP remains 611.
CONSTANT c_sdp_W_fil_backoff : NATURAL := 1;
CONSTANT c_sdp_W_fft_guard : NATURAL := 1;
CONSTANT c_sdp_W_fft_stage_dat : NATURAL := 25; -- TODO try 26b, compare synthesis results
CONSTANT c_sdp_W_fft_in_dat : NATURAL := c_sdp_W_fft_stage_dat - c_sdp_W_fft_guard;
CONSTANT c_sdp_W_fft_out_gain : NATURAL := 2;
CONSTANT c_sdp_W_stat_data : NATURAL := c_sdp_W_subband * 2 + ceil_log2(c_sdp_N_int_sub_hi); -- = 54
CONSTANT c_sdp_wpfb_subbands : t_wpfb :=
(1, c_sdp_N_fft, 0, c_sdp_P_pfb,
c_sdp_N_taps, 1, c_sdp_W_adc, 23, c_sdp_W_fir_coef,
true, false, true, 23, c_sdp_W_subband, 1, 24, 1, true, 54, c_sdp_W_statistic_sz, 195313,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_dts_18b
c_sdp_N_taps, c_sdp_W_fil_backoff, c_sdp_W_adc, c_sdp_W_fft_in_dat, c_sdp_W_fir_coef,
true, false, true,
c_sdp_W_fft_in_dat, c_sdp_W_subband, c_sdp_W_fft_out_gain, c_sdp_W_fft_stage_dat, c_sdp_W_fft_guard, true,
c_sdp_W_stat_data, c_sdp_W_statistic_sz, c_sdp_N_int_sub_hi,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); -- = c_wpfb_lofar2_subbands_l2ts_18b
CONSTANT c_sdp_wpfb_complex_subbands : t_wpfb := func_wpfb_map_real_input_wpfb_parameters_to_complex_input(c_sdp_wpfb_subbands);
Loading