From c65b282da5afc7f9d59f6a57c94368fc33909c6f Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Tue, 19 Jan 2021 14:49:08 +0100 Subject: [PATCH] Fixed: keep angle in SIN(), COS() within 2pi to avoid: Error: XLOCAL <= 0.0 after reduction in COS(X). --- libraries/base/diag/tb/vhdl/tb_diag_pkg.vhd | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libraries/base/diag/tb/vhdl/tb_diag_pkg.vhd b/libraries/base/diag/tb/vhdl/tb_diag_pkg.vhd index 715f1aed94..47474faa29 100644 --- a/libraries/base/diag/tb/vhdl/tb_diag_pkg.vhd +++ b/libraries/base/diag/tb/vhdl/tb_diag_pkg.vhd @@ -561,8 +561,9 @@ PACKAGE BODY tb_diag_pkg IS CONSTANT c_omega : REAL := MATH_2_PI * c_sub / c_Nfft; CONSTANT c_lat : REAL := 1.0 * c_omega; -- the I and Q start when in_val='1', this introduces 1 dp_clk latency, so adjust phase of ref_I and ref_Q to compensate CONSTANT c_k : REAL := REAL(in_cnt); - CONSTANT c_I : REAL := SIN(c_k * c_omega + c_lat); -- I = in phase reference - CONSTANT c_Q : REAL := COS(c_k * c_omega + c_lat); -- Q = quadrature reference + CONSTANT c_angle : REAL := (c_k * c_omega + c_lat) MOD MATH_2_PI; -- keep angle in SIN(), COS() within 2pi to avoid "Error: XLOCAL <= 0.0 after reduction in COS(X)" + CONSTANT c_I : REAL := SIN(c_angle); -- I = in phase reference + CONSTANT c_Q : REAL := COS(c_angle); -- Q = quadrature reference CONSTANT c_dat : REAL := REAL(TO_SINT(in_dat)); CONSTANT c_phase : REAL := ARCTAN(accum_Q, accum_I + c_eps); CONSTANT c_ampl : REAL := SQRT((ABS(accum_I))**2.0 + (ABS(accum_Q))**2.0) * 2.0 / c_Nsamples; @@ -650,7 +651,8 @@ PACKAGE BODY tb_diag_pkg IS CONSTANT c_lat : REAL := 1.0 * c_omega; -- adjust phase of c_cw to compensate for measurement latency CONSTANT c_k : REAL := REAL(in_cnt); CONSTANT c_dat : REAL := REAL(TO_SINT(in_dat)); - CONSTANT c_cw : REAL := cw_ampl * SIN(c_k * c_omega + cw_phase + c_lat); + CONSTANT c_angle : REAL := (c_k * c_omega + cw_phase + c_lat) MOD MATH_2_PI; -- keep angle in SIN(), COS() within 2pi to avoid "Error: XLOCAL <= 0.0 after reduction in COS(X)" + CONSTANT c_cw : REAL := cw_ampl * SIN(c_angle); CONSTANT c_noise : REAL := c_cw - c_dat; CONSTANT c_noise_power : REAL := (ABS(c_noise))**2.0; BEGIN -- GitLab