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

下载本文档

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

文档简介

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

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

3、数字钟可以实现 3个功能:计时功能、报时功能和设置时间功能。2.1.编码模块编码模块主要是对时(sethour )、分(setmin )、秒(setsec)的设置输入。22.分频模块在数字钟的设计中,外部输入时钟信号clk1的频率为8hz,其分频后的频率为elk,使其分频结果为1hz,用来提供给秒计时模块、分计时模块、小时计时模块。2.3.秒计时模块将“秒计时脉冲” elk接信号源单元的1HZ脉冲信号,此时秒显示将从00计时到 59,然后回到00,重新计时。在秒位进行计时的过程中。秒计时器是由一个60进制的计数器构成的,具有置数和计数功能。其中rst为置数信号,当rst为1时,秒计时器置数。e

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

5、t为置数信号,当rst为1时,时计时器置数。hri、hr0为时计时器的高位和低位输出。3.2.6,报时模块当分位到59时,秒位计到51秒、53秒、55秒、57秒、59秒时报时一次,而后 小时位加1。程序源代码及说明源程序数字钟整体程序整个程序分为五个部分,分别为分频部分、校时部分、秒部分、分部分、小时部分。VHDL程序如下:library IEEE;use lEEE.STD LOGIC 1164.ALL;use IEEE.STD LOGIC ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;en tity clock_24 isPort (clk1:inSTD

6、_LOGIC;-时钟rst : inSTD_LOGIC;-复位,高有效sethr:inSTD_LOGIC;-小时设置,增加1setmin :inSTD_LOGIC;-分钟设置setsec:inSTD_LOGIC;-秒设置hrO:outSTD_LOGIC_VECTOR(3 dow nto 0);-小时个位hr1:outSTD_LOGIC_VECTOR(3 dow nto 0);-小时十位mi nO:outSTD_LOGIC_VECTOR(3 dow nto 0);-分钟个位mi n1:outSTD_LOGIC_VECTOR(3 dow nto 0);-分钟十位sec0:outSTD_LOGIC_

7、VECTOR(3 dow nto 0);-秒个位sec1:outSTD_LOGIC_VECTOR(3 dow nto 0);-秒十位sp eak:outSTD_LOGIC-报时输出);end clock_24;architecture rtl of clock_24 is sig nal co_secO: STD_LOGIC;-秒个位计数溢出标示signalco sec1: STD LOGIC;signalco_mi nO: STD_LOGIC;signalco_mi n1: STD_LOGIC;signalco_hr0: STD_LOGIC;sig nal cnt_sec0: STD_LOG

8、IC_VECTOR(3 dow nto 0);-秒个位计数器sig nal cnt_sec1: STD_LOGIC_VECTOR(3 dow nto 0);sig nal cnt_m in0: STD_LOGIC_VECTOR(3 dow nto 0);sig nal cnt_mi n1: STD_LOGIC_VECTOR(3 dow nto 0);sig nal cnt_hr0: STD_LOGIC_VECTOR(3 dow nto 0);sig nal cnt_hr1: STD_LOGIC_VECTOR(3 dow nto 0);sig nal state_hour:STD_LOGIC_V

9、ECTOR(1 dow nto0);-小时个位当前状态,当state_hour="00","01" 时,cnt_hr0 计数从 0 到 9,当state_hour="10"时,cnt_hr0 计算从0到3.beg in coun ter_seco nd0:- 秒个位计数器p rocess(clk1,rst,setsec) beg inif(rst='1') the n-异步复位如果秒计数脉冲上升沿到来cn t_sec0<="0000"elsif(clk1'eve nt and clk1

10、-1')the n-if(setsec='1')the n-如果秒设置按下,则秒计数器增加1if(c nt_sec0>="1000") thencnt sec0<=cnt sec0-"1000"elsecnt sec0<=cnt sec0+"0010"end if;elseif(cnt_sec0="1001")then-如果 cnt_sec0 计数到 9,则将 cnt_sec0=0;cn t_sec0<="0000"else-否则将 cnt_sec

11、0 增加 1;cn t_sec0<=c nt_sec0+"0001"-否则计数器加 1end if;end if;if(cnt_sec0="1000") the n-产生进位标志co_secOv-1'elseco_sec0<='0'end if;end if;end p rocess coun ter_sec ondO;coun ter_sec on d1:- 秒十位计数器p rocess(clk1,rst) beg inif(rst='1') thencn t_sec1<="0000&

12、quot;elsif(clk1'eve nt and clk1-1')thenif(co_sec0-1')thenif(cnt_sec1="0101")then-如果溢出则置 0cn t_sec1<="0000"elsecnt sec1<=cnt sec1+"0001"-否则计数器加 1end if;end if;产生进位标志if(cnt_secO="1OOO" a nd cn t_sec仁"0101")the n-co_sec1v-1'elseco_

13、sec1<='0'end if;end if;end p rocess coun ter_sec ond1;coun ter_mi niute0:-分个位计数器p rocess(clk1,rst,setmi n) beg inif(rst='1') thencn t_mi n0 <="0000"elsif(clk1'eve nt and clk1='1')thenif(setmi n='1')the ncnt_mi n0v=cnt_mi n0+"0001"end if;c

14、n t_mi n0 <="0000"if (co_sec1-1')thenif(cnt_min0="1001")then-如果溢出则置 0elsecn t_mi n0 v=c nt_mi n13+"0001"-否则计数器加 1end if;end if;if(cnt_mi nO="1OO1" and cnt_secO="1OOO" a nd cn t_sec仁"0101")the n-生进位标志co_mi nO <='1'elseco_m

15、inOv='O'end if;end if;end p rocess coun ter_m ini uteO;coun ter_mi niute1:-分十位计数器p rocess(clk1,rst) beg inif(rst='1') thencn t_mi n1v="0000"elsif(clk1'eve nt and clk1-1')thencn t_mi n1v="0000"if(co_mi nO-1')thenif(c nt_mi n仁"O1O1")the n-如果溢出则

16、置0elsecn t_mi n1v=c nt_mi n1+"0001"-否则计数器加 1end if;end if;if(cnt_min仁"0101"and cnt_min0="1001"and cnt_sec0="1000" andcnt_sec1="0101")the n-产生进位标志co_mi n1v='1'elseco_m in 1<='0'end if;end if;end p rocess coun ter_m ini ute1;coun ter

17、_hourO:-小时个位计数器p rocess(clk1,rst,sethr) beg inif(rst='1') thencn t_hrOv="OOOO"state_hour<="00"elsif(clk1'eve nt and clk1='1')thenif(sethr='1')thencnt_hrO<=c nt_hrO+"OOO1"end if;case state hour iswhen "00"=>-如果当前是00 , cnt_hr

18、0的计数范围从09 if (co_mi n仁'1')thenif(cnt_hr0="1001")then- 如果溢出则置 0cn t_hr0v="0000"state_hourv="01"elsecnt hr0<=cnt hr0+"0001"-否则计数器加 1end if;end if;if(c nt_hr0="1001"and cn t_mi n仁"0101" a ndcn t_mi n0="1001"andcnt_sec0=&qu

19、ot;1000" and cnt_sec1="0101")thenco_hr0<='1'- 产生进位标志elseco_hr0<='0'end if;when "01"=>-如果当前是01,cnt_hr0的计数范围从09cn t_hr0<="0000"if (co_mi n仁'1')thenif(cnt_hr0="1001")then- 如果溢出则置 0state_hourv="10"elsecnt hr0<=

20、cnt hr0+"0001"-否则计数器加 1end if;end if;if(cn t_hr0="1001"and cn t_mi n仁"0101" a ndcn t_mi n0="1001" and cnt_sec0="1000" and cnt_sec1="0101")thenco_hr0<='1'elseco_hr0<='0'end if;when "10"=>-如果当前是10 , cnt_hr0的

21、计数范围从03 if (co_mi n仁'1')thenif(cnt_hr0="0011")then- 如果溢出则置 0cn t_hr0<="0000"state_hour<="00"elsecnt hr0<=cnt hr0+"0001"-否则计数器加 1end if;end if;cn t_mi n0="1001"andif(cn t_hrO="OO11"and cn t_mi n仁"0101" a ndcnt_secO

22、="1OOO" and cnt_sec仁"0101")thenco_hrOv='1'- 产生进位标志elseco_hrO<='O'end if;whe n others=>state_hour<="OO"end case;end if;end p rocess coun ter_hourO;cou nter_hour1:-小时十位计数器p rocess(clk1,rst) beg inif(rst='1') thencn t_hr1<="OOOO&quo

23、t;elsif(clk1'eve nt and clk1='1')thencn t_hr1<="OOOO"if(co_hrO='1')thenif(c nt_hr仁"OO1O")the n-如果溢出则置0elseent hr1<=cnt hr1+"0001"end if;end if;end if;end p roeess coun ter_hour1;-在*-59-5*的时候speak=1,否则等于0with(cnt_mi n仁"0101" and ent_mi n0="1001" and cn t_sec仁"0101") select sp eak<='1' whe n TRUE,'0' whe n others;-将计数器的值赋给相应的输出引脚 hr0<=c nt_hr0;hr1<=c nt_hr1;min0 v=c nt_min0;min 1<=c nt_mi n1;sec0<=c nt_sec0;sec1<=c nt_sec1;end rtl;仿真结果及分析整体仿真结果如下El 3? reIllijiw Q;3C-13-J3I庶卩He

温馨提示

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

评论

0/150

提交评论