当前位置:文档之家› 关于VHDL的任意整数分频器的设计

关于VHDL的任意整数分频器的设计

关于VHDL的任意整数分频器的设计
关于VHDL的任意整数分频器的设计

关于VHDL的任意整数分频器的设计

0 引言

在数字逻辑电路设计中,分频器是一种基本电路,通常用来对某个给定频率的时钟进行分频,得到所需的时钟。时序电路设计中需要各种各样的分频器来获得不同频率的时钟,其中以整数分频器最为常见。整数分频可以简单的使用模n 计数器实现,即随驱动时钟跳变n 次后就输出一个进位脉冲,然后立即被清零或置位,再开始新一轮的循环的计数。

模 n 计数器的进位脉冲的宽度一般与驱动时钟相同,这对于边沿驱动的时序逻辑并不会带来什么问题。但是在某些需要使用电平逻辑的设计中,我们更希望分频时钟拥有50%,或者与驱动时钟相同的占空比。这时就需要通过另外的逻辑方法来进行分频,或者使用PLL。

在基于 CPLD(复杂可编程逻辑器件)/FPGA(现场可编程门阵列)的数字系统设计中,很容易实现由计数器或其级联构成各种形式的偶数分频及非等占空比的奇数分频,但对等占空比的奇数分频及半整数分频的实现较为困难。

本文利用 VHDL(超高速集成电路硬件描述语言),通过Quartus II 7.1 开发平台,设计了一种能够实现等占空比的整数分频器,这种设计方法原理简单,可重用性好,而且只需很少的逻辑宏单元。

1 分频原理

1.1 偶数倍(2N)分频

使用一个模 N 计数器模块即可实现,即利用模N 计数器从0 开始对输入时钟的上升沿计数,计数值等于N 时,输出时钟进行翻转,同时给计数器一个复位信号使之从0 开始重新计数,以此循环即可。为偶数倍分频原理示意图。

1.2 奇数倍(2N+1)分频

占空比为 X/(2N+1)或(2N+1-X)/(2N+1)分频,用模(2N+1)计数器模块可以实现。取0 至2N 之间某一数值X(0

1.3 占空比为 50%的分频

1.2 中占空比为非50%的输出时钟在输入时钟的上升沿触发翻转。若在同一个输入时钟周期内,此计数器分别在输入时钟的上升沿和下降沿触发翻转得到的两路信号,再将所得到的信号进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。当然其输出端再与偶数倍分频器串接则可以实现偶数倍分频。奇数倍分频原理如所示:

1.4 N-0.5 倍分频

采用模 N 计数器可以实现。具体如下:计数器从0 开始上升沿计数,计数达到N-1 上升沿时,输出时钟需翻转,由于分频值为N-0.5,所以在时钟翻转后经历0.5 个周期时,计数器输出时钟必须进行再次翻转,即当CLK 为下降沿时计数器的输入端应为上升沿脉冲,使计数器计数达到N 而复位为0 重新开始计数同时输出时钟翻转。这个过程所要做的就是对CLK 进行适当的变换,使之送给计数器的触发时钟每经历N-0.5 个周期就翻转一次。本设计未作要求,因此仅叙述原理,实际并没有完成该部分设计。

1.5 对于任意的 N+A/B 倍分频(N、A、B∈Z,A?B)

分别设计一个分频值为 N 和分频值N+1 的整数分频器,采用脉冲计数来控制单位时间内两个分频器出现的次数,从而获得所需要的小数分频值。

可以采取如下方法来计算各自出现的频率:

设N 分频器出现的频率为a,则N×a+(N+1)×(B-a)=N×B+A ,求解该方程可知a=B-A。所以 N+1 分频器出现的频率为A。例如实

现7+2/5 分频,取a 为3,即7×3+8×2就可以实现。但是由于这种小数分频输出的时钟脉冲抖动很大,现实中很少使用。这里仅叙述原理,并没有完成该部分的设计。

1.6 利用 PLL 模块设计分频器

利用 PLL 模块将待分频时钟(CLK)进行倍频得到待分频时钟的2 倍频时钟(2CLK),这样以来,为了完成对CLK 的N(N∈Z)分频就只要

对2CLK 进行2N(N∈Z)分频,也就只要考虑偶数分频,从而简化了设计,但由于PLL 输入时钟不能任意改变,使得设计有较大的局限性。

2 具体设计思路

2.1 单纯利用逻辑代码编写

主要设计思想是通过对分频系数的模运算将偶数分频和奇数分频分成两种情况分别考虑,偶数分频比较简单,此处不赘述,可参考原理部分的叙述;奇数(2N+1)分频时分别对待分频时钟的上升沿和下降沿进行计数,上升沿计到0 和2N 时翻转输出信号,并重新计数,下降沿计到N 时翻转输出信号,并重新计数,将两信号相或就得到占空比为50%的时钟。据上述思想,设计出divider.vhd。在divider 基础上对代码进行优化,上升沿计满2N+1 时翻转输出信号,下降沿计满N 时翻转输出信号,两信号相异或就得到占空比为50%的时钟信号,设计出DIV_N。

2.2 调用 PLL 模块完成设计

调用 PLL 宏模块,将输入进行倍频处理,再对PLL 模块的输出时钟进行2N 分频即可。

3 仿真及综合情况

3.1 软件仿真

ModelSim SE 6.1f 和Quartus II 7.1 两者比较而言,ModelSim 的仿真更为专业和精确,因此本文用Modelsim 完成仿真工作。但调用PLL 模块时用到了Altera 的库,因此无法利用ModelSim 进行仿真,仅给出了在Quartus II 中的仿真情况。由仿真情况可以看出,采用逻辑代码完成的设计很好地实现了任意分频器的功能,利用PLL 模块,输出时钟相对输入时钟有较大的延时。

3.1.1 在 ModelSim 中的仿真

使用 ModelSim SE 6.1f 对DIV_N 进行仿真,为偶数倍分频仿真结果,为奇数倍分频仿真结果。

3.1.2 调用 PLL 模块仿真情况

在 Quartus II 中定制PLL 宏模块,对输入时钟进行倍频,然后再对所得时钟进行2N 分频,可实现任意分频。仿真情况如所示。

3.2 综合情况:

较 divider 而言,DIV_N 代码数量更少,同时减少了两临时信号的翻转次数,降低了程序复杂度的同时,节省了设计所用的逻辑资源。

3.2.1 在 QuartusII 中的综合情况

测试的硬件核心为 Altera 公司的FPGA 芯片,型号为:EP1C3T144C8,所用的综合软件为Quartus II 7.1,两个版本的任意整数分频器的综合情况如表1 所示。

3.2.2 综合所得的RTL 图

利用综合软件 Synplify Pro 对两个版本的分频器(版本1:divider.vhd,版本2:DIV_N.vhd)进行综合,得到RTL 图分别入所示。

4 结论

本文讨论了一种基于 VHDL 的可以实现任意整数分频电路设计的方法,实现占空比为50%任意整数分频。并以EP1C3T144C8 为目标芯片进行了仿真和测试, 结果完全符合设计要求。在一些特殊的场合, 这种占空比为50%的任意整数分频电路是很重要的。

计算机硕士论文

[参考文献] (References)

[1] 阎石主编,清华大学电子学教研组编.数字电子技术基础.北京:高等教育出版社.1999.9

[2] 张多利,李丽,高明伦等.可配置非幂方分频器的全新设计方法 [J ] 1 电子学报, 2002, (8) : 1 250 1 2511

[3] 汪虹,李宏.基于 FPGA 的等占空比任意整数分频器的设计.仪器与仪表.2005.5.3

[4] 潘松,黄继业.EDA 实用技术教程.北京:科学出版社.2006

[5] 许永贤.基于CPLD 的任意整数半整数分频器设计.

[6] Talk:Frequency divider.

分频器设计实验报告

竭诚为您提供优质文档/双击可除分频器设计实验报告 篇一:n分频器分析与设计 一、实验目的 掌握74190/74191计数器的功能,设计可编程计数器和n分频器,设计(n-1/2)计数器、分频器。 二、实验原理 分频是对输入信号频率分频。1、cD4017逻辑功能 2、74190/74191逻辑功能 3、集成计数器级联 当所需计数器模数超过所选计数器最大计数状态时,需要采取多片计数器级联。方法分为异步级联和同步级联。4、集成计数器的编程 在集成计数器的时序基础上,外加逻辑门电路等,反馈集成计数器的附加功能端,达到改变计数器时序的目的。可采用复位编程和置数编程两种。5、多片74190/74191计数器级联 可根据具体计数需求和增减需求,选用74190或74191,

选择不同功能、同步或异步设计等。 6、74190/74191计数器编程 由于没有复位端,因此只能使用置数编程,置数端置为0即可异步置数。可根据需求设计n进制加法或减法计数器。 n与译码逻辑功能如下。 7、74191组成(n-1/2)分频器电路如下图: u3 计数器的两个循环中,一个循环在cp的上升沿翻转;另一个是在cp的下降沿翻转,使计数器的进制减少1/2,达到(n-1/2)分频。 三、实验仪器 1、直流稳压电源1台 2、信号发生器1台 3、数字万用表1台 4、实验箱1台 5、示波器1台 四、仿真过程 1、按照cD4017和74191功能表验证其功能。 2、74191组成可编程计数器 (1)构成8421bcD十进制加法计数器,通过实验验证正确性,列出时序表。设计图如下 仿真波形如下 (2)构成8421bcD十进制减法计数器,通过实验验证正确性,列出时序表。设计图如下: 仿真波形如下

基于VHDL数控分频器设计

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (4) 四、功能 (5) 1、数控分频器 (5) 2、BCD译码器 (6) 3、扫描器 (11) 4、3-8译码器 (13) 5、7段数码管显示译码器 (16) 五、总体设计电路图 (19) 1总体(顶层)电路原理图 (19) 2仿真结果 (19) 3管脚分配图 (20) 4.硬件连接情况 (20) 六.心得体会 (20)

数控分频器设计 一、设计任务与要求 数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。 基本功能: 1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。 2、输出的波形应为占空比位50%的方波。 3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。 总体框图 设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。把输入端输入的八位二进

制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。 模块的功能: 1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频。 2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。 3、扫描器:when “000”=>daout<=dout(3 downto 0); when “001”=>daout<=dout(7 downto 4); when “010”=>daout<=dout(3 downto 2)<="00"; daout(1 downto 0)<=dout(9 downto 8); when others=>null; 4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。 当sel=1时,q=11111101;选择十位数码管亮。 当sel=2时,q=11111011;选择百位数码管亮。 5、7段数码管显示译码器:把BCD码表示的十进制数转换成驱动数码管显示的段信号,使数码管显示数字。 三、选择器件 1、装有QuartusII软件的计算机一台。 2、芯片:使用altera公司生产的Cyclone系列芯片,如EP1C12Q240C8芯片 。 此次设计实验采用ALTERA公司的cyclone系列的FPGA芯片EP1C12,设计和仿真采用ALTERA公司的QUARTUS II软件,EP1C12各项参数参照上表。 Cyclone的性能特性 (1)、新的可编程体系结构,实现低成本设计。

实验五 数控分频器

实验五数控分频器 一、实验目的 1、学会数控分频器的设计、分析和测试方法; 2、根据仿真结果分析设计的优缺点。 二、实验原理 数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIV IS PORT(CLK:IN STD_LOGIC; K_OR:OUT STD_LOGIC); END ENTITY DIV; ARCHITECTURE BHV OF DIV IS SIGNAL C1,C2:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL M1,M2:STD_LOGIC; BEGIN PROCESS(CLK,C1) BEGIN IF RISING_EDGE(CLK) THEN IF (C1="100") THEN C1<="000";ELSE C1<=C1+1;END IF; IF (C1="001") THEN M1<=NOT M1;ELSIF C1="011" THEN M1<=NOT M1; END IF; END IF; END PROCESS ; PROCESS(CLK,C2) BEGIN IF FALLING_EDGE(CLK) THEN IF (C2="100") THEN C2<="000";ELSE C2<=C2+1;END IF; IF (C2="001") THEN M2<=NOT M2;ELSIF C2="011" THEN M2<=NOT M2;

数控分频器实验报告

《数控分频实验》 姓名:谭国榕班级:12电子卓越班学号:201241301132 一、实验目的 1.熟练编程VHDL语言程序。 2.设计一个数控分频器。 二、实验原理 本次实验我是采用书上的5分频电路进行修改,通过观察其5分频的规律进而修改成任意奇数分频,再在任意奇数分频的基础上修改为任意偶数分频,本次实验我分为了三个部分,前两部分就是前面所说的任意奇数分频和任意偶数分频,在这个基础上,再用奇数输入的最低位为1,偶数最低位为0的原理实现合并。 三、实验步骤 1.任意奇数分频 程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DIV1 IS PORT(CLK:IN STD_LOGIC; D:IN INTEGER RANGE 0 TO 255; K1,K2,K_OR:OUT STD_LOGIC ); END; ARCHITECTURE BHV OF DIV1 IS SIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL M1,M2:STD_LOGIC; --SIGNAL OUT1,OUT2,OUT3:STD_LOGIC; BEGIN PROCESS(CLK,TEMP3) BEGIN IF RISING_EDGE(CLK) THEN IF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF; IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF; END PROCESS; PROCESS(CLK,TEMP4) BEGIN IF FALLING_EDGE(CLK) THEN IF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF; IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2;

EDA数控分频器的设计报告

数控分频器的设计 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%的周期

实验八 数控分频器的设计

实验八数控分频器的设计 1、实验目的 1 学习数控分频器的设计; 2 熟悉VHDL常用语句的意义和使用; 3 练习引脚分配和时序分析。 2、实验内容 1 设计8位数控分频器; 三、实验原理 对于一个N分频器,分频出的时钟周期原时钟周期的N倍,频率是原时钟频率的1/N。 对于一个8位计数器,如果开始预置一个数D,然后启动计数器工作,则经过11111111-D个时钟周期计数器的值又变为11111111,当计数器为该数值时,下一个时钟沿到来之时,又将计数器预置为D,然后开始正常计数。如此通过计数、预置的周期性操作,可以得到一个周期信号(即分频信号),其周期为11111111-D+1,即分频比为R= 11111111-D+1。所以改变D,则可以控制分频比。 数控分频器的VHDL代码见教材P146-147。仿真波形如图8-1所示。 图8-1 数控分频器仿真波形

图8-2 数控分频器芯片引脚分配 三、实验步骤 (一)8位数控分频器的设计 1 建立一个设计工程,工程名为PULSE; 2 打开文本编辑器,建立一个VHDL设计文件,其VHDL代码见教材 P166例6-22,文件名存为PULSE.VHD。注意文件的扩展名要选 为.vhd,而且要求工程名、文件名和设计实体名必须相同。 3 选器件:将器件型号选为; 4 编译; 5 建立波形文件,然后保存,其文件名必须与工程名一致;【波形

设置:①设置仿真时间为500us:②设置输入信号的波形:时钟周期设置为50ns,其他输入信号的波形设置参看图8-1。】 6 仿真,观察输出波形是否正确【参看图8-1中的输出波形】。 7 引脚分配;【将引脚分配到如图8-2所示的位置,然后再编译。 编译通过才算成功】 8 时序分析:分析芯片所能达到的最高时钟频率。【打开时序分析器,然后执行菜单命令:analysis/register performance /start】 五、思考题 1 按本实验所示的方法进行分频,输出的分频信号FULL和FOUT是奇数分频还是偶数分频?分别说明之。 2 将本实验的8位数控分频器扩展为16位分频器; 3 在本实验的设计基础上,如果设置2个预置数D和D1,则可以控制输出信号FULL的占空比,使时钟信号变得比较均匀。试在原来的VHDL 代码基础上进行改进,使用D和D1来控制FULL信号的占空比。 4 设计一个5分频器,使其分频时钟的占空比位3/5,写出VHDL设计代码。 【提示:对于一个5分频器的设计,可以先设计一个4位5进制计数器,则计数器的值在0,1,2,3,4上周期性循环。设计方法是:当计数器为4时,如果下一个时钟沿到来则将计数器置0,然后开始正常计数。另外定义一个分频信号CLK_DIV5,当计数器值为0,1,2时,使CLK_DIV5=1,当计数器值为3,4时,使CLK_DIV5=0,则CLK_DIV5为5分频信号,其占空比为3/5。】

数控分频器的设计

数控分频器的设计 一、实验目的: 学习数控分频器的设计和测试方法。 二、实验原理: 数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。 电路输出波形图: 三、实验内容: 1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。 ------------------------------------------------------------------------------------------------------------- 原理图:

数控分频器输出频率与输入时钟的关系: 当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。 任意小数都可以表示成a n b +形式,其中a

数控分频器的设计

实验四数控分频器的设计 一、实验目的: 1.学习数控分频器的设计、分析和测试方法,锻炼分析Verilog(VHDL)语言的能力。 二、原理说明: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,对原时钟进行占空比为50%的分频。在实验板选择50M 时钟,对其进行2~15分频,分频系数以拨码键盘控制,并用数码管进行显示(十六进制形式)。 三、实验内容: 1、根据由顶向下的设计原则,进行顶层建模。 分频系数分为奇数分频和偶数分频,因些包括Evn_Div(偶数分频)和Odd_Div(奇数分频)模块,数码管显示为SEG7_LUT,采用类似查找表的方式完成。 2、偶数分频 偶数分频模块比较简单,假设分频系数为N,只需要在计数器计到N/2时,将输出时钟反转即可。

仿真图如下: 3、奇数分频 奇数分频相对偶数分频比较麻烦,主要是对原时钟的上升沿和下降沿进行计数,通过两个计数器得到上升沿时钟和下降沿时钟,对这两个时钟进行与操作可得到奇数分频。

仿真图如下: 4、数码管显示 数码管显示模块应用case语句即可完成。

5、分频选择 分频系数有两种,一是偶数,另一个是奇数,因此可通过分频系数的最低位来进行选择,iDIV[0]既作为奇、偶分频模块的使能输入,又可作为输出时钟选择线。 6、顶层模块 将上述几个模块例化即可(注意iDiv[0]的连接方式)。 引脚: input CLOCK_50;//原时钟 input RST;//复位信号 input [3:0] iDIV;//分频系数 output oCLK;//输出时钟 output [6:0] oSEG;//数码管输出

数控分频器

数字起航—数控分频器零基础电子设计系列课程 主讲人:范秋华 国家级电工电子实验教学中心(青岛大学)

4.4.5 数控分频器 定义 实现 分频值与计数初值、计数器模的关系 举例

数控分频器 数控分频器就是当在输入端给定不同输入数据时,将对输入的时钟信号clk进行相应的分频输出clkout。

10.Architecture a of fdiv is 11.signal cnt: integer range 0 to n; 12.signal temp: std_logic; 13.Begin 14.process (clk) 15.begin 16.if (clk'event and clk='1') then 17.if(cnt

case keys7 is when "0000001" => if (clk'event and clk='1') then if count <"11111111111111110" then count:=count + 1; fullspks<= '0'; else fullspks<='1'; count:=0; end if;end if; --1 when "0000010" => if (clk'event and clk='1') then if count <"11111111111111100" then count:=count + 1;fullspks <= '0'; else fullspks<='1'; count:=0; end if;end if; --2 when "0000100" => if (clk'event and clk='1') then if count <"11111111111111000" then count:=count + 1;fullspks <= '0'; else fullspks<='1'; count:=0; end if;end if; --3 when "0001000" => if (clk'event and clk='1') then if count <"1111111111110000" then count:=count + 1;fullspks <= '0'; else fullspks<='1'; count:=0; end if;end if; --4 when "0010000" =>if (clk'event and clk='1') then if count <"1111111111110000" then count:=count + 1; fullspks<= '0'; else fullspks<='1'; count:=0; end if;end if; --5 when "0100000" =>if (clk'event and clk='1') then if count <"1111111111100000" then count:=count + 1; fullspks<= '0'; else fullspks<='1'; count:=0; end if;end if; --6 when others => null; end case;end process;

数控分频器的设计

数控分频器的设计 1、实验目的:学习数控分频器的设计、分析和测试方法。 2、实验内容:根据数控分频器的原理设计一个数控分频器. 3、实验程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PULSE IS P O R T(C L K:I N S T D_L O G I C; D : IN STD_LOGIC_VECTOR(7DOWNTO0); F O U T:O U T S T D_L O G I C); END; ARCHITECTURE ONE OF PULSE IS S I G N A L F U L L:S T D_L O G I C; BEGIN P_REG:PROCESS(CLK) VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO0); B E G I N I F C L K'E V E N T A N D C L K='1'T H E N I F C N T8="11111111"T H E N C N T8:=D;- 当 CNT8 计数 计满时,输入数据 D 被同步预置给计数器 C N T8 F U L L<='1';-- 同时使溢出标 志信号 FULL 输出为高电平 E L S E C N T8:=C N T8+1; -- 否则继续作加

计数 F U L <= '0'; -- 且输出溢出标志信号 FULL 为低电平 E N D I F; E N D I F; E N D P R O C E S S P_R E G P_DIV: PROCESS(FULL) V A R I A B L E C N T2:S T D_L O G I C; B E G I N IF FULL'EVENT AND FULL = '1' T H E N C N T2 := NOT CNT2;-- 如果溢出 标志信号 FULL 为高电平, D 触发器输出取反 I F CNT2 = '1' T H E N F O U T <= '1'; E L S E F O U T<='0'; E N D I F; E N D I F; E N D P R O C E S S P_D I V END;

实验6 数控分频器的设计

实验6 数控分频器的设计 (1)实验目的: 学习数控分频器的设计、分析和测试方法。 (2)实验原理: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例6-20所示。 【例6-20】8位数控分频器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC); END ENTITY DVF; ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CNT8 = "11111111" THEN CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL <= '1'; --同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; --否则继续作加1计数 FULL <= '0'; --且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = '1' THEN FOUT <= '1'; ELSE FOUT <= '0'; END IF; END IF; END PROCESS P_DIV;

数控分频器的设计实验报告

1 引言 计算机组成原理与设计是计算机通信与技术专业本科生的必修课程。在完成理论学习和必要的实验后,本科学生掌握了它的基本原理和各种基本功能的应用,但对硬件实际应用设计和其完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 计算机组成原理与设计的课程设计既要让学生巩固课本学到的理论,还要让学生学习硬件电路设计和用户程序设计,同时学习查阅资料、参考资料的方法。 计算机原理与设计的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。 1.1 设计的目的 本次设计的目的就是了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标。 1.2 需求分析 这次课程设计的题目是实现基于CPLD的数控分频器及其应用。设计乐曲程序能实现演奏电路,并用原理图方法设计数字时钟,使电路具有校时校分的功能与传统的纯硬件方法相比简单有效。此设计可以适应多家可编程逻辑器件,便于组织大规模的系统设计;便于设计的复用继承和升级更新,具有广阔的应用前景。 1.3 设计的基本内容 传统数字电路设计是利用标准集成电路、电路板来实现电路功能。可编程逻辑器件和EDA技术使设计方法发生了质的变化。把以前“电路设计+硬件搭

数控 分 频 器

EDA实验报告 实验三数控分频器 实验目的 1.掌握数控分频器的工作原理并能够用virlog语言编写代码,熟悉EDA6000实验箱的使 用方法。 2.进一步熟悉quartusII建立程序编译、仿真及下载的操作流程并学会数控分频器的Verilog 硬件设计 实验步骤 1.新建Verilog工程,编写代码并保存至与模块名对应的文件夹。注意:项目应存为系统 盘以外的盘内,路径中不含中文字符。 2.编译程序,编译无误后,在【tools】里面选择RTL视,观察电路结构。 3.新建波形文件进行仿真。保存时要和源程序存放在同一目录下。设置好输入波形参数后, 开始仿真。在仿真后输入输出波形中观察逻辑关系是否正确。 4.将实验箱和PC合理连接起来。打开EDA6000软件,设置好芯片类型为ACEX1K(EP1K30 TC144-3),载入模式9. 5.根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSII里面设定管 脚号并检查无误。 6.将程序下载至FPGA内,并在EDA6000软件界面内进行验证测试。 程序代码 module divf(clk,din,pfull,clkout); input clk; input [7:0] din; output clkout,pfull; reg full,divclk; reg [7:0] count; always @(posedge clk) begin if(count==8'HFF) begin count<=din; full<=1; end else if(count<255) begin count<=count+8'B1; full<=0; end end always @(posedge full) begin divclk<=~divclk; end assign clkout=divclk; assign pfull=full; endmodule

数控分频器设计实验报告

实验目的与要求 实验名称:数控分频器设计 实验目的:将4位计数器改成8位计数器形式,完成全部仿真测试和硬件测试内容 实验原理 给定计数模N,当计数到N时,对计数器发出一个清零信号,使其从头开始计数,以此循环往复如果控制的是计数器的同步清零端,则为计数器的同步清零模式.如果控制的是异步清零端,则为计数器的异步清零模式.对于给定的模M,当计数满到溢出时,或限制其计数到某一数值时,发出一个信号,控制计数器的加载预置端,使计数器加载M,如果控制的是计数器的同步加载端,则为同步加载模式,如果控制的是计数器的异步加载端,则为异步加载计数模式 1、实验内容编辑和输入设计文件 新建文件夹——输入源程序——文件存盘 源程序 A、module FDIV0(CLK,PM,D,DOUT,RST); input CLK; input RST; input[7:0]D; output PM; output [7:0] DOUT; reg[7:0]Q1; reg FULL; (*synthesis,keep*)wire LD; always @(posedge CLK or negedge RST) begin if(!RST) begin Q1<=0; FULL<=0; end else if(LD) begin Q1<=Q1+1; FULL<=0; end end assign LD=(Q1==8'B11111111); assign PM=FULL; assign DOUT=Q1; endmodule

B、module fdiv01(CLK,PM,D,DOUT,RST); input CLK; input RST; input[7:0]D; output PM; output [7:0] DOUT; reg[7:0]Q1; reg FULL; (*synthesis,probe_port,keep*)wire LD; always @(posedge CLK or posedge LD or negedge RST )begin if(!RST) begin Q1<=0; FULL<=0; end else if(LD) begin Q1<=D; FULL<=1; end else begin Q1<=Q1+1; FULL<=0; end end assign LD=(Q1==8'B00000000); assign PM=FULL; assign DOUT=Q1; endmodule C、module fdiv02(CLK,PM,D); input CLK; input [7:0] D; output PM; (*synthesis,probe_port,keep*)[7:0] Q1; reg FULL; (*synthesis,probe_port,keep*)wire RST; always @ (posedge CLK or posedge RST)begin if (RST)begin Q1<=0; FULL<=1; end else begin Q1<=Q1+1; FULL<=0; end end assign RST = (Q1==D); assign PM=FULL;

分频器设计报告

数控分频器设计报告 一、设计目的 学习数控分频器的设计、分析和测试方法。以quartusⅡ为开发平台,用VHDL语言和原理图结合的方法设计占空比为50%的5分频电路、6分频电路和5.5分频电路,通过功能选择键选择需要的分频比。 二、功能描述 CLK输入为待分频的信号。当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为; 三、设计原理 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。用VHDL语言设计占空比为50%的任意奇数次、偶数次分频电路,用原理图输入法设计5.5分频电路,通过3选一数据选择器选择需要的分频电路,从而达到实验目的。

四、设计流程 (1)占空比为50%的5分频电路 1、新建文件夹d:\fenpin5 2、打开quartusⅡ创建工程fenpin5 3、新建vhdl文本,输入设计程序(见附1),保存为fenpin5.vhd 4、启动编译,建立仿真波形图(见附2) 5、将该5分频电路封装设置成可调用的元件。 附图1: 附图2: (2)占空比为50%的6分频电路 1、新建文件夹d:\fenpin6 2、打开quartusⅡ创建工程enpin6 3、新建vhdl文本,输入设计程序(见附3),保存为fenpin6.vhd 4、启动编译,建立仿真波形图(见附4) 5、将该6分频电路封装设置成可调用的元件。 附图3: 附图4:

(3)5.5分频电路 1、用VHDL输入法设计模为6的计数器M6并设置为可调用元件(VHDL文件见附5)。 2、设计D触发器DFF,实现其clk上升沿到来时Q输出取反(附6)。 3、新建文件夹d:\fenpin3,将计数器M6和触发器DFF的vhd文件和bsf文件复制到fenpin3文件夹下,打开quartusⅡ创建工程fenpin3 4、设计5,5分频电路的顶层文件(附7),保存为fenpin3.bdf 5、启动编译,建立仿真波形图(见附8) 6、将该5.5分频电路封装设置成可调用的元件。 附5: 附6: 附7: 附8: (4)3选一数据选择器 1、用VHDL语言设计2选一数据选择器。(附9) 2、用原理图输入法设计3选一数据选择器(附10)并将3选一数据选择器设置成可调用的元件。 附9: 附10: (5)分频可选的分频器设计 1、新建文件夹d:\fenpinqi,并将5分频6分频5.5分频电路的vhd文

实验三 数控分频器设计

实验三数控分频器设计 【实验目的】 1.设计实现一个根据不同的输入,将时钟信号进行分频 2.掌握分频计数器类型模块的Verilog描述方法; 3.学习设计仿真工具的使用方法; 4.学习层次化设计方法; 【实验内容】 1.用Verilog 语言设计带计数允许和复位输入的数控分频器。 2. 编制仿真测试文件,并进行功能仿真。 3. 下载并验证分频器功能 【实验原理】 数控分频器的功能是在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,对于一个N分频器,分频出的时钟周期是原时钟周期的N倍,频率变为原来的1/N。对于一个8位计数器,如果输入数D,然后启动计数器工作,则经过D倍的时钟周期,计数器溢出时,输出pfull变为高电平,再以pfull为敏感信号,对fout进行取反操作,如此N=2D。计数一次后,再重新计数,反复进行直至输入被赋予新值。对于数控分频数器,装载不同的计数初始值时,会有不同频率的溢出信号,从而得到不同的输出。数控分频器是利用计数值可并行预置的加法计数器设计完成的。 【程序源代码】(加注释) module FDIV(clk,fdiv,fout,pfull); //8位二进制的数控分频计 input clk; //时钟信号 input [7:0] fdiv; //8位加载数据 output pfull; //定义一个1位的寄存器型中间控制变量 output fout; //分频数据输出 reg [7:0] Q; reg fout,full,pfull; always @(posedge clk) begin //clk有上升沿时,启动以下程序 if(Q==fdiv) begin Q=0;full=1;end //若Q==fdiv,Q=0,full=1 else begin Q=Q+1;full=0;end //若Q!=fdiv,Q累加1,full=0 pfull=full;end //将full数据向pfull输出 always @(posedge pfull) fout=~fout; //当pfull有上升沿时,对fout取反endmodule 【RLT电路】

基于FPGA的通用数控分频器的设计与实现

基于FPGA的通用数控分频器的设计与实现 【摘要】本文首先介绍了各种分频器的实现原理,并在FPGA开发平台上通过VHDL文本输入和原理图输入相结合的方式,编程给出了仿真结果。最后通过对各种分频的分析,利用层次化设计思想,综合设计出了一种基于FPGA的通用数控分频器,通过对可控端口的调节就能够实现不同倍数及占空比的分频器。 【关键词】FPGA;分频器;VHDL 1.引言 分频器是数字系统中非常重要的模块之一,被广泛应用于各种控制电路中。在实际中,设计人员往往需要将一个标准的频率源通过分频技术以满足不同的需求。常见的分频形式主要有:偶数分频、奇数分频、半整数分频、小数分频、分数分频。在某些严格的情况下,还有占空比的要求。其中非等占空比的偶数分频器和奇数分频器其实现比较容易,但对于半整数分频器和占空比为50%的奇数分频器实现比较困难。 本文首先介绍了各种分频器的实现原理,并结合VHDL硬件描述语言对其进行了仿真,最后提出一个可控的通用分频器的设计方法,该方法可实现任意分频,资源消耗低,具有可编程等优点。 2.偶数分频器 偶数分频器比较简单,即利用计数器对需要分频的原始时钟信号进行计数翻转。例如:要进行M=2N(N为自然数)分频,当计数值为0~k-1时,输出高电平,当计数值为k-1~2N-1时输出低电平,同时计数值复位,如此循环可实现任意占空比的偶数分频,其中M和k为预置数,可根据分频倍数和占空比的要求进行置数。如图1所示,当k=N时,即可实现占空比为50%的偶数分频[1]。 图1 占空比为50%的4分频仿真结果 图2 占空比为50%的5分频仿真结果 3.奇数分频器 任意占空比的奇数分频器的实现,其原理与偶数分频器类似。但对于占空比为50%的任意奇数次分频却无法用上述相同的方法实现。下面介绍一种常用的实现方法[4]。 实现原理:采用两个不同的边沿触发器(一个在上升沿和一个在下降沿)来实现,其细节在于实现1/2个原始时钟周期的时间差。

数控分频器的VHDL设计

实验六数控分频器的VHDL设计 实验目的:学习数控分频器的设计、分析和测试方法。 实验项目分析设计: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。其原理是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。 实验内容1:用VHDL语言设计一个8位数控分频器。 要求:在QuartusⅡ上进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。引脚锁定以及硬件下载测试,选择目标器件EP1C3,建议选实验电路模式No.0。用键1、键2作为置数数据D的输入端,CLK接clock0,FOUT接至扬声器Speaker。(时序仿真时CLK周期设5ns~10ns,D分别设33H, FEH) 所编写的源程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT( CLK : IN STD_lOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC); END ENTITY DVF; ARCHITECTURE ONE OF DVF IS SIGNAL FULL: STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLE 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;

exp2数控分频器的设计

数控分频器的设计 XXX

1.实验目的 学习数控分频器的设计、分析和测试方法。 2.实验原理 数控分频器的功能就是当在输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细的设计程序如下: 3.分析 根据图中的波形提示,分析例中的各语句的功能设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图。 设计原理、系统结构 实验程序 library ieee;--数控分频器设计文档 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dvf is port ( clk : in std_logic; -- clk 时钟信号输入 D : in std_logic_vector(7 downto 0);-- D值用于设置不同的分频值 fout : out std_logic );-- 分频后输出的信号 end; architecture one of dvf is signal full : std_logic;-- 进位溢出标志,用于进程间信号传递 begin p_reg: process(clk) -- 八位加法计数器 variable cnt8 : std_logic_vector(7 downto 0); -- 定义内部变量cnt8,用于八进制计数begin if clk'event and clk='1' then if cnt8="11111111" then cnt8 := D; -- 当CNT8计数满时,输入数据D被同步预置给计数器CNT8 full <='1'; -- 同时使溢出标志信号FULL输出为高电平 else cnt8 :=cnt8+1; -- 否则继续作加1计数 full <= '0'; -- 且输出溢出标志信号FULL为低电平 end if; end if; end process p_reg; p_div: process(full) – D触发器(实现2分频)

相关主题
文本预览