数字时钟文档格式.docx
《数字时钟文档格式.docx》由会员分享,可在线阅读,更多相关《数字时钟文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
Abstract
Thedesignconsistsoffourmodules:
frequencymodule,countingmodule,clockmodule,anddigitaldisplaymodule.Thefrequencyoftheinputfrequencyof4000000040MHz,providesastandardsecondpulseforthesystem;
thecountingmoduleconsistsofthreecounterswhichareconnectedinseries,thecountwhobuilt;
digitaltubescanningmoduletothetimeshownaboveinthedigitalpipe;
thecontrolmoduleofthepredeterminedperiodoftimetoachievecontrolbuzzeralarmfunction.
Keywords:
frequency,counting,clockcontrol,digitaldisplay,buzzer.
一引言
现在生活节奏越来越快,在学习工作中最重要的是效率,因此合理的掌握时间意义重大。
在生活中数字闹钟处处可见,作为重要的计时工具,人们的工作和学习都离不开它,设计一个具有时分秒显示、整点报时功能的数字闹钟将更加方便人们的生活。
二设计要求
1精度为1秒,显示时间范围在00时00分00秒到23时59分59秒;
2具有开始、暂停、校时、校分的功能;
3具有整点报时的功能,在59分50秒开始,到00分00秒结束;
扩展要求:
4具备闹钟功能。
三方案论证
时分秒
1Hz
分析设计课题得出设计原理框图如下:
40MHz时钟
分品模块
分秒
控制蜂鸣器
1分频模块:
分频模块采用一个分频器对开发板的40MHz系统时钟进行40000000分频从而得到一个性能稳定的1Hz脉冲信号供计数模块
计数,分频模块的性能决定了稳定度及准确度。
2计数模块:
采用三个计数器串联构成,60进制秒计数模块,具有进位输出;
60进制分计数模块和24进制是技术模块都具有装载功能以对时钟进行校时校分,三个技术器都具有时能功能,以控制适中的启动与暂停。
3时钟控制模块:
将计数器输出的分秒引脚作为输入,当时钟达到59分50秒时开始输出一个高电平一直到0点0分0秒结束,在此时段内蜂鸣器处于名叫状态,相当于整点报时。
4数码管显示:
将计数模块送入的信号进行扫描译码,译码成数码管能够使别的锻选与位选信号,最终将时间在六位数码管上动态显示出来。
四设计原理
1分频器设计:
VHDL:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYdid_40mIS
GENERIC(N:
INTEGER:
=4);
--rate=N,N是偶数,类数参数
PORT(
CLK:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC
);
ENDdid_40m;
ARCHITECTUREoneOFdid_40mIS
SIGNALQ:
INTEGERRANGE0TON-1;
BEGIN
PROCESS(CLK)--计数
BEGIN
IF(CLK'
EVENTANDCLK='
1'
)THEN
IF(Q<
N-1)THEN
Q<
=Q+1;
ELSE
=0;
ENDIF;
ENDPROCESS;
PROCESS(Q)--根据计数值,控制输出时钟脉冲的高、低电平
BEGIN前半周期输出高电平后半周期输出低电平
N/2)THEN
DOUT<
='
0'
;
ENDone;
仿真波形图:
从波形图可以看出分频后脉冲周期为待分频周期6倍,也即6分频,从原理图中改变类数参数即可完成对40MHz的40000000分频。
元件封装:
2计数模块:
(1)60秒计数:
VHDL:
ENTITYSIS
PORT(CLK,EN:
INSTD_LOGIC;
COUT:
OUTSTD_LOGIC;
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDS;
ARCHITECTUREbehavOFSIS
SIGNALQ:
STD_LOGIC_VECTOR(7DOWNTO0);
PROCESS(CLK)
IFEN='
THEN
IFCLK'
THEN
IFQ(3DOWNTO0)=9THEN个位满9置0
Q(3DOWNTO0)<
="
0000"
IFQ(7DOWNTO4)=5THEN十位满5置0
Q(7DOWNTO4)<
=Q(7DOWNTO4)+1;
不满足个位满9
则加一计数
=Q(3DOWNTO0)+1;
不满足十位满5
ENDIF;
IFQ=X"
59"
COUT<
='
ELSE
ENDPROCESS;
DOUT<
=Q;
ENDbehav;
从图中可以看出完成60进制计数,且逢59cout进1.
由于不许对秒进行校准故其封装舍去了装载功能,封装如下:
(2)60分计数:
VHDL:
ENTITYMIS
PORT(CLK,EN,LOAD:
DATA:
INSTD_LOGIC_VECTOR(7DOWNTO0);
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
ENDM;
ARCHITECTUREbehavOFMIS
IF(LOAD='
)THENQ<
=DATA;
具有装载数据功能
ELSIFEN='
IFQ(3DOWNTO0)=9THEN
IFQ(7DOWNTO4)=5THEN
THEN逢59进一作为下一级的脉冲输入
封装如下:
(3)24进制时计数:
ENTITYHIS
PORT(CLK,LOAD,EN:
INSTD_LOGIC;
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDH;
ARCHITECTUREbehavofHIS
SIGNALL:
STD_LOGIC_VECTOR(3DOWNTO0):
SIGNALH:
SIGNALCLR:
STD_LOGIC:
--个位计数
PROCESS(CLK,EN,CLR)
IFLOAD='
THENL<
=DATA(3DOWNTO0);
IFEN='
IFL="
1001"
ORCLR='
THEN--23:
59进位
L<
="
ELSEL<
=L+'
DOUT(3DOWNTO0)<
=L;
--十位计数
THENH<
=DATA(7DOWNTO4);
IFCLR='
H<
ELSIFL="
=H+'
DOUT(7DOWNTO4)<
=H;
CLR<
WHENL="
0011"
ANDH="
0010"
ELSE'
--23点以后进位
仿真波形:
从图中可以看出“00100011”自动置为下一刻的“00000000”即24小时计时。
元件封装如下:
(4)对计数模块三个计数器进行VHDL的设计例化
原理图连接:
ENTITYCOUNTERIS
PORT(CLK,EN,M_LOAD,H_LOAD:
M_DATA,H_DATA:
D:
OUTSTD_LOGIC_VECTOR(23DOWNTO0));
ENDCOUNTER;
ARCHITECTUREbehavOFCOUNTERIS
COMPONENTH
ENDCOMPONENT;
COMPONENTM对三个计数器进行调用
COMPONENTS
SIGNALa,b:
STD_LOGIC;
BEGIN端口映射
U1:
SPORTMAP(CLK=>
CLK,EN=>
EN,COUT=>
a,DOUT=>
D(7DOWNTO0));
U2:
MPORTMAP(CLK=>
a,EN=>
EN,LOAD=>
M_LOAD,DATA=>
M_DATA,COUT=>
b,DOUT=>
D(15DOWNTO8));
U3:
HPORTMAP(CLK=>
b,EN=>
H_LOAD,DATA=>
H_DATA,DOUT=>
D(23DOWNTO16));
ENDbehav;
波形仿真,只截取关键部分:
可以看出s从01011001=59到00000000=0完成进位,同时分从00100010=22进位到00100011=23,小时未变为0001=1,因为未达到59:
59,因此现在时间是01:
22:
59~01:
23:
00
3时钟控制
ENTITYCONTIS
PORT(DM,DS:
CB:
OUTSTD_LOGIC);
ENDCONT;
ARCHITECTUREbehavOFCONTIS
PROCESS(DM,DS)
IFDM="
01011001"
IF(DS>
"
01001001"
ANDDS<
01100000"
)
THENCB<
ELSECB<
波形仿真:
通过上面两个图比较可知,在59:
50~00:
00时间段蜂鸣器处于工作状态,也即数字闹钟处于闹铃状态,持续时间10s,符合设计要求。
4顶层原理图设计:
四硬件调试
五设计心得
六参考资料