当前位置:文档之家› 课程设计模板

课程设计模板

湖南工程学院课程设计课程名称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 ISPORT(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 ISSIGNAL bcd1n : STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL vcd10n : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINq1<=bcd1n;y10<=vcd10n;PROCESS (clk,cr)BEGINIF (cr = '0') THENbcd1n <= "0000"; vcd10n <= "0000";ELSIF (clk'EVENT AND clk = '1') THENif (en='1') thenIF (bcd1n=9 and vcd10n=9) THENbcd1n <= "0000"; vcd10n <= "0000";ELSIF (bcd1n=9) THENbcd1n <= "0000"; vcd10n <= vcd10n + 1; ELSEbcd1n <= bcd1n + 1; END IF;END IF;end if;END PROCESS;process (bcd1n,vcd10n)beginif ((bcd1n=0 and vcd10n=0) or(bcd1n=4 and vcd10n=0) or(bcd1n=8 andvcd10n=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 andvcd10n=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 andvcd10n=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 andvcd10n=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 andvcd10n=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;其仿真波形如下:2.2月计数器对于月十二进制的加法计数器的设计,有个位、十位的输出用显示模块来显示,a,b的输出,来控制日计数器是31或30或28或29天。

其输入有清零端,使能端,run控制端和时钟脉冲,当清零端为低电平0时此计数器被清零,当使能端为低电平时该计数器不工作处于暂停状态。

run 为1并且计数器记为2时,ab就输出11,run为0并且计数器记为2时,ab就输出10,来控制日计数器二月的输出。

其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY yue ISPORT(clk,run: IN STD_LOGIC;cr : IN STD_LOGIC;en: IN STD_LOGIC;a,b,co : out STD_LOGIC;q1:OUT STD_LOGIC_VECTOR (3 DOWNTO 0);y10:OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END yue;ARCHITECTURE a OF yue ISSIGNAL bcd1n: STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL vcd10n: STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL vcd10nbcd1n:std_logic_vector(7 downto 0);BEGINq1<=bcd1n;y10<=vcd10n;PROCESS (clk,cr)BEGINIF (cr = '0') THENbcd1n <= "0001"; vcd10n <= "0000"; ELSIF (clk'EVENT AND clk = '1') THENif (en='1') thenIF (bcd1n=2 and vcd10n=1) THENbcd1n <= "0001"; vcd10n <= "0000"; ELSIF (bcd1n=9) THENbcd1n <= "0000"; vcd10n <= vcd10n + 1; ELSEbcd1n <= bcd1n + 1;END IF;END IF;end if;IF (bcd1n=2 and vcd10n=1) THEN co<='1'; ELSE co<='0';END IF;vcd10nbcd1n<=vcd10n&bcd1n;case vcd10nbcd1n is when"00000001"=>a<='0';b<='0'; when"00000010"=>if run='1' thena<='1';b<='1';else a<='1';b<='0';end if;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';when others=>null;END CASE;END PROCESS;end a;仿真波形如下:2.3日计数器对于日计数器的设计,有个位、十位的输出用显示模块来显示,有一个进位端,来驱动月计算器,给月计数器时钟脉冲。

相关主题