半整数分频器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22.半整数分频器的设计
一、实验原理:
1小数分频的基本原理
设有一个5 MHz的时钟源,但电路中需要产生一个2 MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。
采用可编程逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。
小数分频的基本原理为脉冲吞吐计数法:设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。例如设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为 (9×10+1×11)/(9+1) =10.1
从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动较大。
当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。
1.2 电路组成
设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、一个二分频器和一个异或门组成,如图1所示。在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。
二、半整数分频器代码:
VHDL程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY deccount IS
PORT (
inclk: IN STD_LOGIC; --时钟源
preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --预置分频值N
outclk1: OUT STD_LOGIC;
outclk2: BUFFER STD_LOGIC ); --输出时钟
END deccount;
ARCHITECTURE deccount_arch OF deccount IS
SIGNAL clk, divide2: STD_LOGIC;
SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
clk<=inclk XOR divide2; --inclk与divide2异或后作为模N计数器的时钟
outclk1<=inclk; --outclk1和inclk同步
PROCESS(clk)
BEGIN
IF(clk'event AND clk='1') THEN
IF(count="0000") THEN
count<=preset-1; --置整数分频值N
outclk2<='1';
ELSE
count<=count-1; --模N计数器减法计数
outclk2<='0';
END IF;
END IF;
END PROCESS;
PROCESS(outclk2)
BEGIN
IF(outclk2'event AND outclk2='1') THEN
divide2<=NOT divide2; --输出时钟二分频
END IF;
END PROCESS;
END deccount_arch;
三、程序仿真波形
如输入preset=6,即分频值为5.5
功能仿真波形如下
由于内置时钟频率为50MHZ,频率过大使波形不准确。所以再输入信号前再连接一个分频器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity clk is
port
( clk : in std_logic;
en : in std_logic;
qcnt : buffer std_logic_vector( 24 downto 0);
clkout :buffer std_logic
);
end clk;
architecture behave of clk is
begin
process (clk)
begin
if(en='1') then
if(clk'event and clk='1') then
if(qcnt="1011111010111100001000000") then
qcnt<="0000000000000000000000000";
else
qcnt<=qcnt+1;
end if;
end if;
end if;
clkout<=qcnt(8);
end process;
end behave;
引脚设置
CLK 62
Preset[0] 33
Preset[1] 34
Preset[2] 35
Preset[3] 36
Outclk1 27
Outclk2 28
可以通过开关量输入接口输入preset,设置N,设计0.5~15.5的分频器示波器连接27,可观察outclk1的波形,即输入波形
示波器连接28,可观察outclk2的波形,即分频后输出波形
四、实验箱结果
输入波形CLK如下