数字闹钟的设计.docx
《数字闹钟的设计.docx》由会员分享,可在线阅读,更多相关《数字闹钟的设计.docx(36页珍藏版)》请在冰豆网上搜索。
数字闹钟的设计
基于VHDL的数字闹钟设计
摘要
随着EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
本设计介绍了基于VHDL硬件描述语言设计的多功能数字闹钟的思路和技巧,并在QuartusII开发环境中编译和仿真所设计的程序,并逐一调试验证程序的运行状况。
仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟功能具有一定的实际应用性。
关键词:
VHDL;FPGA;闹钟;QuartusII
DigitalalarmclockdesignbaseonVHDL
Abstract
TheEDA(ElectronicDesignAutomation)technologyisexperiencingahugedevelopmentanditwidelyspreadsinitsapplicationfield,thusemphasizesitsimportanceinelectronicmessage,communication,autocontrolandcomputerapplicationgradually.EDAtechnologyusecomputerastool,designerisenabledtodesignfilesontheEDAplatformwiththehelpofHDL(HardwareDescriptionLanguage).Thecomputerautomaticallyfinishestaskslikelogiccompiling,simplication,division,colligation,optimization,distribution,wiringandsimulationafterwards,andfinallymanagesthematch,compiling,mappinganddownloadtoatargetchip.ThisprojectbasesontheperspectiveandtechniqueofmultifunctionaldigitalalarmclockofVHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage).AndthencompilesandsimulatestheprogramitdesignedintheQuartusIIenvironment.Inaddition,itadjustsandteststheprogramcondition.Theresultsofsimulationandtestimplythepracticabilityofthisprojectandtheapplicabilityofthetimingfunctionofdigitalalarmclock.
Keywords:
VHDL,FPGA,Alarmclock,QuartusII
1绪论
1.1选题背景
2设计目的
3设计要求
4设计原理:
4.1功能描述
4.2基本原理
5设计内容:
5.1分频模块
5.2计数器模块
5.2.1秒计数器模块
5.2.2分计数器模块
5.2.3时计数器模块
5.3选择模块
5.4闹钟模块
5.5闹钟功能模块
5.6显示
6数字闹钟原理方框图
7调试步骤
8结论
参考文献
附录A
致谢
1绪论
1.1选题背景
21新世纪,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。
而数字闹钟能随时提醒这些容易忘记时间的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
随着EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
本文介绍了基于VHDL硬件描述语言设计的多功能数字闹钟的思路和技巧。
在QuartusII开发环境中编译和仿真了所设计的程序,并逐一调试验证程序的运行状况。
仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟功能具有一定的实际应用性。
2设计目的
1.熟练利用VHDL硬件描述语言进行数字系统设计;
2.掌握数字系统的设计方法——自顶向下的设计思想;
3.掌握QuartusII开发软件的使用方法;
4.掌握FPGA/CPLD芯片的工作原理;
5.根据数字闹钟的功能要求设计一个数字闹钟;
6.掌握闹钟系统的原理。
3设计要求
设计一个简单的数字闹钟,它的具体功能为:
(1)计时功能:
这是本计时器设计的基本功能,可进行时、分、秒计时,并显示。
(2)清零功能:
按下此键后计数器清零,数码管显示“0”;松开此键数码管开始显“00
-00-00”,并且以此开始重新计时;
(3)调时调分功能:
当需要校时,可通过实验箱上的按键控制;
(4)闹钟开/关功能:
为避免闹钟天天响,设计了闹钟开启/关闭功能;
(5)闹钟功能:
开启闹钟功能后,通过闹钟键设置好铃响时间,时间到铃声响起,如果此时按下停止键,闹钟马上停止;如果按下忽略键,闹钟停止,并会在3分钟后重新响起,循环5次;什么都不按,闹钟响一分钟后停止,隔天再响,直到按下开启键关闭闹钟。
4设计原理
4.1功能描述
数字钟是一计时的工具,有着广泛的用途。
本实验的数字钟要求有三个功能按钮:
一个是清零按钮reset,当按下此按钮时,数字钟显示有位都清零.二是调分钟的按钮setmin,当按下此按钮时分钟会以1HZ的频率速度进行调时,而且在调分钟时秒钟会暂停不动;三是调小时的按钮sethour,当按下此按钮时时钟会以1HZ的频率速度进行调时,在调小时时分钟会暂停不动,但秒钟是正常记时的。
另外还有一个闹钟模块,在闹钟模块中,先按下闹钟开启键,按下调时或调分键时,数码显示管显示所调闹钟的时间,并进行调时或调分。
当两个键都未按下时,数码管显示数字钟的时间。
当设定的闹钟时间和数字钟的时间一致时,铃声响起。
在铃声响起时,按下PASS键,铃声停止响起,三分钟后闹钟再次响起,如此循环5次;按下STOP键时,铃声停止工作;什么都不按,铃声响起一分钟后停止,隔天再响,直到按下闹钟开/关键。
其余时间喇叭不叫。
4.2基本原理
在本实验中用到的主要元件有计数器,分频器,报时器,选择器和译码器等。
控制逻辑主要是用来实现计数和清零。
基本方框图如图4.1:
选择输出模块
clk
Sec[6..0]
Min[6..0]
Hour[5..0]
分频模块
Secon模块
reset
Minute模块
reset
Hour模块
reset
闹钟模块
sp2
clk
译码输出模块
闹钟功能模块sp2
图4.1数字闹钟原理框图
数字闹钟外观草图如图4.2所示:
闹钟按键
数字钟按键
清零
调时
时
分
秒
ec
d
a
fb
g
ec
d
afb
g
ec
d
a
fb
g
ec
d
a
fb
g
ec
d
a
fb
g
ec
d
调分
停止
忽略
调时
调分
开启
图4.2数字闹钟外观草图
5设计内容
5.1分频模块
此模块定义一个全局时钟,用频率为6MHz的信号源经分频从clk进入模块,经分频后由clk6输出,得到一个1Hz的时钟脉冲,用于驱动数字钟工作。
分频模块和波形仿真如下图5.1(a)和5.1(b)所示:
图5.1(a)分频模块
图5.1(b)分频模块波形仿真图
分频模块在计数器计数到2999999的时候再来一个高电平,计数器加1,输出口clk6翻转,由低电平翻转成高电平,但仿真只能看到1us的情况,所以仿真未能看到其翻转,但是由图5.1(b)可知,在500ms前为低电平,在500ms时翻转为高电平,可判定该模块可行。
5.2计数器模块
此模块包括秒计数器、分计数器、时计数器以及功能按键的设计。
程序说明:
1.由分频模块产生1Hz的时钟信号,输入计数60的秒计数器模块电路,等计数至60的瞬间,进位至计数60的分计数器模块电路加1,同时秒计数器模块电路也清除为0再重新计秒。
2.分计数器模块电路和时计数器模块电路功能基本相似。
时计数器模块电路计数为24,在计数至23的时,再来一个高电平,计数器模块全部清0,再重新计数。
3.三组计数电路中的计分和计时数据传给闹钟模块,通过闹钟模块再和计秒数据一起传给位选模块,位选模块产生一组输出信号,而控制这个输出的信号为SEL[2..0]。
4.由于取得的信号不论是时、分、秒,都将以十进制表示,所以先将这个十进制表示的时、分、秒转换成两个数位的BCD码。
5.2.1秒计数器模块
秒计数模块和秒计数模块的波形仿真如下图5.2.1(a)和5.2.1(b)所示:
图5.2.1(a)秒计数模块
图5.2.1(b)秒计数模块波形仿真图
模块功能介绍:
clk是时钟型号输入端;reset是清零键,低电平有效;setmin是分钟调时按键,高电平有效;enmin是进位输出端;daout[6..0]是显示输出端,连接位选模块,再经显示模块译码后输出显示在七段码上。
从图5.2.1(b)可以看出,当按下reset键时,计数器清零,重新计数;按下setmin键时,daout[6..0]是显示输出端输出的信号不变,同时enmin进位输出端输出与时钟信号周期相同的脉冲信号,进入分钟计数模块,驱动分钟模块工作;当计数器计数到59时,再来一个脉冲模块清零,并且重新计数。
由此可以判定,该模块能实现全部预想功能,程序编写正确。
5.2.2分计数器模块
分计数模块和分计数模块的波形仿真如下图5.2.2(a)和5.2.2(b)所示:
图5.2.2(a)分计数模块
图5.2.2(b)分计数模块波形仿真图
模块功能介绍:
clk是时钟信号输入端;clk1是秒进位信号输入端,秒钟算到60时发出一个进位脉冲,驱动分钟计数模块加1;reset是清零键,与秒钟计数模块的清零键是同一个键。
sethour是时钟调时按键,高电平有效;enhour是进位输出端,功能与秒钟计数模块的相同;daout[6..0]是显示输出端,连接闹钟模块,再连接位选模块,经显示模块译码后输出显示在七段码上。
从图5.2.2(b)可以看出,clk1输入秒钟模块的进位信号,daout[6..0]输出端输出分钟计数信号。
当按下reset时daout[6..0]输出端清零,再次重新计数。
按下sethour时,enhour输出频率与时钟信号相同的脉冲,用于使时计数模块计数增加,达到调时的目的。
当分计数器计到60时,enhour输出一个高电平,分计数器重新计时,同时时计数器加1。
由此可以判定,该模块能实现全部预想功能,程序编写正确。
5.2.3时计数器
时计数模块和时计数模块的波形仿真如下图5.2.3(a)和5.2.3(b)所示:
图5.2.3(a)时计数模块
图5.2.3(b)时计数模块波形仿真图
模块功能介绍:
clk是进位信号,有分钟模块输出;resets是清零键;daout[5..0]是显示输出端,连接闹钟模块,再连接位选模块,经显示模块译码后输出显示在七段码上。
由图5.2.3(b)时计数模块波形仿真图可以看出,当按下resets清零键时,daout[5..0]是显示输出端清零并且重新计数。
此可以判定,该模块能实现全部预想功能,程序编写正确。
5.3选择器模块
选择器模块和选择器模块的波形仿真如下图5.3(a)和5.3(b)所示:
图5.3(a)选择器模块
图5.3(b)选择器模块波形仿真图
模块功能介绍:
clk电源信号输入端,输入的是分频前得频率为6MHz的信号,选择模块工作频率为6MHz;reset是清零键;低电平有效;sec[6..0]、min[6..0]、hour[5..0]是分别从秒钟计数模块、分钟计数模块、时钟计数模块引入的待显示的信号:
SEL[5..0]=011111时输出sec[3..0];
SEL[5..0]101111时输出0和sec[6..4];
SEL[5..0]=110111时输出min[3..0];
SEL[5..0]=111011时输出0和min[6..4];
SEL[5..0]=111101时输出hour[3..0];
SEL[5..0]=111110时输出00和hour[5..4];
SEL[5..0]为其他数字,则显示符号“-”。
从图5.3(b)可以看出,当SEL[5..0]=011111时,daout[3..0]输出为0011,与sec[3..0]输出的相同。
此可以判定,该模块能实现全部预想功能,程序编写正确。
5.4闹钟模块
闹钟模块和闹钟模块的波形仿真如下图5.4(a)和5.4(b)所示:
图5.4(a)闹钟模块
5.4(b)闹钟模块的波形仿真图
模块功能介绍:
clk输入1Hz的时钟信号,setmin1和sethour1是调分和调时键,低电平有效;dain和dainl是分钟信号和时钟信号输入;sp2是闹钟信号输出;doaut和doautl是分钟信号和时钟信号输出。
从仿真波形图可以看出,按下setmin1和sethour1设置好闹铃时间后,到特定时间,sp2输出高电平。
此可以判定,该模块能实现全部预想功能,程序编写正确。
5.5闹钟功能模块
闹钟功能模块和闹钟功能模块的波形仿真如下图5.5(a)和5.5(b)、5.5(c)所示:
图5.5(a)闹钟功能模块
图5.5(b)闹钟功能模块的波形仿真图(按下pass)
图5.5(c)闹钟功能模块的波形仿真图(按下stop)
模块功能介绍:
clk是时钟信号,工作频率6MHz;sp2是从闹钟模块输出的用于驱动闹钟功能模块的信号。
开启闹钟(enable=1),当sp2输入为高电平,sp输出也为高电平。
当按下stop时,铃响停止;当按下pass时,铃响停止,并且再3分钟后会再次响起,如此循环5次后铃声不会再响起。
如果什么都不按,闹钟响一分钟后停止,隔天再响,直到按下enable。
从仿真波形图看出,按下stop或pass后,sp由高电平变为低电平。
此可以判定,该模块能实现全部预想功能,程序编写正确。
5.6显示模块
显示模块和显示模块的波形仿真如下图5.6(a)和5.6(b)所示:
图5.6(a)显示模块
图5.6(b)显示模块的波形仿真图
模块功能介绍:
从选择模块出来的信号num[3..0]经显示模块翻译成BCD码后才能显示在七段码上。
从仿真波形图看以看到,当num[3..0]=0111时,led[6..0]=0000111,七段码显示数字7。
此可以判定,该模块能实现全部预想功能,程序编写正确。
6数字闹钟原理方框图
数字闹钟的原理框图和闹钟调时程序流程图如图6.1、6.2所示:
图6.1数字闹钟原理图
进程2
clk’event
clk=’1’
daout<=dain
进程1
setmin=’0’
count=”1011001”
输出个位为9
个位数+1
十位数+1
daout<=count
结束
count<=”000000”
脉冲
Sethour=’0’
daoutl=dainl
输出23
输出为0
输出个位9
个位数+1
十位数+1
daoutl<=countl
结束
图6.2闹钟调时程序流程图
本设计是以setmin、sethour为控制整个数字钟的校分、校时,以enable控制闹钟开关,以setmin1、sethour1控制闹钟设置分、时。
则当sethour=1时是对时钟进行校时,时个位和时十位会以二十四进制循环自动增加;
当setmin=1时是对时钟进行校分,分个位和分十位会以六十进制循环增加,并且不对时进位;
当sethour1=1时是对闹钟进行校时,闹钟时个位和时十位会以二十四进制循环自动增加;
当setmin1=1时是对闹钟进行校分,闹钟分个位和分十位会以六十进制循环增加,并且不对时进位;
而当sethour=0和setmin=0是正常的计时时间,秒从零开始计时,每秒加一,当到达五十九在来一个脉冲后,秒十位和秒个位清零,从零开始直到六十一直循环,并且向分个位清零;分位的原理同秒的一样,计数到五十九后自动清零向时进位,而时与秒,分的不同之处是,当时计数到二十四时清零并且不向任何位进位。
另外当计数的时,分和闹钟所事先设置时,分相等,并且enable=1时,蜂鸣器会响起。
此时,如果按下stop蜂鸣器会立即停止蜂鸣。
如果按下pass蜂鸣器也会立即停止,但在三分钟后会再响,循环5次。
如果两个键都不按蜂鸣器会维持蜂鸣一分钟,一分钟后蜂鸣自动停止。
7调试步骤
1.打开QuartusII新建一个工程,工程名用英文字母写,单独存放在一个文件夹,选择好芯片后新建一个vhd文件并保存,保存后开始用VHDL语言编写程序。
每编写一个程序前要新建一个工程。
2.编写完成后进行编译,在编译无误后进行元件例化。
3.对每一个模块进行时序仿真,确认每一个模块功能是否符合要求。
4.在时序仿真完成后新建一个bdf文件并置顶,保存后左键双击工作区间,在对话框中选中已例化的模块,按确定后置于工作区间。
5.连接好线后对bdf文件进行编译,编译通过后,进行管脚分配,然后开始连线,将程序下载到实验箱中。
6.刚开始,数字种会先报时一分钟,并从00—00—00开始计数,按下reset键,全部清零,并从头开始计数。
按下调分键,秒不动,小时不动,分开始加一加一的计数,按下调时键,分不动,秒动,小时开始加一加一的计数。
7.根据程序设计,开始的初始状态为:
clk接一个脉冲信号。
sethour,setmin,sethour1,setmin1,stop,pass键置0,reset键置0。
8结论
通过本次制作,系统的复习整个EDA的知识,并且了解了FPGA/CPLD可编程芯片的结构和引脚,能够熟练的运用quartusII这个软件,尤其可贵的是,学会了使用这个软件来给程序配置引脚,并且实际的通过实验箱的几个按键就可以控制整个操作的过程,终于感到自己所学到的知识可以付诸到实践了。
在本文中采用VHDL硬件描述语言设计多功能数字闹钟,借助其功能强大的语言结构,简明的代码描述复杂控制逻辑设计,与工艺无关特性,在提高工作效率的同时达到求解目的,并可以通过VHDL语言的综合工具进行相应硬件电路的生成,具有传统逻辑设计方法所无法比拟的优越性。
设计的电子闹钟基本上实现了所有的功能,但在有些功能的实现中,还有待提高。
比如说对于调时功能,只能等待调时,这样对于调时的机动性不好,如果控制不好,过了应调时间的话,就必须在等一次循环后才能调时,有点浪费时间。
参考文献
[1]文畅.基于FPGA/CPLD和VHDL语言的交通灯控制系统设计[J].电脑知识与技术(学术交流),2007,(06)
[2]韩克,柳秀山.电子技能与EDA技术[M].暨南大学出版社.2004.
[3]刘昌华编著.数字逻辑EDA设计与实践[M].国防工业出版社,2006.
[4]杨晖.可编程逻辑器件与数字系统设计[M].北京航天航空大学出版社,1999.
[5]刘真,毕才术.数字逻辑与计算机设计[M]北京:
高等教育出版社,2002.
[6]HydeDC.BucknellHandbookonVerilogHDL.ComputerScienceDepartment,BucknellUniversityLewisburg,1995.
[7]王小军.VHDL简明教程[M].北京:
清华大学出版社,1997.
[8]黄晓明,黄璜.基于Max+PlusⅡ平台对VHDL硬件描述语言综合的探讨[J].湖北第二师范学院学报,2008,(02)
[9]邱磊,肖兵.基于VHDL语言的交通灯控制器设计[J].福建电脑报,2004.
[10]陈宗梅.交通灯控制系统电路设计[J].重庆职业技术学院学报,2005,(02)
[11]刘明丹.基于数字电路对交通灯控制的研究与设计[D].四川.四川技术学院,2005.
[12]孙芹芝,张瑾,苏晓鹭.基于EDA的交通灯控制系统[J].电子学报,2007.
[13]何峰.基于VerilogHDL设计的交通灯控制系统[J].现代电子技术,2005,(08)
[14]张淑骅.基于FPGA的交通灯的VHDL设计[J].科技信息,2007.
[15]黄任编著.VHDL入门•解惑•经典实例[M].北京航空大学出版社.2005
[16]罗海涛.基于VHDL的交通信号灯设计与实现[J].电脑知识与技术,2008,(15)
[17]韩超.基于VHDL设计的交通灯系统[J].电子与电脑,2008,(01)
[18]杨捷,蒋炜华,马临超.基于VHDL语言的交通灯控制器设计[J].河南机电高等专科学校学报,2008,(03)
[19]曾珍虎.基于VHDL带音响的交通灯控制系统[J].黑龙江科技信息,2007,(22)
[20]李国栋,任志平.基于FPGA技术的交通灯控制系统设计[J].现代电子技术,2008,(17)
附录A
分频模块具体程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpis
port(clk:
instd_logic;
clk6:
outstd_logic);
endfenp;
architectureoneoffenpis
s