小数分频
基本原理,
以及基于此原理的一位小
数分频器的源代码,
受数据位宽的影响,
本文给出的代码系数整数部分的范围为
0-15
,如需更大数值可自行修改代码。
一、原理介绍:
假设分频系数为
N.X,
则
N*(10-X)+(N+1)*X=10*N-N*X+N*X+X=10*N+X=N.X*10
由上式可见只要满足输出
十个脉冲的时间内输入脉冲为
10*N+X
就可实现
N.X
分频
.
可对输入时钟进行
(10-X)
次
N
分频和
X
次
(N+1)
分频实现
,
由于先进行
(10-X)
次分频后进行
X
次
(N+1)
分频会造成相位有很大变化
,
可采用
N
分频和
(N+1)
分频交替进行的方法来改善
相伴变化
.
实现原理不再过多介绍
,
请参看
sel
部分源代码。
二、源代码
1
:
NdotXfd
,顶层文件
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity NdotXfd is
port (
clock : in std_logic;
n : in std_logic_vector(3 downto 0);
x : in std_logic_vector(3 downto 0);
clock_out : out std_logic
);
end entity;
architecture arch of NdotXfd is
component number
port(
n : in std_logic_vector(3 downto 0);
number0 : out std_logic_vector(3 downto 0);
number1 : out std_logic_vector(3 downto 0)
);
end component;
component fdn
port(