万年历实训报告Word文档下载推荐.docx
《万年历实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《万年历实训报告Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
![万年历实训报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/1/b2d8e5c3-8ab4-4ea1-8932-63a15f317fb2/b2d8e5c3-8ab4-4ea1-8932-63a15f317fb21.gif)
万年历
实验的目的及意义:
(1)掌握EDA技术及FPGA技术的开发流程。
(2)掌握系统设计的方法和层次化设计的方法。
(3)掌握QuartusII软件的使用方法。
(4)掌握VHDL语言的程序设计、编写、编译和错误修改。
(5)掌握熟悉EDA实验箱的各个模块
(6)掌握EDA试验箱与pc机的连接、下载和引脚绑定的全过程和方法,实现功能仿真。
实验的内容及要求:
(1)实现年、月、日、时、分、秒的显示并具有闰年判断计数的功能
(2)在试验箱上通过按键实现年月日和时分秒的显示切换。
(3)利用试验箱和pc机进行功能测试并实现万年历的显示功能。
实验的地点:
xxx学院EDA实验室
实验的器材:
硬件:
计算机、EDA试验箱软件:
QuartusII软件
实验设计思想:
将万年历分为各个模块分项处理,每个小模块实现一个小的功能,最后在万年历的顶层文件中将各个模块整好在一起,实现万年历的整体功能。
这是万年历实验设计的整体思想。
其中组成模块有:
秒计时模块cnt60、分计时模块cnt60、时计时模块cnt24、日计时模块tian、月计时模块yue、年计时模块nian、调整模块tz、控制模块mux21,然后在顶层文件中连接个各个模块组成万年历的完整连接图,之后再pc机上进行编译,完成引脚绑定再下载到实验箱上,根据程序内容及引脚绑定通过按键控制和led灯的显示最终完成测试。
各模块设计:
1、秒分时、年月日、调整控制模块设计程序
(1)秒计时模块cnt60(六十进制计数器)程序:
libraryieee;
useCNT60is
port(clk:
instd_logic;
CQ1,CQ2:
outstd_logic_vector(3downto0);
COUT:
OUTstd_logic);
endentityCNT60;
architectureartofCNT60is
signals1,s2:
std_logic_vector(3downto0);
begin
process(clk)
IFclk'
eventANDclk='
1'
thenS1<
=S1+1;
IFS1=9THENS1<
="
0000"
;
S2<
=S2+1;
ENDIF;
IFs2=5ANDS1=9thens1<
s2<
COUT<
='
elseCOUT<
0'
endif;
CQ1<
=S1;
CQ2<
=S2;
endprocess;
ENDart;
将程序用QuartusII软件编译之后生成的cnt60模块元件如下图所示:
(此模块实现六十进制计数,用它实现分和秒功能)
(2)分计时模块cnt60:
(六十进制计数器)
分计时模块和秒计时秒快一样,同样是用六十进制计数器cnt60,程序和生成元件同上所述。
(3)时计时模块cnt24(二十四进制计数器)程序:
useCNT24is
port(clk:
endentityCNT24;
architectureartofCNT24is
IFS1=9THENS1<
S2<
ifs2=2ANDS1=3thens1<
COUT<
elseCOUT<
将程序用QuartusII软件编译之后生成的cnt24模块元件如下图所示:
(此模块实现二十四进制计数,用它实现小时功能)
(4)天计时模块tian程序:
usetianis
ab:
instd_logic_vector(1downto0);
CQ1,CQ2:
COUT:
endentitytian;
architectureartoftianis
signals1,s2:
begin
IFclk'
Endif;
CASEABIS
when"
00"
=>
IFS2=2ANDS1=8THEN
S1<
ELSECOUT<
ENDIF;
when"
01"
IFS2=2ANDS1=9THEN
ELSECOUT<
10"
IFS2=3ANDS1=0THEN
11"
IFS2=3ANDS1=1THEN
WHENOTHERS=>
NULL;
ENDCASE;
将程序用QuartusII软件编译之后生成的tian模块元件如下图所示:
(此模块实现的是天的计数功能,其中ab用来控制计数的进制,分为四种情况:
28天、29天、30天和31天,其具体信号由月模块判断输出)
(5)月计时模块yue程序:
useyueis
outstd_logic_vector(1downto0);
r:
instd_logic;
endentityYUE;
architectureartofyueis
IFs2=1ands1=2thens1<
0001"
CASEs2&
s1is
00000001"
ab<
00000010"
ifr='
then
elseab<
00000011"
00000100"
00000101"
00000110"
00000111"
00001000"
00001001"
00010000"
00010001"
00010010"
ENDCASE;
将程序用QuartusII软件编译之后生成的yue模块元件如下图所示:
(此模块实现的是月的计数功能,在其输入信号中,r用来判断是否为闰年,且在该模块中判断月份,为:
一、三、五、七、八、十、十二月份时,ab<
,每月为31天;
为:
四、六、九、十一月份时,ab<
,每月为30天;
二月份单独判断,当为闰年时,ab<
,二月为28天,当为非闰年时,ab<
,二月为29天。
)
(6)年计时模块nian程序:
usenianis
bufferstd_logic);
endentitynian;
architectureartofnianis
signals1,s2,a:
process(clk)
a<
=a+1;
IFs2=9ands1=9thens1<
IFa=3thenr<
elser<
将程序用QuartusII软件编译之后生成的nian模块元件如下图所示:
(此模块实现的是年的计数功能,并判断是否为闰年)
(7)调整模块tz程序:
LIBRARYIEEE;
USEtzIS
PORT(fi,si,ti,yi,ni,l2,l3,l4,l5,l6:
outSTD_LOGIC;
k2,k3:
inSTD_LOGIC;
yo,too,soo,fo,mo:
inSTD_LOGIC);
ENDtz;
architectureoneoftzis
signala:
begin
process(k3,k2)
ifk2'
eventandk2='
thena<
ifa=5thena<
endif;
caseais
fi<
=mo;
si<
=fo;
ti<
=soo;
yi<
=too;
ni<
=yo;
l2<
l3<
l4<
l5<
l6<
when"
=k3;
l2<
0010"
0011"
0100"
0101"
whenothers=>
null;
endcase;
end;
将程序用QuartusII软件编译之后生成的tz模块元件如下图所示:
(此模块实现调整各模块(不包括秒)的调数,通过按键k2、k3调整年月日时分秒的切换,从而控制实验箱上年月日时分秒相对应的led灯的亮灭,l2、l3、l4、l5、l6用来指示是否处于调数状态)
(8)控制模块mux21:
(用来控制年月日和时分秒的切换)程序:
USEmux21IS
PORT(m1,m2,f1,f2,s1,s2:
inSTD_LOGIC_vector(3downto0);
t1,t2,n1,n2,y1,y2:
inSTD_LOGIC_vector(3downto0);
k1:
l1:
outstd_logic;
a1,a2,b1,b2,c1,c2:
outSTD_LOGIC_vector(3downto0));
ENDmux21;
architectureoneofmux21is
process(k1)
ifk1='
thena1<
=m1;
a2<
=m2;
b1<
=f1;
b2<
=f2;
c1<
=s1;
c2<
=s2;
l1<
elsea1<
=t1;
=t2;
=y1;
=y2;
=n1;
=n2;
endone;
将程序用QuartusII软件编译之后生成的mux21模块元件如下图所示:
(此模块用来显示年月日和时分秒之间内容的切换)
2、万年历的顶层文件原理图:
(将以上各个模块在顶层文件中用线连接起来构成万年历的原理图,从而使它万年历的功能)
3、引脚绑定和下载:
编译通过之后,在pc机上完成各个引脚的绑定工作,绑定好之后再用数据线将pc机和实验箱上的USB接口连接起来,然后完成下载工作,即将程序下载到实验箱上,在实验箱上完成万年历功能的显示和实现。
4、调试
通过对应的按键和切换将数码管上的时间时分秒和日期年月日调整到当前时刻即可。
直到万年历功能在实验箱上正确显示和实现。
实验感想
通过这次试验………………..