diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys index 3bf8508a8dcf285cde566b67e67206c726e20637..f10344966a54ff5c45c0bc68324fad76512d6225 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/quartus/qsys_lofar2_unb2b_sdp_station.qsys @@ -14032,7 +14032,7 @@ </fileSets> </generationInfoDefinition>]]></parameter> <parameter name="hlsFile" value="" /> - <parameter name="logicalView">ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_equalizer_gains_cross.ip</parameter> + <parameter name="logicalView">../lofar2_unb2b_sdp_station/ip/qsys_lofar2_unb2b_sdp_station/qsys_lofar2_unb2b_sdp_station_ram_equalizer_gains_cross.ip</parameter> <parameter name="moduleAssignmentDefinition"><![CDATA[<assignmentDefinition> <assignmentValueMap/> </assignmentDefinition>]]></parameter> 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 bec60072a6ac16140d3fcd74bb33d0a8cdfc6a99..ba60b1a643442c72a7c36dfd9b392ca03b55485c 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,18 +109,20 @@ 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_fft_complex : t_fft := func_wpfb_map_wpfb_parameters_to_fft(g_wpfb_complex); + 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_complex_subband_raw_dat_w : NATURAL := func_fft_raw_dat_w(c_fft_complex); + CONSTANT c_complex_subband_raw_fraction_w : NATURAL := func_fft_raw_fraction_w(c_fft_complex); + CONSTANT c_dat_w_diff : INTEGER := c_complex_subband_raw_dat_w - c_subband_raw_dat_w; -- = -1 which is used to shift 1 bit to the left. CONSTANT c_nof_masters : POSITIVE := 2; CONSTANT c_si_pipeline : NATURAL := 1; CONSTANT c_complex_mult_pipeline : NATURAL := 3; CONSTANT c_complex_pfb_pipeline : NATURAL := 2; + CONSTANT c_pipeline_remove_lsb : NATURAL := 1; -- to easy timing closure -- Use WG as local oscillator, buf contains 16b sin and 16b cos -- . c_sdp_W_local_oscillator = 16b @@ -170,33 +174,37 @@ 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); -- Interleave positive frequencies per factor Q_fft = 2, like with output of real input FFT - SIGNAL wpfb_complex_out_fifo_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL wpfb_complex_out_fifo_siso_arr : t_dp_siso_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); - 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 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 wpfb_complex_out_fifo_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL wpfb_complex_out_fifo_siso_arr : t_dp_siso_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); + 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 wpfb_complex_out_interleaved_sosi_arr : t_dp_sosi_arr(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 dp_selector_pipe_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 selector_en : STD_LOGIC; SIGNAL weighted_subbands_flag : STD_LOGIC; @@ -277,8 +285,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 +456,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 +475,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 +484,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_complex_subband_raw_dat_w, g_bsn_w => c_dp_stream_bsn_w, g_use_bsn => TRUE, g_use_sync => TRUE, @@ -500,8 +508,8 @@ BEGIN wpfb_complex_out_fifo_siso_arr(2*I + 1) <= wpfb_complex_out_resized_siso_2arr(I)(1); END GENERATE; - -- Interleave 2 to 1 for all S_pn signals. - gen_interleave: FOR I IN 0 TO c_sdp_P_pfb-1 GENERATE + gen_align: FOR I IN 0 TO c_sdp_P_pfb-1 GENERATE + -- Interleave 2 to 1 for all S_pn signals. u_dp_interleave_n_to_one : ENTITY dp_lib.dp_interleave_n_to_one GENERIC MAP( g_nof_inputs => c_sdp_Q_fft @@ -511,11 +519,22 @@ BEGIN clk => dp_clk, snk_in_arr => wpfb_complex_out_resized_sosi_2arr(I), snk_out_arr => wpfb_complex_out_resized_siso_2arr(I), - src_out => subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I) + src_out => wpfb_complex_out_interleaved_sosi_arr(I) ); + + -- Align data width of wpfb_complex output with wpfb_real output as the real wpfb + -- has an extra bit that is used for the FFT seperate function which the complex FFT + -- does not have. Here we add that extra bit to the output of the complex FFT aswell + -- to maintain the same scale and data width. + p_add_bit : PROCESS(wpfb_complex_out_interleaved_sosi_arr) + BEGIN + subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I) <= wpfb_complex_out_interleaved_sosi_arr(I); + subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).re <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).re, c_dat_w_diff); + subband_equalizer_in_sosi_arr(c_sdp_P_pfb + I).im <= SHIFT_SVEC(wpfb_complex_out_interleaved_sosi_arr(I).im, c_dat_w_diff); + END PROCESS; + END GENERATE; - -- Pipeline to compensate for longer latency of the complex PFB. u_dp_pipeline_arr : ENTITY dp_lib.dp_pipeline_arr GENERIC MAP ( @@ -526,7 +545,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 +579,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,15 +593,38 @@ 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 REQUANTIZE for SST + --------------------------------------------------------------- + gen_dp_requantize : FOR I IN 0 TO c_sdp_R_os * c_sdp_P_pfb-1 GENERATE + u_dp_requantize : ENTITY dp_lib.dp_requantize + GENERIC MAP ( + g_complex => TRUE, + g_lsb_w => c_subband_raw_fraction_w, + g_msb_clip => FALSE, + g_pipeline_remove_lsb => c_pipeline_remove_lsb, + g_in_dat_w => c_subband_raw_dat_w, + g_out_dat_w => c_sdp_W_subband + ) + PORT MAP ( + rst => dp_rst, + clk => dp_clk, + + snk_in => subband_equalizer_in_sosi_arr(I), + src_out => dp_selector_pipe_sosi_arr(I) + ); + END GENERATE; --------------------------------------------------------------- - -- DP SELECTOR + -- DP SELECTOR for SST input --------------------------------------------------------------- u_dp_selector_arr : ENTITY dp_lib.dp_selector_arr GENERIC MAP ( g_nof_arr => c_sdp_R_os * c_sdp_P_pfb, - g_pipeline => c_sdp_subband_equalizer_latency + g_pipeline => c_sdp_subband_equalizer_latency - c_pipeline_remove_lsb ) PORT MAP ( mm_rst => mm_rst, @@ -592,8 +635,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 => dp_selector_pipe_sosi_arr, + ref_sosi_arr => subband_equalizer_quant_sosi_arr, out_sosi_arr => dp_selector_out_sosi_arr, selector_en => selector_en @@ -629,7 +672,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 699b97ea192af7d23dd7ae9d0bfcc25790144c84..d8af2c9bfa6589447b951177e03f116700b48d27 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -391,8 +391,8 @@ ARCHITECTURE str OF sdp_station IS CONSTANT c_fft_raw_dat_w : NATURAL := func_fft_raw_dat_w(c_fft); CONSTANT c_fft_raw_fraction_w : NATURAL := func_fft_raw_fraction_w(c_fft); - CONSTANT c_subband_raw_dat_w : NATURAL := sel_a_b(g_use_oversample, c_sdp_W_subband, c_fft_raw_dat_w); - CONSTANT c_subband_raw_fraction_w : NATURAL := sel_a_b(g_use_oversample, 0, c_fft_raw_fraction_w); + CONSTANT c_subband_raw_dat_w : NATURAL := c_fft_raw_dat_w; + CONSTANT c_subband_raw_fraction_w : NATURAL := c_fft_raw_fraction_w; -- Make Tx FIFOs at least c_fifo_tx_fill_margin larger than needed to fit the largest Tx packet CONSTANT c_fifo_tx_fill_margin : NATURAL := 10; -- >= c_fifo_fill_margin = 6 that is used in dp_fifo_fill_eop @@ -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;