基于vhdl的万年历设计Word格式文档下载.docx
- 文档编号:4527665
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:27
- 大小:2.57MB
基于vhdl的万年历设计Word格式文档下载.docx
《基于vhdl的万年历设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于vhdl的万年历设计Word格式文档下载.docx(27页珍藏版)》请在冰点文库上搜索。
如图4、5所示,K1键是选择万年历工作的模式,K2键提供上升沿(时钟功能)来使各计数模块加一,从而实现校时的功能。
LED灯起指示作用。
模式0:
正常计时显示--K1不按,LED1到LED5都不亮
模式1:
调整分增加--K1按下一次,LED1亮其余四个不亮
模式2:
调整时增加--K1按下两次,LED2亮其余四个不亮
模式3:
调整日增加--K1按下三次,LED3亮其余四个不亮
模式4:
调整月增加--K1按下四次,LED4亮其余四个不亮
模式5:
调整年增加--K1按下五次,LED5亮其余四个不亮
CLK是外部1Hz输入时钟,作为秒的时钟输入,驱动整个万年历工作运行。
K3键是显示模式的选择,显示时分秒时,LEDSHUCHUMOSHI指示灯亮,显示年月日时,LEDSHUCHUMOSHI指示灯灭。
4.工作过程
当1Hz时钟信号从CLK输入端输入时,K1,K2,K3都没有按下时,系统从零(闰年)开始处于正常的计时模式,显示时分秒部分,LEDSHUCHUMOSHI指示灯亮。
低位计满归零并且向高位进1,如果月份是二月,则天计满29就向月进1。
如果按下按键3,LEDSHUCHUMOSHI指示灯不亮,显示年月日部分。
如果此时按一下按键1,那么万年历停止计时,工作于模式1,再通过按键2对分进行校时,通过同样的方法可以对时、日、月、年进行校时。
当校时完毕,需要万年历重新计时工作时,通过按下键1使LED1到LED5都不亮时,系统工作与正常计时模式。
五、实验结果
4.1VHDL程序与仿真
4.1.1秒与分模块
秒与分模块为六十进制的计数器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT60IS
PORT(CLK:
INSTD_LOGIC;
Q1,Q2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT60;
ARCHITECTUREONEOFCNT60IS
SIGNALQ11,Q22:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN
Q11<
=Q11+1;
IFQ11=9THENQ11<
=(OTHERS=>
'
0'
);
Q22<
=Q22+1;
ENDIF;
IFQ22=5ANDQ11=9THEN
="
0000"
;
Q11<
COUT<
='
ELSECOUT<
ENDPROCESS;
Q1<
=Q11;
Q2<
=Q22;
END;
仿真结果:
图660进制计数器仿真图
如上图所示当Q1、Q2计满60时,Q1、Q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。
4.1.2小时模块
时模块为24进制计数器。
ENTITYCNT24IS
Q1,Q2:
ENDCNT24;
ARCHITECTUREONEOFCNT24IS
IFQ22=2ANDQ11=3THEN
图724进制计数器仿真图
如上图所示当Q1、Q2计满24时,Q1、Q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。
4.1.3日(天)模块
日模块有四种情况,大月为31进制计数器,小月为30进制计数器,平年二月为28进制计数器,闰年二月为29进制计数器,需要有一个二位判断输入信号来进行进制数的选择。
ENTITYDAYIS
PORT(PANDUAN:
INSTD_LOGIC_VECTOR(1DOWNTO0);
--两位判断输入信号
CLK:
CQ1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CQ2:
COUT:
ARCHITECTUREONEOFDAYIS
SIGNALCQ3,CQ4:
SIGNALPAN:
STD_LOGIC_VECTOR(1DOWNTO0);
PROCESS(CLK,PANDUAN)
BEGIN
IFCLK'
THEN--上升沿
CQ3<
=CQ3+1;
IFCQ3=9THENCQ3<
CQ4<
=CQ4+1;
PAN<
=PANDUAN;
CASEPANIS
WHEN"
00"
=>
IFCQ3="
0001"
ANDCQ4="
0011"
--判断信号为00时为31进
THENCQ3<
CQ4<
--制计数器
ELSECOUT<
ENDIF;
01"
--判断信号为01时为30进
10"
1000"
0010"
--判断信号为10时为28进
11"
1001"
--判断信号为11时为29进
--制计数器
WHENOTHERS=>
NULL;
ENDCASE;
CQ1<
=CQ3;
CQ2<
=CQ4;
ENDPROCESS;
图8判断信号为00时天模块仿真图
图9判断信号为01时天模块仿真图
图10判断信号为10时天模块仿真图
图11判断信号为11时天模块仿真图
如图8、9、10、11所示,仿真结果与设计要求一致,日模块的设计正确
4.1.4月模块
月模块为12进制计数器,同时其需要为天提供判断信号输出,其与天的判断输入信号相一致。
由于二月的判断信号输出要受到平年和闰年的影响,平年时判断信号是10,闰年时判断信号为11,所以它要有接收来之年模块的判断平年闰年的输出信号(run=0时表平年,run=1时表闰年)。
ENTITYMONTHIS
port(clk:
run:
cout:
OUTSTD_LOGIC;
pan:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);
cq1,cq2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbehavOFMONTHIS
signalcq3,cq4:
STD_LOGIC_VECTOR(3DOWNTO0);
signalcq5:
STD_LOGIC_VECTOR(7DOWNTO0);
PROCESS(clk)
IFclk'
EVENTandclk='
THEN
cq3<
=cq3+1;
IFcq3=9THENcq4<
=cq4+1;
cq3<
ENDIF;
IFcq3=2andcq4=1THENcq3<
cq4<
cout<
ELSEcout<
--十二进制计数器
cq5<
=cq4&
cq3;
--逻辑位相连接
CASEcq5IS
"
pan<
--一月
ifrun='
thenpan<
elsepan<
endif;
--—二月
--三月
--四月
--五月
--六月
--七月
--八月
--十月
--十一月
--十二月
WHENothers=>
cq1<
=cq3;
cq2<
=cq4;
图12平年(run=0)时月模块仿真图
图13闰年(run=1)时月模块仿真图
如图12、13所示月模块为12进制计数器,并且1、3、5、7、8、10、12月(大月)判断信号为00,4、6、9平年(run=0)2月的判断输出信号为、11月(小月)判断信号为01,平年(run=0)2月的判断输出信号为10,闰年(run=1)2月的判断输出信号为11,与天模块的判断输入信号相一致,符合设计要求,模块的设计正确。
4.1.5年模块
年的高两位和低两位都为一百进制计数器,功能基本相同,不同的是低两位模块有闰年判断输出信号,要传送给月份模块,计满四次就产生一个闰年输出信号,因为闰年数值是4的整倍数。
ENTITYYEARIS
Y1,Y2:
RUN,COUT:
ENDYEAR;
ARCHITECTUREONEOFYEARIS
SIGNALQ1,Q2,Q3:
THENQ1<
=Q1+1;
IFQ1=9THENQ1<
Q2<
=Q2+1;
IFQ2=9ANDQ1=9THEN
Q1<
THENQ3<
=Q3+1;
IFQ3=3THENQ3<
RUN<
ELSERUN<
ENDIF;
Y1<
=Q1;
Y2<
=Q2;
图14低两位年模块仿真图
如图14所示,低两位年模块为100进制计数器当T2、T1表示的数为4的整数倍时,判断闰年输出信号就为高电平,与月模块的判断闰年输入信号相一致。
符合设计的要求,设计正确。
4.1.6校时模块
如原理图的说明部分所述,校时模块进行工作模式的选择,输入端设有控制按键K1,K2。
K1进行模式的选择,K2的功能如同手动时钟脉冲,进行调时设置。
ENTITYJIAODUIIS
PORT(K1,K2:
MI,FI,SI,TI,YI:
FO,SO,TL,YO,NO:
L1,L2,L3,L4,L5:
ARCHITECTUREBEHAVOFJIAODUIIS
SIGNALA:
PROCESS(K1,K2)
IFK1'
EVENTANDK1='
A<
=A+1;
IFA=5THEN
A<
CASEAIS
FO<
=MI;
SO<
=FI;
TL<
=SI;
YO<
=TI;
NO<
=YI;
--模式0正常及时
L1<
L2<
L3<
L4<
L5<
=K2;
--选通分模块,调分
--选通时模块,调时
--选通日模块,调日
0100"
--选通月模块,调月
0101"
--选通年模块,调年
图15校时模块仿真图
图16校时模块仿真图
如图15、16,按键K1,K2能够完成万年历工作模式的选择与调时校对的功能,满足系统的设计要求,设计正确。
4.1.7显示模式切换模块
显示模式切换模块完成显示年月日和显示时分秒的相互切换,设置一个按键K3对其进行控制,通过检测按键的上升沿,对显示模式进行轮流切换。
ENTITYCONTROLIS
PORT(SL,SH,FL,FH,HL,HH,DL,DH,ML,MH,YL,YH,Y1L,Y1H:
INSTD_LOGIC_VECTOR(3DOWNTO0);
K1:
led:
Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8:
ENDCONTROL;
ARCHITECTUREONEOFCONTROLIS
SIGNALW:
PROCESS(K1)
IFK1'
THENW<
=W+1;
IFW=2THENW<
--二进制计数控制信号
CASEWIS
WHEN"
Q8<
=Y1H;
Q7<
=Y1L;
Q6<
=YH;
Q5<
=YL;
Q4<
=MH;
Q3<
=ML;
=DH;
=DL;
led<
--00时显示年月日,指示灯不亮
=HH;
=HL;
=FH;
=FL;
=SH;
=SL;
--01时显示时分秒,指示灯亮
WHENOTHERS=>
ENDCASE;
如图16所示,当按键K1没有按下时Q1到Q6显示的是年月日部分,此时的指示灯LED为零(不亮),当按键K1按下一次,检测到一次上升沿,Q1到Q6显示的是时分秒部分,此时的指示灯LED为1(亮),当K1键再次按下时,上升沿一到,显示年月日,这样通过按键K1可以实现显示模式的切换。
设计符合系统的要求,设计正确。
图17显示模块仿真图
4.2顶层设计与仿真
顶层设计采样原理图输入方法,用以上的各模块的VHDL源程序分别生成元器件,在此基础上用“导线”对元器件进行连接,搭建原理图,完成系统的顶层设计,而不是利用元件例化程序去设计。
对于较为复杂的系统而言,采用原理图输入的设计方法思路更加清晰,设计更加直观。
顶层原理图的设计框架如图4所示,有年、月、日、时、分、秒计时模块,调时校对模块,显示模式切换模块,并且由以上讨论知万年历一共有六种工作模式。
如图18所示,此时万年历工作于模式0,属于正常的计时状态,当低位计满时向高位进1,通过键K3,可以对显示模式进行切换,从显示时分秒转换到显示年月日,正确的实现了系统的计时功能。
图18万年历仿真图
图19万年历仿真图
图20万年历仿真图
如图19、20所示,通过按键K1可以进行工作模式的选择,按键K2进行数值的校对设定,按键K3进行显示模式的切换,与设计的要求相符合。
综上所述,整个系统设计正确,万年历能够正确的实现功能。
六.端口设置、
七.验证、
当K1键没有按下时,万年历正常计时,计满向高位进位,可以通过K3键选择显示模式,显示时分秒时指示灯亮。
通过按下K1键的次数来选择校对那一部分,对应的指示灯亮,再通过按下K2键的次数来进行数值选择,进行校对时低位不会向高位进位。
当把年设置为闰年,月模块设置为2月,天模块设置为29,时模块设置为23,分模块设置为59,通过按键K1选择正常计时模式,计满60s时,不断往上进位,月份变为3月,证明此时二月为二十九进制计数器。
八.实验总结
通过这次万年历程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 vhdl 万年历 设计