数控分频器的设计
1、实验目的:
学习数控分频器的设计、分析和测试方法。
2、实验原理:
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例下文所示。
1) VHDL及语句分析
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF IS --定义实体DVF
PORT ( CLK : IN STD_LOGIC; --时钟输入
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --7位预置数
FOUT : OUT STD_LOGIC ); --输出的频率
END DVF;
ARCHITECTURE one OF DVF IS --定义结构体one
SIGNAL FULL : STD_LOGIC; --定义信号full
BEGIN
P_REG: PROCESS(CLK) --进程P_REG中CNT8从预置数D开始
逐步累加到255后,FULL置1;再将
CNT8置为D,循环以获得一个新的周期
脉冲序列FULL,即产生新的频率V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF CNT8 = "11111111" THEN
CNT8 := D;
FULL<='1';
ELSE CNT8 := CNT8 + 1;
FULL <= '0';
END IF;
END IF;
END PROCESS P_REG ;
P_DIV: PROCESS(FULL) --进程P_DIV中,FOUT是占空比为50%的周期
信号。
FULL上升沿时CNT2取反,形成0/1交
替的序列。
而FOUT随CNT2变化。
V ARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1' THEN
CNT2 := NOT CNT2;
IF CNT2 = '1' THEN FOUT <= '1'; ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV ;
END;
2)进程P_REG的功能
进程P_REG中CNT8从预置数D开始逐步累加到255后,FULL置1;再将CNT8置为D,循环以获得一个新的周期序列FULL,即用预置数D产生新频率的序列,达到分频的效果。
如下图所示,当CNT8累加到255后,标记位FULL置1。
因此,FULL 与CLK的频率关系为:
FULL=CLK/(256-D)
注:当D=255时,FULL始终为1,FULL的频率为0。
下面是不同的D与FULL之间的关系。
3)进程P_DIV的功能
进程P_DIV中,FOUT是占空比为50%的周期信号。
FULL上升沿时CNT2取反,形成0/1交替的序列。
而FOUT随CNT2变化。
因此,FULL与FOUT的频率关系为:FOUT=FULL/2
注:当D=255时,FULL始终为1,FULL的频率为0,所以FOUT的频率也为0。
4) CLK、FULL和FOUT之间的分频关系
FULL与CLK的频率关系为:FULL=CLK/(256-D)
FULL与FOUT的频率关系为:FOUT=FULL/2
因此,FOUT与CLK的频率关系为:FOUT=CLK/2(256-D)
3、实验结果
以下是电路的时序仿真图
以下是RTL电路图。