数字时钟的VHDL设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字系统设计与硬件描述语言
期末考试作业
题目:数字时钟的VHDL设计
学院:信息学院
专业:物联网工程
学号:3011204286
:洋
2013-11-06
一、选题设计描述
1.功能介绍
设计一台能显示时、分、秒的数字钟。
由时钟信号经分频产生秒脉冲;
计时计数器用24进制计时电路;
可手动校时,能分别进行时、分的校正;
具有整点报时功能。
2.算法简介
设计原理
图1 数字钟的系统框图
该系统由振荡器、分频器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。振荡器和分频器产生整个系统的时基信号,它直接决定计时系统的精度。“秒计数器”采用六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。“时、分、秒”计数器的输出经译码器送显示器显示。校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。
设计过程
1. 设计思路
时钟脉冲信号作为数字钟的时间基准,再经分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器是计满24后,系统自动复位重新开始计数。计数器的输出经译码电路后送到显示器显示。可以用校时电路进行校时。
2.数字钟的设计方案
数字钟的设计包括编码模块、分频模块、秒计时模块、分计时模块、小时计时模块和报时模块。该数字钟可以实现3个功能:计时功能、报时功能和设置时间功能。
2.1. 编码模块
编码模块主要是对时(sethour)、分(setmin)、秒(setsec)的设置输入。
2.2. 分频模块
在数字钟的设计中,外部输入时钟信号clk1的频率为8hz,其分频后的频率为clk,使其分频结果为1hz,用来提供给秒计时模块、分计时模块、小时计时模块。
2.3. 秒计时模块
将“秒计时脉冲”clk接信号源单元的1HZ脉冲信号,此时秒显示将从00计时到59,然后回到00,重新计时。在秒位进行计时的过程中。
秒计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rst为置数信号,当rst为1时,秒计时器置数。clk为驱动秒计时器的时钟,sec1、sec0为秒计时器的高位和低位输出。
2.4. 分计时模块
分计时电路:将“分计时脉冲”clk接信号源单元的1HZ脉冲信号,此时分显示将从00计时到59,然后回到00,重新计时。在分位进行计时的过程中。分计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rst为置数信号,当rst为1时,分计时器置数。min1、min0为分计时器的高位和低位输出。
2.5. 小时计时模块
将“小时计时脉冲”clk接信号源单元的1HZ脉冲信号,此时小时显示将从00计时到24,然后回到00,重新计时。
时计时器是由一个24进制的计数器构成的,具有置数和计数功能。其中的rst为置数信号,当rst为1时,时计时器置数。hr1、hr0为时计时器的高位和低位输出。3.2.6, 报时模块
当分位到59时,秒位计到51秒、53秒、55秒、57秒、59秒时报时一次,而后小时位加1。
二、程序源代码及说明
源程序
数字钟整体程序
整个程序分为五个部分,分别为分频部分、校时部分、秒部分、分部分、小时部分。
VHDL程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity clock_24 is
Port (
clk1 : in STD_LOGIC;--时钟
rst : in STD_LOGIC;--复位,高有效
sethr : in STD_LOGIC;--小时设置,增加1
setmin : in STD_LOGIC;--分钟设置
setsec : in STD_LOGIC;--秒设置
hr0 : out STD_LOGIC_VECTOR(3 downto 0);--小时个位
hr1 : out STD_LOGIC_VECTOR(3 downto 0);--小时十位
min0 : out STD_LOGIC_VECTOR(3 downto 0);--分钟个位
min1 : out STD_LOGIC_VECTOR(3 downto 0);--分钟十位
sec0 : out STD_LOGIC_VECTOR(3 downto 0);--秒个位
sec1 : out STD_LOGIC_VECTOR(3 downto 0);--秒十位
speak : out STD_LOGIC--报时输出
);
end clock_24;
architecture rtl of clock_24 is
signal co_sec0: STD_LOGIC;--秒个位计数溢出标示
signal co_sec1: STD_LOGIC;
signal co_min0: STD_LOGIC;
signal co_min1: STD_LOGIC;
signal co_hr0: STD_LOGIC;
signalt_sec0: STD_LOGIC_VECTOR(3 downto 0);--秒个位计数器
signalt_sec1: STD_LOGIC_VECTOR(3 downto 0);
signalt_min0: STD_LOGIC_VECTOR(3 downto 0);
signalt_min1: STD_LOGIC_VECTOR(3 downto 0);
signalt_hr0: STD_LOGIC_VECTOR(3 downto 0);
signalt_hr1: STD_LOGIC_VECTOR(3 downto 0);
signal state_hour:STD_LOGIC_VECTOR(1 downto 0);--小时个位当前状态,当state_hour="00","01"时,cnt_hr0计数从0到9,当state_hour="10"时,cnt_hr0计算从0到3.
begin