From fbe978f53824f31b59e7e3b93a6bfb3e9f50845f Mon Sep 17 00:00:00 2001 From: Reinier van der Walle <walle@astron.nl> Date: Tue, 14 Mar 2023 17:28:41 +0100 Subject: [PATCH] Connected raw subband output from wpfb --- .../vhdl/node_sdp_oversampled_filterbank.vhd | 73 ++++++++++--------- .../libraries/sdp/src/vhdl/sdp_station.vhd | 10 +-- 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd index bec60072a6..7a7406d1ca 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_oversampled_filterbank.vhd @@ -36,7 +36,7 @@ -- . ------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, dp_lib, diag_lib, rTwoSDF_lib, common_mult_lib, wpfb_lib, filter_lib, si_lib, st_lib, mm_lib; +LIBRARY IEEE, common_lib, dp_lib, diag_lib, rTwoSDF_lib, common_mult_lib, fft_lib, wpfb_lib, filter_lib, si_lib, st_lib, mm_lib; USE IEEE.STD_LOGIC_1164.ALL; USE common_lib.common_pkg.ALL; USE common_lib.common_mem_pkg.ALL; @@ -44,6 +44,7 @@ USE common_lib.common_network_layers_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL; USE rTwoSDF_lib.rTwoSDFPkg.ALL; USE filter_lib.fil_pkg.ALL; +USE fft_lib.fft_pkg.ALL; USE wpfb_lib.wpfb_pkg.ALL; USE diag_lib.diag_pkg.ALL; USE work.sdp_pkg.ALL; @@ -63,10 +64,11 @@ ENTITY node_sdp_oversampled_filterbank IS dp_bsn_source_restart : IN STD_LOGIC; dp_bsn_source_new_interval : IN STD_LOGIC; - in_sosi_arr : IN t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); - fsub_sosi_arr : OUT t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0); - sst_udp_sosi : OUT t_dp_sosi; - sst_udp_siso : IN t_dp_siso := c_dp_siso_rst; + in_sosi_arr : IN t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); + fsub_quant_sosi_arr: OUT t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0); + fsub_raw_sosi_arr : OUT t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0); + sst_udp_sosi : OUT t_dp_sosi; + sst_udp_siso : IN t_dp_siso := c_dp_siso_rst; mm_rst : IN STD_LOGIC; mm_clk : IN STD_LOGIC; @@ -107,12 +109,9 @@ ARCHITECTURE str OF node_sdp_oversampled_filterbank IS NATURAL'IMAGE(c_sdp_W_sub_weight) & "b" & NATURAL'IMAGE(c_sdp_W_sub_weight_fraction) & "f_unit"; - -- Use quantized subbands, so c_subband_raw_dat_w = 18b. - -- . Maybe later use raw subbands like in node_sdp_filterbank, but for now - -- appling subband weights and bf weights at c_sdp_W_subband = 18b subbands - -- is acceptable. - CONSTANT c_subband_raw_dat_w : NATURAL := c_sdp_W_subband; - CONSTANT c_subband_raw_fraction_w : NATURAL := 0; + CONSTANT c_fft : t_fft := func_wpfb_map_wpfb_parameters_to_fft(g_wpfb); + CONSTANT c_subband_raw_dat_w : NATURAL := func_fft_raw_dat_w(c_fft); + CONSTANT c_subband_raw_fraction_w : NATURAL := func_fft_raw_fraction_w(c_fft); CONSTANT c_nof_masters : POSITIVE := 2; @@ -170,17 +169,18 @@ ARCHITECTURE str OF node_sdp_oversampled_filterbank IS -- Real input FFT SIGNAL wpfb_unit_in_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); SIGNAL wpfb_unit_fil_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL wpfb_unit_out_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL wpfb_unit_out_sosi_arr_piped : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_out_quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_out_raw_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); -- Mixer to shift f_sub/2 SIGNAL mixer_complex_mult_src_out_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); SIGNAL mixer_complex_requantize_src_out_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); -- Complex input FFT (from LO mixer) - SIGNAL wpfb_unit_complex_in_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL wpfb_unit_complex_fil_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL wpfb_unit_complex_out_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_complex_in_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_complex_fil_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_complex_out_quant_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_unit_complex_out_raw_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); -- Remove negative frequencies SIGNAL wpfb_complex_out_resized_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); @@ -191,12 +191,13 @@ ARCHITECTURE str OF node_sdp_oversampled_filterbank IS SIGNAL wpfb_complex_out_resized_sosi_2arr : t_dp_sosi_2arr_2(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => (OTHERS => c_dp_sosi_rst)); SIGNAL wpfb_complex_out_resized_siso_2arr : t_dp_siso_2arr_2(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => (OTHERS => c_dp_siso_rst)); - SIGNAL subband_equalizer_in_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL subband_equalizer_out_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL dp_selector_out_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL subband_equalizer_in_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL subband_equalizer_quant_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL subband_equalizer_raw_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL dp_selector_out_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL scope_equalizer_in_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn-1 DOWNTO 0); - SIGNAL scope_equalizer_out_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn-1 DOWNTO 0); + SIGNAL scope_equalizer_in_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn-1 DOWNTO 0); + SIGNAL scope_equalizer_out_sosi_arr : t_dp_sosi_integer_arr(c_sdp_R_os * c_sdp_S_pn-1 DOWNTO 0); SIGNAL selector_en : STD_LOGIC; SIGNAL weighted_subbands_flag : STD_LOGIC; @@ -277,8 +278,8 @@ BEGIN in_sosi_arr => wpfb_unit_in_sosi_arr, fil_sosi_arr => wpfb_unit_fil_sosi_arr, - out_quant_sosi_arr => wpfb_unit_out_sosi_arr, - out_raw_sosi_arr => OPEN, + out_quant_sosi_arr => wpfb_unit_out_quant_sosi_arr, + out_raw_sosi_arr => wpfb_unit_out_raw_sosi_arr, dp_bsn_source_restart => dp_bsn_source_restart_pipe ); @@ -448,8 +449,8 @@ BEGIN in_sosi_arr => wpfb_unit_complex_in_sosi_arr, fil_sosi_arr => wpfb_unit_complex_fil_sosi_arr, - out_quant_sosi_arr => wpfb_unit_complex_out_sosi_arr, - out_raw_sosi_arr => OPEN, + out_quant_sosi_arr => wpfb_unit_complex_out_quant_sosi_arr, + out_raw_sosi_arr => wpfb_unit_complex_out_raw_sosi_arr, dp_bsn_source_restart => dp_bsn_source_restart_pipe_complex ); @@ -467,7 +468,7 @@ BEGIN PORT MAP ( rst => dp_rst, clk => dp_clk, - snk_in => wpfb_unit_complex_out_sosi_arr(I), + snk_in => wpfb_unit_complex_out_raw_sosi_arr(I), src_out => wpfb_complex_out_resized_sosi_arr(I) ); END GENERATE; @@ -476,7 +477,7 @@ BEGIN gen_dp_fifo: FOR I IN 0 TO c_sdp_S_pn-1 GENERATE u_dp_fifo_sc : ENTITY dp_lib.dp_fifo_sc GENERIC MAP( - g_data_w => c_nof_complex * c_sdp_W_subband, + g_data_w => c_nof_complex * c_subband_raw_dat_w, g_bsn_w => c_dp_stream_bsn_w, g_use_bsn => TRUE, g_use_sync => TRUE, @@ -526,7 +527,7 @@ BEGIN rst => dp_rst, clk => dp_clk, -- ST sink - snk_in_arr => wpfb_unit_out_sosi_arr, + snk_in_arr => wpfb_unit_out_raw_sosi_arr, -- ST source src_out_arr => subband_equalizer_in_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) ); @@ -560,8 +561,9 @@ BEGIN dp_clk => dp_clk, dp_rst => dp_rst, - in_raw_sosi_arr => subband_equalizer_in_sosi_arr, - out_raw_sosi_arr => subband_equalizer_out_sosi_arr, + in_raw_sosi_arr => subband_equalizer_in_sosi_arr, + out_raw_sosi_arr => subband_equalizer_raw_sosi_arr, + out_quant_sosi_arr => subband_equalizer_quant_sosi_arr, mm_rst => mm_rst, mm_clk => mm_clk, @@ -573,10 +575,11 @@ BEGIN ); -- Output fsub streams - fsub_sosi_arr <= subband_equalizer_out_sosi_arr; + fsub_quant_sosi_arr <= subband_equalizer_quant_sosi_arr; + fsub_raw_sosi_arr <= subband_equalizer_raw_sosi_arr; --------------------------------------------------------------- - -- DP SELECTOR + -- DP SELECTOR for SST input --------------------------------------------------------------- u_dp_selector_arr : ENTITY dp_lib.dp_selector_arr GENERIC MAP ( @@ -592,8 +595,8 @@ BEGIN reg_selector_mosi => reg_selector_mosi, reg_selector_miso => reg_selector_miso, - pipe_sosi_arr => subband_equalizer_in_sosi_arr, - ref_sosi_arr => subband_equalizer_out_sosi_arr, + pipe_sosi_arr => subband_equalizer_in_sosi_arr, -- Should be quantized? + ref_sosi_arr => subband_equalizer_quant_sosi_arr, out_sosi_arr => dp_selector_out_sosi_arr, selector_en => selector_en @@ -629,7 +632,7 @@ BEGIN PORT MAP ( clk => dp_clk, rst => dp_rst, - sp_sosi_arr => subband_equalizer_out_sosi_arr, + sp_sosi_arr => subband_equalizer_quant_sosi_arr, scope_sosi_arr => scope_equalizer_out_sosi_arr ); -- synthesis translate_on diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index 699b97ea19..b8ab99213b 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -539,7 +539,7 @@ ARCHITECTURE str OF sdp_station IS SIGNAL ait_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0); SIGNAL fsub_raw_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); - SIGNAL fsub_oversampled_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0); + SIGNAL fsub_oversampled_raw_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0); SIGNAL fsub_raw_sosi_2arr : t_dp_sosi_2arr_pfb(c_sdp_N_beamsets-1 DOWNTO 0); SIGNAL xst_bs_sosi : t_dp_sosi; -- block sync reference for Xsub ring latency monitor @@ -792,7 +792,7 @@ BEGIN dp_rst => dp_rst, in_sosi_arr => ait_sosi_arr, - fsub_sosi_arr => fsub_oversampled_sosi_arr, + fsub_raw_sosi_arr => fsub_oversampled_raw_sosi_arr, dp_bsn_source_restart => dp_bsn_source_restart, dp_bsn_source_new_interval => dp_bsn_source_new_interval, @@ -832,12 +832,12 @@ BEGIN -- Lower part contains normal subbands, higher part contains shifted subbands. -- . Use normal subbands for subband correlator - fsub_raw_sosi_arr <= fsub_oversampled_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); + fsub_raw_sosi_arr <= fsub_oversampled_raw_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- . Use first beamset for normal subbands -- Use second beamset for oversampled subbands - fsub_raw_sosi_2arr(0) <= fsub_oversampled_sosi_arr( c_sdp_P_pfb-1 DOWNTO 0); - fsub_raw_sosi_2arr(1) <= fsub_oversampled_sosi_arr(2 * c_sdp_P_pfb-1 DOWNTO c_sdp_P_pfb); + fsub_raw_sosi_2arr(0) <= fsub_oversampled_raw_sosi_arr( c_sdp_P_pfb-1 DOWNTO 0); + fsub_raw_sosi_2arr(1) <= fsub_oversampled_raw_sosi_arr(2 * c_sdp_P_pfb-1 DOWNTO c_sdp_P_pfb); END GENERATE; END GENERATE; -- GitLab