From ee04924d42f36b654d8952ab7de1fa5dc94500a6 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 3 Nov 2009 20:38:30 +0000 Subject: [PATCH] - added helper functions for DCM frequency synthesis Committed on the Free edition of March Hare Software CVSNT Server. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ git-svn-id: http://moon:8086/svn/vhdl/trunk@576 cc03376c-175c-47c8-b038-4cd826a8556b --- lib/misc/utils_pkg.vhd | 44 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/lib/misc/utils_pkg.vhd b/lib/misc/utils_pkg.vhd index 789a1b0..065f072 100644 --- a/lib/misc/utils_pkg.vhd +++ b/lib/misc/utils_pkg.vhd @@ -1,5 +1,5 @@ ----------------------------------------------------------------------- --- $Header: /tmp/cvsroot/VHDL/lib/misc/utils_pkg.vhd,v 1.2 2009-01-02 15:28:01 Jens Exp $ +-- $Header: /tmp/cvsroot/VHDL/lib/misc/utils_pkg.vhd,v 1.3 2009-11-03 20:38:30 Jens Exp $ ----------------------------------------------------------------------- library IEEE; @@ -18,6 +18,9 @@ package utils_pkg is function NextExpBaseTwo(x : natural) return natural; function GCD(a, b : natural) return natural; function LCM(a, b : natural) return natural; + function UTILS_PERIOD_NS(f_in_hz : natural) return real; + function UTILS_FREQ_M(f_in_hz, f_out_hz : natural) return natural; + function UTILS_FREQ_D(f_in_hz, f_out_hz : natural) return natural; end utils_pkg; @@ -71,6 +74,45 @@ package body utils_pkg is end LCM; + function UTILS_PERIOD_NS(f_in_hz : natural) return real is + begin + + return 1.0E9/real(f_in_hz); + + end UTILS_PERIOD_NS; + + function UTILS_FREQ_M(f_in_hz, f_out_hz : natural) return natural is + variable f_in_mhz : natural; + variable f_out_mhz : natural; + variable m : natural; + begin + f_in_mhz := f_in_hz/1E6; + f_out_mhz := f_out_hz/1E6; + m := f_out_mhz/GCD(f_in_mhz, f_out_mhz); + + if m = 1 then + m := 2; + end if; + + return m; + + end UTILS_FREQ_M; + + function UTILS_FREQ_D(f_in_hz, f_out_hz : natural) return natural is + variable f_in_mhz : natural; + variable f_out_mhz : natural; + variable m : natural; + variable d : natural; + begin + m := UTILS_FREQ_M(f_in_hz, f_out_hz); + f_in_mhz := f_in_hz/1E6; + f_out_mhz := f_out_hz/1E6; + d := m*f_in_mhz/f_out_mhz; + + return d; + + end UTILS_FREQ_D; + end utils_pkg;