diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd index 0776bbb1f243d63d7ea0d2b6b0729e52e2ca9a63..11061969673828bf1d6f69fa944d35f0f5960062 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd @@ -155,6 +155,7 @@ ENTITY tb_lofar2_unb2c_sdp_station_bf IS g_bf_remnant_y_gain : REAL := 0.04; -- g_beamlet Y BF weight normalized gain for remnant sp g_bf_remnant_x_phase : REAL := 170.0; -- g_beamlet X BF weight phase rotation in degrees for remnant sp g_bf_remnant_y_phase : REAL := -135.0; -- g_beamlet Y BF weight phase rotation in degrees for remnant sp + g_read_all_sub_sel : BOOLEAN := FALSE; -- when FALSE only read subband selection for g_beamlet, to save sim time g_read_all_SST : BOOLEAN := TRUE; -- when FALSE only read SST for g_subband, to save sim time g_read_all_BST : BOOLEAN := TRUE -- when FALSE only read BST for g_beamlet, to save sim time ); @@ -407,7 +408,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS -- BF -- . beamlet subband selection SIGNAL sp_subband_select : NATURAL := 0; - SIGNAL sp_subband_select_arr : t_natural_arr(0 TO c_sdp_S_sub_bf * c_sdp_N_pol-1) := (OTHERS => 0); -- Q_fft = N_pol = 2 + SIGNAL sp_subband_select_arr : t_integer_arr(0 TO c_sdp_S_sub_bf * c_sdp_N_pol-1) := (OTHERS => -1); -- Q_fft = N_pol = 2 -- . beamlet X-pol SIGNAL sp_bf_x_weights_re_arr : t_integer_arr(0 TO c_sdp_S_pn-1) := (OTHERS => 0); @@ -630,8 +631,6 @@ BEGIN p_mm_stimuli : PROCESS VARIABLE v_bsn : NATURAL; - VARIABLE v_sp_sst : REAL := 0.0; - VARIABLE v_bst : REAL := 0.0; VARIABLE v_data_lo, v_data_hi : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0); VARIABLE v_stat_data : STD_LOGIC_VECTOR(c_longword_w-1 DOWNTO 0); VARIABLE v_len, v_span, v_offset, v_addr, v_sel : NATURAL; -- address ranges, indices @@ -931,15 +930,18 @@ BEGIN FOR U IN 0 TO c_sdp_N_beamsets-1 LOOP -- Same selection for both beamsets, so fine to use only one sp_subband_select_arr() FOR B IN 0 TO c_sdp_S_sub_bf-1 LOOP - -- Same selection for all SP, so fine to only read subband selection for g_sp - v_addr := v_P + B * c_sdp_N_pol + v_A * v_span + U * c_mm_span_ram_ss_ss_wide; - mmf_mm_bus_rd(c_mm_file_ram_ss_ss_wide, v_addr, rd_data, tb_clk); - v_sel := (TO_UINT(rd_data) - v_P) / c_sdp_N_pol; - sp_subband_select_arr(B) <= v_sel; - sp_subband_select <= v_sel; -- for time series view in Wave window + IF g_read_all_sub_sel OR B = g_beamlet THEN + -- Same selection for all SP, so fine to only read subband selection for g_sp + v_addr := v_P + B * c_sdp_N_pol + v_A * v_span + U * c_mm_span_ram_ss_ss_wide; + mmf_mm_bus_rd(c_mm_file_ram_ss_ss_wide, v_addr, rd_data, tb_clk); + v_sel := (TO_UINT(rd_data) - v_P) / c_sdp_N_pol; + sp_subband_select_arr(B * c_sdp_N_pol + v_P) <= v_sel; + sp_subband_select <= v_sel; -- for time series view in Wave window + END IF; END LOOP; END LOOP; proc_common_wait_some_cycles(tb_clk, 1); + ASSERT sp_subband_select_arr(g_beamlet * c_sdp_N_pol + v_P) = g_subband REPORT "Wrong subband select at beamlet index." SEVERITY ERROR; proc_common_wait_some_cycles(ext_clk, 100); -- delay for ease of view in Wave window ----------------------------------------------------------------------------