数字时钟的VHDL设计Word格式文档下载.docx

上传人:b****3 文档编号:17742132 上传时间:2022-12-09 格式:DOCX 页数:11 大小:61.60KB
下载 相关 举报
数字时钟的VHDL设计Word格式文档下载.docx_第1页
第1页 / 共11页
数字时钟的VHDL设计Word格式文档下载.docx_第2页
第2页 / 共11页
数字时钟的VHDL设计Word格式文档下载.docx_第3页
第3页 / 共11页
数字时钟的VHDL设计Word格式文档下载.docx_第4页
第4页 / 共11页
数字时钟的VHDL设计Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数字时钟的VHDL设计Word格式文档下载.docx

《数字时钟的VHDL设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字时钟的VHDL设计Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

数字时钟的VHDL设计Word格式文档下载.docx

“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;

“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。

“时、分、秒”计数器的输出经译码器送显示器显示。

校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。

设计过程

1.设计思路

时钟脉冲信号作为数字钟的时间基准,再经分频器输出标准秒脉冲。

秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器是计满24后,系统自动复位重新开始计数。

计数器的输出经译码电路后送到显示器显示。

可以用校时电路进行校时。

数字钟的设计方案

数字钟的设计包括编码模块、分频模块、秒计时模块、分计时模块、小时计时模块和报时模块。

该数字钟可以实现3个功能:

计时功能、报时功能和设置时间功能。

.编码模块

编码模块主要是对时(sethour)、分(setmin)、秒(setsec)的设置输入。

.分频模块

在数字钟的设计中,外部输入时钟信号clk1的频率为8hz,其分频后的频率为clk,使其分频结果为1hz,用来提供给秒计时模块、分计时模块、小时计时模块。

.秒计时模块

将“秒计时脉冲”clk接信号源单元的1HZ脉冲信号,此时秒显示将从00计时到59,然后回到00,重新计时。

在秒位进行计时的过程中。

秒计时器是由一个60进制的计数器构成的,具有置数和计数功能。

其中rst为置数信号,当rst为1时,秒计时器置数。

clk为驱动秒计时器的时钟,sec1、sec0为秒计时器的高位和低位输出。

.分计时模块

分计时电路:

将“分计时脉冲”clk接信号源单元的1HZ脉冲信号,此时分显示将从00计时到59,然后回到00,重新计时。

在分位进行计时的过程中。

分计时器是由一个60进制的计数器构成的,具有置数和计数功能。

其中rst为置数信号,当rst为1时,分计时器置数。

min1、min0为分计时器的高位和低位输出。

.小时计时模块

将“小时计时脉冲”clk接信号源单元的1HZ脉冲信号,此时小时显示将从00计时到24,然后回到00,重新计时。

时计时器是由一个24进制的计数器构成的,具有置数和计数功能。

其中的rst为置数信号,当rst为1时,时计时器置数。

hr1、hr0为时计时器的高位和低位输出。

报时模块

当分位到59时,秒位计到51秒、53秒、55秒、57秒、59秒时报时一次,而后小时位加1。

程序源代码及说明

源程序

数字钟整体程序

整个程序分为五个部分,分别为分频部分、校时部分、秒部分、分部分、小时部分。

VHDL程序如下:

libraryIEEE;

useclock_24is

Port(

clk1:

inSTD_LOGIC;

--时钟

rst:

--复位,高有效

sethr:

--小时设置,增加1

setmin:

--分钟设置

setsec:

--秒设置

hr0:

outSTD_LOGIC_VECTOR(3downto0);

--小时个位

hr1:

--小时十位

min0:

--分钟个位

min1:

--分钟十位

sec0:

--秒个位

sec1:

--秒十位

speak:

outSTD_LOGIC--报时输出

);

endclock_24;

architecturertlofclock_24is

signalco_sec0:

STD_LOGIC;

--秒个位计数溢出标示

signalco_sec1:

signalco_min0:

signalco_min1:

signalco_hr0:

signalcnt_sec0:

STD_LOGIC_VECTOR(3downto0);

--秒个位计数器

signalcnt_sec1:

signalcnt_min0:

signalcnt_min1:

signalcnt_hr0:

signalcnt_hr1:

signalstate_hour:

STD_LOGIC_VECTOR(1downto0);

--小时个位当前状态,当state_hour="

00"

"

01"

时,cnt_hr0计数从0到9,当state_hour="

10"

时,cnt_hr0计算从0到3.

begin

counter_second0:

process(clk1,rst,setsec)

if(rst='

1'

)then--异步复位

cnt_sec0<

="

0000"

;

elsif(clk1'

eventandclk1='

)then--如果秒计数脉冲上升沿到来

if(setsec='

)then--如果秒设置按下,则秒计数器增加1

if(cnt_sec0>

1000"

)then

cnt_sec0<

=cnt_sec0-"

else

=cnt_sec0+"

0010"

endif;

else

if(cnt_sec0="

1001"

)then--如果cnt_sec0计数到9,则将cnt_sec0=0;

else--否则将cnt_sec0增加1;

0001"

--否则计数器加1

endif;

if(cnt_sec0="

)then--产生进位标志

co_sec0<

='

0'

endif;

endprocesscounter_second0;

counter_second1:

--秒十位计数器

process(clk1,rst)

cnt_sec1<

)then

if(co_sec0='

if(cnt_sec1="

0101"

)then--如果溢出则置0

cnt_sec1<

=cnt_sec1+"

andcnt_sec1="

)then--产生进位标志

co_sec1<

endprocesscounter_second1;

counter_miniute0:

--分个位计数器

process(clk1,rst,setmin)

cnt_min0<

if(setmin='

cnt_min0<

=cnt_min0+"

if(co_sec1='

if(cnt_min0="

cnt_min0<

if(cnt_min0="

andcnt_sec0="

co_min0<

endprocesscounter_miniute0;

counter_miniute1:

--分十位计数器

cnt_min1<

if(co_min0='

if(cnt_min1="

cnt_min1<

=cnt_min1+"

if(cnt_min1="

andcnt_min0="

co_min1<

endprocesscounter_miniute1;

counter_hour0:

--小时个位计数器

process(clk1,rst,sethr)

cnt_hr0<

state_hour<

if(sethr='

cnt_hr0<

=cnt_hr0+"

casestate_houris

when"

=>

--如果当前是00,cnt_hr0的计数范围从0~9

if(co_min1='

if(cnt_hr0="

cnt_hr0<

state_hour<

else

endif;

if(cnt_hr0="

andcnt_min1="

co_hr0<

--产生进位标志

--如果当前是01,cnt_hr0的计数范围从0~9

--如果当前是10,cnt_hr0的计数范围从0~3

0011"

whenothers=>

state_hour<

endcase;

endprocesscounter_hour0;

counter_hour1:

--小时十位计数器

cnt_hr1<

if(co_hr0='

if(cnt_hr1="

cnt_hr1<

=cnt_hr1+"

endprocesscounter_hour1;

--在**-59-5*的时候speak=1,否则等于0

with(cnt_min1="

)select

speak<

whenTRUE,

'

whenothers;

--将计数器的值赋给相应的输出引脚

hr0<

=cnt_hr0;

hr1<

=cnt_hr1;

min0<

=cnt_min0;

min1<

=cnt_min1;

sec0<

=cnt_sec0;

sec1<

=cnt_sec1;

endrtl;

仿真结果及分析

整体仿真结果如下

因整体不清晰,做了局部仿真截图如下

由上调试过程可知,该数字钟实现了计时、重置时间和整点报时的功能。

在给数字钟重置时间后,数字钟便开始从所置的时间计时,到达59秒时,秒计时器回到0秒,并且给分钟加1;

当到达59分时,分计时器回到0分钟,并且给小时加1;

当到达23小时时,时计时器回到0小时。

心得体会

通过这次设计,进一步加深了对VHDL的了解,让我对它有了更加浓厚的兴趣。

特别是当每一个子模块编写调试成功时,心里特别的开心。

但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。

总的来说,这次设计的数字钟还是比较成功的,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力。

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

当前位置:首页 > 解决方案 > 其它

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

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