Skip to content
Snippets Groups Projects
Commit 9c1b6f19 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Support raw subbands for LOFAR2 and keep quantized subbands for DISTURB2.

parent cf3147a0
No related branches found
No related tags found
1 merge request!289Rename c_sdp_W_fsub_wg into c_sdp_W_local_oscillator. Use...
Pipeline #38737 passed
......@@ -23,14 +23,21 @@
-- Purpose:
-- Core design for Lofar2 SDP station
-- Description:
-- Combines sdp nodes. Contains the UniBoard2 HW version independent LOFAR2 SDP application code.
-- * Combines sdp nodes. Contains the UniBoard2 HW version independent LOFAR2
-- SDP application code.
-- * Supports default PFB for LOFAR2 [1]
-- - Uses raw subband input to improve the accuracy of weighted subbands
-- and weighted beamlets
-- * Supports 2x oversampled PFB for DISTURB2 [2]
-- - Still uses quantized subband input, because using raw subbands might
-- require too many DSP multipliers.
-- References:
-- [1] LOFAR2 SDP FW: https://support.astron.nl/confluence/display/L2M/L4+SDP+Firmware+Design+Document
-- [2] DISTURB2 revision: https://support.astron.nl/confluence/x/vIIjBQ
-- [2] DISTURB2 design revision: https://support.astron.nl/confluence/x/vIIjBQ
-- [3] SST, SST_OS packets: https://plm.astron.nl/polarion/#/project/LOFAR2System/wiki/L2%20Interface%20Control%20Documents/SC%20to%20SDP%20ICD
-------------------------------------------------------------------------------
LIBRARY IEEE, common_lib, diag_lib, dp_lib, tech_jesd204b_lib, wpfb_lib, tech_pll_lib, tr_10GbE_lib, nw_10GbE_lib, eth_lib, ring_lib;
LIBRARY IEEE, common_lib, diag_lib, dp_lib, tech_jesd204b_lib, fft_lib, wpfb_lib, tech_pll_lib, tr_10GbE_lib, nw_10GbE_lib, eth_lib, ring_lib;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE common_lib.common_pkg.ALL;
......@@ -39,6 +46,7 @@ USE common_lib.common_network_layers_pkg.ALL;
USE common_lib.common_field_pkg.ALL;
USE diag_lib.diag_pkg.ALL;
USE dp_lib.dp_stream_pkg.ALL;
USE fft_lib.fft_pkg.ALL;
USE wpfb_lib.wpfb_pkg.ALL;
USE work.sdp_pkg.ALL;
USE eth_lib.eth_pkg.ALL;
......@@ -376,6 +384,14 @@ END sdp_station;
ARCHITECTURE str OF sdp_station IS
-- WPFB subband width
CONSTANT c_fft : t_fft := func_wpfb_map_wpfb_parameters_to_fft(g_wpfb);
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);
-- 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
......@@ -520,9 +536,9 @@ ARCHITECTURE str OF sdp_station IS
----------------------------------------------
SIGNAL ait_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0);
SIGNAL fsub_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- weighted subbands
SIGNAL fsub_oversampled_sosi_arr : t_dp_sosi_arr(c_sdp_R_os * c_sdp_P_pfb-1 DOWNTO 0);
SIGNAL fsub_sosi_2arr : t_dp_sosi_2arr_pfb(c_sdp_N_beamsets-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_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
SIGNAL bf_bs_sosi : t_dp_sosi; -- block sync reference for BF ring latency monitor
......@@ -713,7 +729,7 @@ BEGIN
dp_rst => dp_rst,
in_sosi_arr => ait_sosi_arr,
fsub_sosi_arr => fsub_sosi_arr,
fsub_raw_sosi_arr => fsub_raw_sosi_arr,
dp_bsn_source_restart => dp_bsn_source_restart,
dp_bsn_source_new_interval => dp_bsn_source_new_interval,
......@@ -749,8 +765,9 @@ BEGIN
udp_src_port => sst_udp_src_port
);
gen_bf_sosi : FOR I IN 0 TO c_sdp_N_beamsets-1 GENERATE
fsub_sosi_2arr(I) <= fsub_sosi_arr;
gen_bf_sosi : FOR I IN 0 TO c_sdp_N_beamsets-1 GENERATE
-- Wire same subbands to all beamsets
fsub_raw_sosi_2arr(I) <= fsub_raw_sosi_arr;
END GENERATE;
END GENERATE;
......@@ -807,10 +824,14 @@ BEGIN
udp_src_port => sst_udp_src_port
);
fsub_sosi_arr <= fsub_oversampled_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- Lower part contains normal subbands, higher part contains shifted subbands.
-- 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_sosi_2arr(0) <= fsub_sosi_arr;
fsub_sosi_2arr(1) <= fsub_oversampled_sosi_arr(2 * c_sdp_P_pfb-1 DOWNTO c_sdp_P_pfb); -- Use second beamset for oversampled subbands
-- . 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);
END GENERATE;
END GENERATE;
......@@ -821,15 +842,17 @@ BEGIN
gen_use_xsub : IF g_use_xsub GENERATE
u_xsub : ENTITY work.node_sdp_correlator
GENERIC MAP(
g_sim => g_sim,
g_sim_sdp => g_sim_sdp,
g_P_sq => g_P_sq
g_sim => g_sim,
g_sim_sdp => g_sim_sdp,
g_P_sq => g_P_sq,
g_subband_raw_dat_w => c_subband_raw_dat_w,
g_subband_raw_fraction_w => c_subband_raw_fraction_w
)
PORT MAP(
dp_clk => dp_clk,
dp_rst => dp_rst,
in_sosi_arr => fsub_sosi_arr,
in_sosi_arr => fsub_raw_sosi_arr,
xst_udp_sosi => udp_tx_sosi_arr(1),
xst_udp_siso => udp_tx_siso_arr(1),
......@@ -886,13 +909,15 @@ BEGIN
g_sim => g_sim,
g_sim_sdp => g_sim_sdp,
g_beamset_id => beamset_id,
g_scope_selected_beamlet => g_scope_selected_subband
g_scope_selected_beamlet => g_scope_selected_subband,
g_subband_raw_dat_w => c_subband_raw_dat_w,
g_subband_raw_fraction_w => c_subband_raw_fraction_w
)
PORT MAP(
dp_clk => dp_clk,
dp_rst => dp_rst,
in_sosi_arr => fsub_sosi_2arr(beamset_id),
in_sosi_arr => fsub_raw_sosi_2arr(beamset_id),
from_ri_sosi => bf_from_ri_sosi_arr(beamset_id),
to_ri_sosi => bf_to_ri_sosi_arr(beamset_id),
bf_udp_sosi => bf_udp_sosi_arr(beamset_id),
......@@ -1233,7 +1258,7 @@ BEGIN
END GENERATE;
gen_bf_ring : IF g_use_bf GENERATE
bf_bs_sosi <= fsub_sosi_arr(0);
bf_bs_sosi <= fsub_raw_sosi_arr(0);
gen_beamset_ring : FOR beamset_id IN 0 TO c_sdp_N_beamsets-1 GENERATE
u_ring_lane_bf : ENTITY ring_lib.ring_lane
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment