vhdl电子日历设计完整.docx

上传人:b****2 文档编号:2234825 上传时间:2022-10-28 格式:DOCX 页数:34 大小:2.09MB
下载 相关 举报
vhdl电子日历设计完整.docx_第1页
第1页 / 共34页
vhdl电子日历设计完整.docx_第2页
第2页 / 共34页
vhdl电子日历设计完整.docx_第3页
第3页 / 共34页
vhdl电子日历设计完整.docx_第4页
第4页 / 共34页
vhdl电子日历设计完整.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

vhdl电子日历设计完整.docx

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

vhdl电子日历设计完整.docx

vhdl电子日历设计完整

《EDA技术教程》

 

基于VHDL的万年历设计

(EDA实验报告)

 

学校:

郑州大学

院部:

物理工程学院

年级:

2010级

专业:

电子科学与技术

姓名:

张金灿

2013年01月20日

ONE:

本设计为实现一个多功能的万年历,具有年、月、日、时、分、秒计时并显示的功能,其满量程计时为一万年;具有校对功能,能够对初始的时间进行人为的设定。

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

系统目标芯片采用EP2C35F484C8N,由CNT60模块、CNT24模块、DAY模块、MONTH模块、YEAR模块、TIAOSHI模块、CONTROL模块组成。

经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,将硬件编写程序下载到试验箱上,选择模式5进行功能验证。

本系统能够完成年、月、日和时、分、秒的分别显示,由按键输入进行万年历的校时功能。

TWO:

万年历的设计思路与多功能时钟的设计思路相似。

多功能时钟的各功能模块及相互之间的连接如下图1所示

图1

THREE:

年、月、日和时、分、秒的显示格式如图2所示。

年、月、日同时显示,时、分、秒同时显示,通过显示模式切换来分别显示。

年/(时)月/分日/秒

图2万年历显示格式

FOUR:

按照模块化的设计思想,要实现万年历的基础功能,必定要包含年、月、日和时、分、秒的功能模块,其中秒和分可以用六十进制计数器来实现,时用二十四进制计数器实现,月用十二进制计数器来实现,年的低两位和高两位都是一百进制计数器,比较特殊的是天的计数器,因为它有四种情况,大月三十一天,小月三十天,平年二月二十八天,闰年二月有二十九天,所以年和月的模块对天的计数都有影响,需要从年和月的输出端引出控制信号来控制天的计数。

同时每个计数器都有显示输出端和进位输出端,同时低级别(如秒)的进位输出要给较高级别(如分)的时钟输入端,以此类推,采用串行工作方式进行连接。

从而完成了基础的计时和显示的功能。

再按照由基础功能到增强功能的设计思路,要实现校时功能,要在之前电路的基础之上增加一个校时控制模块,增加两个按键来实现控制,按键1来选择校对哪一个模块,按键2选择校对到何值——检测到按键2的一个上升沿,对应的计数器加1。

除此之外还需要有显示模式的切换的功能,需要增加一个模式切换的控制模块,通过增加一个按键3来实现控制,是显示年月日还是时分秒。

实验原理图

万年历时分秒部分的原理图如下图所示,年月日部分与之同理,通过控制可以进行切换。

译码驱动

译码驱动

译码驱动

译码驱动

译码驱动

译码驱动

时十位

计数

时个位

计数

分十位

计数

分个位

计数

秒十位

计数

秒个位

计数

校时控制电路

校分控制电路

分频器电路

分频器电路

晶体振荡器电路

1HZ

图3万年历实验原理图

FIVE:

K1键是选择万年历工作的模式,K2键提供上升沿(时钟功能)来使各计数模块加一,从而实现校时的功能。

LED灯起指示作用。

共有五种选择模式(A,B,C,D,E,F):

A:

正常计时--K1不按

B:

调整分--K1按下一次

C:

调整时--K1按下两次

D:

调整日--K1按下三次

E:

调整月--K1按下四次

F:

调整年--K1按下五次

CLK是外部1Hz输入时钟,作为秒的时钟输入,驱动整个万年历工作运行。

K3键是显示模式的选择,显示时分秒时,LED指示灯亮,显示年月日时,LED指示灯灭。

SIX:

VHDL语言描写和原理图部分

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;

仿真结果:

图660进制计数器仿真图

原理图:

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;

仿真结果:

图724进制计数器仿真图

原理图:

3.日模块

日模块有四种情况,大月为31进制计数器,小月为30进制计数器,平年二月为28进制计数器,闰年二月为29进制计数器,需要有一个二位判断输入信号来进行进制数的选择。

源程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDAYIS

PORT(PANDUAN:

INSTD_LOGIC_VECTOR(1DOWNTO0);--两位判断输入信号

CLK:

INSTD_LOGIC;

CQ1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CQ2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREONEOFDAYIS

SIGNALCQ3,CQ4:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALPAN:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

PROCESS(CLK,PANDUAN)

BEGIN

IFCLK'EVENTANDCLK='1'THEN--上升沿

CQ3<=CQ3+1;

IFCQ3=9THENCQ3<=(OTHERS=>'0');

CQ4<=CQ4+1;

ENDIF;

PAN<=PANDUAN;

CASEPANIS

WHEN"00"=>IFCQ3="0001"ANDCQ4="0011"--判断信号为00时为31进

THENCQ3<="0001";CQ4<="0000";COUT<='1';--制计数器

ELSECOUT<='0';ENDIF;

WHEN"01"=>IFCQ3="0000"ANDCQ4="0011"--判断信号为01时为30进

THENCQ3<="0001";CQ4<="0000";COUT<='1';--制计数器

ELSECOUT<='0';ENDIF;

WHEN"10"=>IFCQ3="1000"ANDCQ4="0010"--判断信号为10时为28进

THENCQ3<="0001";CQ4<="0000";COUT<='1';--制计数器

ELSECOUT<='0';ENDIF;

WHEN"11"=>IFCQ3="1001"ANDCQ4="0010"--判断信号为11时为29进

THENCQ3<="0001";CQ4<="0000";COUT<='1';--制计数器

ELSECOUT<='0';ENDIF;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

CQ1<=CQ3;

CQ2<=CQ4;

ENDPROCESS;

END;

仿真结果:

图8判断信号为00时天模块仿真图

图9判断信号为01时天模块仿真图

图10判断信号为10时天模块仿真图

图11判断信号为11时天模块仿真图

原理图:

4.月模块

月模块为12进制计数器,同时其需要为天提供判断信号输出,其与天的判断输入信号相一致。

由于二月的判断信号输出要受到平年和闰年的影响,平年时判断信号是10,闰年时判断信号为11,所以它要有接收来之年模块的判断平年闰年的输出信号(run=0时表平年,run=1时表闰年)。

源程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYMONTHIS

port(clk:

INSTD_LOGIC;

run:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

pan:

OUTSTD_LOGIC_VECTOR(1DOWNTO0);

cq1,cq2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

END;

ARCHITECTUREbehavOFMONTHIS

signalcq3,cq4:

STD_LOGIC_VECTOR(3DOWNTO0);

signalcq5:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IFclk'EVENTandclk='1'THEN

cq3<=cq3+1;

IFcq3=9THENcq4<=cq4+1;cq3<="0000";ENDIF;

IFcq3

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

当前位置:首页 > 人文社科 > 法律资料

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

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