数字时钟的VHDL设计_第1页
数字时钟的VHDL设计_第2页
数字时钟的VHDL设计_第3页
数字时钟的VHDL设计_第4页
数字时钟的VHDL设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字系统设计与硬件描述语言期末考试作业 题目: 数字时钟的VHDL设计 学院: 信息学院 专业: 物联网工程 学号: 3011204286 姓名: 赵洋 2013-11-06一、 选题设计描述1. 功能介绍设计一台能显示时、分、秒的数字钟。由时钟信号经分频产生秒脉冲;计时计数器用24进制计时电路;可手动校时,能分别进行时、分的校正;具有整点报时功能。2. 算法简介 设计原理时显示器秒显示器分显示器时译码器秒译码器分译码器报时时计数器分计数器秒计数器校时电路 1HZ分频器振荡器图1 数字钟的系统框图该系统由振荡器、分频器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。振荡器

2、和分频器产生整个系统的时基信号,它直接决定计时系统的精度。“秒计数器”采用六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。“时、分、秒”计数器的输出经译码器送显示器显示。校时电路用来当计时出现误差时对“时、分、秒”进行校对调整。 设计过程1. 设计思路时钟脉冲信号作为数字钟的时间基准,再经分频器输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器是计满24后,系统自动复位重新开始计数。计数器的输出经译码电路后送到显示器显示。可以

3、用校时电路进行校时。2. 数字钟的设计方案 数字钟的设计包括编码模块、分频模块、秒计时模块、分计时模块、小时计时模块和报时模块。该数字钟可以实现3个功能:计时功能、报时功能和设置时间功能。2.1. 编码模块编码模块主要是对时(sethour)、分(setmin)、秒(setsec)的设置输入。2.2. 分频模块在数字钟的设计中,外部输入时钟信号clk1的频率为8hz,其分频后的频率为clk,使其分频结果为1hz,用来提供给秒计时模块、分计时模块、小时计时模块。2.3. 秒计时模块将“秒计时脉冲”clk接信号源单元的1HZ脉冲信号,此时秒显示将从00计时到59,然后回到00,重新计时。在秒位进行

4、计时的过程中。秒计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rst为置数信号,当rst为1时,秒计时器置数。clk为驱动秒计时器的时钟,sec1、sec0为秒计时器的高位和低位输出。2.4. 分计时模块分计时电路:将“分计时脉冲”clk接信号源单元的1HZ脉冲信号,此时分显示将从00计时到59,然后回到00,重新计时。在分位进行计时的过程中。分计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rst为置数信号,当rst为1时,分计时器置数。min1、min0为分计时器的高位和低位输出。2.5. 小时计时模块将“小时计时脉冲”clk接信号源单元的1HZ脉冲信号,此时

5、小时显示将从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

6、 IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock_24 isPort ( clk1: in STD_LOGIC;-时钟rst: in STD_LOGIC;-复位,高有效sethr: in STD_LOGIC;-小时设置,增加1setmin: 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 d

7、ownto 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 issignal co_sec0: STD_LOGIC;-秒个位计数溢出标示signal co_sec1: STD_LOGIC;signal co_min0: ST

8、D_LOGIC;signal co_min1: STD_LOGIC;signal co_hr0: STD_LOGIC;signal cnt_sec0: STD_LOGIC_VECTOR(3 downto 0);-秒个位计数器signal cnt_sec1: STD_LOGIC_VECTOR(3 downto 0);signal cnt_min0: STD_LOGIC_VECTOR(3 downto 0);signal cnt_min1: STD_LOGIC_VECTOR(3 downto 0);signal cnt_hr0: STD_LOGIC_VECTOR(3 downto 0);signa

9、l cnt_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.begincounter_second0:-秒个位计数器process(clk1,rst,setsec)beginif(rst='1') then-异步复位cnt_sec0<="

10、;0000"elsif(clk1'event and clk1='1')then-如果秒计数脉冲上升沿到来if(setsec='1')then-如果秒设置按下,则秒计数器增加1if(cnt_sec0>="1000") thencnt_sec0<=cnt_sec0-"1000"elsecnt_sec0<=cnt_sec0+"0010"end if;elseif(cnt_sec0="1001")then-如果cnt_sec0计数到9,则将cnt_sec

11、0=0;cnt_sec0<="0000"else-否则将cnt_sec0增加1;cnt_sec0<=cnt_sec0+"0001"-否则计数器加1end if;end if;if(cnt_sec0="1000") then-产生进位标志co_sec0<='1'elseco_sec0<='0'end if;end if;end process counter_second0;counter_second1:-秒十位计数器process(clk1,rst)beginif(rst=&#

12、39;1') thencnt_sec1<="0000"elsif(clk1'event and clk1='1')thenif(co_sec0='1')thenif(cnt_sec1="0101")then-如果溢出则置0cnt_sec1<="0000"elsecnt_sec1<=cnt_sec1+"0001"-否则计数器加1end if;end if;if(cnt_sec0="1000" and cnt_sec1="0

13、101")then-产生进位标志co_sec1<='1'elseco_sec1<='0'end if;end if;end process counter_second1;counter_miniute0:-分个位计数器process(clk1,rst,setmin)beginif(rst='1') thencnt_min0<="0000"elsif(clk1'event and clk1='1')thenif(setmin='1')thencnt_min0&

14、lt;=cnt_min0+"0001"end if;if (co_sec1='1')thenif(cnt_min0="1001")then-如果溢出则置0cnt_min0<="0000"elsecnt_min0<=cnt_min0+"0001"-否则计数器加1end if;end if;if(cnt_min0="1001" and cnt_sec0="1000" and cnt_sec1="0101")then-产生进位标志co

15、_min0<='1'elseco_min0<='0'end if;end if;end process counter_miniute0;counter_miniute1:-分十位计数器process(clk1,rst)beginif(rst='1') thencnt_min1<="0000"elsif(clk1'event and clk1='1')thenif(co_min0='1')thenif(cnt_min1="0101")then-如果溢

16、出则置0cnt_min1<="0000"elsecnt_min1<=cnt_min1+"0001"-否则计数器加1end if;end if;if(cnt_min1="0101" and cnt_min0="1001" and cnt_sec0="1000" and cnt_sec1="0101")then-产生进位标志co_min1<='1'elseco_min1<='0'end if;end if;end proce

17、ss counter_miniute1;counter_hour0:-小时个位计数器process(clk1,rst,sethr)beginif(rst='1') thencnt_hr0<="0000"state_hour<="00"elsif(clk1'event and clk1='1')thenif(sethr='1')thencnt_hr0<=cnt_hr0+"0001"end if;case state_hour iswhen "00&quo

18、t;=>-如果当前是00,cnt_hr0的计数范围从09if (co_min1='1')thenif(cnt_hr0="1001")then-如果溢出则置0cnt_hr0<="0000"state_hour<="01"elsecnt_hr0<=cnt_hr0+"0001"-否则计数器加1end if;end if;if(cnt_hr0="1001" and cnt_min1="0101" and cnt_min0="1001&

19、quot; and cnt_sec0="1000" and cnt_sec1="0101")thenco_hr0<='1'-产生进位标志elseco_hr0<='0'end if;when "01"=>-如果当前是01,cnt_hr0的计数范围从09if (co_min1='1')thenif(cnt_hr0="1001")then-如果溢出则置0cnt_hr0<="0000"state_hour<="10&

20、quot;elsecnt_hr0<=cnt_hr0+"0001"-否则计数器加1end if;end if;if(cnt_hr0="1001" and cnt_min1="0101" and cnt_min0="1001" and cnt_sec0="1000" and cnt_sec1="0101")thenco_hr0<='1'elseco_hr0<='0'end if;when "10"=>-如

21、果当前是10,cnt_hr0的计数范围从03if (co_min1='1')thenif(cnt_hr0="0011")then-如果溢出则置0cnt_hr0<="0000"state_hour<="00"elsecnt_hr0<=cnt_hr0+"0001"-否则计数器加1end if;end if;if(cnt_hr0="0011" and cnt_min1="0101" and cnt_min0="1001" and

22、 cnt_sec0="1000" and cnt_sec1="0101")thenco_hr0<='1'-产生进位标志elseco_hr0<='0'end if;when others=>state_hour<="00"end case;end if;end process counter_hour0;counter_hour1:-小时十位计数器process(clk1,rst)beginif(rst='1') thencnt_hr1<="0000"elsif(clk1'event and clk1='1')thenif(co_hr0='1')thenif(cnt_hr1="0010")then-如果溢出则置0cnt_hr1<="0000"elsecnt_hr1<=cnt_hr1+"0001"end if;en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论