1湖南工程学院课程设计任务书课程名称:EDA技术题目:基于FPGA的具有闰年补偿功能的数字日历专业:电子科学与技术班级:班学生姓名:学号:指导老师:审批:任务书下达日期2014年12月8日星期一设计完成日期2014年12月19日星期五设计内容与设计要求2一.设计内容:用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下载装置;说明书格式31、课程设计报告书封面;2、任务书;3、说明书目录;4、设计总体思路;5、单元电路设计;6、总电路设计;7、设计调试体会与总结;8、附录;9、参考文献。注意:每个人的课程设计报告说明书不得雷同!课程设计报告说明书要求用16开纸打印!进度安排第一周:星期一上午安排任务、讲课。星期一下午~星期五查资料、设计第二周:星期一~星期二设计输入和设计仿真〈四楼EDA室〉星期三低层编译和设计下载〈四楼EDA室〉星期四调试电路、写总结报告;星期五答辩。参考文献《EDA技术实用教程》第四版潘松主编《电子技术与EDA技术课程设计指导》郭照南主编中南大学出版社《电子线路设计、实验、测试》谢自美主编华中理工出版社。4目录一、设计总体思路1.1课程设计内容-------------------------------------------------11.2课程设计要求-------------------------------------------------11.3设计总体思路-------------------------------------------------21.4设计框图-------------------------------------------------------3二、单元模块设计2.1天模块----------------------------------------------------------42.2月模块----------------------------------------------------------52.3年模块.---------------------------------------------------------72.4星期模块-------------------------------------------------------82.5提醒模块-------------------------------------------------------92.6控制模块------------------------------------------------------102.7显示模块------------------------------------------------------11三、总电路设计--------------------------------------------------13四、电路调试----------------------------------------------------14五、设计调试体会与总结--------------------------------------16六、附录-----------------------------------------------------------17七、参考文献-----------------------------------------------------18附:课程设计评分表5一、设计总体思路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设计各单元电路,完成其功能仿真和编译并6生成低层模块;3、在QuartusⅡ中完成顶层设计并编译通过;4、在QuartusⅡ中完成设计下载并调试电路;5、写出设计报告;1.3设计总体思路用QuartusⅡ生成各模块,依次调试其功能,然后连接出总体线路图然后设置为顶层文件。完成该万年历时,需要用一个可以选择计数器,在这里面可以完成对28、29、30、31天的计数功能,接下来需要一个十二进制计数器来进行月份的计数,然后就是利用一个一百进制的计数器来进行年数的计数,最后是利用一个七进制计数器来进行星期的计时。然后对于特殊的节日要建一个提醒模块,通过LED灯显示提醒,对于每个月是大月还是小月和是否是闰年,用一个控制模块来实现,数码管的显示直接用数码驱动模块实现。通过各模块的有机组成而实现具有大小月份自动调节和闰年补偿功能的数字万年历。71.4设计框图控制模块提醒模块月模块天模块年模块显示模块8二、单元模块设计2.1天模块(代码如下)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytianisport(clk,s1,s2:instd_logic;d1,d2:outstd_logic_vector(3downto0);cout:outstd_logic);endtian;architectureoneoftianissignalq11,q22:std_logic_vector(3downto0);signals1s2:std_logic_vector(1downto0);beginprocess(clk,s1,s2)beginifclk'eventandclk='1'thenq11=q11+1;ifq11=9thenq11=(others='0');q22=q22+1;endif;s1s2=s1&s2;cases1s2iswhen00=ifq22=3andq11=1thenq22=0000;q11=0001;cout='1';elsecout='0';endif;when01=ifq22=3andq11=0thenq22=0000;q11=0001;cout='1';elsecout='0';endif;when10=ifq22=2andq11=8thenq22=0000;q11=0001;cout='1';elsecout='0';endif;when11=ifq22=2andq11=99thenq22=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;entityyueisport(clk,run:instd_logic;m1,m2:outstd_logic_vector(3downto0);a,b,cout:outstd_logic);endyue;architectureoneofyueissignalq1:std_logic_vector(3downto0):=0001;signalq2:std_logic_vector(3downto0):=0000;signalq2q1:std_logic_vector(7downto0);beginprocess(clk)beginifclk'eventandclk='1'thenq1=q1+1;ifq1=9thenq1=(others='0');q2=q2+1;endif;ifq2=1andq1=2thenq2=0000;q1=0001;cout='1';elsecout='0';endif;endif;q2q1=q2&q1;10caseq2q1iswhen00000001=a='0';b='0';when00000010=ifrun='1'thena='1';b='1';elsea='1';b='0';endif;when00000011=a='0';b='0';when00000100=a='0';b='1';when00000101=a='0';b='0';when00000110=a='0';b='1';when00000111=a='0';b='0';when00001000=a='0';b='0';when00001001=a='0';b='1';when00010000=a='0';b='0';when00010001=a='0';b='1';when00010010=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;entitynianisport(clk:instd_logic;y1,y2:outstd_logic_vector(3downto0);run:outstd_logic);endnian;architectureoneofnianissignalq1,q2:std_logic_vector(3downto0);signalq3:std_logic_vector(3downto0):=0000;signalrun1:std_logic:='1';beginprocess(clk)begin11ifclk'eventandclk='1'thenq1=q1+1;ifq1=9thenq1=(others='0');q2=q2+1;endif;ifq2=9andq1=9thenq2=0000;q1=0000;endif;endif;endprocess;process(clk)beginifclk'eventandclk='1'thenq3=q3+1;ifq3=3thenq3=(others='0');run1='1';elserun1='0';endif;endif;y1=q1;y2=q2;run=run1;endproc