数字电子钟的设计说明Word下载.docx
《数字电子钟的设计说明Word下载.docx》由会员分享,可在线阅读,更多相关《数字电子钟的设计说明Word下载.docx(21页珍藏版)》请在冰点文库上搜索。
![数字电子钟的设计说明Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/35996af3-f142-4528-814f-19fbd9e08c21/35996af3-f142-4528-814f-19fbd9e08c211.gif)
17
3.功能扩展·
五.结论·
参考文献·
18
数字电子钟的设计
摘要及关键字:
数字电子钟是生活中最常用的电子设备之一,其主要功能是能够显示时、分、秒实时信息,并能够方便地进行时、分、秒的初始值设置,以便时间校准。
实现数字电子钟有很多方法,本课程是采用VHDL硬件语言的强大描述能力和EDA工具的结合在电子设计领域来设计一个具有多功能的数字电子钟。
关键字:
数字电子钟VHDL硬件语言EDA工具
ABSTRACT:
Digitalelectricclockinlifearethemostcommonlyusedoneoftheelectronicequipment.Itsmainfunctionistodisplay,minutesandsecondsreal-timeinformationandcanbeeasilywhencarriedout,minutesandseconds,sothattheinitialvalueissettimecalibration.
Therearemanymethodsofdesigndigitalelectricclock.ThiscourseisapowerfulbyVHDLhardwarelanguagedescribeabilityandEDAtoolsinelectronicdesignfieldwithversatiletodesignadigitalelectricclock.
Keywork:
DigitalelectricclockVHDLhardwarelanguageEDAtools
一.设计要求:
1.设计一个电子钟能够显示时,分,秒;
24小时循环显示。
2.电子钟有校时,校分,清零,保持和整点报时的功能,具体如下:
(1)数字钟最大计时显示23:
59:
59。
(2)在数字钟正常工作时可以对数字钟进行快速校时、校分,即拨动开关K1可以对小时进行校正,拨动开关K2可以对分进行校正。
(3)在数字中正常工作情况下可以对其进行不断地复位,即拨动开关K3可以是时,分,秒显示回零。
(4)在数字钟正常工作时拨动开关K4可以使数字钟保持原有显示,停止计时。
(5)整点报时是要求数字钟在每小时整点到来前进行鸣叫,鸣叫频率是在59:
53,59:
55,59:
57为1kHz,59:
59为2kHz。
3.要求所有开关具有去抖动功能。
利用开发工具QuartusII7.0并结合硬件描述语言VHDL,采用层次化的方法进行设计,要求设计层次清晰,合理;
构成整个设计的功能可以采用原理图输入或文本输入法实现。
4.通过开发工具QuartusII7.0对设计电路进行功能仿真。
5.将仿真通过的逻辑电路下载到EDA试验系统,对其功能进行验证。
二.总体方案设计:
从设计要求可以对其进行层次化设计,将所要设计的多功能数字钟分层6个模块:
(1)计时模块:
包括两个模60的计数器(计秒与计分)和一个模24的计数器(计时)。
(2)清零,保持模块:
此模块功能是可以在计时模块直接嵌入即利用计数器的清零、保持功能就可以实现。
(3)校准模块:
其对时、分进行校正。
(4)显示模块:
将数字钟在数码管上显示。
(5)整点报时模块:
由两部分组成,一部分选择报时时间(59:
57,59:
59),一部分选择报时频率(1kHz,2kHz)。
(6)分频模块:
电子钟的激励源要求的是稳定1Hz,而试验台提供48MHz的时钟,所以要设计一个分频器将48MHz进行分频得到1Hz。
(7)防抖动模块:
因为设计中有使用到开关,而对机械开关而言出现抖动现象会导致系统误差甚至不能正常工作。
所以在设计中要求有去抖动电路。
将数字钟的各功能模块级联,生成顶层电路,实现总体设计要求,设计框图如下图所示:
三.各子模块设计原理:
1.计秒模块:
是一个模60的计数器,具有计时、保持、清零的功能。
采用VHDL硬件语言编写,程序代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYsecondIS
PORT(clk:
INSTD_LOGIC;
rst:
en:
qout1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
qout2:
co:
OUTSTD_LOGIC);
ENDsecond;
ARCHITECTUREbehavOFsecondIS
SIGNALtem1:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtem2:
BEGIN
PROCESS(clk,rst)
BEGIN
IF(en='
1'
)THEN
tem1<
=tem1;
tem2<
=tem2;
ELSIF(rst='
0'
="
0000"
;
ELSIF(clk'
eventANDclk='
IFtem1="
1001"
THEN
tem1<
IFtem2="
0101"
tem2<
co<
='
ELSE
=tem2+1;
co<
ENDIF;
ELSE
=tem1+1;
ENDIF;
ENDIF;
qout1<
qout2<
ENDPROCESS;
ENDbehav;
其仿真波形图如下:
封装图为:
2.计分模块:
本质上是跟计秒模块一样,也是模60的计数器,具有计数、保持、清零功能。
程序代码如下:
ENTITYminuteIS
ENDminute;
ARCHITECTUREbehavOFminuteIS
IF(en='
仿真波形图如下:
3.计时模块:
是一个模24的计数器,VHDL的程序代码如下:
ENTITYhourIS
ENDhour;
ARCHITECTUREbehavOFhourIS
IF(tem2="
0010"
ANDtem1="
0011"
)THEN
tem2<
IF(tem1="
)THEN
tem1<
4.校准模块:
在正常情况下,分的输入时钟clk信号是由秒的进位输出给的,而时的输入时钟clk信号由分进位输出信号给的。
当要进行校准时可以直接将2Hz的时钟信号(从分频器直接分出来)送到分或时的输入时钟clk端上,这样就可以快速的进行对电子钟的分或时校准。
因此采用VHDL语言实现,程序代码如下:
(1)校时:
ENTITYjiaoshiIS
clk_2H:
key:
OUTSTD_LOGIC;
OUTSTD_LOGIC
);
ENDjiaoshi;
ARCHITECTUREbehavOFjiaoshiIS
SIGNALtem:
STD_LOGIC;
SIGNALx:
PROCESS(key)
IF(key='
x<
tem<
=clk;
ELSE
=clk_2H;
co<
=tem;
en<
=x;
其封装图为:
(2)校分:
ENTITYjiaofenIS
ENDjiaofen;
ARCHITECTUREbehavOFjiaofenIS
5.显示模块:
采用动态显示方法,其动态扫描频率为1MHz。
显示模块包括一个6选1数据选择器(其从计数模块输出的6个输出选1个送出显示)和一个译码器(其对6选1数据选择器的输出信号进行译码送至数码管上显示)。
用VHDL硬件语言实现即程序代码如下:
(1)6选1数据选择器:
ENTITYselIS
qin1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
qin2:
qin3:
qin4:
qin5:
qin6:
qout:
sel:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
ENDsel;
ARCHITECTUREbehavOFselIS
BEGIN
PROCESS(clk,rst)
VARIABLEt:
INTEGERRANGE0TO5;
BEGIN
IF(rst='
)THEN
cnt:
=0;
sel<
00000000"
qout<
ELSIF(clk'
IF(cnt=5)THEN
cnt:
=cnt+1;
CASEtIS
WHEN0=>
qout<
=qin1;
sel<
11111110"
WHEN1=>
=qin2;
11111101"
WHEN2=>
=qin3;
11111011"
WHEN3=>
=qin4;
11110111"
WHEN4=>
=qin5;
11101111"
WHEN5=>
=qin6;
11011111"
WHENothers=>
11111111"
ENDCASE;
ENDPROCESS;
ENDbehav;
仿真波形:
例如显示23:
15:
39其从仿真波形结果可看知所设计的是正确的。
(2)4-7译码器:
ENTITYdecode47IS
PORT(qin:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDdecode47;
ARCHITECTUREbehavOFdecode47IS
WITHqinSELECT
qout<
00000011"
WHEN"
"
10011111"
0001"
00100101"
00001101"
10011001"
0100"
01001001"
01000001"
0110"
00011111"
0111"
00000001"
1000"
00011001"
WHENOTHERS;
6.报时模块:
由设计要求电子钟在每小时到来前进行报时:
53,55:
55,59:
57鸣叫频率为1kHz;
59鸣叫频率为2kHz,从而可以很容易采用VHDL语言编写程序实现,代码如下:
ENTITYbellIS
PORT(clk_1k:
clk_2k:
bel:
END