1齐鲁理工学院课程设计说明书(论文)题目电子万年历课程名称EDA及实验二级学院机电工程学院专业电子信息工程班级2012级电子信息工程学生姓名梁昊学号201212301034设计地点电气信息工程训练中心指导教师臧红岩设计起止时间:2015年12月3日至2015年12月10日成绩2前言21世纪是信息爆炸的时代,生活的节奏越来越快,大家的时间观念越来越强,但是老式的钟表以及日历等时间显示工具已经不太合适。如钟表易坏,需经常维修,日历每天都需要翻页等。对此,数字万年历的设计就用了用武之地。基于DEA的万年历设计,采用软件开发模块,开发成本底,而且功能设计上有很大的灵活度,需要在软件上进行简单的修该就能实现不同的功能要求,能够满足不同的环境要求。同时,该设计在精度上远远超过钟表,并且不需要维修,也不用没天的翻页,极其的方便。且能够添加各种不同的功能要求。例如:在其上加闹钟,同时显示阴阳历等。。综上所述本设计具有设计方便、功能多样、电路简洁成本低廉等优点,符合社会发展的趋势,前景广阔。基于EDA的万年历设计,主要完成的任务是使用VHDL语言,在QuartusII上完成电路的设计,程序的开发,基本功能是能够显示、修改年、月、日、时、分、秒。电路的设计模块分为几个模块:控制、时间显示调整、时、分、年、月、日各模块。各个模块完成不同的任务,合在一起就构成了万年历。软件模块直接在QuartusII上进行,使用VHDL语言,根据各个模块的不同功能和它们之间的控制关系进行编写。3目录一、设计总体思路.........................................41.1设计总体内容.........................................44、具备日历调整功能和节日提醒功能。...................41.2设计要求.............................................52、用VHDL设计各单元电路,完成其功能仿真和编译并生成低层模块;...............................................51.3课程设计的意义.......................................51.4设计总体思路.........................................5基于FPGA利用VHDL语言进行编程然后利用其生成模块化然后利用模块再连接成顶层文件。..............................51.5设计框图.............................................6二、单元电路设计.........................................72.1天模块...............................................72.2月模块...............................................92.3年模块..............................................112.4星期模块............................................122.5提醒模块............................................132.6控制模块............................................152.7显示模块............................................16三、总电路设计图........................................19四、电路调试............................................194五、设计调试总结与体会..................................21六、附录................................................22七、参考文献............................................23一、设计总体思路1.1设计总体内容用FPGA为核心器件,用VHDL为设计手段设计制作一个具有大小月份自动调节和闰年补偿功能的数字日历,具体设计要求如下:1、用7个数码管从左到右分别显示年(后两位)、月、日和星期;星期与日之间隔开一位。2、年计数从00到99循环;月、日的计数显示均从1开始,并具备大小月份自动调节和闰年补偿功能,即日期的计数实现大月31天,小月30天,二月28天或29天(闰年)的自动调整(注意:7、8月均为大月)。3、对星期的计数显示从1到6再到日(日用8代替);注意星期应和实际日历相吻合。4、具备日历调整功能和节日提醒功能。要求采用分层次描述方式,且用图形输入和文本输入混合方式建立描述文件。51.2设计要求1、设计思路清晰,给出整体设计框图;2、用VHDL设计各单元电路,完成其功能仿真和编译并生成低层模块;3、在QuartusⅡ中完成顶层设计并编译通过;4、在QuartusⅡ中完成设计下载并调试电路;5、写出设计报告;1.3课程设计的意义了解EDA技术,掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,巩固所学课堂知识,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。为了进一步了解计算机工作组成原理与系统结构,深入学习EDA技术,用VHDL技术,用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。熟悉QUARUSII软件的应用。熟悉EDA实验开发系统的基本使用。学习用VHDL基本单元电路的时间应用。进一步掌握EDA的多层次设计方法。1.4设计总体思路基于FPGA利用VHDL语言进行编程然后利用其生成模块化然后利用模块再连接成顶层文件。完成该万年历时,需要用一个可以选择计数器,在这里面可以完成对28、29、30、31天的计数功能,接下来需要一个十二进制计数器来进行月份的计数,6然后就是利用一个一百进制的计数器来进行年数的计数,最后是利用一个七进制计数器来进行星期的计时。到此为止就完成了我们所需要的几个计数模块。通过一个控制模块来判断该年是不是闰年以及该月是大月或者小月。数码管的显示我们通过一个数码驱动模块来实现。对于特别日子的提醒功能,同样应用一个报警模块然后通过一个喇叭进行提醒。通过这些模块的组合,我们可以完成具有闰年补偿功能的万年历的设计,同时可以通过控制键对时间和星期进行调整。1.5设计框图天模块月模块年模块提醒模块控制模块显示模块7二、单元电路设计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';8elsecout='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=9thenq22=0000;q11=0001;cout='1';elsecout='0';endif;whenothers=null;endcase;endif;endprocess;d1=q11;d2=q22;end;模块图:92.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;10endif;q2q1=q2&q1;caseq2q1iswhen00000001=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;模块图:112.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)beginifclk'eventandclk='1'thenq1=q1+1;ifq1=9thenq1=(others='0');