资源描述
数控分频器的设计
摘要:此设计以quartusII为开发平台,用VHDL语言设计了数控分频器,并生成原理图,完成了分频的功能,并在quartusII上仿真,验证通过。
关键词:QuartusII VHDL语言 数控分频器 仿真
Design ication of the Numerical Control Frequency Division Machine
Abstract :
Key words : QuartusII VHDL language Numerical Control Frequency Division Machine Emulation
0 引言
随着EDA技术的高速发展, 以大规模和超大规模器件FPGA/CPLD为载体、以VHDL(硬件描述语言)为工具的电子系统设计越来越广泛。在数字逻辑电路设计中,分频器是一种基本电路。通常用来对某个给定频率进行分频,以得到所需的频率。数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比,使输出信号的频率为输入数据的函数。他可广泛应用于数字电子系统中。用传统的设计方法设计数控分频器时,采用具有预置数据输入端的通用计数器芯片,按设计要求完成设计,其设计过程和电路都比较复杂,尤其是当分频系数比较大时,需用多片集成计数器和设计更复杂的控制电路来实现,且设计成果的可修改性和可移植性都较差。基于VHDL 的数控分频器设计,采用用软件的方法设计硬件的EDA (电子设计自动化) 技术。作为EDA 技术重要组成部分的硬件描述语言,V HDL 是一种IEEE 工业标准的建模语言。由于VHDL 具有很强的电路行为描述、系统描述能力和层次化的程序结构,用他设计的数控分频器作为一个模块,可移植到很多数字电路系统中,且极易修改,只要修改程序中的某几条语句,就可使最大分频系数得到改变。整个设计过程简单、快捷。另外由于VHDL 具有与硬件和设计平台无关的特点,设计结果可通过众多EDA 平台下载到各种CPLD 或FPGA 可编程器件中,实现单片化的数字电路,使得工作稳定、可靠。
1 实验的方法步骤
1.1 设计原理
实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,其基本的框图如图1所示。
图1 分频器基本框图
1.2 设计流程
(1) 创建工程,并命名位fenpinqi。
(2) 打开QuartusII,建立VHDL文件,并输入设计程序。保存为DVF.
(3) 选择目标器件。Acex1k—EP1K100QC208-3。
(4) 启动编译。
(5) 建立仿真波形图。
(6) 仿真测试和波形分析。
(7) 引脚锁定编译。
(8) 编程下载。
(9) 硬件测试。
1.3 设计程序
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;
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 ;
END;
此程序有QuartusII进行仿真测试,仿真后用RTL Viewer观测其原理图如图2所示。
图2 Viewer 观测的原理框图
将上面的程序稍作修改,扩展成16位的分频器,其原理程序如下:
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(15 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF DVF IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT15 : STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF CNT15 = "1111111111111111" THEN
CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT15
FULL <= '1'; --同时使溢出标志信号FULL输出为高电平
ELSE CNT15 := CNT15 + 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 ;
END;
1.4 仿真结果和下载测试结果分析
其仿真结果是正确无误的,其仿真结果如图3所示。
图3 八位分频器仿真时序图
16位分频器的仿真结果如图4所示。
图4 十六位分频器仿真时序图
下载后,改变输入不同的输入数D的数值时,蜂鸣器发出不同频率的声音,例如输入11111011时,蜂鸣器发出声音的时间间隔非常短,当输入00010110时,蜂鸣器发出的声音的时间间隔就变长了。
图5 下载测试图
2 总结和心得体会
这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也遇到了一点困难。但是经过我的缜密的分析后,重新输入clock和D的值,最后成功了。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计的数控分频器还是比较成功的,在设计中遇到了很多问题,最后在同学的帮助下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认。
参考文献
【1】 电子技术应用 . 2009年11期
【2】 潘松,黄继业 . EDA技术实用教程(第三版). 科学出版社 . 2010-07
【3】 王金明,冷自强 . EDA技术与Verilog设计EDA Technology and Verilog Design . 科出版社.2008-08
展开阅读全文