public static double PFD_get_error(ref PFD pfd_p, double dtime) { double next_clk, err0r; if (pfd_p.phi_round > 0.0) { dtime = Math.Truncate(dtime * pfd_p.phi_round) / pfd_p.phi_round; } next_clk = Math.Truncate(dtime) + 1.0; if (pfd_p.target_clk == 0.0) { pfd_p.target_clk = next_clk; return(0.0); } err0r = pfd_p.target_clk - dtime; if (err0r > 0) { pfd_p.target_clk = next_clk + 1.0; } else { pfd_p.target_clk = next_clk; } return(err0r); }
public static void PFD_init(ref PFD pfd_p, double phi_round) { pfd_p.target_clk = 0.0; pfd_p.phi_round = phi_round; }