VHDL非整数分频器设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非整数分频器设计
一、 输入文件
输入时钟CLK: IN STD_LOGIC
二、 设计思路
1. 方法一:分频比交错
(1) 确定K 值
先根据学号S N 确定M 和N :为了保证同学们的学号都不相同,取学号的后四位,即N S =1763
()mod 1920(mod 17)0
17mod 17
S S
S
N N if
N then M else M N =+===
由以上公式,得N=(1763 mod 19)+20=35 M=(1763 mod 17)=12 然后根据下式计算分频比K 的值:
8()9N M M
K N
-+=
=
=8.34285714
(2) 确定交错规律
使在35分频的一个循环内,进行12次9分频和23次8分频,这样,输出F_OUT 平均为F_IN 的8.34285714分频。为使分频输出信号的占空比尽可能均匀,8分频和9分频应‘交替’进
(3) 设计框图:要求同步时序设计
(4)代码
在实体内定义两个进程(PROCESS P1和PROCESS P2),一个进程控制输出8/9分频,一个进程控制35分频周期比例输出。控制器输出FS_CTL信号控制输出是8分频还是9分频,分频器输出C_ENB信号来控制35分频计数器计数。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY DIV IS--定义实体,实体名DIV
PORT(F_IN: IN STD_LOGIC;--输入时钟信号
F_OUT: OUT STD_LOGIC--输出时钟信号
);
END DIV;
ARCHITECTURE A OF DIV IS
SIGNAL CN1: INTEGER RANGE 0 TO 7;--8分频计数器
SIGNAL CN2: INTEGER RANGE 0 TO 8;--9分频计数器
SIGNAL CN: INTEGER RANGE 0 TO 34;--整体计数器
SIGNAL C_ENB: STD_LOGIC;--整体计数器时钟驱动信号
SIGNAL FS_CTL: STD_LOGIC;--控制8、9分频比例信号,高电平8分频,低电平9分频
BEGIN
P1:PROCESS(F_IN)--8、9分频计数进程
BEGIN
IF (F_IN'EVENT AND F_IN='1') THEN
IF(FS_CTL='0') THEN--9分频
IF CN2=8 THEN--计数
CN2<=0;
ELSE
CN2<=CN2+1;
END IF;
IF CN2>4 THEN--控制输出,占空比0.5
F_OUT<='1';
ELSE
F_OUT<='0';
END IF;
IF CN2=8 THEN--控制整体计数器驱动信号
C_ENB<='1';
ELSE
C_ENB<='0';
END IF;
ELSE
IF CN1=7 THEN--8分频计数,同上
CN1<=0;
ELSE
CN1<=CN1+1;
END IF;
IF CN1>3 THEN
F_OUT<='1';
ELSE
F_OUT<='0';
END IF;
IF CN1=7 THEN
C_ENB<='1';
ELSE
C_ENB<='0';
END IF;
END IF;
END IF;
END PROCESS P1;
P2:PROCESS(C_ENB)--整体计数进程
BEGIN
IF (C_ENB'EVENT AND C_ENB='1') THEN--由驱动信号驱动
IF CN=34 THEN--计数
CN<=0;
ELSE
CN<=CN+1;
END IF;
IF (CN=34 OR CN=2 OR CN=5 OR CN=8 OR CN=11 OR CN=14 OR CN=17 OR CN=20 OR CN=23 OR CN=26 OR CN=29 OR CN=32) THEN FS_CTL<='0';
ELSE
FS_CTL<='1';
END IF;--8、9分频比例分配
ELSE CN<=CN;
END IF;
END PROCESS P2;
END A;
2. 方法二:累加器分频
(1) 设计思路
假设累加器位数为8,则累加器的模值N M 为28=256。若STEP =27,则分频比为:
256
9.8414814827
M N K STEP =
==类似地,通过改变模值N M 和
步长STEP 就可以以任意精度逼近要求地分频比。
确定累加器位数M 和STEP ,K=8.34285714,得M=30,230=1073741824,STEP=128701931,此时分频比为8.342857140193180162930……,分频比精度高于10-8 (2) 原理图
F-OUT
(3) 代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL;
ENTITY DIV2 IS--定义实体,实体名DIV2
PORT(F_IN: IN STD_LOGIC;--输入时钟 F_OUT: OUT STD_LOGIC--输出时钟); END DIV2;
ARCHITECTURE A OF DIV2 IS
SIGNAL CNT: STD_LOGIC_VECTOR(29 DOWNTO 0):="000000000000000000000000000000";--30位
CONSTANT STEP : INTEGER := 128701931; BEGIN
P1: PROCESS(F_IN) BEGIN
IF F_IN'EVENT AND F_IN='1' THEN CNT<=CNT+STEP;--步长相加 END IF;
END PROCESS P1;
F_OUT<=CNT(29);--溢出位输出 END A;