diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd index fcab7aaaea7f1b2e53252a573397aa56799e0c34..0acf498e35abdcf0a19c7cf3b31e99ea5f6f04cd 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd @@ -45,8 +45,9 @@ ENTITY node_sdp_correlator IS g_sim : BOOLEAN := FALSE; g_sim_sdp : t_sdp_sim := c_sdp_sim; g_P_sq : NATURAL := c_sdp_P_sq; - g_subband_raw_dat_w : NATURAL := c_sdp_W_subband; - g_subband_raw_fraction_w : NATURAL := 0 + -- Use no default raw width, to force instance to set it + g_subband_raw_dat_w : NATURAL; -- default: c_sdp_W_subband; + g_subband_raw_fraction_w : NATURAL -- default: 0 ); PORT ( dp_clk : IN STD_LOGIC; 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 6ed1dfde59783c571ead377974f31da66529e2e3..f37a393d3ece73b864950726243ad1af8a976291 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_local.vhd @@ -40,8 +40,9 @@ USE work.sdp_pkg.ALL; ENTITY sdp_beamformer_local IS GENERIC ( g_bf_weights_file_name : STRING := "UNUSED"; - g_raw_dat_w : NATURAL := c_sdp_W_subband; - g_raw_fraction_w : NATURAL := 0 + -- Use no default raw width, to force instance to set it + g_raw_dat_w : NATURAL; -- default: c_sdp_W_subband; + g_raw_fraction_w : NATURAL -- default: 0 ); PORT ( dp_clk : IN STD_LOGIC; @@ -66,6 +67,13 @@ ARCHITECTURE str OF sdp_beamformer_local IS -- Product width, do -1 to skip double sign bit in product CONSTANT c_product_w : NATURAL := c_sdp_W_bf_weight + g_raw_dat_w - 1; + + -- With BF adder wrapping a c_complex_adder_sum_w = c_sdp_W_beamlet_sum is + -- in fact enough, because the MSbit will be simply removed. However, + -- it is fine to use wider BF adder, because the extra MSbits will likely + -- be optimized away by synthesis. If instead BF adder clipping was used + -- then it would be necessary to keep the extra bits, to avoid wrapping of + -- the sum. CONSTANT c_complex_adder_sum_w : NATURAL := c_product_w + ceil_log2(c_sdp_S_pn); SIGNAL sub_sosi_arr : t_dp_sosi_arr(c_sdp_N_pol_bf*c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd index 9f52c63883b6c6b7ab579530a7de52f40714cd58..bb4d4cb9b58037e2e0596d2d8ce0fbff4bee80c0 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bf_weights.vhd @@ -44,7 +44,8 @@ USE work.sdp_pkg.ALL; ENTITY sdp_bf_weights IS GENERIC ( g_gains_file_name : STRING := "UNUSED"; - g_raw_dat_w : NATURAL + -- Use no default raw width, to force instance to set it + g_raw_dat_w : NATURAL -- default: c_sdp_W_subband; ); PORT ( dp_clk : IN STD_LOGIC; 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 6282d804b9251564e7c066020824488ec7e3af4b..69f6daea5876037e6e19ee2b6be75c98bf1c20da 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_subband_equalizer.vhd @@ -46,8 +46,9 @@ ENTITY sdp_subband_equalizer IS GENERIC ( g_gains_file_name : STRING := "UNUSED"; g_nof_streams : NATURAL := c_sdp_P_pfb; - g_raw_dat_w : NATURAL := c_sdp_W_subband; - g_raw_fraction_w : NATURAL := 0 + -- Use no default raw width, to force instance to set it + g_raw_dat_w : NATURAL; -- default: c_sdp_W_subband; + g_raw_fraction_w : NATURAL -- default: 0 ); PORT ( dp_clk : IN STD_LOGIC;