当前位置:文档之家› 小数分频

小数分频


component sel port( clock_in : in std_logic; Xnumber : in std_logic_vector(3 downto 0); sel_out : out std_logic); end component; ---------------------------------------------component mux_21 port( a : in std_logic; b : in std_logic; s : in std_logic; y : out std_logic); end component; -----------------------------------------------signal selt : std_logic; 信号定义 signal selt_not : std_logic;
7.3 、7.32
1.2 分频选择
• 以7.3分频为例: 要实现7.3分频,只要在10次分频中,做10-3=7次除7,3 次初8就可以得到:N=(7*7+3*8)/10=7.3。 • 以7.32分频为例: • 要实现7.32分频,只要在每100次分频中做100-32=68次除 7,32次除8,即可得到:N=(68*7+32*8)/100=7.32 • 所以,对于任何M.F分频: 都可以做(10-F)次除M,F次除(M+1),即可得到 N=[(10-F)*M+F(M+1)]/10=[10*M-F*M+F*M+F]/10 =[10*M+F]/10=M.F
signal clock_1 : std_logic; signal clock_2 : std_logic; signal clock_sel: std_logic; signal n_fd : std_logic_vector(3 downto 0); signal n1_fd : std_logic_vector(3 downto 0); ------------------------------------------------------------begin number0 : number port map (n, n_fd, n1_fd); fdn0 : fdn port map (clock, selt_not, n_fd, clock_1); fdn1 : fdn port map (clock, selt, n1_fd, clock_2); mux_210 : mux_21 port map (clock_2, clock_1, selt, clock_sel); sel0 : sel port map (clock_sel, x, selt); selt_not <= not selt;clock_out <= clock_sel; end arch; 顶层文件描述结束
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( clock_in : in std_logic; enable : in std_logic; n_of_fd : in std_logic_vector(3 downto 0); clock_out : out std_logic); end component;
2
3
3
2
3
3
2
3
3
可见,在10次分频中进行了7次3分频和3次2分频
1.3 任意整数分频
(1)偶数分频
偶数分频是易于实现的。当计数器输出为0到N/2-1 时。时钟输出0或1,计数器输出为N/2时到N-1时,时 钟输出1或0,当计数器数到N-1时,复位计数器,如 此循环下去,就可以实现对输入频率的偶数分频。 这种方案可以有限度的调整占空比。 以4分频为例:
每进行一次分频,计数值为小数部分累计相加,如果大于10, 则进行N+1次分频,累计值再减去10;若小于10则进行 N次分频。
• 以方法对输入频率进行2.7次分频,分频器选择:
序列 累加 值 1 7 2 14 3 11 4 8 5 15 6 12 7 9 8 16 9 13 10 10 3
分频 系数
•可见,实现N.F的小数分频,只需要对输入信号做不同次数的 N分频和N+1分频,就要设方法将两种分频混合均匀。 •这种“均匀”工作是通过计数器来完成的。
两种方法: 每进行一次分频,计数值为10减去分频系数的小数部分,各 次的计数值累加;若累加值小于10,进行N+1分频,若大于或 等于10,进行N分频。
基于VHDL的小数分频设计
• 1. 小数分频的基本原理 • 2. 各个模块功能的实现
1.基本原理分析
1.1小数分频的基本原理
• 小数分频的基本原理:即在若干个分频周期中采取某种方 法使某几个周期多计和少计一个数,从而在整个计数周期 的总体平均意义上获取一个分频比。 • 分频比:K=M/P。 M代表分频器输入的脉冲数; K代表分频器输出的脉冲数; 10 n X)P M=K*P=(N+ 实质:设定一个分频比使得:输出频率=输入频率/分频比。
• 2. 各个模块功能的实现
2.1 顶层文件
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;
------------------------------------------------------------
小数分频是由两个不一样的整数:1 的比例混合而成的。
假设:每5个脉冲为一组,当计数器记到2两个脉冲时, 产生一个输出脉冲,当计数器记后3个脉冲时, 产生一个输出脉冲。
那么,这5个输入脉冲就产生了2个输出脉冲。 从而,得到分频比为 k=5/2=2.5。
(2)奇数分频
若进行非50%的奇数分频,则按照偶数分频的方法来 进行分频。 要实现占空比为50%的2N+1分配器,则需要对待分频 时钟上升沿和下降沿分别进行N/(2N+1)分频,然后将 两个分频所得的时钟信号相或,即可得到占空比为 50%的2N+1分频器。 以5分频为例: 要实现占空比为50%的5分频,要对上升沿进行2分频, 对下降沿进行2分频,再将得到的信号进行或运算, 即可得到。
相关主题