电子日历的设计.docx

上传人:b****6 文档编号:4842881 上传时间:2022-12-10 格式:DOCX 页数:20 大小:536.19KB
下载 相关 举报
电子日历的设计.docx_第1页
第1页 / 共20页
电子日历的设计.docx_第2页
第2页 / 共20页
电子日历的设计.docx_第3页
第3页 / 共20页
电子日历的设计.docx_第4页
第4页 / 共20页
电子日历的设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

电子日历的设计.docx

《电子日历的设计.docx》由会员分享,可在线阅读,更多相关《电子日历的设计.docx(20页珍藏版)》请在冰豆网上搜索。

电子日历的设计.docx

电子日历的设计

EDA课程设计

电子日历

课程名称EDA设计

题目电子日历

系院电气工程与自动化系

班级自动化8班

学生姓名

学生学号

日期2015年1月12日

 

电子日历

摘要

本设计为实现一个多功能的电子日历,具有年、月、日、星期计时并显示的功能;并且具有校对功能,能够对初始的时间进行人为的设定。

本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计具有电子日历功能的硬件电路,在QuartusII软件设计环境下,采用自顶向下的设计思路,分别对各个基础模块进行创建,通过各个基础模块的组合和连接来构建上层原理图,完成基于VHDL电子日历地设计。

关键词:

EDA、电子日历、VHDL、QuartusII

第一章绪论

1.1EDA技术

EDA(ElectronicDesignAutomation),即电子设计自动化,是指利用计算机完成电子系统的设计。

它的主要特征及核心是“自顶向下”的设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。

在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。

然后用综合优化工具生成具体门电路的网表。

由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。

1.2QuartusII的使用

通过实验,熟悉并掌握QuartusII软件的使用,熟悉该软件工具的环境。

除了学习利用VHDL语言编写程序实现硬件电路以外,还要熟练的使用原理图输入的方法进行硬件设计,具体是对每个模块形成一个功能元件,通过元件的连接来实现系统的功能,而不是通过VHDL语言的元件例化程序来完成,不仅提高了效率,而且思想原理也更加的清晰。

1.3模块化设计

掌握年、月、日、时、分、秒以及控制部分的各功能模块程序设计的原理,进而理解电子日历的设计原理,学习并理解模块化设计的方法与思想。

用VHDL语言编写各模块程序,进一步了解和掌握各个程序语言,知道编程中的注意事项,提高编程的熟练程度。

1.4分析、解决问题

通过本实验设计,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决实际问题的能力。

进一步加深对VHDL设计的了解与认识,体会EDA的巨大作用,了解进行硬件系统设计的整个流程,对生活工作中的电气设备有了更深一层次的了解,对电气工程专业有了更多兴趣。

第2章总体设计

2.1设计内容

设计具有如下功能的电子日历:

1)能显示年月日和星期

2)年月日和星期都可调

3)*注意闰年

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进制计数器。

源程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTIANIS

PORT(CLK:

INSTD_LOGIC;

PAN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

T1,T2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDTIAN;

ARCHITECTUREONEOFTIANIS

SIGNALQ1,Q2:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALAB:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(CLK,PAN)

BEGIN

IFCLK'EVENTANDCLK='1'--检测时钟上升沿

THENQ1<=Q2+1;

IFQ1=9THENQ1=“0000”;--Q1开始计时

Q2<=Q2+1;

ENDIF;

CASEPANIS

WHEN“00”=>

IFQ2=3ANDQ1=1THENQ2<=”0000”Q1<=”0001”;

COUT<='1':

ELSECOUT<=’0’;--当PAN=“00”时,如果Q2=3,Q1=1,Q2清零,Q1从1开始计时,并输出进位信号

ENDIF;

WHEN“01”=>

IFQ2=3ANDQ1=0THENQ2<=”0000”Q1<=”0001”;

COUT<=’1’;

ELSECOUT<=’0’;--当PAN=“01”时,如果Q2=3,Q1=0,Q2清零,Q1从1开始计时,并输出进位信号

ENDIF;

WHEN“10”=>

IFQ2=2ANDQ1=8THENQ2<=”0000”Q1<=”0001”;

COUT<=’0’;

ELSECOUT<=’1’;--当PAN=“11”时,如果Q2=2,Q1=8,Q2清零,Q1从1开始计时,并输出进位信号

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDPROCESS;

T1<=Q1;T2<=Q2;

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模块,显示模块等,加强了自己分析问题及编程的能力,掌握编程时该注意的语法规则,理解进行系统设计时的模块化设计思想。

最终实现了一个自己动手完成的电子作品,增强了我们分析问题、解决问题的能力,培养了对电子工程设计的浓厚兴趣。

第五章参考文献

潘松黄继业EDA技术实用教程—VHDL版(第四版)北京:

科学出版社,2010

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1