diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_adc/tb_lofar2_unb2b_sdp_station_adc.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_adc/tb_lofar2_unb2b_sdp_station_adc.vhd
index b2652e604002332fd31a9dabaa98ae864aa812fc..8857119f97f65eb7d8f28db300a5fa1e060c2a50 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_adc/tb_lofar2_unb2b_sdp_station_adc.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_adc/tb_lofar2_unb2b_sdp_station_adc.vhd
@@ -85,13 +85,10 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_adc IS
   CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
 
   -- WG
-  CONSTANT c_full_scale_ampl      : REAL := REAL(2**(14-1)-1);  -- = full scale of WG
   CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := 2**(c_sdp_W_adc-1)/2;  -- in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
+  CONSTANT c_ampl_sp_0            : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
   CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
   CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl;  -- amplitude in number of LSbit resolution steps
   CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
 
   -- ADUH
@@ -253,8 +250,8 @@ BEGIN
     --   3 : ampl[16:0]
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
index e8ce4aa58bc61676155d7925d19b2a7891079c50..db72ccae4fc97d40718982ba01b4fa0b1862757f 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_bf/tb_lofar2_unb2b_sdp_station_bf.vhd
@@ -153,9 +153,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
   -- WG
   CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_sdp_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
   CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
   -- . phase
@@ -164,8 +162,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
   CONSTANT c_wg_latency           : INTEGER := c_diag_wg_latency - 0;  -- -0 to account for BSN scheduler start trigger latency
   CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
   CONSTANT c_wg_phase             : REAL := c_subband_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
 
   -- WPFB
   CONSTANT c_pol_index                      : NATURAL := g_sp MOD c_sdp_Q_fft;
@@ -173,8 +169,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_bf IS
   CONSTANT c_subband_phase_offset           : REAL := -90.0;  -- WG with zero phase sinues yields subband with -90 degrees phase (negative Im, zero Re)
   CONSTANT c_subband_weight_gain            : REAL := 1.0;  -- use default unit subband weights
   CONSTANT c_subband_weight_phase           : REAL := 0.0;  -- use default unit subband weights
-  CONSTANT c_exp_subband_sp_ampl_ratio      : REAL := 7.96;  -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_subband_ampl               : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio * c_subband_weight_gain;
+  CONSTANT c_exp_subband_ampl               : REAL := REAL(c_wg_ampl) * c_sdp_wpfb_subband_sp_ampl_ratio * c_subband_weight_gain;
   CONSTANT c_exp_subband_power              : REAL := c_exp_subband_ampl**2.0;  -- complex, so no divide by 2
   CONSTANT c_exp_subband_sst                : REAL := c_exp_subband_power * REAL(c_nof_block_per_sync);
 
@@ -604,7 +599,7 @@ BEGIN
       --   9   "sdp_source_info_gn_id"              ), "RW",  5, field_default(0) ),
       --
       --   7   "sdp_reserved"                       ), "RW", 40, field_default(0) ),
-      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_beamlet_scale_default) ),
+      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ),
       --   5   "sdp_beamlet_index"                  ), "RW", 16, field_default(0) ),
       --   4   "sdp_nof_blocks_per_packet"          ), "RW",  8, field_default(c_sdp_cep_nof_blocks_per_packet) ),
       --   3   "sdp_nof_beamlets_per_block"         ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ),
@@ -657,8 +652,8 @@ BEGIN
     v_offset := g_sp * c_mm_span_reg_diag_wg;
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_fsub/tb_lofar2_unb2b_sdp_station_fsub.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_fsub/tb_lofar2_unb2b_sdp_station_fsub.vhd
index b48c8064f8144cc4d7172729ef1bd6dd6aa82d98..a3955762ff3b7e47a03cb1ae08290e80e24fd54b 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_fsub/tb_lofar2_unb2b_sdp_station_fsub.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_fsub/tb_lofar2_unb2b_sdp_station_fsub.vhd
@@ -114,9 +114,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_fsub IS
   -- WG
   CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_sdp_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
   CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
   -- . phase
@@ -125,15 +123,12 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_fsub IS
   CONSTANT c_wg_latency           : INTEGER := c_diag_wg_latency - 0;  -- -0 to account for BSN scheduler start trigger latency
   CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
   CONSTANT c_wg_phase             : REAL := c_subband_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
 
   -- FSUB
   -- . WPFB
   CONSTANT c_pol_index                      : NATURAL := g_sp MOD c_sdp_Q_fft;
   CONSTANT c_pfb_index                      : NATURAL := g_sp / c_sdp_Q_fft;  -- only read used WPFB unit out of range(c_sdp_P_pfb = 6)
-  CONSTANT c_exp_subband_sp_ampl_ratio      : REAL := 7.96;  -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_subband_ampl_raw           : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio;
+  CONSTANT c_exp_subband_ampl_raw           : REAL := REAL(c_wg_ampl) * c_sdp_wpfb_subband_sp_ampl_ratio;
   CONSTANT c_exp_subband_ampl_weighted      : REAL := c_exp_subband_ampl_raw * g_subband_weight_gain;
   CONSTANT c_exp_subband_power_raw          : REAL := c_exp_subband_ampl_raw**2.0;  -- complex, so no divide by 2
   CONSTANT c_exp_subband_power_weighted     : REAL := c_exp_subband_ampl_weighted**2.0;  -- complex, so no divide by 2
@@ -353,8 +348,8 @@ BEGIN
     v_offset := g_sp * c_mm_span_reg_diag_wg;
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one.vhd
index 6bdaf12e935afa0b47dd0cb70c4a7b7bfb70434a..6f9806c00c2dfa97f4523b4b7b23aad145bc0f30 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_one/tb_lofar2_unb2b_sdp_station_xsub_one.vhd
@@ -89,13 +89,10 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_xsub_one IS
   CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
 
   -- WG
-  CONSTANT c_FS_adc               : REAL := REAL(c_sdp_FS_adc);  -- = full scale of WG
   CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   CONSTANT c_ampl_sp_0            : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
   CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
   CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_FS_adc;  -- amplitude in number of LSbit resolution steps
   CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
 
   -- WPFB
@@ -273,8 +270,8 @@ BEGIN
     FOR I IN 0 TO c_sdp_S_pn-1 LOOP
       mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
       mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 2, INTEGER((c_subband_sp_0 + c_wg_freq_offset) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
     END LOOP;
 
     -- Read current BSN
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd
index cc9fab9fcd06ae09302aee6c241b78a2968c75e3..bae28377a194b0945c99117ea90ea8485bdc6276 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/revisions/lofar2_unb2b_sdp_station_xsub_ring/tb_lofar2_unb2b_sdp_station_xsub_ring.vhd
@@ -94,13 +94,10 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station_xsub_ring IS
   CONSTANT c_nof_lanes           : NATURAL := 1;
 
   -- WG
-  CONSTANT c_FS_adc               : REAL := REAL(c_sdp_FS_adc);  -- = full scale of WG
   CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   CONSTANT c_ampl_sp_0            : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
   CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
   CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_FS_adc;  -- amplitude in number of LSbit resolution steps
   CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
 
   -- WPFB
@@ -350,8 +347,8 @@ BEGIN
       FOR I IN 0 TO c_sdp_S_pn-1 LOOP
         mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
         mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER((c_subband_sp_0 + c_wg_freq_offset) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+        mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
       END LOOP;
     END LOOP;
 
diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd
index 3c63f38cd1b46e389ec71d96f70af019f539ee1f..cf7b09358cc248615adbb96566840e7c822fcc4e 100644
--- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd
+++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/vhdl/tb_lofar2_unb2b_sdp_station.vhd
@@ -69,13 +69,9 @@ ARCHITECTURE tb OF tb_lofar2_unb2b_sdp_station IS
   CONSTANT c_wpfb_sim                     : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync);
    
   -- WG
-  CONSTANT c_full_scale_ampl              : REAL := REAL(2**(18-1) - 1);  -- = full scale of WG
   CONSTANT c_bsn_start_wg                 : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0                    : NATURAL := 2**(c_sdp_W_adc-1) / 2;  -- in number of lsb
-  CONSTANT c_wg_subband_freq_unit         : REAL := c_diag_wg_freq_unit / REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-  CONSTANT c_wg_freq_offset               : REAL := 0.0 / 11.0; -- in freq_unit
+  CONSTANT c_ampl_sp_0                    : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
   CONSTANT c_subband_sp_0                 : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz
-  CONSTANT c_wg_ampl_lsb                  : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl;  -- amplitude in number of LSbit resolution steps
 
 -- . 1GbE output
   CONSTANT c_eth_check_nof_packets        : NATURAL := 1;
@@ -219,10 +215,10 @@ BEGIN
     --   1 : phase[15:0]
     --   2 : freq[30:0]
     --   3 : ampl[16:0]
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0,                                                      1024 * 2**16 + 1, tb_clk);  -- nof_samples, mode calc
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1,                                 INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0 + c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3,                            INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0,                                     1024 * 2**16 + 1, tb_clk);  -- nof_samples, mode calc
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1,                INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER(c_subband_sp_0 * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3,       INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc.vhd
index 6f191077675c51968fbc4bfc36c193b6f2aaf07e..70cc4fc665584d56982fa5701e5e15ce49fc0492 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_adc/tb_lofar2_unb2c_sdp_station_adc.vhd
@@ -85,13 +85,10 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_adc IS
   CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
 
   -- WG
-  CONSTANT c_full_scale_ampl      : REAL := REAL(2**(14-1)-1);  -- = full scale of WG
   CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := 2**(c_sdp_W_adc-1)/2;  -- in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
+  CONSTANT c_ampl_sp_0            : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
   CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
   CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl;  -- amplitude in number of LSbit resolution steps
   CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
 
   -- ADUH
@@ -235,8 +232,8 @@ BEGIN
     --   3 : ampl[16:0]
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0 + c_wg_freq_offset) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3, INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
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 c641685358e7fcb63c7f01ad40ca2c14c3c4dc69..c995e931644467a19e890a769c8ec7b395c4a7f6 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
@@ -225,10 +225,8 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS
   -- WG
   CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_sdp_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_sp_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
-  CONSTANT c_wg_remnant_ampl      : NATURAL := NATURAL(g_sp_remnant_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_sp_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
+  CONSTANT c_wg_remnant_ampl      : NATURAL := NATURAL(g_sp_remnant_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
   CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
   -- . phase
@@ -237,8 +235,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf IS
   CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
   CONSTANT c_wg_phase             : REAL := g_sp_phase + c_wg_phase_offset;  -- WG phase in degrees
   CONSTANT c_wg_remnant_phase     : REAL := g_sp_remnant_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
 
   -- WPFB
   CONSTANT c_pol_index                    : NATURAL := g_sp MOD c_sdp_Q_fft;
@@ -760,7 +756,7 @@ BEGIN
       --   9   "sdp_source_info_gn_id"              ), "RW",  5, field_default(0) ),
       --
       --   7   "sdp_reserved"                       ), "RW", 40, field_default(0) ),
-      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_beamlet_scale_default) ),
+      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ),
       --   5   "sdp_beamlet_index"                  ), "RW", 16, field_default(0) ),
       --   4   "sdp_nof_blocks_per_packet"          ), "RW",  8, field_default(c_sdp_cep_nof_blocks_per_packet) ),
       --   3   "sdp_nof_beamlets_per_block"         ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ),
@@ -815,13 +811,13 @@ BEGIN
       IF s = g_sp THEN
         mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
         mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
       ELSE
         mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
         mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_remnant_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_remnant_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+        mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_remnant_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
       END IF;
     END LOOP;
 
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd
index d1efebdef031e01550a6d3853bfcfaa6b94f3f10..8199b260fc08ad707a490e6a16076d1d4c074d34 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf_ring/tb_lofar2_unb2c_sdp_station_bf_ring.vhd
@@ -227,10 +227,8 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS
   -- WG
   CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_sdp_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_sp_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
-  CONSTANT c_wg_remnant_ampl      : NATURAL := NATURAL(g_sp_remnant_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_sp_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
+  CONSTANT c_wg_remnant_ampl      : NATURAL := NATURAL(g_sp_remnant_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
   CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
   -- . phase
@@ -239,8 +237,6 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_bf_ring IS
   CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
   CONSTANT c_wg_phase             : REAL := g_sp_phase + c_wg_phase_offset;  -- WG phase in degrees
   CONSTANT c_wg_remnant_phase     : REAL := g_sp_remnant_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
 
   -- WPFB
   CONSTANT c_pol_index                    : NATURAL := g_sp MOD c_sdp_Q_fft;
@@ -800,7 +796,7 @@ BEGIN
       --   9   "sdp_source_info_gn_id"              ), "RW",  5, field_default(0) ),
       --
       --   7   "sdp_reserved"                       ), "RW", 40, field_default(0) ),
-      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_beamlet_scale_default) ),
+      --   6   "sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ),
       --   5   "sdp_beamlet_index"                  ), "RW", 16, field_default(0) ),
       --   4   "sdp_nof_blocks_per_packet"          ), "RW",  8, field_default(c_sdp_cep_nof_blocks_per_packet) ),
       --   3   "sdp_nof_beamlets_per_block"         ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ),
@@ -888,13 +884,13 @@ BEGIN
         IF RN * c_sdp_S_pn + I = g_sp THEN
           mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
           mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
         ELSE
           mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
           mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 1, INTEGER(c_wg_remnant_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_wg_remnant_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+          mmf_mm_bus_wr(mmf_unb_file_prefix(c_unb_nr + (RN / c_quad), RN MOD c_quad) & "REG_WG", I*4 + 3, INTEGER(REAL(c_wg_remnant_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
         END IF;
       END LOOP;
     END LOOP;
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/tb_lofar2_unb2c_sdp_station_fsub.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/tb_lofar2_unb2c_sdp_station_fsub.vhd
index 1896e85d9447a378aff1e97882eda23696324c4e..4d70659aa31bd72e71412a6e52368cb376123312 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/tb_lofar2_unb2c_sdp_station_fsub.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_fsub/tb_lofar2_unb2c_sdp_station_fsub.vhd
@@ -114,9 +114,7 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_fsub IS
   -- WG
   CONSTANT c_bsn_start_wg         : NATURAL := c_init_bsn + 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   -- .ampl
-  CONSTANT c_wg_ampl_full_scale   : NATURAL := 2**(c_sdp_W_adc-1);  -- full scale (FS) of WG, will just cause clipping of +FS to +FS-1
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_wg_ampl_full_scale);  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_wg_ampl_full_scale));  -- in number of lsb
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(g_wg_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_exp_sp_power         : REAL := REAL(c_wg_ampl**2) / 2.0;
   CONSTANT c_exp_sp_ast           : REAL := c_exp_sp_power * REAL(c_nof_clk_per_sync);
   -- . phase
@@ -125,15 +123,12 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_fsub IS
   CONSTANT c_wg_latency           : INTEGER := c_diag_wg_latency - 0;  -- -0 to account for BSN scheduler start trigger latency
   CONSTANT c_wg_phase_offset      : REAL := 360.0 * REAL(c_wg_latency) * c_subband_freq;  -- c_diag_wg_latency is in dp_clk cycles
   CONSTANT c_wg_phase             : REAL := c_subband_phase + c_wg_phase_offset;  -- WG phase in degrees
-  -- . freq
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
 
   -- FSUB
   -- . WPFB
   CONSTANT c_pol_index                      : NATURAL := g_sp MOD c_sdp_Q_fft;
   CONSTANT c_pfb_index                      : NATURAL := g_sp / c_sdp_Q_fft;  -- only read used WPFB unit out of range(c_sdp_P_pfb = 6)
-  CONSTANT c_exp_subband_sp_ampl_ratio      : REAL := 7.96;  -- ~= 8 for unit FIR DC gain, depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_subband_ampl_raw           : REAL := REAL(c_wg_ampl) * c_exp_subband_sp_ampl_ratio;
+  CONSTANT c_exp_subband_ampl_raw           : REAL := REAL(c_wg_ampl) * c_sdp_wpfb_subband_sp_ampl_ratio;
   CONSTANT c_exp_subband_ampl_weighted      : REAL := c_exp_subband_ampl_raw * g_subband_weight_gain;
   CONSTANT c_exp_subband_power_raw          : REAL := c_exp_subband_ampl_raw**2.0;  -- complex, so no divide by 2
   CONSTANT c_exp_subband_power_weighted     : REAL := c_exp_subband_ampl_weighted**2.0;  -- complex, so no divide by 2
@@ -335,8 +330,8 @@ BEGIN
     v_offset := g_sp * c_mm_span_reg_diag_wg;
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
     mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 1, INTEGER(c_wg_phase * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 2, INTEGER(REAL(g_subband) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, v_offset + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/tb_lofar2_unb2c_sdp_station_xsub_one.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/tb_lofar2_unb2c_sdp_station_xsub_one.vhd
index 3b8c5cb0fe2672726f3b078aaed54afd41b55d73..2774f8ae02240508d9aa2160f8986d5fb38e46d8 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/tb_lofar2_unb2c_sdp_station_xsub_one.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_xsub_one/tb_lofar2_unb2c_sdp_station_xsub_one.vhd
@@ -34,15 +34,16 @@
 --      to trigger start of WG at BSN.
 --     
 --   3) Read crosslets statistics (XST) via ram_st_xsq and verify that the values
---      are as expected. This is done by comparing the values in the outgoing square
---      correlation matrix.
---         
+--      are as expected. This is done by:
+--      . comparing the values in the outgoing square correlation matrix, they
+--        should all be almost equal because all signal inputs use same WG
+--      . comparing with expected XST value c_exp_subband_xst
 --
 -- Usage:
 --   > as 7    # default
 --   > as 12   # for detailed debugging
 --   > run -a  
---   Takes about 40 m
+--   Takes about 45 m
 --
 -------------------------------------------------------------------------------
 LIBRARY IEEE, common_lib, unb2c_board_lib, i2c_lib, mm_lib, dp_lib, diag_lib, lofar2_sdp_lib, wpfb_lib, lofar2_unb2c_sdp_station_lib;
@@ -78,34 +79,28 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station_xsub_one IS
 
   CONSTANT c_tb_clk_period       : TIME := 100 ps; -- use fast tb_clk to speed up M&C
 
-  CONSTANT c_nof_block_per_sync  : NATURAL := 24;
+  CONSTANT c_nof_block_per_sync  : NATURAL := 20;
   CONSTANT c_nof_clk_per_sync    : NATURAL := c_nof_block_per_sync*c_sdp_N_fft; 
   CONSTANT c_pps_period          : NATURAL := c_nof_clk_per_sync;
   CONSTANT c_wpfb_sim            : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync);
   CONSTANT c_ctrl_interval_size  : NATURAL := c_nof_clk_per_sync;
 
-  CONSTANT c_percentage          : REAL := 0.05;  -- percentage that actual value may differ from expected value
-  CONSTANT c_lo_factor           : REAL := 1.0 - c_percentage;  -- lower boundary  
-  CONSTANT c_hi_factor           : REAL := 1.0 + c_percentage;  -- higher boundary
+  CONSTANT c_max_ratio           : REAL := 0.0001;  -- ratio that actual value may differ from expected value
 
   -- WG
-  CONSTANT c_FS_adc               : REAL := REAL(c_sdp_FS_adc);  -- = full scale of WG
   CONSTANT c_bsn_start_wg         : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
-  CONSTANT c_ampl_sp_0            : NATURAL := c_sdp_FS_adc/2;  -- = 0.5 * FS, so in number of lsb
-  CONSTANT c_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
+  CONSTANT c_sp_ampl              : REAL := 0.5;   -- WG normalized amplitude, 1.0 = FS (full scale), use <= 0.5 to avoid XST overflow
+  CONSTANT c_wg_ampl              : NATURAL := NATURAL(c_sp_ampl * REAL(c_sdp_FS_adc));  -- in number of lsb
   CONSTANT c_wg_freq_offset       : REAL := 0.0/11.0; -- in freq_unit
-  CONSTANT c_subband_sp_0         : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz 
-  CONSTANT c_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / c_FS_adc;  -- amplitude in number of LSbit resolution steps
-  CONSTANT c_exp_wg_power_sp_0    : REAL := REAL(c_ampl_sp_0**2)/2.0 * REAL(c_nof_clk_per_sync);
+  CONSTANT c_subband_sp           : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz
 
   -- WPFB
-  CONSTANT c_nof_pfb                        : NATURAL := 1; -- Verifying 1 of c_sdp_P_pfb = 6 pfb to speed up simulation.
-  CONSTANT c_wb_leakage_bin                 : NATURAL := c_wpfb_sim.nof_points / c_wpfb_sim.wb_factor;   -- = 256, leakage will occur in this bin if FIR wb_factor is reversed 
-  CONSTANT c_exp_sp_subband_power_ratio     : REAL := 1.0/8.0;   -- depends on internal WPFB quantization and FIR coefficients
-  CONSTANT c_exp_sp_subband_power_sum_ratio : REAL := c_exp_sp_subband_power_ratio;   -- because all sinus power is expected in one subband
-  CONSTANT c_exp_subband_power_sp_0         : REAL := c_exp_wg_power_sp_0 * c_exp_sp_subband_power_ratio;
+  CONSTANT c_exp_subband_ampl     : REAL := REAL(c_wg_ampl) * c_sdp_wpfb_subband_sp_ampl_ratio;
+  CONSTANT c_exp_subband_power    : REAL := c_exp_subband_ampl**2.0;  -- complex, so no divide by 2
+  CONSTANT c_exp_subband_sst      : REAL := c_exp_subband_power * REAL(c_nof_block_per_sync);
+  CONSTANT c_exp_subband_xst      : REAL := c_exp_subband_sst;  -- all signal inputs use same WG, and auto correlation XST = SST
 
-  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL; 
+  TYPE t_real_arr IS ARRAY (INTEGER RANGE <>) OF REAL;
 
   -- MM  
   CONSTANT c_mm_file_reg_bsn_source_v2           : STRING := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2";
@@ -182,7 +177,7 @@ BEGIN
     g_sim_node_nr            => c_node_nr,
     g_wpfb                   => c_wpfb_sim,
     g_bsn_nof_clk_per_sync   => c_nof_clk_per_sync,
-    g_scope_selected_subband => NATURAL(c_subband_sp_0)
+    g_scope_selected_subband => NATURAL(c_subband_sp)
   )
   PORT MAP (
     -- GENERAL
@@ -242,8 +237,8 @@ BEGIN
     ----------------------------------------------------------------------------
     -- Crosslets Info
     ----------------------------------------------------------------------------  
-    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 0,  INTEGER(c_subband_sp_0), tb_clk); -- offset
-    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 15, 0                      , tb_clk); -- stepsize
+    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 0,  INTEGER(c_subband_sp), tb_clk); -- offset
+    mmf_mm_bus_wr(c_mm_file_reg_crosslets_info, 15, 0                    , tb_clk); -- stepsize
 
     ----------------------------------------------------------------------------
     -- Enable WG
@@ -255,9 +250,9 @@ BEGIN
     --   3 : ampl[16:0]
     FOR I IN 0 TO c_sdp_S_pn-1 LOOP
       mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 0, 1024*2**16 + 1, tb_clk);  -- nof_samples, mode calc
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 1, INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 2, INTEGER((c_subband_sp_0+c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 1, INTEGER(0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
+      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 2, INTEGER((c_subband_sp + c_wg_freq_offset) * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+      mmf_mm_bus_wr(c_mm_file_reg_diag_wg, I*4 + 3, INTEGER(REAL(c_wg_ampl) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
     END LOOP;
 
     -- Read current BSN
@@ -279,7 +274,7 @@ BEGIN
 
     -- Wait for enough WG data and start of sync interval
     mmf_mm_wait_until_value(c_mm_file_reg_bsn_scheduler_wg, 0,                    -- read BSN low
-                            "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 2,  -- this is the wait until condition
+                            "UNSIGNED", rd_data, ">=", c_nof_block_per_sync * 3,  -- this is the wait until condition
                             c_sdp_T_sub, tb_clk);
 
     ---------------------------------------------------------------------------
@@ -343,7 +338,17 @@ BEGIN
 
       -- Check if values are > 0
       IF v_C=0 THEN ASSERT (SIGNED(xsub_stats_arr(I)) > TO_SIGNED(0, c_longword_w)) REPORT "correlation is 0 which is unexpected! at I = " & int_to_str(I) SEVERITY ERROR; END IF;
-    END LOOP; 
+
+      -- All XST values (almost) equal, because they use the same WG setting.
+      -- therefore also verify the expected XST value for all XST.
+      IF I MOD c_nof_complex = 0 THEN
+        -- real part
+        ASSERT almost_equal(TO_SREAL(xsub_stats_arr(I)) / c_exp_subband_xst, 1.0, c_max_ratio) REPORT "Wrong XST real value at I = " & int_to_str(I) SEVERITY ERROR;
+      ELSE
+        -- imag part
+        ASSERT almost_zero(TO_SREAL(xsub_stats_arr(I)) / c_exp_subband_xst, c_max_ratio) REPORT "Wrong XST imag value at I = " & int_to_str(I) SEVERITY ERROR;
+      END IF;
+    END LOOP;
  
     ---------------------------------------------------------------------------
     -- End Simulation 
diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd
index 2129d701d1eddfa82e247b8c4ae31ef9a225cbf3..aff3d655da014f566d15bc51e966bf13c20635a6 100644
--- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd
+++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/vhdl/tb_lofar2_unb2c_sdp_station.vhd
@@ -69,15 +69,11 @@ ARCHITECTURE tb OF tb_lofar2_unb2c_sdp_station IS
   CONSTANT c_wpfb_sim                     : t_wpfb := func_wpfb_set_nof_block_per_sync(c_sdp_wpfb_subbands, c_nof_block_per_sync);
    
   -- WG
-  CONSTANT c_full_scale_ampl              : REAL := REAL(2**(18-1) - 1);  -- = full scale of WG
   CONSTANT c_bsn_start_wg                 : NATURAL := 2;  -- start WG at this BSN to instead of some BSN, to avoid mismatches in exact expected data values
   CONSTANT c_ampl_sp_0                    : NATURAL := 2**(c_sdp_W_adc-1) / 2;  -- in number of lsb
-  CONSTANT c_wg_subband_freq_unit         : REAL := c_diag_wg_freq_unit / REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
-  CONSTANT c_wg_freq_offset               : REAL := 0.0 / 11.0; -- in freq_unit
   CONSTANT c_subband_sp_0                 : REAL := 102.0;  -- Select subband at index 102 = 102/1024 * 200MHz = 19.921875 MHz
-  CONSTANT c_wg_ampl_lsb                  : REAL := c_diag_wg_ampl_unit / c_full_scale_ampl;  -- amplitude in number of LSbit resolution steps
 
--- . 1GbE output
+  -- 1GbE output
   CONSTANT c_eth_check_nof_packets        : NATURAL := 1;
   CONSTANT c_eth_runtime_timeout          : TIME := 300 us;
   
@@ -206,10 +202,10 @@ BEGIN
     --   1 : phase[15:0]
     --   2 : freq[30:0]
     --   3 : ampl[16:0]
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0,                                                      1024 * 2**16 + 1, tb_clk);  -- nof_samples, mode calc
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1,                                 INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER((c_subband_sp_0 + c_wg_freq_offset) * c_wg_subband_freq_unit), tb_clk);  -- freq
-    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3,                            INTEGER(REAL(c_ampl_sp_0) * c_wg_ampl_lsb), tb_clk);  -- ampl
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 0,                                     1024 * 2**16 + 1, tb_clk);  -- nof_samples, mode calc
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 1,                INTEGER(  0.0 * c_diag_wg_phase_unit), tb_clk);  -- phase offset in degrees
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 2, INTEGER(c_subband_sp_0 * c_sdp_wg_subband_freq_unit), tb_clk);  -- freq
+    mmf_mm_bus_wr(c_mm_file_reg_diag_wg, 3,       INTEGER(REAL(c_ampl_sp_0) * c_sdp_wg_ampl_lsb), tb_clk);  -- ampl
 
     -- Read current BSN
     mmf_mm_bus_rd(c_mm_file_reg_bsn_scheduler_wg, 0, current_bsn_wg(31 DOWNTO  0), tb_clk);
diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd
index e9e7f6c3ad9dc6ddb43161bb98e7862d677bed61..294fbe0f43ca72b0086a13d98e67469fb971ce98 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_pkg.vhd
@@ -23,18 +23,18 @@
 -- Author: R. van der Walle, E. Kooistra
 -- Purpose: 
 -- . This package contains sdp specific constants.
--- Description:
--- Remark:
--- . See Document: L3 SDP Decision: SDP Parameter definitions.
---   https://support.astron.nl/confluence/display/L2M/L3+SDP+Decision%3A+SDP+Parameter+definitions
+-- Description: See [1]
+-- References:
+-- . [1] https://support.astron.nl/confluence/display/L2M/L3+SDP+Decision%3A+SDP+Parameter+definitions
 -------------------------------------------------------------------------------
-LIBRARY IEEE, common_lib, rTwoSDF_lib, fft_lib, filter_lib, wpfb_lib;
+LIBRARY IEEE, common_lib, rTwoSDF_lib, fft_lib, filter_lib, wpfb_lib, diag_lib;
 USE IEEE.std_logic_1164.ALL;
 USE IEEE.math_real.ALL;
 USE common_lib.common_pkg.ALL;
 USE common_lib.common_mem_pkg.ALL;
 USE common_lib.common_field_pkg.ALL;
 USE common_lib.common_network_layers_pkg.ALL;
+USE diag_lib.diag_pkg.ALL;
 USE rTwoSDF_lib.rTwoSDFPkg.ALL;
 USE fft_lib.fft_pkg.ALL; 
 USE filter_lib.fil_pkg.ALL; 
@@ -62,8 +62,7 @@ PACKAGE sdp_pkg is
         (OTHERS => '0') );  
 
   -------------------------------------------------
-  -- SDP specific parameters as defined in:
-  --  L3 SDP Decision: SDP Parameter definitions 
+  -- SDP specific parameters as defined in [1]
   CONSTANT c_sdp_f_adc_MHz                 : NATURAL := 200;
   CONSTANT c_sdp_N_beamsets                : NATURAL := 2;  -- = N_beamsets_sdp in doc
   CONSTANT c_sdp_N_cross_sets_sdp          : NATURAL := 1;
@@ -110,24 +109,25 @@ PACKAGE sdp_pkg is
   CONSTANT c_sdp_N_ring_nof_mac10g         : NATURAL := 3; -- for sdp_station_xsub_ring design.
 
   -- 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_N_clk_per_sync     : NATURAL := c_sdp_f_adc_MHz*10**6;  -- Default 200M clock cycles per second
-  CONSTANT c_sdp_N_clk_sync_timeout : NATURAL := c_sdp_f_adc_MHz*10**6 + c_sdp_f_adc_MHz*10**5;  -- 10% margin.
-  CONSTANT c_sdp_N_sync_jesd        : NATURAL := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP sync outputs per PN
-  CONSTANT c_sdp_A_pn               : NATURAL := c_sdp_S_pn / c_sdp_N_pol;  -- = 6 dual pol antenna per PN, is 6 signal input pairs
-  CONSTANT c_sdp_P_pfb              : NATURAL := c_sdp_S_pn / c_sdp_Q_fft;  -- = 6 PFB units, for 6 signal input pairs
-  CONSTANT c_sdp_T_adc              : TIME    := (10**6 / c_sdp_f_adc_MHz) * 1 ps;  -- = 5 ns @ 200MHz
-  CONSTANT c_sdp_T_sub              : TIME    := c_sdp_N_fft * c_sdp_T_adc;  -- = 5.12 us @ 200MHz
-  CONSTANT c_sdp_W_bf_product       : NATURAL := c_sdp_W_subband + c_sdp_W_bf_weight -1;
-  CONSTANT c_sdp_X_sq               : NATURAL := c_sdp_S_pn * c_sdp_S_pn;  -- = 144
-  CONSTANT c_sdp_block_period       : NATURAL := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz;  -- = 5120 [ns]
-  CONSTANT c_sdp_N_beamlets_sdp     : NATURAL := c_sdp_N_beamsets * c_sdp_S_sub_bf;  -- = 976
-  CONSTANT c_sdp_unit_sub_weight    : NATURAL := 2**c_sdp_W_sub_weight_fraction;  -- 2**13, so range +-4.0 for 16 bit signed weight
-  CONSTANT c_sdp_unit_bf_weight     : NATURAL := 2**c_sdp_W_bf_weight_fraction;  -- 2**14, so range +-2.0 for 16 bit signed weight
-  CONSTANT c_sdp_unit_beamlet_scale : NATURAL := 2**c_sdp_W_beamlet_scale_fraction;  -- 2**15, so range +-1.0 for 16 bit signed weight
-
-  -- Default / tb values
-  CONSTANT c_sdp_beamlet_scale_default   : NATURAL := 2**15;
+  CONSTANT c_sdp_FS_adc               : NATURAL := 2**(c_sdp_W_adc - 1); -- full scale FS corresponds to amplitude 1.0, will just cause clipping of +FS to +FS-1
+  CONSTANT c_sdp_wg_ampl_lsb          : REAL := c_diag_wg_ampl_unit / REAL(c_sdp_FS_adc);  -- WG amplitude in number of LSbit resolution steps
+  CONSTANT c_sdp_wg_subband_freq_unit : REAL := c_diag_wg_freq_unit/REAL(c_sdp_N_fft);  -- subband freq = Fs/1024 = 200 MSps/1024 = 195312.5 Hz sinus
+  CONSTANT c_sdp_N_clk_per_sync       : NATURAL := c_sdp_f_adc_MHz*10**6;  -- Default 200M clock cycles per second
+  CONSTANT c_sdp_N_clk_sync_timeout   : NATURAL := c_sdp_f_adc_MHz*10**6 + c_sdp_f_adc_MHz*10**5;  -- 10% margin.
+  CONSTANT c_sdp_N_sync_jesd          : NATURAL := c_sdp_S_pn * c_sdp_N_sync_rcu / c_sdp_S_rcu; -- = 4, nof JESD IP sync outputs per PN
+  CONSTANT c_sdp_A_pn                 : NATURAL := c_sdp_S_pn / c_sdp_N_pol;  -- = 6 dual pol antenna per PN, is 6 signal input pairs
+  CONSTANT c_sdp_P_pfb                : NATURAL := c_sdp_S_pn / c_sdp_Q_fft;  -- = 6 PFB units, for 6 signal input pairs
+  CONSTANT c_sdp_T_adc                : TIME    := (10**6 / c_sdp_f_adc_MHz) * 1 ps;  -- = 5 ns @ 200MHz
+  CONSTANT c_sdp_T_sub                : TIME    := c_sdp_N_fft * c_sdp_T_adc;  -- = 5.12 us @ 200MHz
+  CONSTANT c_sdp_W_bf_product         : NATURAL := c_sdp_W_subband + c_sdp_W_bf_weight -1;
+  CONSTANT c_sdp_X_sq                 : NATURAL := c_sdp_S_pn * c_sdp_S_pn;  -- = 144
+  CONSTANT c_sdp_block_period         : NATURAL := c_sdp_N_fft * 1000 / c_sdp_f_adc_MHz;  -- = 5120 [ns]
+  CONSTANT c_sdp_N_beamlets_sdp       : NATURAL := c_sdp_N_beamsets * c_sdp_S_sub_bf;  -- = 976
+
+  -- . unit weights
+  CONSTANT c_sdp_unit_sub_weight      : NATURAL := 2**c_sdp_W_sub_weight_fraction;  -- 2**13, so range +-4.0 for 16 bit signed weight
+  CONSTANT c_sdp_unit_bf_weight       : NATURAL := 2**c_sdp_W_bf_weight_fraction;  -- 2**14, so range +-2.0 for 16 bit signed weight
+  CONSTANT c_sdp_unit_beamlet_scale   : NATURAL := 2**c_sdp_W_beamlet_scale_fraction;  -- 2**15, so range +-1.0 for 16 bit signed weight
 
   -----------------------------------------------------------------------------
   -- PFB
@@ -366,7 +366,7 @@ PACKAGE sdp_pkg is
       ( field_name_pad("sdp_source_info_gn_id"              ), "RW",  5, field_default(0) ),
 
       ( field_name_pad("sdp_reserved"                       ), "RW", 40, field_default(0) ),
-      ( field_name_pad("sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_beamlet_scale_default) ),
+      ( field_name_pad("sdp_beamlet_scale"                  ), "RW", 16, field_default(c_sdp_unit_beamlet_scale) ),
       ( field_name_pad("sdp_beamlet_index"                  ), "RW", 16, field_default(0) ),
       ( field_name_pad("sdp_nof_blocks_per_packet"          ), "RW",  8, field_default(c_sdp_cep_nof_blocks_per_packet) ),
       ( field_name_pad("sdp_nof_beamlets_per_block"         ), "RW", 16, field_default(c_sdp_cep_nof_beamlets_per_block) ),
diff --git a/libraries/base/common/src/vhdl/common_pkg.vhd b/libraries/base/common/src/vhdl/common_pkg.vhd
index d57813bc9a4de02174e449cce1cf367fc7049baa..ef84bffe9d09ed520781e7108c6212dddc026d18 100644
--- a/libraries/base/common/src/vhdl/common_pkg.vhd
+++ b/libraries/base/common/src/vhdl/common_pkg.vhd
@@ -193,7 +193,9 @@ PACKAGE common_pkg IS
   
   FUNCTION ratio( n, d : NATURAL) RETURN NATURAL;  -- return n/d when n MOD d = 0 else return 0, so ratio * d = n only when integer ratio > 0
   FUNCTION ratio2(n, m : NATURAL) RETURN NATURAL;  -- return integer ratio of n/m or m/n, whichever is the largest
- 
+
+  -- use almost_equal(a/b, 1.0, max_ratio) to verify that a and b differ less than max_ratio/100 percent
+  -- use almost_zero(a/b, max_ratio) to verify that a is less than max_ratio/100 percent of b, so almost zero
   FUNCTION almost_equal(a, b, delta : REAL) RETURN BOOLEAN;  -- return TRUE when abs(a - b) < abs(delta), else return FALSE
   FUNCTION almost_zero(a, delta : REAL) RETURN BOOLEAN;      -- return TRUE when abs(a)     < abs(delta), else return FALSE