ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:396.88KB ,
资源ID:4123394      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4123394.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字时钟.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字时钟.docx

1、数字时钟在系统编程技术项目设计报告课程名称 在系统编程技术 任课教师 设计题目 数字时钟 班级 姓名 学号 成绩 日期 数字时钟设计一、题目分析1、设计指标 (1)具有时、分、秒计数显示功能,以24小时循环计时; (2)显示时、分、秒; (3)具有调节小时、分钟、秒及清零的功能; (4)具有整点报时功能;2、设计方案1、 设计思路根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。时钟计数:首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmi

2、n可以调整分钟,步进为1。由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所

3、以每LED灯变化一次就来一个脉冲,即计数一次。清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。2、顶层实体描述基于可编程逻辑器件CPLD/FPGA 的芯片,使用硬件描述语言(VHDL)设计一个数字电子钟芯片5,并进行计算机仿真和编程下载。要求该数字电子钟芯片能够实现如下功能:(1)计数功能:完成00时00分00秒到23时59分59秒的计时功能。(2)清零功能:到23时59分59秒时电路自动清零,并设有一个手动清零开关,通过它可以对电路实现随时的手动的清零。(3)定时功能:能够随意设定,精确到秒,由开关调节设定需要设定的时刻。(4)动态显示功

4、能:能够动态显示电子中的时刻数。顶层电路图3、模块划分根据该数字电子钟的功能要求,现划分为以下5个模块:(1)秒计数模块(2)分计数模块(3)时计数模块 (4) 显示模块 (5) 顶层模块在计数模块中,程序中的控制信号表示如下:clk 是脉冲控制输入信号。reset 是清零输入信号,低电平有效。总体方框图3、模块详细描述秒计数模块的功能是从00计数到59,为六十进制,所以可以由1个六进制计数器和1个十进制计数器组成1个六十进制的计数器。六进制计数器设计图如图3.1所示。图3.1六进制计数器设计图其中RESET是六进制计数器的清零输入信号,低电平有效,CLK是脉冲控制输入信号。DIN2.0是秒计

5、数模块的十位输入信号,用来调整秒的十位的数值。DOUT2.0是秒计数模块的十位输出信号。C为秒计数器的进位。十进制计数器设计图如图3.2所示。图3.2十进制计数器设计图其中RESET是十进制计数器的清零输入信号,低电平有效,CLK是脉冲控制输入信号。DIN3.0是秒计数模块的个位输入信号,用来调整秒的个位的数值。DOUT3.0是秒计数模块的个位输出信号。C为秒计数器的个位的进位。秒计数模块的原理图如图3.3所示。图3.3秒计数模块原理图分计数模块的功能同样是从00计数到59,所以分计数模块的构成和秒计数模块的构成一样。同样由1个六进制计数器和1个十进制计数器组成。设计图同秒计数模块。原理图如图

6、3.4所示。其中需将秒的进位输出信号接到分计数模块的个位的时钟信号上。图3.4分计数模块原理图时计数模块的功能是从00计数到23,为24进制。所以该模块只需1个24进制计数器构成。24进制计数器设计图如图3.5所示。其中需将分的进位输出信号接到时计数模块的时钟信号上。图3.5 24进制计数器设计图其中RESET是24进制计数器的清零输入信号,低电平有效,CLK是脉冲控制输入信号。DIN5.0是秒计数模块的输入信号,用来调整小时的数值。DOUT5.0是时计数模块的输出信号。时计数模块原理图如图3.6所示。图3.6 时计数模块原理图显示模块通过译码,将秒、分、时的高低位数字分别译成LED七段数码管

7、上对应的高低电平,然后输出七段值。7段数码显示器由7个显示码管组成,4个输入信号d0,d1,d2,d3来表示0000到1111, 即表示十六进制中的0到F;同时它有7个输出信号,分别用a,b,c,d,e,f,g来表示,决定可发光二极管的状态。该数码管为共阳数码管,当某位为0时,表示这位所在的数码管发光;如为1,则表示不发光;共阴数码管则正好相反。从7段数码显示器的原理可以知道,7段数码显示器用4个输入信号对应16个输出信号,并且一个输入信号只能对应一个唯一的输出。从这点出发,很容易想到前面所学的译码器电路,事实上,7段数码显示器的显示就是调用了一个4-16线译码器。本设计采用的是共阳数码管,共

8、阳数码管的真值表如图3.8所示。图3.8七段共阳极数码管真值表显示模块设计图如图3.9所示。图3.9显示模块设计图其中DIN3.0是数字电子钟的时、分、秒的个位或者十位输入信号,DOUT6.0是显示模块的输出信号。显示模块原理图如图3.10所示。图3.10显示模块原理图各功能子模块设计完成后,再设计顶层模块,它主要是通过元件声明和元件例化语句对各子模块进行调用来完成的。顶层模块设计图如图3.11所示。图3.11顶层模块设计图其中RESET是顶层模块的清零输入信号,低电平有效,CLK是脉冲控制输入信号。DINS6.0是顶层模块的秒输入信号,用来调整秒的数值。DINM6.0是顶层模块的分输入信号,

9、用来调整分的数值。DINH5.0是顶层模块的时输入信号,用来调整小时的数值。输出信号为时、分、秒的个位和十位的输出,将此输出分别接到6个七位LED数码管上便可显示。顶层模块原理图如图3.12所示。图3.12顶层模块原理图3、方案实现1、各模块仿真及描述3.1 6进制计数器的仿真6进制计数器的计数状态仿真图如图3.1所示。图3.1 6进制计数器计数状态仿真图当输入信号reset为1时,在时钟信号的上升沿来临时,计数器加1,加到5时,在下一个时钟信号的上升沿来临时,计数器清零,进位信号变为高电平,如此反复。当输入信号reset为0,且din为0时,得到6进制计数器的清零状态,如图3.2所示。图3.

10、2 6进制计数器清零状态仿真图当输入信号reset为0,且din不为0时,得到6进制计数器的置数状态,即将din的值赋给dout,如图3.3所示。图3.3 6进制计数器置数状态仿真图3.2 10进制计数器的仿真将程序使用QuartusIII进行运行并仿真,得到10进制计数器计数状态仿真图如图3.4所示。图3.4 10进制计数器计数状态仿真图当输入信号reset为1时,在时钟信号的上升沿来临时,计数器加1,加到9时,在下一个时钟信号的上升沿来临时,计数器清零,进位信号变为高电平,如此反复。当输入信号reset为0,且din为0时,得到10进制计数器的清零状态,如图3.5所示。图3.5 10进制计

11、数器清零状态仿真图当输入信号reset为0,且din不为0时,得到10进制计数器的置数状态,即将din的值赋给dout,如图3.6所示。图3.6 10进制计数器置数状态仿真图3.3 24进制计数器的仿真将程序使用QuartusII进行运行并仿真,得到24进制计数状态的仿真图如图3.7所示。图3.7 24进制计数状态仿真图当输入信号reset为1时,在时钟信号的上升沿来临时,计数器加1,加到23时,在下一个时钟信号的上升沿来临时,计数器清零,如此反复。当输入信号reset为0,且din为0时,得到24进制计数器的清零状态,如图3.8所示。图3.8 24进制清零状态仿真图当输入信号reset为0,

12、且din不为0时,得到24进制计数器的置数状态,即将din的值赋给dout,如图3.9所示。图3.9 24进制置数状态仿真图3.4显示模块的仿真将程序使用QuartusII进行运行并仿真,得到显示模块仿真图如图3.10所示。图3.10 显示模块仿真图此模块是将4为二进制输入信号转化成对应的七段数码管的7位二进制输出信号。2、顶层电路仿真及描述将程序使用QuartusII进行运行并仿真,得到顶层模块仿真图如图3.11所示。图3.11 顶层模块仿真图此模块是通过元件声明和元件例化语句对各子模块进行调用,同时将时、分、秒的个位和十位都转换成4位二进制数,然后将这六组数据传给显示模块。顶层模块的输出的

13、数据是七段数码管的7位二进制输出信号。4、硬件测试及说明实验箱使用模式7,键8为复位按键,键8为1时正常工作。键4设置小时,键7设置分钟。下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,之后从新计时。5、结论本课题要求基于可编程逻辑器件,使用硬件描述语言VHDL编写一个数字电子钟芯片,并用QuartusII软件进行仿真。根据自己对数字电子钟的理解我设计了四大功能:一是计数功能,二是清零功能,三是定时功能,四是动态显示功能。由此必需设计

14、出五个大的模块:一是秒计数模块,此模块是由1个6进制计数器和1个10进制计数器组成1个60进制计数器;二是分计数模块,此模块也是是由1个6进制计数器和1个10进制计数器组成1个60进制计数器;三是时计数模块,此模块由1个24进制计数器构成;四是显示模块,主要功能是把输入的4位二进制信号转换为对应的七段数码管的7位二进制信号。五是顶层模块,此模块是通过元件声明和元件例化语句对各子模块进行调用,将其余模块整合成一块芯片,避免的繁杂的连线。课程总结经过几个星期对实践的制作,从中学到了很多。首先是对EDA的VHDL语言的更深层次认识,对可编程逻辑器件,VHDL语言,QuartusII软件有了一定的了解

15、,尤其是用VHDL语言编程和仿真。本来觉得EDA编程语言比较麻烦,可是接触了以后也就觉得它还是有它方便的地方,尤其是和图形编程结合的特点。其次,这个实践其实到目前为止应该还不是一个成功的作品,还是有很多的仿真没有完成,原因可能也是自己的技术不到位。但是整个制作的过程中,它促进了同学之间的相互沟通,也让我在自己的专业知识的学习过程中,更多的,更好的学习一门知识,用于以后的实践应用中,做这个数字钟的设计中包含了很多不同功能的程序,让我在其中学到了一些程序的中的思路,特别一步一步去把错误的程序改正确是一种很有成就感的事!这样让我学到了更多的知识!我在网上查了好多程序,证实了好多错误的程序并从中更改出

16、正确的程序!我会更努力的学习 。6、附录本次试验中基于VHDL语言所编写的源程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS PORT(clk:IN STD_LOGIC; dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0); speak:OUT STD_LOGIC; lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END alert;ARCHITECTURE fun OF alert IS SIGNAL

17、count:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN speaker:PROCESS(clk) BEGIN -speak=count1(1); IF(clkevent and clk=1)THEN IF(dain=0000000)THEN speak=10)THEN count1=00;-count1为三进制加法计数器 ELSE count1=count1+1; END IF ; END IF ; END IF ; END PROCESS speaker; lamper:PRO

18、CESS(clk) BEGIN IF(rising_edge(clk)THEN IF(count=10)THEN IF(count=00)THEN lamp=001;-循环点亮三只灯 ELSIF(count=01)THEN lamp=010; ELSIF(count=10)THEN lamp=100; END IF; count=count+1; ELSE count=00; END IF; END IF; END PROCESS lamper;END fun;Hour:LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UN

19、SIGNED.ALL;ENTITY hour IS PORT(clk,reset:IN STD_LOGIC; daout:out STD_LOGIC_VECTOR(5 DOWNTO 0);END ENTITY hour;ARCHITECTURE fun OF hour ISSIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN daout=count; PROCESS(clk,reset) BEGIN IF(reset=0)THEN count=000000; -若reset=0,则异步清零 ELSIF(clkevent and clk=1)THEN

20、-否则,若clk上升沿到 IF(count(3 DOWNTO 0)=1001)THEN -若个位计时恰好到1001即9 IF(count16#23#)THEN -23进制 count=count+7; -若到23D则 else count=000000; -复0 END IF; ELSIF (count16#23#)THEN -若未到23D,则count进1 count=count+1; ELSE -否则清零 count=000000; END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0) END PROCESS;EN

21、D fun;Minute:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS PORT(clk,clk1,reset,sethour:IN STD_LOGIC; enhour:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY minute ;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);

22、SIGNAL enhour_1, enhour_2: STD_LOGIC; -enmin_1为59分时的进位信号 BEGIN -enmin_2由clk调制后的手动调时脉冲信号串 daout=count; enhour_2= (sethour and clk1); -sethour为手动调时控制信号,高电平有效 enhour= (enhour_1 or enhour_2); PROCESS(clk,reset,sethour) BEGIN IF(reset=0) THEN -若reset为0? count=0000000; ELSIF(clkevent and clk=1)THEN -否则,若c

23、lk上升沿到 IF(count (3 DOWNTO 0) =1001)THEN-若个位计时恰好到1001即9 IF(count 16#60#) THEN -又若count小于16#60#,即60 IF(count=1011001) THEN-又若已到59D enhour_1=1; -则置进位为1 count=0000000; -count复0 ELSE count=count+7; -若count未到59D,则加7,即作加6校正 END IF; -使前面的16#60#的个位转变为8421BCD的容量 ELSE count=0000000;-count复0(有此句,则对无效状态电路可自启动) E

24、ND IF; -END IF(count16#60#) ELSIF (count 16#60#) THEN count=count+1; -若count16#60#则count加1 enhour_1=0 after 100 ns; -没有发生进位 ELSE count=0000000; -否则,若count不小于16#60# count复0 END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0) END process;END fun;Second:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164

25、.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second ISPORT( clk,reset,setmin:STD_LOGIC; enmin:OUT STD_LOGIC; daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY second;ARCHITECTURE fun OF second ISSIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC; -enmin_1为59秒时的进位信号 BEGIN -enmi

26、n_2由clk调制后的手动调分脉冲信号串 daout=count; enmin_2=(setmin and clk); -setmin为手动调分控制信号,高电平有效 enmin=(enmin_1 or enmin_2); -enmin为向分进位信号 PROCESS(clk,reset,setmin) BEGIN IF(reset=0)THEN count=0000000; -若reset为0,则异步清零 ELSIF(clk event and clk=1)then -否则,若clk上升沿到 IF(count(3 downto 0)=1001)then -若个位计时恰好到1001即9 IF(co

27、unt16#60#)then -又若count小于16#60#,即60H IF(count=1011001)then -又若已到59D enmin_1=1;count=0000000;-则置进位为1及count复0 ELSE -未到59D count=count+7; -则加7,而+7=+1+6,即作加6校正 END IF; ELSE -若count不小于16#60#(即count等于或大于16#60#) count=0000000; -count复0 END IF; -END IF(count16#60#) ELSIF(count16#60#)then -若个位计数未到1001则转此句再判 count=count+1; -若count16#60#则count加1 enmin_1=0after 100 ns; -没有发生进位 ELSE -否则,若count不小于16#60# count=0000000; -则count复0 END IF; -END IF(count(3 DOWNTO 0)=1001) END IF; -END IF(reset=0)END PROCESS;END fun;

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

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