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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数字逻辑电路课程设计实验报告.docx

1、数字逻辑电路课程设计实验报告数字逻辑电路课程设计 -多功能数字时钟 班级: 姓名: 学号: 指导老师: 时间: 1.设计目的掌握使用VHDL语言的设计思想;对整个系统的设计有一个了解掌握各类计数器以及它们相连的设计方法;掌握MAX+plus技术的层次化设计方法;掌握多个数码管显示的原理与方法;2.设计任务及要求(1)拥有正常的时,分,秒计时功能。(2)能利用实验板上的按键实现校时,校分及秒清零功能。(3)能利用实验板上的扬声器做整点报时。(4)闹钟功能。(5)在MAXPLUS中采用层次化设计方法进行设计。(6)完成全部电路设计后在实验板上下载,验证设计课题的正确性。3.原理叙述数字钟电路主要由

2、译码显示器、校准电路、报时电路、时计数、分计数、秒计数器,振荡电路和单次脉冲产生电路组成。其中电路系统由秒信号发生器、“时”、“分”、“秒”计数器、译码器及显示器、校准电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时计数器。时计数器采用24进制计时器,可实现对一天24小时的计时。译码显示电路将“时”、“分”

3、、“秒”计数器的输出状态通过显示驱动电路,七段显示译码器译码,在经过六位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一个脉冲信号,然后去触发一音频发生器实现低、高音报时。校准电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。如图1所示多功能数字钟的组成框图。4. 设计方案 根据总体设计框图,可以将整个系统分为六个模块来实现,分别是计时模块,校时模块,整点报时模块,分频模块,动态显示模块及闹钟模块。(1)计时模块 该模块的设计相对简单,使用一个二十四进制和两个六十进制计数器级联,构成数字钟的基本框架。二十四进制计数器用于计时,六十进制计数器用于计分和计秒。只要给秒计

4、数器一个1Hz的时钟脉冲,则可以进行正常计时。分计数器以秒计数器的进位作为计数脉冲,小时计数器以分计数器的进位作为计数脉冲。24进制程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 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) va

5、riable qli,qhi:std_logic_vector(3 downto 0); begin if clkevent and clk=1 then qli:=qli+1; tc=0; if qli=1010 then qhi:=qhi+1; qli:=0000; end if; if (qhi=0010)and(qli=0100) then tc=1; qhi:=0000; qli:=0000; end if; end if; ql=qli; qh=qhi; end process; end one; 模块图如下:60进制程序如下:library ieee;use ieee.std_l

6、ogic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk,clr:in std_logic; ql,qh:out std_logic_vector(3 downto 0); tc:out std_logic);end cnt60;architecture one of cnt60 is begin process(clk,clr) variable qli,qhi:std_logic_vector(3 downto 0); begin if clr=1 then if clkevent and clk=1 the

7、n qli:=qli+1; if qli=1010 and qhi0101 then qhi:=qhi+1; qli:=0000; tc=0; end if; if (qhi=0101)and(qli=1010) then tc=1; qhi:=0000; qli:=0000; end if; end if; else qhi:=0000; qli:=0000; tc=0; end if; ql=qli; qh=qhi; end process; end one; 模块图如下: (2)校时模块 校时模块设计要求实现时校时,校分以及秒清零的功能 按下校时键,小时计数器迅速递增以调至所需要的小时位

8、。 按下校分键,分计数器迅速递增以调至所需要的分位。 按下清零键,将秒计数器清零。可以选择实验板上的3个脉冲按键进行锁定。对于此模块的设计,有三个需要注意的问题: 在校分时,分计数器的技数不应对小时位产生影响,因而需要屏蔽此时分计数器的进位信号以防止小时计数器计数。 按键“抖动”的消除。所谓“抖动”是指一次按键式的弹跳现象,通常实验班中按键所用的开关为机械弹性开关,由于机械触点的弹性作用,按键开关在闭合时并不能马上接通,而断开时也不能马上断开,是的闭合及断开的瞬间伴随一系列的电压抖动,从而导致本来一次按键,希望计数一次,结果因为抖动计数多次,且次数随机,这样严重影响了时间的校对。消除抖动较为简

9、单的方法利用触发器,比如可以使用D触发器进行消抖。原因在于,D触发器边沿触发,则在除去时钟边沿到来前一瞬间之外的绝大部分时间都不接受输入,自然消除了抖动。计时采用1Hz的脉冲驱动计数器计数,而校对时间时应选用相对高频率的信号驱动计数器以达到快速校对时间的目的。显然,这两种计数脉冲之间需要进行相应的选择切换。于是将计时和校时模块合起来的电路实现示意图如下图所示。两种脉冲信号用两路选择器进行选择,选择条件为是否按键。按键输出经过了消抖处理。二路选择器程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.a

10、ll;entity mux2 isport(A,B:in std_logic;S :in std_logic;Y :out std_logic);end mux2;architecture two of mux2 isbeginprocess(A,B,S)beginif S=0then Y=A;else Y=B;end if;end process;end two;模块图如下:(3)整点报时模块该模块功能要求是:计时到59分50秒时,每两秒一次低音报时,整点时进行高音报时,可以将报时信号接到实验版上的扬声器输出。而以不同频率的脉冲信号区分低音和高音报时。比如可用500Hz信号进行低音报时信号,

11、1kHz信号作为高音报时信号。进行报时的条件是计数器计数至所要求的时间点,因而需要实现一个比较模块,将分计数器和秒计数器的输出连至比较模块输入端完成比较过程。library ieee;use ieee.std_logic_1164.all;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

12、 when mh=0101and ml=1001and sh=0101and (sl=0010 or sl=0100 or sl=0110or sl=1000) else 0;sig1k=1 when mh=0000and ml=0000and sh=0000and sl=0000 else 0; end behavior;模块图如下:(4)分频模块 在本系统中需要用到多种不同频率的脉冲信号,上至高音报时信号,下至1Hz的计时脉冲。所有这些脉冲信号均可以通过一个基准频率分频器生成。基准频率分频器就是一个进制很大的计数器,利用计数器的分频功能,从不同的输出位得到所需要的脉冲信号。LIBRARY

13、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 : OUT STD_LOGIC; hz64 : OUT STD_LOGIC; hz512 : OUT STD_LOGIC);END freq_divider;ARCHITECTURE rtl OF freq_divider IS SIGNAL count : STD

14、_LOGIC_VECTOR(9 DOWNTO 0);BEGIN PROCESS(clk) BEGIN IF (clkevent and clk=1) THEN IF(count=1111111111) THEN Count 0); ELSE Count = count +1; END IF ; END IF ; END PROCESS; hz512 = count(0); hz64 = count(3); hz4 = count(7); hz1 = count(9);END rtl;模块图如下:(5)动态显示模块时间的显示需要用到6个数码管,如果实验板上可用的静态显示数码管有6个或以上则很容易

15、实现显示,只需要将小时高位到秒低位共6组输出按顺序锁定到6个数码管上即可。单如果资源不足,则无法完整显示6位时间。在这种情况下,需要采用动态扫描的方式显示时间显示。在动态方式下,所有的数码管对应同一组七段码,每一个数码管由一个选择短控制点亮或熄灭,如果全部点亮,则都显示相同的数字。若要实现6位不同时间的显示,则需要利用人的视觉缺陷。具体来讲,可以在6个不同的时间段分别将每组时间经过七段译码后输出到6个数码管,当某一组时间的七段码到达时,只点亮对应位置上的数码管,显示相应的数字;下一个循环将相邻一组时间的七段码送至数码管,同样只点亮相应位置的数码管,6次一个循环,形成一个扫描序列。只要扫描频率超

16、过人眼的视觉暂留频率(24Hz),就可以达到点亮单个数码管,却能享有6个同时显示的视觉效果,人眼辨别不出差别,而且扫描频率越高,显示越稳定。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_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

17、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_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;

18、 END IF; END IF; selkeykeykeykeykeykeynull; END CASE; END PROCESS; PROCESS (key) BEGIN case key is when0000=seg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outseg7outnull; END CASE; END PROCESS; END beha;模块图如下:(6)闹钟模块闹钟模块要求数字钟计时到所设定的任意时间时均能驱动扬声器报

19、时。该模块的设计应考虑到以下几个问题。设定的闹钟的时间应使用新的计数器进行存储,与正常的计时互不干扰。与正常计时状态的显示切换。可以设定一个按键,拥有选择是将计时时间还是将闹钟时间状态送动态显示模块。应实现一个比较模块,当计时到与闹钟时间相等时,则驱动扬声器鸣叫。闹钟响声应限定在一定时间之内,比如一分钟,且在这段时间内应随时可以通过按键取消闹时状态(扬声器停止鸣叫)。将上述6个功能模块分别加以实现,再连接成为顶层原理图,编译后锁定管脚下载验证结果的正确性。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.a

20、ll;entity alarm1 is port ( clr,hclk,mclk,mode,stop:in std_logic; hclo,mclo,sclo:in std_logic_vector(7 downto 0); h,m,s:out std_logic_vector(7 downto 0); sig:out std_logic); end alarm1;architecture beh of alarm1 is signal halr,malr,salr:std_logic_vector(7 downto 0); signal tc,sclk:std_logic; COMPONEN

21、T cnt60 PORT(clk:in std_logic; clr:in std_logic; ql:buffer std_logic_vector(3 downto 0); qh:buffer std_logic_vector(3 downto 0); tc:out std_logic); END COMPONENT; component cnt24 port(clk:in std_logic; ql:buffer std_logic_vector(3 downto 0); qh:buffer std_logic_vector(3 downto 0); tc:out std_logic);

22、 end component;beginhours :cnt24 port map(clk=hclk, ql=halr(3 downto 0), qh=halr(7 downto 4),tc=tc); minutes :cnt60 port map(clk=mclk, clr=clr,ql=malr(3 downto 0), qh=malr(7 downto 4),tc=tc); seconds :cnt60 port map(clk=sclk, clr=clr, ql=salr(3 downto 0), qh=salr(7 downto 4),tc=tc); process(mode) -mode convert begin if(mode=0)then h=hclo; m=mclo; s=sclo; else h=halr; m=malr; s=salr; end if; end process; process(hclo,mclo,halr,malr,stop)beginif stop=1 then sig=0; else if hclo=halr and mclo=malr then sig=1; else sig=0; end if; end if; end process;end beh;模块图如下:

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

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