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

Output raw and quantized subbands. Use quantized subbands for SST.

parent 87d38364
No related branches found
No related tags found
1 merge request!289Rename c_sdp_W_fsub_wg into c_sdp_W_local_oscillator. Use...
......@@ -27,15 +27,32 @@
-- Description:
-- . The subband filterbank seperates the incoming timestamped ADC samples into
-- 512 frequency bands called subbands.
-- . It implements a critically sampled poly-phase filterbank (PFB). The PFB consists of a
-- poly-phase finite impulse response (PFIR) filter per real input and a
-- complex fast fourier transform (FFT) per 2 real inputs.
-- . It implements a critically sampled poly-phase filterbank (PFB). The PFB
-- consists of a poly-phase finite impulse response (PFIR) filter per real
-- input and a complex fast fourier transform (FFT) per 2 real inputs.
-- . The number of points of the FFT is 1024.
--
-- . Subband widths:
-- - raw_sosi : c_subband_raw_dat_w bits
-- - quant_sosi : c_subband_quant_dat_w = c_sdp_W_subband bits
-- The quantized subbands are output and used for the SST.
-- The raw subbands are weighted by the equalizer and are output to allow
-- further weighting by the beamformer weights (in the BF) or to allow
-- different rounding (to c_sdp_W_crosslet bits in the XSub).
-- ____ __
-- | | | |
-- | |--raw---->|EQ|--raw----------------------------> fsub_raw_sosi_arr
-- |WPFB| | |--quant--+-----------------------> fsub_quant_sosi_arr
-- | | |__| | ___ ___
-- | | \-->| | | |
-- | |--quant------------------->|sel|---->|SST|
-- |____| |___| |___|
--
-- Remark:
-- .
--
-------------------------------------------------------------------------------
LIBRARY IEEE, common_lib, dp_lib, rTwoSDF_lib, wpfb_lib, filter_lib, si_lib, st_lib, mm_lib;
LIBRARY IEEE, common_lib, dp_lib, rTwoSDF_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;
......@@ -43,6 +60,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 work.sdp_pkg.ALL;
......@@ -60,11 +78,11 @@ ENTITY node_sdp_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);
pfb_sosi_arr : OUT t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0);
fsub_sosi_arr : OUT t_dp_sosi_arr(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); -- c_sdp_W_adc bits
fsub_quant_sosi_arr: OUT t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- c_sdp_W_subband bits
fsub_raw_sosi_arr : OUT t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- c_sdp_W_subband + c_subband_raw_fraction_w bits
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;
......@@ -102,7 +120,12 @@ ARCHITECTURE str OF node_sdp_filterbank IS
CONSTANT c_subband_equalizer_latency : NATURAL := 5;
CONSTANT c_nof_masters : POSITIVE := 2;
CONSTANT c_nof_masters : POSITIVE := 2; -- for M&C MM access and for statistics offload MM access
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_subband_quant_dat_w : NATURAL := c_subband_raw_dat_w - c_subband_raw_fraction_w;
CONSTANT c_si_pipeline : NATURAL := 1;
......@@ -118,20 +141,36 @@ ARCHITECTURE str OF node_sdp_filterbank IS
SIGNAL master_mosi_arr : t_mem_mosi_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_mosi_rst);
SIGNAL master_miso_arr : t_mem_miso_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_miso_rst);
SIGNAL si_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
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_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);
SIGNAL subband_equalizer_out_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
SIGNAL dp_selector_out_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
SIGNAL scope_sosi_arr : t_dp_sosi_integer_arr(c_sdp_S_pn-1 DOWNTO 0);
SIGNAL si_sosi_arr : t_dp_sosi_arr(c_sdp_S_pn-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
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_raw_sosi_arr : 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 subband_equalizer_raw_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
SIGNAL subband_equalizer_quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
SIGNAL scope_wpfb_unit_out_quant_sosi_arr : t_dp_sosi_integer_arr(c_sdp_S_pn-1 DOWNTO 0);
SIGNAL scope_equalizer_quant_sosi_arr : t_dp_sosi_integer_arr(c_sdp_S_pn-1 DOWNTO 0);
SIGNAL dp_selector_quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst);
SIGNAL selector_en : STD_LOGIC;
SIGNAL weighted_subbands_flag : STD_LOGIC;
SIGNAL dp_bsn_source_restart_pipe : STD_LOGIC;
-- debug signals to view parameters in Wave Window
signal dbg_g_wpfb : t_wpfb := g_wpfb;
signal dbg_c_subband_raw_dat_w : natural := c_subband_raw_dat_w;
signal dbg_c_subband_raw_fraction_w : natural := c_subband_raw_fraction_w;
signal dbg_c_subband_quant_dat_w : natural := c_subband_quant_dat_w;
BEGIN
ASSERT c_subband_quant_dat_w = c_sdp_W_subband REPORT "FSub: Quantized subband width mismatch." SEVERITY FAILURE;
---------------------------------------------------------------
-- SPECTRAL INVERSION
---------------------------------------------------------------
......@@ -206,23 +245,23 @@ BEGIN
dp_bsn_source_restart => dp_bsn_source_restart_pipe
);
-- Output PFB streams
pfb_sosi_arr <= wpfb_unit_out_quant_sosi_arr;
---------------------------------------------------------------
-- SUBBAND EQUALIZER
---------------------------------------------------------------
u_sdp_subband_equalizer : ENTITY work.sdp_subband_equalizer
GENERIC MAP (
g_gains_file_name => c_gains_file_name
g_gains_file_name => c_gains_file_name,
g_raw_dat_w => c_subband_raw_dat_w,
g_raw_fraction_w => c_subband_raw_fraction_w
)
PORT MAP(
dp_clk => dp_clk,
dp_rst => dp_rst,
in_sosi_arr => wpfb_unit_out_quant_sosi_arr,
out_sosi_arr => subband_equalizer_out_sosi_arr,
in_raw_sosi_arr => wpfb_unit_out_raw_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,
......@@ -231,10 +270,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 (
......@@ -251,19 +291,54 @@ BEGIN
reg_selector_miso => reg_selector_miso,
pipe_sosi_arr => wpfb_unit_out_quant_sosi_arr,
ref_sosi_arr => subband_equalizer_out_sosi_arr,
out_sosi_arr => dp_selector_out_sosi_arr,
ref_sosi_arr => subband_equalizer_quant_sosi_arr,
out_sosi_arr => dp_selector_quant_sosi_arr,
selector_en => selector_en
);
---------------------------------------------------------------
-- SIGNAL SCOPE
---------------------------------------------------------------
-- synthesis translate_off
u_sdp_scope_wpfb : ENTITY work.sdp_scope
GENERIC MAP (
g_sim => g_sim,
g_selection => g_scope_selected_subband,
g_nof_input => c_sdp_P_pfb,
g_n_deinterleave => c_sdp_Q_fft,
g_dat_w => c_sdp_W_subband
)
PORT MAP (
clk => dp_clk,
rst => dp_rst,
sp_sosi_arr => wpfb_unit_out_quant_sosi_arr,
scope_sosi_arr => scope_wpfb_unit_out_quant_sosi_arr
);
u_sdp_scope_equalizer : ENTITY work.sdp_scope
GENERIC MAP (
g_sim => g_sim,
g_selection => g_scope_selected_subband,
g_nof_input => c_sdp_P_pfb,
g_n_deinterleave => c_sdp_Q_fft,
g_dat_w => c_sdp_W_subband
)
PORT MAP (
clk => dp_clk,
rst => dp_rst,
sp_sosi_arr => subband_equalizer_quant_sosi_arr,
scope_sosi_arr => scope_equalizer_quant_sosi_arr
);
-- synthesis translate_on
---------------------------------------------------------------
-- SUBBAND STATISTICS
---------------------------------------------------------------
gen_stats_streams: FOR I IN 0 TO c_sdp_P_pfb-1 GENERATE
u_subband_stats : ENTITY st_lib.st_sst
GENERIC MAP(
g_nof_stat => c_sdp_N_sub*c_sdp_Q_fft,
g_nof_stat => c_sdp_N_sub * c_sdp_Q_fft,
g_in_data_w => c_sdp_W_subband,
g_stat_data_w => g_wpfb.stat_data_w,
g_stat_data_sz => g_wpfb.stat_data_sz,
......@@ -274,7 +349,7 @@ BEGIN
mm_clk => mm_clk,
dp_rst => dp_rst,
dp_clk => dp_clk,
in_complex => dp_selector_out_sosi_arr(I),
in_complex => dp_selector_quant_sosi_arr(I),
ram_st_sst_mosi => ram_st_sst_mosi_arr(I),
ram_st_sst_miso => ram_st_sst_miso_arr(I)
);
......@@ -288,7 +363,7 @@ BEGIN
u_mem_mux_sst : ENTITY common_lib.common_mem_mux
GENERIC MAP (
g_nof_mosi => c_sdp_P_pfb,
g_mult_addr_w => ceil_log2(c_sdp_N_sub*c_sdp_Q_fft*g_wpfb.stat_data_sz)
g_mult_addr_w => ceil_log2(c_sdp_N_sub * c_sdp_Q_fft * g_wpfb.stat_data_sz)
)
PORT MAP (
mosi => master_mem_mux_mosi,
......@@ -317,28 +392,10 @@ BEGIN
mux_miso => master_mem_mux_miso
);
---------------------------------------------------------------
-- SIGNAL SCOPE
---------------------------------------------------------------
u_sdp_scope : ENTITY work.sdp_scope
GENERIC MAP (
g_sim => g_sim,
g_selection => g_scope_selected_subband,
g_nof_input => c_sdp_P_pfb,
g_n_deinterleave => c_sdp_Q_fft,
g_dat_w => c_sdp_W_subband
)
PORT MAP (
clk => dp_clk,
rst => dp_rst,
sp_sosi_arr => subband_equalizer_out_sosi_arr,
scope_sosi_arr => scope_sosi_arr
);
---------------------------------------------------------------
-- STATISTICS OFFLOAD
---------------------------------------------------------------
weighted_subbands_flag <= NOT selector_en;
weighted_subbands_flag <= NOT selector_en WHEN rising_edge(dp_clk);
u_sdp_sst_udp_offload: ENTITY work.sdp_statistics_offload
GENERIC MAP (
......@@ -364,7 +421,7 @@ BEGIN
reg_bsn_monitor_v2_offload_copi => reg_bsn_monitor_v2_sst_offload_copi,
reg_bsn_monitor_v2_offload_cipo => reg_bsn_monitor_v2_sst_offload_cipo,
in_sosi => dp_selector_out_sosi_arr(0),
in_sosi => dp_selector_quant_sosi_arr(0),
new_interval => dp_bsn_source_new_interval,
out_sosi => sst_udp_sosi,
......
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