diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd index 2f75f2f098ace38313417f95651dfd84db0232e0..134b80aa33fee8a984a5e9a0d60fe94f8023ba5e 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd @@ -228,7 +228,7 @@ BEGIN GENERIC MAP ( g_complex => TRUE, g_representation => "SIGNED", - g_lsb_w => c_sdp_W_bf_fraction, + g_lsb_w => c_sdp_W_bf_weight_fraction, g_lsb_round => TRUE, g_lsb_round_clip => FALSE, g_msb_clip => FALSE, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd index 547b1301ff19305c0f30051aeb7338b251818620..1aa14bfa2e5a4f121c7d5cb29ac7d1d211362f24 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd @@ -87,27 +87,29 @@ PACKAGE sdp_pkg is CONSTANT c_sdp_V_si_histogram : NATURAL := 512; CONSTANT c_sdp_W_adc : NATURAL := 14; CONSTANT c_sdp_W_adc_jesd : NATURAL := 16; - CONSTANT c_sdp_W_beamlet : NATURAL := 8; - CONSTANT c_sdp_W_beamlet_scale : NATURAL := 16; - CONSTANT c_sdp_W_beamlet_sum : NATURAL := 18; - CONSTANT c_sdp_W_bf_magnitude : NATURAL := 1; - CONSTANT c_sdp_W_bf_weight : NATURAL := 16; - CONSTANT c_sdp_W_crosslet : NATURAL := 16; CONSTANT c_sdp_W_fir_coef : NATURAL := 16; + CONSTANT c_sdp_W_subband : NATURAL := 18; + CONSTANT c_sdp_W_crosslet : NATURAL := 16; + CONSTANT c_sdp_W_beamlet_sum : NATURAL := 18; + CONSTANT c_sdp_W_beamlet : NATURAL := 8; CONSTANT c_sdp_W_gn_id : NATURAL := 5; CONSTANT c_sdp_W_statistic : NATURAL := 64; - CONSTANT c_sdp_W_sub_magnitude : NATURAL := 2; - CONSTANT c_sdp_W_sub_weight : NATURAL := 16; - CONSTANT c_sdp_W_subband : NATURAL := 18; + CONSTANT c_sdp_W_sub_weight : NATURAL := 16; -- = w in s(w, p), s = signed + CONSTANT c_sdp_W_sub_weight_fraction : NATURAL := 13; -- = p in s(w, p) + CONSTANT c_sdp_W_sub_weight_magnitude : NATURAL := c_sdp_W_sub_weight - c_sdp_W_sub_weight_fraction - 1; -- = 2 + CONSTANT c_sdp_W_beamlet_scale : NATURAL := 16; -- = w in u(w, p), u = unsigned + CONSTANT c_sdp_W_beamlet_scale_fraction : NATURAL := 15; -- = p in u(w, p) + CONSTANT c_sdp_W_beamlet_scale_magnitude : NATURAL := c_sdp_W_beamlet_scale - c_sdp_W_beamlet_scale_fraction; -- = 1 + CONSTANT c_sdp_W_bf_weight : NATURAL := 16; -- = w in s(w, p), s = signed + CONSTANT c_sdp_W_bf_weight_fraction : NATURAL := 14; -- = p in s(w, p) + CONSTANT c_sdp_W_bf_weight_magnitude : NATURAL := c_sdp_W_bf_weight - c_sdp_W_bf_weight_fraction - 1; -- = 1 -- Derived constants CONSTANT c_sdp_FS_adc : NATURAL := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude 1.0 CONSTANT c_sdp_P_pfb : NATURAL := c_sdp_S_pn / c_sdp_Q_fft; CONSTANT c_sdp_T_adc : TIME := (10**6 / c_sdp_f_adc_MHz) * 1 ps; CONSTANT c_sdp_T_sub : TIME := c_sdp_N_fft * c_sdp_T_adc; - CONSTANT c_sdp_W_bf_fraction : NATURAL := c_sdp_W_bf_weight - c_sdp_W_bf_magnitude -1; CONSTANT c_sdp_W_bf_product : NATURAL := c_sdp_W_subband + c_sdp_W_bf_weight -1; - CONSTANT c_sdp_W_sub_fraction : NATURAL := c_sdp_W_sub_weight - c_sdp_W_sub_magnitude -1; CONSTANT c_sdp_X_sq : NATURAL := c_sdp_S_pn * c_sdp_S_pn; -- diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd index fe03722c40bc586c45be832055c6648b1bc144fe..7ae6012f078832edcae802a8e94dec511874f292 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd @@ -146,7 +146,7 @@ BEGIN GENERIC MAP ( g_complex => TRUE, g_representation => "SIGNED", - g_lsb_w => c_sdp_W_sub_fraction, + g_lsb_w => c_sdp_W_sub_weight_fraction, g_lsb_round => TRUE, g_lsb_round_clip => FALSE, g_msb_clip => TRUE, diff --git a/applications/lofar2/model/lofar_station_firmware_model.py b/applications/lofar2/model/lofar_station_firmware_model.py index 11d1ecea593fa4ed270aa474893e58b13f3d8121..260a77962ccbad1ff2479816808e98f616312415 100644 --- a/applications/lofar2/model/lofar_station_firmware_model.py +++ b/applications/lofar2/model/lofar_station_firmware_model.py @@ -148,21 +148,21 @@ N_sub = 512 # = N_fft / N_complex W_fsub_proc = math.log(math.sqrt(N_sub), 2) # = 4.5, processing gain of F_sub in number of bits N_int_sub = 195312.5 -W_se_weight = 16 -W_se_magnitude = 1 -W_se_fraction = 14 -c_se_unit_weight = 2**W_se_fraction -W_bf_weight = 16 -W_bf_magnitude = 1 -W_bf_fraction = 14 -c_bf_unit_weight = 2**W_sub_fraction +W_sub_weight = 16 # signed +W_sub_weight_fraction = 13 +W_sub_weight_magnitude = W_sub_weight - W_sub_weight_fraction - 1 +c_sub_weight_unit = 2**W_sub_weight_fraction -W_beamlet_scale = 16 -W_beamlet_scale_magnitude = 1 -W_beamlet_scale_fraction = 14 -c_beamlet_scale_unit = 2**W_beamlet_scale_fraction +W_bf_weight = 16 # signed +W_bf_weight_fraction = 14 +W_bf_weight_magnitude = W_bf_weight - W_bf_weight_fraction - 1 +c_bf_weight_unit = 2**W_bf_weight_fraction +W_beamlet_scale = 16 # unsigned +W_beamlet_scale_fraction = 15 +W_beamlet_scale_magnitude = W_beamlet_scale - W_beamlet_scale_fraction +c_beamlet_scale_unit = 2**W_beamlet_scale_fraction W_sst_fraction = 4 # Extra fraction bits for SST subband input compared to W_adc W_sst_in = 18 # Word width in number of bits of SST subband data input, = W_adc + W_sst_fraction @@ -312,8 +312,8 @@ if 'dynamic' in models: # Derived gains # Aperif BF subband CB voltage weight -subWeight = c_sub_unit_weight * subWeightAdjust # = 16384 = 2**14 * 1.0 -bfWeight = c_bf_unit_weight * bfWeightAdjust # = 16384 = 2**14 * 1.0 +subWeight = c_sub_weight_unit * subWeightAdjust # = 16384 = 2**14 * 1.0 +bfWeight = c_bf_weight_unit * bfWeightAdjust # = 16384 = 2**14 * 1.0 if quantize: subWeight = np.round(subWeight) bfWeight = np.round(bfWeight)