半整数分频器的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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如下

相关文档
最新文档