基于VHDL电子日历的设计.docx
- 文档编号:8484759
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:505.97KB
基于VHDL电子日历的设计.docx
《基于VHDL电子日历的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL电子日历的设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于VHDL电子日历的设计
电子日历
摘要
本设计为实现一个多功能的电子日历,具有年、月、日、星期计时并显示的功能;并且具有校对功能,能够对初始的时间进行人为的设定。
本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计具有电子日历功能的硬件电路,在QuartusII软件设计环境下,采用自顶向下的设计思路,分别对各个基础模块进行创建,通过各个基础模块的组合和连接来构建上层原理图,完成基于VHDL电子日历地设计。
系统目标芯片采用EP1K30TC144-3,由时钟模块、控制模块、计时模块、数据译码模块、显示模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,将硬件编写程序下载到试验箱上进行功能验证。
本系统能够完成年、月、日、星期的显示,由按键输入进行电子日历的校时功能。
关键词:
EDA、电子日历、VHDL、QuartusII
目录
第一章绪论1
1.1EDA技术1
1.2QuartusII的使用1
1.3模块化设计1
1.4分析、解决问题1
第二章总体设计2
2.1设计内容2
2.2设计说明2
2.3设计报告要求3
第三章设计原理4
3.1设计思想4
3.2设计原理图4
3.3工作过程5
第四章设计结果6
4.1VHDL程序与仿真6
4.1.1秒与分模块6
4.1.2小时模块7
4.1.3星期模块8
4.1.4日模块9
4.1.4月模块10
4.1.5年低两位模块12
4.1.6校时模块14
4.1.7显示模式模块17
4.2顶层设计与仿真17
4.3实验小结18
第五章参考文献19
第一章绪论
1.1EDA技术
EDA(ElectronicDesignAutomation),即电子设计自动化,是指利用计算机完成电子系统的设计。
它的主要特征及核心是“自顶向下”的设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。
然后用综合优化工具生成具体门电路的网表。
由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
1.2QuartusII的使用
通过实验,熟悉并掌握QuartusII软件的使用,熟悉该软件工具的环境。
除了学习利用VHDL语言编写程序实现硬件电路以外,还要熟练的使用原理图输入的方法进行硬件设计,具体是对每个模块形成一个功能元件,通过元件的连接来实现系统的功能,而不是通过VHDL语言的元件例化程序来完成,不仅提高了效率,而且思想原理也更加的清晰。
1.3模块化设计
掌握年、月、日、时、分、秒以及控制部分的各功能模块程序设计的原理,进而理解电子日历的设计原理,学习并理解模块化设计的方法与思想。
用VHDL语言编写各模块程序,进一步了解和掌握各个程序语言,知道编程中的注意事项,提高编程的熟练程度。
1.4分析、解决问题
通过本实验设计,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决实际问题的能力。
进一步加深对VHDL设计的了解与认识,体会EDA的巨大作用,了解进行硬件系统设计的整个流程,对生活工作中的电气设备有了更深一层次的了解,对电气工程专业有了更多兴趣。
第2章总体设计
2.1设计内容
设计具有如下功能的电子日历:
1)能进行正常的年、月、日、星期计时和显示功能。
2)能利用实验系统上的按键实现年、月、日和星期的校对功能。
3)用层次化设计方法设计该电路,编写各个功能模块的程序。
4)仿真报时功能,通过观察有关波形确认电路设计是否正确。
5)完成电路设计后,用实验系统下载验证设计的正确性。
2.2设计说明
年、月、日和星期的显示格式如图2所示。
年(高位)年(低位)月
日星期
图2-1电子日历显示格式
2.3设计报告要求
1)分析系统的工作原理。
2)画出顶层原理图,写出顶层文件源程序。
3)写出各功能模块的源程序。
4)仿真各功能模块,画出仿真波形。
5)书写实验报告应结构合理,层次分明。
第三章设计原理
3.1设计思想
按照模块化的设计思想,要实现电子日历的基础功能,必定要包含年、月、日和星期的功能模块,其中,日用三十进制计数器来实现,月用十二进制计数器来实现,年的低两位和高两位都是一百进制计数器,同时每个计数器都有显示输出端和进位输出端,同时低级别(如日)的进位输出要给较高级别(如月)的时钟输入端,以此类推,采用串行工作方式进行连接。
从而完成了基础的计时和显示的功能。
再按照由基础功能到增强功能的设计思路,要实现校时功能,要在之前电路的基础之上增加一个校时控制模块,增加两个按键来实现控制,按键1来选择校对哪一个模块,按键2选择校对到何值——检测到按键2的一个上升沿,对应的计数器加1。
3.2设计原理图
电子日历时分秒部分的原理图如下图所示,年月日部分与之同理,通过控制可以进行切换。
图3-1电子日历实验原理图
原理图说明:
K1键是选择电子日历工作的模式,K2键提供上升沿(时钟功能)来使各计数模块加一,从而实现校时的功能。
模式0:
正常计时显示--K1不按
模式1:
调整星期增加--K1按下一次
模式2:
调整日增加--K1按下两次
模式3:
调整月增加--K1按下三次
模式4:
调整年增加--K1按下四次
CLK是外部1Hz输入时钟,作为秒的时钟输入,驱动整个电子日历工作运行。
3.3工作过程
当1Hz时钟信号从CLK输入端输入时,K1没有按下时,系统从零开始处于正常的计时模式,并显示。
低位计满归零并且向高位进1。
如果此时按一下按键1,那么电子日历停止计时,工作于模式1,再通过按键2对分进行校时,通过同样的方法可以对时、日、月、年进行校时。
当校时完毕,需要电子日历重新计时工作时,通过按下键1使系统工作与正常计时模式。
第四章设计结果
4.1VHDL程序与仿真
4.1.1秒与分模块
秒与分模块为六十进制的计数器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT60IS
PORT(CLK:
INSTD_LOGIC;
Q1,Q2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT60;
ARCHITECTUREONEOFCNT60IS
SIGNALQ11,Q22:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q11<=Q11+1;
IFQ11=9THENQ11<=(OTHERS=>'0');
Q22<=Q22+1;
ENDIF;
IFQ22=5ANDQ11=9THEN
Q22<="0000";Q11<="0000";COUT<='1';
ELSECOUT<='0';
ENDIF;
ENDIF;
ENDPROCESS;
Q1<=Q11;Q2<=Q22;
END;
仿真结果:
图4-160进制计数器仿真图
如上图所示当Q1、Q2计满60时,Q1、Q2都归零同时有一个进位输出脉冲,完成了六十进制计数器的功能,设计正确。
4.1.2小时模块
时模块为24进制计数器。
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT24IS
PORT(CLK:
INSTD_LOGIC;
Q1,Q2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT24;
ARCHITECTUREONEOFCNT24IS
SIGNALQ11,Q22:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q11<=Q11+1;
IFQ11=9THENQ11<=(OTHERS=>'0');
Q22<=Q22+1;
ENDIF;
IFQ22=2ANDQ11=3THEN
Q22<="0000";Q11<="0000";COUT<='1';
ELSECOUT<='0';
ENDIF;
ENDIF;
ENDPROCESS;
Q1<=Q11;Q2<=Q22;
END;
仿真结果:
图4-224进制计数器仿真图
如上图所示当Q1、Q2计满24时,Q1、Q2都归零同时有一个进位输出脉冲,完成了二十四进制计数器的功能,设计正确。
4.1.3星期模块
星期模块为“7进制”的计数器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYWEEKIS
PORT(CLK:
INSTD_LOGIC;
W:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDWEEK;
ARCHITECTUREONEOFWEEKIS
SIGNALQ11:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q11<=Q11+1;
IFQ11=7THEN
Q11<="0001";
ENDIF;
ENDIF;
ENDPROCESS;
W<=Q11;
END;
仿真结果:
图4-37进制计数器仿真图
如上图所示当W计满7时,归1,完成了“七进制”计数器的功能,设计正确。
4.1.4日模块
日模块原本有四种情况,大月为31进制计数器,小月为30进制计数器,平年二月为28进制计数器,闰年二月为29进制计数器。
本文简化处理,统一记为30天。
日模块为30进制计数器。
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDAYIS
PORT(CLK:
INSTD_LOGIC;
CQ1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CQ2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREONEOFDAYIS
SIGNALCQ3,CQ4:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN--上升沿
CQ3<=CQ3+1;
IFCQ3=9THENCQ3<=(OTHERS=>'0');
CQ4<=CQ4+1;
ENDIF;
IFCQ4=3ANDCQ3=0THEN
CQ4<="0000";CQ3<="0001";COUT<='1';
ELSECOUT<='0';
ENDIF;
ENDIF
ENDPROCESS;
CQ1<=CQ3;
CQ2<=CQ4;
END;
仿真结果:
图4-430进制计数器仿真图
如图所示,仿真结果与设计要求一致,日模块的设计正确
4.1.4月模块
月模块为12进制计数器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYMONTHIS
port(clk:
INSTD_LOGIC;
cout:
OUTSTD_LOGIC;
cq1,cq2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbehavOFMONTHIS
signalcq3,cq4:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk)
BEGIN
IFclk'EVENTandclk='1'THEN
cq3<=cq3+1;
IFcq3=9THENcq4<=cq4+1;cq3<="0000";ENDIF;
IFcq3=2andcq4=1THENcq3<="0001";cq4<="0000";cout<='1';ELSEcout<='0';
ENDIF;ENDIF;
ENDPROCESS;--十二进制计数器
cq1<=cq3;
cq2<=cq4;
END;
仿真结果:
图4-5月模块仿真图
如图所示月模块为12进制计数器,合设计要求,模块的设计正确。
4.1.5年低两位模块
年的高两位和低两位都为一百进制计数器,功能基本相同
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYEARIS
PORT(CLK:
INSTD_LOGIC;
Y1,Y2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0););
ENDYEAR;
ARCHITECTUREONEOFYEARIS
SIGNALQ1,Q2:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THENQ1<=Q1+1;
IFQ1=9THENQ1<=(OTHERS=>'0');
Q2<=Q2+1;
ENDIF;
IFQ2=9ANDQ1=9THEN
Q2<="0000";Q1<="0000";COUT<='1';
ELSECOUT<='0';
ENDIF;
ENDIF;
ENDPROCESS;
Y1<=Q1;Y2<=Q2;
END;
图4-6年低两位模块仿真图
4.1.5年高两位模块
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYEARIS
PORT(CLK:
INSTD_LOGIC;
Y3,Y4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDYEAR;
ARCHITECTUREONEOFYEARIS
SIGNALQ11,Q22:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q11<=Q11+1;
IFQ11=9THENQ11<=(OTHERS=>'0');
Q22<=Q22+1;
ENDIF;
IFQ22=9ANDQ11=9THEN
Q22<="0000";Q11<="0000";COUT<='1';
ELSECOUT<='0';
ENDIF;
ENDIF;
ENDPROCESS;
Y3<=Q11;Y4<=Q22;
END;
仿真结果:
图4-7高两位年模块仿真图
如图所示,高两位年模块为100进制计数器符合设计的要求,设计正确。
4.1.6校时模块
如原理图的说明部分所述,校时模块进行工作模式的选择,输入端设有控制按键K1,K2。
K1进行模式的选择,K2的功能如同手动时钟脉冲,进行调时设置。
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJIAODUIIS
PORT(K1,K2:
INSTD_LOGIC;
WI,DI,MI,YLI,YHI:
INSTD_LOGIC;
WO,DO,MO,YLO,YHO:
OUTSTD_LOGIC);
ENDJIAODUI;
ARCHITECTUREBEHAVOFJIAODUIIS
SIGNALA:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(K1,K2)
BEGIN
IFK1'EVENTANDK1='1'THEN
A<=A+1;
IFA=5THEN
A<="0000";
ENDIF;
ENDIF;
CASEAIS
WHEN"0000"=>WO<=WI;DO<=DI;MO<=MI;YLO<=YLI;YHO<=YHI;
--模式0正常计时
WHEN"0001"=>WO<=K2;DO<='0';MO<='0';YLO<='0';YHO<='0';
--选通星期模块,调周
WHEN"0010"=>WO<='0';DO<=K2;MO<='0';YLO<='0';YHO<='0';
--选通日模块,调日
WHEN"0011"=>WO<='0';DO<='0';MO<=K2;YLO<='0';YHO<='0';
--选通月模块,调月
WHEN"0100"=>WO<='0';DO<='0';MO<='0';YLO<=K2;YHO<='0';
--选通年模块,调年
WHEN"0101"=>WO<='0';DO<='0';MO<='0';YLO<='0';YHO<=K2;
--选通年模块,调年
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
仿真结果:
图4-8K1按下一次与两次,K2校正星期与日
图4-9K1按下三次,K2校正月
图4-10K1按下四次,K2校正年低两位
图4-11K1按下五次,K2校正年高两位
图4-12K1按下六次恢复正常
如图,按键K1,K2能够完成电子日历工作模式的选择与调时校对的功能,满足系统的设计要求,设计正确。
4.1.7显示模式模块
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCONTROLIS
PORT(WL,WH,DL,DH,ML,MH,YL,YH,Y1L,Y1H:
INSTD_LOGIC_VECTOR(3DOWNTO0);
Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCONTROL;
ARCHITECTUREONEOFCONTROLIS
BEGIN
Q10<=Y1H;Q9<=Y1L;Q8<=YH;Q7<=YL;Q6<=MH;Q5<=ML;Q4<=DH;Q3<=DL;Q2<=WH;Q1<=WL;
END;
4.2顶层设计与仿真
顶层设计采样原理图输入方法,用以上的各模块的VHDL源程序分别生成元器件,在此基础上用“导线”对元器件进行连接,搭建原理图,完成系统的顶层设计,而不是利用元件例化程序去设计。
对于较为复杂的系统而言,采用原理图输入的设计方法思路更加清
图4-13电子日历总体设计图
4.3实验小结
通过这次电子日历程序的设计,完成了硬件系统设计目标。
加深了对EDA技术的理解,熟悉了QuartusII软件环境,熟练地掌握了基于VHDL硬件设计的整个流程,从设计编程到下载验证。
通过对具体模块的编写,如CNT60模块,CNT24模块,DAY模块,MONTH模块,YEAR模块,JIAODUI模块,显示模块等,加强了自己分析问题及编程的能力,掌握编程时该注意的语法规则,理解进行系统设计时的模块化设计思想。
最终实现了一个自己动手完成的电子作品,增强了我们分析问题、解决问题的能力,培养了对电子工程设计的浓厚兴趣。
第五章参考文献
[1]潘松黄继业EDA技术实用教程—VHDL版(第四版)北京:
科学出版社,2010
[2]王金明,杨吉斌.数字系统设计与VerilogHDL.北京:
电子工业出版社,2002
[3]潘松等EDA技术与VerilogHDL北京:
清华大学出版社,2010.4
[4]江国强编著.EDA技术与实用(第三版).北京:
电子工业出版社,2011.
[5]曹昕燕,周凤臣.EDA技术实验与课程设计.北京:
清华大学出版社,2006.5
[6]阎石主编.数字电子技术基础.北京:
高等教育出版社,2003.
[7]MarkZwolinski.DigitalSystemDesignwithVHDL.北京:
电子工业出版社,2008
[8]AlanB.MarcovitzIntroductiontologicDesign.北京:
电子工业出版社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 电子 日历 设计