课程设计模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南工程学院
课程设计
课程名称EDA技术
课题名称基于FPGA的具有闰年补偿功能的
数字日历
专业
班级
学号
姓名
指导教师郭照南
2014 年12 月8 日
D题
(注:完成人员:01班的24号、30号和34号;02班的28号和29号)
湖南工程学院
课程设计任务书
课程名称EDA技术
课题基于FPGA的具有闰年补偿功能的数字
日历
专业班级电子科学与技术
学生姓名蒋玉
学号201201180134
指导老师郭照南
审批
任务书下达日期2014年12月8日星期一
设计完成日期2014年12月19日星期五
目录
一、设计总体思路
1.1设计内容 (1)
1.2设计要求 (1)
1.3设计思路 (1)
1.4设计框图 (2)
二、单元电路设计及仿真
2.1年计数器 (2)
2.2月计数器 (4)
2.3日计数器 (6)
2.4星期计数器 (8)
2.5提醒模块 (9)
2.6控制模块 (10)
2.7显示模块 (11)
三、总电路设计 (13)
四、设计调试总结与体会 (13)
五、附录 (15)
六、参考文献 (15)
附:课程设计评分表
一、设计总体思路
1.1设计内容
用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,具体设计要求如下:
1、用7个数码管从左到右分别显示年(后两位)、月、日和星期;星期与日之间隔开一位。
2、年计数从00到99循环;月、日的计数显示均从1开始,并具备大小月份自动调节和闰年补偿功能,即日期的计数实现大月31天,小月30天,二月28天或29天(闰年)的自动调整(注意:7、8月均为大月)。
3、对星期的计数显示从1到6再到日(日用8代替);注意星期应和实际日历相吻合。
4、具备日历调整功能和节日提醒功能。
要求采用分层次描述方式,且用图形输入和文本输入混合方式建立描述文件。
1.2设计要求
1、设计思路清晰,给出整体设计框图;
用VHDL设计各单元电路,完成其功能仿真和编译并生成低层计数器;
2、在QuartusⅡ中完成顶层设计并编译通过;
3、在QuartusⅡ中完成设计下载并调试电路;
4、写出设计报告;
1.3设计思路
用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,日历有年、月、日、星期以及特殊节日提醒的功能,根据要求,用了一个一百进制的计数器来进行年的计数,中间有一个辅助进程,闰年时让进位端输出为一;设计了一个十二进制的计数器进行月的控制,其中用了case语句,来完成该年是不是闰年以及该月是大月或者小月的控制;利用一个七进制计数器来进行星期的计时;现在就完成了我们所需要的几个计数器。设计了一个控制模块来控制是否进入下一年;然后设计了一个特殊节日提醒提醒功能,输出端接了一个LED灯,灯亮时表示提醒;最后设计动态扫描显示部分。
将这些计数器的组合,我们可以完成具有闰年补偿功能的万年历的设计,同时可以通过控制键对年、月、日进行调整。
1.4设计框图
二、单元电路设计及仿真
2.1年计数器的设计
对于年100进制的加法计数器的设计,有个位、十位的输出,用显示模块来显示,以及一个进位端,来驱动月模块二月的选择,其输入有清零端,使能端和时钟脉冲,当清零端为低电平0时此计数器被清零,而重新开始计数,当使能端为低电平时该计数器不工作处于暂停状态。
其程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
ENTITY nian IS
PORT
(clk,en : IN STD_LOGIC;cr : IN STD_LOGIC;
co:out STD_LOGIC;
q1: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
y10: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));
END nian;
ARCHITECTURE a OF nian IS
SIGNAL bcd1n : STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL vcd10n : STD_LOGIC_VECTOR (3 DOWNTO 0);
BEGIN
q1<=bcd1n;y10<=vcd10n;
PROCESS (clk,cr)
BEGIN
IF (cr = '0') THEN
bcd1n <= "0000"; vcd10n <= "0000";
ELSIF (clk'EVENT AND clk = '1') THEN
if (en='1') then
IF (bcd1n=9 and vcd10n=9) THEN
bcd1n <= "0000"; vcd10n <= "0000";
ELSIF (bcd1n=9) THEN
bcd1n <= "0000"; vcd10n <= vcd10n + 1; ELSE
bcd1n <= bcd1n + 1; END IF;END IF;end if;
END PROCESS;
process (bcd1n,vcd10n)
begin
if ((bcd1n=0 and vcd10n=0) or(bcd1n=4 and vcd10n=0) or(bcd1n=8 and
vcd10n=0) or(bcd1n=2 and vcd10n=1) or(bcd1n=6 and vcd10n=1)
or(bcd1n=0 and vcd10n=2) or(bcd1n=4 and vcd10n=2) or(bcd1n=8 and
vcd10n=2) or(bcd1n=2 and vcd10n=3) or(bcd1n=6 and vcd10n=3)
or(bcd1n=0 and vcd10n=4) or(bcd1n=4 and vcd10n=4) or(bcd1n=8 and
vcd10n=4) or(bcd1n=2 and vcd10n=5) or(bcd1n=6 and vcd10n=5)
or(bcd1n=0 and vcd10n=6) or(bcd1n=4 and vcd10n=6) or(bcd1n=8 and
vcd10n=6) or(bcd1n=2 and vcd10n=7) or(bcd1n=6 and vcd10n=7)
or(bcd1n=0 and vcd10n=8) or(bcd1n=4 and vcd10n=8) or(bcd1n=8 and
vcd10n=8) or(bcd1n=2 and vcd10n=9) or(bcd1n=6 and vcd10n=9)) then co<='1';else co<='0';
end if;
end process;end a;
其仿真波形如下: