#!/usr/bin/env python3 import numpy as np import matplotlib.pyplot as plt PLL_FREQ = 800*10**6 # Mhz def main(): # 8kHz to 150MHz out_freq = np.uint32(np.arange(1*10**6, 160*10**6, 10)) fdiv = PLL_FREQ / out_freq rm = PLL_FREQ % out_freq c = np.uint32(0x0FFFFF); a = np.uint32(fdiv) b = np.uint32(np.uint64(c) * np.uint64(rm) / out_freq) ideal_freq = PLL_FREQ / fdiv real_freq = PLL_FREQ / (a + b/c) err = (ideal_freq - real_freq) out_freq = out_freq / 10**6 ideal_freq = ideal_freq / 10**6 real_freq = real_freq / 10**6 p1 = 128 * a + np.floor(128 * b / c) - 512; p2 = 128 * b - c * np.uint32(128 * b / c); #plt.plot(out_freq, ideal_freq) #plt.plot(out_freq, real_freq) plt.plot(out_freq, err) plt.show() if __name__ == '__main__': main()