Skip to content
Snippets Groups Projects
Commit 364afc63 authored by Pepping's avatar Pepping
Browse files

Added quantizer between wpfb and correlator

parent 9ead9e37
No related branches found
No related tags found
No related merge requests found
...@@ -161,6 +161,7 @@ ARCHITECTURE str OF apertif_unb1_correlator IS ...@@ -161,6 +161,7 @@ ARCHITECTURE str OF apertif_unb1_correlator IS
CONSTANT c_nof_channels : NATURAL := 64; CONSTANT c_nof_channels : NATURAL := 64;
CONSTANT c_integration_period : NATURAL := c_nof_blocks_per_sync/c_nof_channels; --12207; CONSTANT c_integration_period : NATURAL := c_nof_blocks_per_sync/c_nof_channels; --12207;
CONSTANT c_nof_visibilities : NATURAL := (c_nof_inputs*(c_nof_inputs+1))/2; CONSTANT c_nof_visibilities : NATURAL := (c_nof_inputs*(c_nof_inputs+1))/2;
CONSTANT c_cor_in_dat_w : NATURAL := 9; -- 9-bit input data for the correlator: 9b -> mult -> 18b -> accu -> 32b at the corr output.
-- . Inter Channel Delay: -- . Inter Channel Delay:
-- . With no inter channel output delay, channels are output back-to-back, creating a short full valid burst of 64 channels (12.8 Gbps burst, 158Mbps on average). -- . With no inter channel output delay, channels are output back-to-back, creating a short full valid burst of 64 channels (12.8 Gbps burst, 158Mbps on average).
-- We need to set an appropriate number of inter-channel delay cycles for a constant visibility buffer output rate. -- We need to set an appropriate number of inter-channel delay cycles for a constant visibility buffer output rate.
...@@ -176,9 +177,9 @@ ARCHITECTURE str OF apertif_unb1_correlator IS ...@@ -176,9 +177,9 @@ ARCHITECTURE str OF apertif_unb1_correlator IS
CONSTANT c_wpfb_nof_chan : NATURAL := 1; -- = default 0, defines the number of channels (=time-m CONSTANT c_wpfb_nof_chan : NATURAL := 1; -- = default 0, defines the number of channels (=time-m
CONSTANT c_wpfb_nof_points : NATURAL := 64; -- = 1024, N point FFT CONSTANT c_wpfb_nof_points : NATURAL := 64; -- = 1024, N point FFT
CONSTANT c_wpfb_nof_taps : NATURAL := 8; -- = 8 nof taps n the filter CONSTANT c_wpfb_nof_taps : NATURAL := 8; -- = 8 nof taps n the filter
CONSTANT c_wpfb_coef_w : NATURAL := 18; --FIXME: 9b does not work; needs updated coefficient files. CONSTANT c_wpfb_coef_w : NATURAL := 16; --FIXME: 9b does not work; needs updated coefficient files.
CONSTANT c_wpfb_in_dat_w : NATURAL := 8; --FIXME: should be 6b at some point CONSTANT c_wpfb_in_dat_w : NATURAL := 8; --FIXME: should be 6b at some point
CONSTANT c_wpfb_out_dat_w : NATURAL := 9; --FIXME: Could be wider but is currently 9b to avoid the need for quantization: 9b -> mult -> 18b -> accu -> 32b at the corr output. CONSTANT c_wpfb_out_dat_w : NATURAL := 16; --FIXME: Could be wider but is currently 9b to avoid the need for quantization: 9b -> mult -> 18b -> accu -> 32b at the corr output.
CONSTANT c_wpfb_use_separate : BOOLEAN := FALSE; -- = false for complex input, true for two real inputs CONSTANT c_wpfb_use_separate : BOOLEAN := FALSE; -- = false for complex input, true for two real inputs
CONSTANT c_wpfb_use_reorder : BOOLEAN := FALSE; CONSTANT c_wpfb_use_reorder : BOOLEAN := FALSE;
...@@ -186,6 +187,37 @@ ARCHITECTURE str OF apertif_unb1_correlator IS ...@@ -186,6 +187,37 @@ ARCHITECTURE str OF apertif_unb1_correlator IS
c_wpfb_nof_taps, c_wpfb_in_dat_w, 16, c_wpfb_coef_w, c_wpfb_nof_taps, c_wpfb_in_dat_w, 16, c_wpfb_coef_w,
c_wpfb_use_reorder, c_wpfb_use_separate, 16, c_wpfb_out_dat_w, 18, 2, true, 56, 2, c_wpfb_use_reorder, c_wpfb_use_separate, 16, c_wpfb_out_dat_w, 18, 2, true, 56, 2,
c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline); c_fft_pipeline, c_fft_pipeline, c_fil_ppf_pipeline);
-- type t_wpfb is record
-- -- General parameters for the wideband poly phase filter
-- wb_factor : natural; -- = default 4, wideband factor
-- nof_points : natural; -- = 1024, N point FFT (Also the number of subbands for the filter part)
-- nof_chan : natural; -- = default 0, defines the number of channels (=time-multiplexed input signals): nof channels = 2**nof_chan
-- nof_wb_streams : natural; -- = 1, the number of parallel wideband streams. The filter coefficients are shared on every wb-stream.
--
-- -- Parameters for the poly phase filter
-- nof_taps : natural; -- = 16, the number of FIR taps per subband
-- fil_in_dat_w : natural; -- = 8, number of input bits
-- fil_out_dat_w : natural; -- = 16, number of output bits
-- coef_dat_w : natural; -- = 16, data width of the FIR coefficients
--
-- -- Parameters for the FFT
-- use_reorder : boolean; -- = false for bit-reversed output, true for normal output
-- use_separate : boolean; -- = false for complex input, true for two real inputs
-- fft_in_dat_w : natural; -- = 16, number of input bits
-- fft_out_dat_w : natural; -- = 16, number of output bits >= (fil_in_dat_w=8) + log2(nof_points=1024)/2 = 13
-- stage_dat_w : natural; -- = 18, number of bits that are used inter-stage
-- guard_w : natural; -- = 2
-- guard_enable : boolean; -- = true
-- stat_data_w : positive; -- = 56
-- stat_data_sz : positive; -- = 2
--
-- -- Pipeline parameters for both poly phase filter and FFT. These are heritaged from the filter and fft libraries.
-- pft_pipeline : t_fft_pipeline; -- Pipeline settings for the pipelined FFT
-- fft_pipeline : t_fft_pipeline; -- Pipeline settings for the parallel FFT
-- fil_pipeline : t_fil_ppf_pipeline; -- Pipeline settings for the filter units
--
-- end record;
CONSTANT c_wpfb_coefs_file_prefix : STRING := "mif/coefs_wide1_p64_t8"; CONSTANT c_wpfb_coefs_file_prefix : STRING := "mif/coefs_wide1_p64_t8";
...@@ -331,6 +363,8 @@ ARCHITECTURE str OF apertif_unb1_correlator IS ...@@ -331,6 +363,8 @@ ARCHITECTURE str OF apertif_unb1_correlator IS
SIGNAL wpfb_snk_in_ctrl : t_dp_sosi; SIGNAL wpfb_snk_in_ctrl : t_dp_sosi;
SIGNAL wpfb_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0); SIGNAL wpfb_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0);
SIGNAL wpfb_src_out_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0); SIGNAL wpfb_src_out_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0);
SIGNAL requantize_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0);
SIGNAL requantize_src_out_arr : t_dp_sosi_arr(1-1 DOWNTO 0);
SIGNAL correlator_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0); SIGNAL correlator_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0);
SIGNAL correlator_src_out_arr : t_dp_sosi_arr(1-1 DOWNTO 0); SIGNAL correlator_src_out_arr : t_dp_sosi_arr(1-1 DOWNTO 0);
...@@ -958,9 +992,9 @@ BEGIN ...@@ -958,9 +992,9 @@ BEGIN
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
p_bsn_filter : PROCESS(wpfb_src_out_arr) p_bsn_filter : PROCESS(wpfb_src_out_arr)
BEGIN BEGIN
correlator_snk_in_arr <= (OTHERS=>c_dp_sosi_rst); requantize_snk_in_arr <= (OTHERS=>c_dp_sosi_rst);
IF TO_UINT(wpfb_src_out_arr(0).bsn)>=5 THEN IF TO_UINT(wpfb_src_out_arr(0).bsn)>=5 THEN
correlator_snk_in_arr <= wpfb_src_out_arr; requantize_snk_in_arr <= wpfb_src_out_arr;
END IF; END IF;
END PROCESS; END PROCESS;
...@@ -983,6 +1017,34 @@ BEGIN ...@@ -983,6 +1017,34 @@ BEGIN
src_in => c_dp_siso_rdy src_in => c_dp_siso_rdy
); );
-----------------------------------------------------------------------------
-- Requantize output of wpfb for correlator input
-----------------------------------------------------------------------------
gen_requantizer : FOR I IN 0 TO c_nof_input_streams-1 GENERATE
u_dp_requantize_out : ENTITY dp_lib.dp_requantize
GENERIC MAP (
g_complex => TRUE,
g_representation => "SIGNED",
g_lsb_w => c_wpfb_out_dat_w-c_cor_in_dat_w,
g_lsb_round => FALSE,
g_lsb_round_clip => FALSE,
g_msb_clip => FALSE,
g_msb_clip_symmetric => FALSE,
g_gain_w => 0,
g_pipeline_remove_lsb => 1,
g_pipeline_remove_msb => 0,
g_in_dat_w => c_wpfb_out_dat_w,
g_out_dat_w => c_cor_in_dat_w
)
PORT MAP (
rst => dp_rst,
clk => dp_clk,
snk_in => requantize_snk_in_arr(I),
src_out => correlator_snk_in_arr(I),
out_ovr => OPEN
);
END GENERATE;
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- Correlator -- Correlator
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
...@@ -992,7 +1054,7 @@ BEGIN ...@@ -992,7 +1054,7 @@ BEGIN
g_nof_input_streams => c_nof_input_streams, g_nof_input_streams => c_nof_input_streams,
g_input_unfold_factor => c_nof_input_folds, g_input_unfold_factor => c_nof_input_folds,
g_nof_pre_mult_folds => c_nof_pre_mult_folds, g_nof_pre_mult_folds => c_nof_pre_mult_folds,
g_data_w => c_wpfb_out_dat_w, g_data_w => c_cor_in_dat_w,
g_conjugate => c_conjugate, g_conjugate => c_conjugate,
g_nof_channels => c_nof_channels, g_nof_channels => c_nof_channels,
g_integration_period => c_integration_period, g_integration_period => c_integration_period,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment