




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. 多功能数字钟的设计与实现 学院名称: 计算机学院 专业班级: 通信工程 学生姓名: 学生学号: 指导老师: 曾 宇 2012年6月25日一、 设计任务及要求:(1) 拥有正常的时、分、秒计时功能。(2) 能利用实验板上的按键实现校时、校分及秒清零功能。(3) 能利用实验板上的扬声器做整点报时。(4) 闹钟功能。(5) 在QUARTUS 中采用层次化设计方法进行设计。(6) 完成全部电路设计后在实验板上下载,验证设计课题的正确性。二、 多功能数字钟的总体设计方案根据总体设计框图,可以将整个系统分成6个模块来实现,分别是计时模块、校时模块、整点报时模块,分频模块,动态显示模块,闹钟模块。设计总
2、图:1. 计时模块该模块的设计相对简单,使用一个二十四进制和两个六十进制计数器级联,构成数字钟的基本框架。二十四进制的计数器用于计时,六十进制计数器用于计分和计秒。只要给秒计数器一个1Hz的时钟脉冲,则可以进行正常计时。分计数器以秒计数器的进位作为计数脉冲,小时计数器以分计数器的进位作为计数脉冲。 (24进制计数器构成时计数器,60进制计数器构成的秒、分计数器)24进制的仿真图:60进制的仿真图以下是计时模块设计VHDL语言:(1)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cn
3、t24 isport(clk:in std_logic; ql,qh:out std_logic_vector(3 downto 0); tc:out std_logic);end cnt24;architecture one of cnt24 is begin process(clk) variable iql,iqh:std_logic_vector(3 downto 0); begin if clk'event and clk='1' then iql:=iql+1; if iql="1010" then iqh:=iqh+1; iql:=&q
4、uot;0000" end if; if (iqh="0010")and(iql="0100") then tc<='0' iqh:="0000" iql:="0000" end if; end if; ql<=iql; qh<=iqh; end process; end one; (2)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 is port
5、(clk,clr:in std_logic; ql,qh:buffer std_logic_vector(3 downto 0); tc:out std_logic );end cnt60;architecture behavor of cnt60 isbegin tc<='0' when(clk='1' and ql="0000" and qh="0110") else '1' process(clk,clr,ql,qh)variable iql,iqh:std_logic_vector(3 dow
6、nto 0); begin if(clr='0'or (iql="0000" and iqh="0110")then iql:="0000" iqh:="0000" else if(clk'event and clk='1')then iql:=iql+1; if(iql="1010")then iql:="0000" iqh:=qh+1; end if; end if;end if;ql<=iql;qh<=iqh;end
7、process;END behavor;2. 校时模块该模块设计要求实现校时、校分及秒清零的功能。 按下校时键,小时计数器迅速递增以调至所需要的小时位。 按下校分键,分计数器迅速递增以调至所需要的分位。 按下清零键,将秒计数器清零。可以选择实验板上的3个脉冲按键进行锁定。对于此模块的设计,有3个需要注意的问题: 在校分时,分计数器的计数不应对小时位产生影响。因而需要屏蔽此时分计数器的进位信号以防止小时计数器计数。具体方法是在分计数器的进位输出时外加一个组合电路。详见下图。 (二路选择器与计数器之间连了一个组合电路,以屏蔽进位信号) 按键的“抖动”的消除。所谓的“抖动”是指一次按键时的弹跳现象,
8、通常实验板中按键所用的开关为机械性开关,由于机械触点的弹性作用,按键开关在闭合时并不能马上接通,而断开的时候也不能马上断开,使得闭合及断开的瞬间伴随一系列的电压抖动,从而导致本来一次按键,希望计数一次,结果因为抖动计数多次,且次数随机,这样严重影响了时间的校对。消除抖动较为简单的方法是利用触发器,比如可以使用D触发器进行消抖。原因在于,D触发器边沿触发,则在除去时钟边沿到来前一瞬间之外的绝大部分时间都不接受输入,自然消除了抖动。详见下图 (加D触发器防抖动) 计时采用1Hz的脉冲驱动计数器计数,而校对时间时应选用相对高频率的信号驱动计数器以达到快速校对时间的目的。显然,这两种计数脉冲之间需要进
9、行相应的选择切换。于是将计时和校时模块合起来的电路实现可以实现(见图3)。两种脉冲信号用两路选择器进行选择,选择条件为是否按键。按键输出经过了消抖的过程。3整点报时模块该模块的功能要求是:计时到59分52秒时,每两秒一次低音报时,整点时进行高音报时,可以将报时信号接到实验板上的扬声器输出。而以不同频率的脉冲信号区分低音和高音报时。进行报时的条件是计数器计数至所要求的时间点,因而需要实现一个比较模块,将分计数器和秒计数器的输出连至比较模块输入端完成比较过程。 (整点报时顶层图)以下是整点报时的比较模块设计VHDL语言library ieee;use ieee.std_logic_1164.all
10、;use ieee.std_logic_unsigned.all;entity zdbs isport(mh,ml,sh,sl:in std_logic_vector(3 downto 0); sig500,sig1k: out std_logic);end zdbs;architecture behavior of zdbs isbegin sig500<='1' when mh="0101"and ml="1001"and sh="0101"and (sl="0010" or sl=&qu
11、ot;0100" or sl="0110"or sl="1000") -比较,当时间为59分2、4、6、8钞时,sig500端输出为高电平。else '0'sig1k<='1' when mh="0000"and ml="0000"and sh="0000"and sl="0000" else '0' -比较,当时间为0分0钞时,sig1k端输出为高电平。end behavior;4分频模块在本系统中需要用到多种
12、不同频率的脉冲信号,上至高音报时,下至1Hz的计秒脉冲。所有这些脉冲信号均可以通过一个基准频率分频器生成。基准频率分频器就是一个进制很大的计数器,利用计数器的分频功能,从不同的输出位得到所需要的脉冲信号。(分频模块顶层图)以下是分频模块设计VHDL语言LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY freq_divider IS PORT(clk : IN STD_LOGIC; hz1 : OUT STD_LOGIC; hz4
13、 : OUT STD_LOGIC; hz64 : OUT STD_LOGIC; hz512 : OUT STD_LOGIC);END freq_divider;ARCHITECTURE rtl OF freq_divider IS SIGNAL count : STD_LOGIC_VECTOR(9 DOWNTO 0);BEGIN PROCESS(clk) BEGIN IF (clk'event and clk='1') THEN IF(count="1111111111") THEN Count <= (OTHERS =>'0
14、39;); ELSE Count <= count +1; END IF ; END IF ; END PROCESS; hz512 <= count(0);-每2个时钟产生一个时钟输出 hz64 <= count(3);-每16个时钟产生一个时钟输出 hz4 <= count(7);-每256个时钟产生一个时钟输出 hz1 <= count(9);-每1024个时钟产生一个时钟输出END rtl;5动态显示模块在动态方式下,所有的数码管对应同一组七段码,每一个数码管由一个选择段控制点亮或熄灭,如果全部点亮,则都显示相同的数字。若要实现6位不同时间的显示。则需要利
15、用人的视觉缺陷。具体来讲,可以在6个不同的时间段分别将每组时间经过七段译码后输出到6个数码管,当某一组时间的七段码到达时,只点亮对应位置上的数码管,显示相应的数字;下一个循环将相邻一组时间的七段码送至数码管,同样只点亮相应位置的数码管,6次一个循环,形成一个扫描序列。只要扫描频率超过人眼的视觉暂留频率(24Hz),就可以达到点亮单个数码管,却能享有6个同时显示的视觉效果,人眼辨别不出差别,而且扫描频率越高,显示越稳定。(动态显示模块顶层图)以下是动态显示模块设计的VHDL语言LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_
16、UNSIGNED.ALL; ENTITY dtsm is port( clk:in std_logic; h:in std_logic_vector(7 downto 0); m:in std_logic_vector(7 downto 0); s:in std_logic_vector(7 downto 0); seg7out:out std_logic_vector(6 downto 0); sel:buffer std_logic_vector(2 downto 0) );END dtsm;ARCHITECTURE beha of dtsm is signal key:std_logic
17、_vector(3 downto 0); BEGIN PROCESS(clk) variable dount:std_logic_vector(2 downto 0):="000" BEGIN IF(rising_edge(clk)then-开始扫描 IF dount="101" then dount:="000" ELSE dount:=dount+1; END IF; END IF; sel<=dount; end process; PROCESS(sel) BEGIN CASE sel IS-多路选择代码 when &qu
18、ot;000"=>key<=h(7 downto 4); when "001"=>key<=h(3 downto 0); when "010"=>key<=m(7 downto 4); when "011"=>key<=m(3 downto 0); when "100"=>key<=s(7 downto 4); when "101"=>key<=s(3 downto 0); when others=>null
19、; END CASE; END PROCESS; PROCESS (key) BEGIN case key is-七段显示代码 when"0000"=>seg7out<="0111111" when"0001"=>seg7out<="0000110" when"0010"=>seg7out<="1011011" when"0011"=>seg7out<="1001111" when&quo
20、t;0100"=>seg7out<="1100110" when"0101"=>seg7out<="1101101" when"0110"=>seg7out<="1111101" when"0111"=>seg7out<="0000111" when"1000"=>seg7out<="1111111" when"1001"=&g
21、t;seg7out<="1101111" when"1010"=>seg7out<="1110111" when"1011"=>seg7out<="1111100" when"1100"=>seg7out<="0111001" when"1101"=>seg7out<="1011110" when"1110"=>seg7out<=&
22、quot;1111001" when"1111"=>seg7out<="1110001" when others=>null; END CASE; END PROCESS; END beha;6、闹钟模块(通过24进制计数器置入时信号,通过60进制计数器置入分信号)(时钟闹钟信号选择模块)以下是时钟闹钟信号选择模块设计的VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.
23、all;entity alarmset isport(sel:in std_logic; hclo,mclo,sclo,halr,malr,salr: in std_logic_vector(7 downto 0); h,s,m:out std_logic_vector(7 downto 0);end alarmset;architecture beh of alarmset isbegin process(sel) begin if(sel='0')then h<=hclo; -当sel输入端为低电平时,把时钟信号传递到输出端 m<=mclo; s<=scl
24、o; else h<=halr; -当sel输入端为高电平时,把闹钟置入的信号传递到输出端 m<=malr; s<=salr; end if; end process;end beh;(当选择开关输入为低电平时,把时钟信号传递到动态显示模块;当选择开关输入为高电平时,把闹钟信号传递到动态显示模块。) (比较模块)以下是比较模块设计的VHDL语言library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity alarmcmp isport( h,m,halr,malr: in std_logic_vector(7 downto 0); stop:in std_logic; sig:out std_logic); end alarmcmp;a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分布式系统设计考题及答案
- 2023-2025北京高一(上)期末数学汇编:诱导公式
- 久而久之2025年软件设计师试题及答案
- 2025年计算机二级VB考试的全景分析及试题及答案
- 动态网络管理方案的试题及答案
- 2025年软考网络管理员考试核心试题及答案
- 工业旅游的未来趋势与市场潜力分析
- 电火锅电蒸锅行业未来发展潜力与趋势展望
- 幼儿园教师近期工作总结模版
- 信息技术基础教育试题及答案
- 污水处理工程的安全管理考核试卷
- 口腔正畸学模考试题+参考答案
- 2024年黑龙江齐齐哈尔市纪委监委择优调入人员10人管理单位遴选500模拟题附带答案详解
- 网络系统集成(项目式微课版)-课程标准
- 2023年国家知识产权局知识产权检索咨询中心招聘笔试真题
- 人力资源管理:基于创新创业视角学习通超星期末考试答案章节答案2024年
- 2024年国家公务员考试《行测》真题卷(地市卷)-答案和解析
- 2024年注册安全工程师真题答案与解析【法规】
- 初中心理健康 开出友谊的新花朵 教案
- 个人换汇合同协议书范文
- 卫生院优化服务环境提升社会满意度整改方案
评论
0/150
提交评论