VHDL非整数分频器设计实验报告

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

相关文档
最新文档