完整word版EDA日历设计.docx
《完整word版EDA日历设计.docx》由会员分享,可在线阅读,更多相关《完整word版EDA日历设计.docx(19页珍藏版)》请在冰豆网上搜索。
![完整word版EDA日历设计.docx](https://file1.bdocx.com/fileroot1/2023-1/3/e27f94ee-1a36-4876-9d54-cbf0a84387e7/e27f94ee-1a36-4876-9d54-cbf0a84387e71.gif)
完整word版EDA日历设计
湖南工程学院
课程设计任务书
课程名称:
EDA技术
题目:
基于FPGA的具有闰年补偿功能的数字日历
专业:
电子科学与技术
班级:
班
学生姓名:
学号:
指导老师:
审批:
任务书下达日期2014年12月8日星期一
设计完成日期2014年12月19日星期五
设计内容与设计要求
一.设计内容:
用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,具体设计要求如下:
1、用7个数码管从左到右分别显示年(后两位)、月、日和星期;星期与日之间隔开一位。
2、年计数从00到99循环;月、日的计数显示均从1开始,并具备大小月份自动调节和闰年补偿功能,即日期的计数实现大月31天,小月30天,二月28天或29天(闰年)的自动调整(注意:
7、8月均为大月)。
3、对星期的计数显示从1到6再到日(日用8代替);注意星期应和实际日历相吻合。
4、具备日历调整功能和节日提醒功能。
要求采用分层次描述方式,且用图形输入和文本输入混合方式建立描述文件。
二、设计要求:
1、设计思路清晰,给出整体设计框图;
2、用VHDL设计各单元电路,完成其功能仿真和编译并生成低层模块;
3、在QuartusⅡ中完成顶层设计并编译通过;
4、在QuartusⅡ中完成设计下载并调试电路;
5、写出设计报告;
主要设计条件
1、提供EDA设计环境和EDA软件QuartusⅡ;
2、提供EDA实验箱和CPLD下载装置;
说明书格式
1、课程设计报告书封面;
2、任务书;
3、说明书目录;
4、设计总体思路;
5、单元电路设计;
6、总电路设计;
7、设计调试体会与总结;
8、附录;
9、参考文献。
注意:
每个人的课程设计报告说明书不得雷同!
课程设计报告说明书要求用16开纸打印!
进度安排
第一周:
星期一上午安排任务、讲课。
星期一下午~星期五查资料、设计
第二周:
星期一~星期二设计输入和设计仿真〈四楼EDA室〉
星期三低层编译和设计下载〈四楼EDA室〉
星期四调试电路、写总结报告;
星期五答辩。
参考文献
《EDA技术实用教程》第四版潘松主编
《电子技术与EDA技术课程设计指导》郭照南主编中南大学出版社
《电子线路设计、实验、测试》谢自美主编 华中理工出版社。
一、设计总体思路
1.1课程设计内容-------------------------------------------------1
1.2课程设计要求-------------------------------------------------1
1.3设计总体思路-------------------------------------------------2
1.4设计框图-------------------------------------------------------3
二、单元模块设计
2.1天模块----------------------------------------------------------4
2.2月模块----------------------------------------------------------5
2.3年模块.---------------------------------------------------------7
2.4星期模块-------------------------------------------------------8
2.5提醒模块-------------------------------------------------------9
2.6控制模块------------------------------------------------------10
2.7显示模块------------------------------------------------------11
三、总电路设计--------------------------------------------------13
四、电路调试----------------------------------------------------14
五、设计调试体会与总结--------------------------------------16
六、附录-----------------------------------------------------------17
七、参考文献-----------------------------------------------------18
附:
课程设计评分表
一、设计总体思路
1.1课程设计内容
用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,具体设计要求如下:
1、用7个数码管从左到右分别显示年(后两位)、月、日和星期;星期与日之间隔开一位。
2、年计数从00到99循环;月、日的计数显示均从1开始,并具备大小月份自动调节和闰年补偿功能,即日期的计数实现大月31天,小月30天,二月28天或29天(闰年)的自动调整(注意:
7、8月均为大月)。
3、对星期的计数显示从1到6再到日(日用8代替);注意星期应和实际日历相吻合。
4、具备日历调整功能和节日提醒功能。
要求采用分层次描述方式,且用图形输入和文本输入混合方式建立描述文件。
1.2课程设计要求
1、设计思路清晰,给出整体设计框图;
2、用VHDL设计各单元电路,完成其功能仿真和编译并生成低层模块;
3、在QuartusⅡ中完成顶层设计并编译通过;
4、在QuartusⅡ中完成设计下载并调试电路;
5、写出设计报告;
1.3设计总体思路
用QuartusⅡ生成各模块,依次调试其功能,然后连接出总体线路图然后设置为顶层文件。
完成该万年历时,需要用一个可以选择计数器,在这里面可以完成对28、29、30、31天的计数功能,接下来需要一个十二进制计数器来进行月份的计数,然后就是利用一个一百进制的计数器来进行年数的计数,最后是利用一个七进制计数器来进行星期的计时。
然后对于特殊的节日要建一个提醒模块,通过LED灯显示提醒,对于每个月是大月还是小月和是否是闰年,用一个控制模块来实现,数码管的显示直接用数码驱动模块实现。
通过各模块的有机组成而实现具有大小月份自动调节和闰年补偿功能的数字万年历。
1.4设计框图
二、单元模块设计
2.1天模块(代码如下)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytianis
port(clk,s1,s2:
instd_logic;
d1,d2:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
endtian;
architectureoneoftianis
signalq11,q22:
std_logic_vector(3downto0);
signals1s2:
std_logic_vector(1downto0);
begin
process(clk,s1,s2)
begin
ifclk'eventandclk='1'then
q11<=q11+1;
ifq11=9thenq11<=(others=>'0');
q22<=q22+1;
endif;
s1s2<=s1&s2;
cases1s2is
when"00"=>ifq22=3andq11=1
thenq22<="0000";q11<="0001";cout<='1';
elsecout<='0';
endif;
when"01"=>ifq22=3andq11=0
thenq22<="0000";q11<="0001";cout<='1';
elsecout<='0';
endif;
when"10"=>ifq22=2andq11=8
thenq22<="0000";q11<="0001";cout<='1';
elsecout<='0';
endif;
when"11"=>ifq22=2andq11=9
thenq22<="0000";q11<="0001";cout<='1';
elsecout<='0';
endif;
whenothers=>null;
endcase;
endif;
endprocess;
d1<=q11;d2<=q22;
end;
2.2月模块
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyueis
port(clk,run:
instd_logic;
m1,m2:
outstd_logic_vector(3downto0);
a,b,cout:
outstd_logic);
endyue;
architectureoneofyueis
signalq1:
std_logic_vector(3downto0):
="0001";
signalq2:
std_logic_vector(3downto0):
="0000";
signalq2q1:
std_logic_vector(7downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q1<=q1+1;
ifq1=9thenq1<=(others=>'0');
q2<=q2+1;
endif;
ifq2=1andq1=2then
q2<="0000";q1<="0001";cout<='1';
elsecout<='0';
endif;
endif;
q2q1<=q2&q1;
caseq2q1is
when"00000001"=>a<='0';b<='0';
when"00000010"=>ifrun='1'then
a<='1';b<='1';elsea<='1';b<='0';
endif;
when"00000011"=>a<='0';b<='0';
when"00000100"=>a<='0';b<='1';
when"00000101"=>a<='0';b<='0';
when"00000110"=>a<='0';b<='1';
when"00000111"=>a<='0';b<='0';
when"00001000"=>a<='0';b<='0';
when"00001001"=>a<='0';b<='1';
when"00010000"=>a<='0';b<='0';
when"00010001"=>a<='0';b<='1';
when"00010010"=>a<='0';b<='0';
whenothers=>null;
endcase;
endprocess;
m1<=q1;m2<=q2;
end;
2.3年模块
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitynianis
port(clk:
instd_logic;
y1,y2:
outstd_logic_vector(3downto0);
run:
outstd_logic);
endnian;
architectureoneofnianis
signalq1,q2:
std_logic_vector(3downto0);
signalq3:
std_logic_vector(3downto0):
="0000";
signalrun1:
std_logic:
='1';
begin
process(clk)
begin
ifclk'eventandclk='1'then
q1<=q1+1;
ifq1=9thenq1<=(others=>'0');
q2<=q2+1;
endif;
ifq2=9andq1=9then
q2<="0000";q1<="0000";
endif;
endif;
endprocess;
process(clk)
begin
ifclk'eventandclk='1'then
q3<=q3+1;
ifq3=3thenq3<=(others=>'0');
run1<='1';
elserun1<='0';
endif;
endif;
y1<=q1;y2<=q2;run<=run1;
endprocess;
end;
2.4星期模块
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityxingqiis
port(clk:
instd_logic;
q1:
outstd_logic_vector(3downto0));
endxingqi;
architectureoneofxingqiis
signalq11:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
q11<=q11+1;
ifq11=6then
q11<="1000";
elsifq11>7then
q11<="0001";
endif;
endif;
endprocess;
q1<=q11;
end;
2.5提醒模块
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityalarmis
port(clk:
instd_logic;
T1,T2,yue1,yue2:
instd_logic_vector(3downto0);
alarm:
outstd_logic);
endalarm;
architectureoneofalarmis
signalq11:
std_logic_vector(15downto0);
begin
process(T1,T2,yue1,yue2)
begin
q11<=yue2&yue1&T2&T1;
caseq11is
when"0000100000000001"=>alarm<=clk;
when"0000010100000001"=>alarm<=clk;
when"0000101000000001"=>alarm<=clk;
whenothers=>null;
endcase;
endprocess;
endone;
2.6控制模块
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytiaoshiis
port(k1,k2:
instd_logic;
m1,m2,m3,m4:
instd_logic;
n1,n2,n3,n4:
outstd_logic);
endentity;
architectureoneoftiaoshiis
signalq:
std_logic_vector(3downto0);
begin
process(k1)
begin
ifk1'eventandk1='1'thenq<=q+1;
ifq=4thenq<="0000";
endif;
endif;
caseqis
when"0000"=>n1<=m1;n2<=m2;n3<=m3;n4<=m4;
when"0001"=>n1<=k2;n2<='0';n3<='0';n4<='0';
when"0010"=>n1<='0';n2<=k2;n3<='0';n4<='0';
when"0011"=>n1<='0';n2<='0';n3<=k2;n4<='0';
when"0100"=>n1<='0';n2<='0';n3<='0';n4<=k2;
--when"0101"=>n1<='0';n2<='0';n3<='0';n4<='0';
whenothers=>NULL;
endcase;
endprocess;
end;
2.7显示模块
程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYledIS
PORT(CLK:
INSTD_LOGIC;
d0,d1,d2,d3,d4,d5,d6,d7:
inSTD_LOGIC_VECTOR(3DOWNTO0);
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
END;
ARCHITECTUREoneOFledIS
SIGNALCNT8:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALA:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P1:
PROCESS(CNT8)
BEGIN
CASECNT8IS
WHEN"000"=>BT<="00000001";A<=d0;
WHEN"001"=>BT<="00000010";A<=d1;
WHEN"010"=>BT<="00000100";A<=d2;
WHEN"011"=>BT<="00001000";A<=d3;
WHEN"100"=>BT<="00010000";A<=d4;
WHEN"101"=>BT<="00100000";A<=d5;
WHEN"110"=>BT<="01000000";A<=d6;
WHEN"111"=>BT<="10000000";A<=d7;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP1;
P2:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'
THENCNT8<=CNT8+1;
ENDIF;
ENDPROCESSP2;
P3:
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>SG<="0111111";WHEN"0001"=>SG<="0000110";
WHEN"0010"=>SG<="1011011";WHEN"0011"=>SG<="1001111";
WHEN"0100"=>SG<="1100110";WHEN"0101"=>SG<="1101101";
WHEN"0110"=>SG<="1111101";WHEN"0111"=>SG<="0000111";
WHEN"1000"=>SG<="1111111";WHEN"1001"=>SG<="1101111";
WHEN"1010"=>SG<="1110111";WHEN"1011"=>SG<="1111100";
WHEN"1100"=>SG<="0111001";WHEN"1101"=>SG<="1011110";
WHEN"1110"=>SG<="1111001";WHEN"1111"=>SG<="1110001";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP3;
END;
3、总电路设计图
四、电路调试
天模块调试结果:
月模块调试结果:
年模块调试结果:
提醒模块调试结果:
当不是特殊的日子时;
星期模块调试:
五、设计调试体会与总结
1、刚开始对Quartus软件的应用不是很熟悉,通过阅读相关的书籍,提高了对Quartus软件的应用。
比如文件名必须是英文的,不然编译总是有错误,还有对每一个分模块编译,和仿真的时候,都得将其设为顶层文件,不然编译的总是上一个模块的内容,最后把总的设计原理图设为顶层文件及项目名。
2.写程序代码的时候,特别要注意细节,一个小的标点符号错了,就导致整个程序错误。
这无疑培养了我们科学严谨的学习态度。
3.锁定管脚的时候,有些号码开发箱上面没有,所以必须的注意,最好是选择接线最好的位置。
4接线调试的时候,特别要注意时钟给的大小,如数码显示管的时钟信号要中等,给的太快,肉眼跟不上显示管闪动,只能看到依次点亮,所以要给合适的时钟信号,输入的时钟要给慢一点,让实验结果清晰可见。
5.通过这次为期两周的EDA课程设计,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论。
才能够完美的掌握知识。
这次设计也让我明白了现代电子的发展,对自己将来的就业有了一定的了解。
这次的EDA课程设计,虽然刚开始一头雾水,但是通过查资料,咨