基于FPGA的具有闰年补偿功能的数字日历.docx
- 文档编号:15234358
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:24
- 大小:208.92KB
基于FPGA的具有闰年补偿功能的数字日历.docx
《基于FPGA的具有闰年补偿功能的数字日历.docx》由会员分享,可在线阅读,更多相关《基于FPGA的具有闰年补偿功能的数字日历.docx(24页珍藏版)》请在冰点文库上搜索。
基于FPGA的具有闰年补偿功能的数字日历
课程设计任务书
课程名称:
EDA技术
题目:
基于FPGA的具有闰年补偿功能的数字日历
设计内容与设计要求
一.设计内容:
用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、参考文献。
注意:
每个人的课程设计报告说明书不得雷同!
进度安排
第一周:
星期一上午安排任务、讲课。
星期一下午~星期五查资料、设计
第二周:
星期一~星期二设计输入和设计仿真〈四楼EDA室〉
星期三低层编译和设计下载〈四楼EDA室〉
星期四调试电路、写总结报告;
星期五答辩。
参考文献
《EDA技术实用教程》第四版潘松主编
《电子技术与EDA技术课程设计指导》郭照南主编中南大学出版社
《电子线路设计、实验、测试》谢自美主编 华中理工出版社。
一、设计总体思路
1.1课程设计内容-------------------------------------------------1
1.2课程设计要求-------------------------------------------------1
1.3课程设计的意义----------------------------------------------2
1.4设计总体思路-------------------------------------------------2
1.5设计框图-------------------------------------------------------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课程设计的意义
了解EDA技术,EDA技术的基本特征:
EDA代表了当今电子设计技术的最新发展方向,利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在汁算机上自动处理完成。
设计者采用的设计方法是一种高层次的”自顶向下”的全新设计方法,这种设汁方法首先从系统设计人手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错.并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行驶证。
然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路(ASIC)。
设计者的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次性成功率。
由于现代电子产品的复杂度和集成度的日益提高,一般分离的中小规模集成电路组合已不能满足要求,电路设计逐步地从中小规模芯片转为大规模、超大规模芯片,具有高速度、高集成度、低功耗的可编程朋IC器件已蓬。
掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。
为了进一步了解计算机工作组成原理与系统结构,深入学习EDA技术,用VHDL技术,用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。
熟悉QUARUSII软件的应用。
熟悉EDA实验开发系统的基本使用。
学习用VHDL基本单元电路的时间应用。
进一步掌握EDA的多层次设计方法。
1.4设计总体思路
基于FPGA利用VHDL语言进行编程然后利用其生成模块化然后利用模块再连接成顶层文件。
完成该万年历时,需要用一个可以选择计数器,在这里面可以完成对28、29、30、31天的计数功能,接下来需要一个十二进制计数器来进行月份的计数,然后就是利用一个一百进制的计数器来进行年数的计数,最后是利用一个七进制计数器来进行星期的计时。
到此为止就完成了我们所需要的几个计数模块。
通过一个控制模块来判断该年是不是闰年以及该月是大月或者小月。
数码管的显示我们通过一个数码驱动模块来实现。
对于特别日子的提醒功能,同样应用一个报警模块然后通过一个喇叭进行提醒。
通过这些模块的组合,我们可以完成具有闰年补偿功能的万年历的设计,同时可以通过控制键对时间和星期进行调整。
1.5设计框图
控制模块
二、单元电路设计
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";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 具有 闰年 补偿 功能 数字 日历