数字逻辑课程设计报告—多功能数字钟的设计与实现姓名:专业班级:通信1002学号:31006010指导老师:曾宇设计日期:2012.06.20~2012.06.24一、设计目的1、学会应用数字系统设计方法进行电路设计;2、学习使用QuartusII 9.0, 进一步提高软件的开发应用能力,增强自己的动手实践能力。
3、培养学生书写综合实验报告的能力。
二、设计任务及要求实现多功能数字钟的设计,主要有以下功能:1、记时、记分、记秒2、校时、校分、秒清03、整点报时4、时间正常显示5、闹时功能(选做)三、设计思路3.1 计时模块3.1.1 设计原理计时模块如图3.1.1所示,其中计时用60进制计数器,计分和计秒用24进制计数器。
图3.1.1 计时间模块计时间过程:计秒:1HZ计数脉冲,0~59循环计数,计数至59时产生进位信号;计分:以秒计数器进位信号作为分计数脉冲,0~59循环计数,59时产生进位;计时:以分计数器进位信号作为时计数脉冲,0~23循环计数,23时清0。
计数器的设计:3.1.2 设计程序编程分别设计24、60进制计数器,计数状态以BCD码形式输出。
24进制计数器源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FEN24 isport(en,clk:in std_logic; ----高电平有效的使能信号/输入时钟 co:out std_logic;h1,h0:out std_logic_vector(3 downto 0)); ----时高位/低位end FEN24;architecture behave of FEN24 isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0); ----记数beginif(en='0')then ---“使能”为0cnt0:="0010";cnt1:="0001";elsif clk'event and clk='1'then ---上升沿触发if cnt1="0010"and cnt0="0011"thencnt0:="0000"; ----高位/低位同时为0时 cnt1:="0000";co<='1';elseco<='0';if cnt0="1001"thencnt0:="0000";cnt1:=cnt1+1;elsecnt0:=cnt0+1; -----高位记数累加 end if;end if;end if;h1<=cnt1;h0<=cnt0;end process;end behave;60进制计数器源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity FEN60 isport(en,clk:in std_logic; ---高电平有效的使能信号/输入时钟co:out std_logic; ---输出/进位信号s1,s0:out std_logic_vector(3 downto 0));end FEN60;architecture behave of FEN60 isbeginprocess(clk,en)variable cnt1,cnt0:std_logic_vector(3 downto 0); ---计数beginif en='0'then ---“使能”为0 cnt1:="0000";cnt0:="0000";elsif clk'event and clk='1'thenif cnt0="1001"thencnt0:="0000";if cnt1="0101"then ---当计数为58(实际是经过59个计时脉冲)cnt1:="0000";co<='1'; ---进位elsecnt1:=cnt1+1;co<='0';end if;elsecnt0:=cnt0+1;end if;end if;s1<=cnt1;s0<=cnt0;end process;end behave;3.1.3 设计仿真及生成器件24进制计数器仿真波形截图如图3.1.2所示,其中计到23时,即高位h1为2,低位h0为3时产生进位。
图3.1.2 24进制计数器仿真波形60进制计数器仿真波形截图如图3.1.3所示,其中计到59时,即高位s1为5,低位s0为9时产生进位。
图3.1.3 60进制计数器仿真波形24进制计数器和60进制计数器生成器件分别如图3.1.4、图3.1.5所示,其中en 为时能信号,接高电平,clk 接1kHz 的时钟信号,co 为进位,h1为时高位,h0为时低位,s1为秒或分高位,s0为秒或分低位。
图3.1.4 24进制计数器 图3.1.5 60进制计数器3.2 校时模块3.2.1 设计原理计、校时对模块如图3.2.1所示。
图3.2.1 计、校时对模块校时模块设计要求实现校时、校分以及清零的功能。
按下校时键,时位迅速递增以调至所需要的小时位,满23清0; 按下校分键,分位迅速递增以调至所需要的分位,满59清0; 按下清零键,秒清零;选择实验板上的三个脉冲按键进行锁定。
对此模块的设计,需要注意两个问题:1. 如何实现校对时间时,计数器快速递增?按键校对时间时,将一个频率较高的计数脉冲信号作用于计数器,屏蔽正常计时的计数脉冲信号。
2. “抖动”的消除电路抖动:一次按键的弹跳现象,电路产生多个计数脉冲,导致一次按键,多次计数的误动作。
抖动产生的原因:物理原因。
消除抖动简易方法:D触发器,同步按键脉冲。
原理:一个CP内,屏蔽所有抖动脉冲。
两种脉冲信号用两路选择器进行选择,选择条件为是否按键。
按键输出经过了消抖处理。
3.2.2 设计程序二路选择器源程序:library ieee;use ieee.std_logic_1164.all;entity MUX2 isport(A,B,S:in bit;Y:out bit);end MUX2;architecture one of MUX2 isbeginprocess(A,B,S)beginif S='0' thenY<=A;elseY<=B;end if;end process;end one;3.2.3 设计仿真及生成器件二路选择器生成器件如图3.2.2所示。
图3.2.2 二路选择器3.3 整点报时模块3.3.1 设计原理报时模块原理图如图3.3.1所示,数字钟从59分50秒开始,每2秒一次低音报时,当达到整点时,进行一次高音报时,其中低音报时频率为500Hz ,高音报时频率为1kHz 。
图3.3.1 报时模块进行报时的条件是计数器计数至所要求的时间点,因而需要实现一个比较模块,如图3.3.2所示,将分计数器和秒计数器的输出连至比较模块输入端完成比较工程。
图3.3.2 比较模块3.3.2 设计程序整点报时源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;接SPentity ZDBS isport(mh,ml,sh,sl:in std_logic_vector(3 downto 0);--输入分秒高低位信号 sig500,sig1k:out std_logic); ---频声控制end ZDBS;architecture behave of ZDBS isbeginprocess(ml)beginsig500<='0';sig1k<='0';if mh="0101" and ml="1001" thenif sh="0101"and (sl="0000" or sl="0010" or sl="0100" or sl="0110" or sl="1000")then sig500<='1'; ----低频输出为1 else sig500<='0'; ----否则输出为0 end if;end if;if mh="0000" and ml="0000"and sh="0000" and sl="0000" -----整点报时 then sig1k<='1'; -----高频输出为1 else sig1k<='0';end if;end process;end behave;3.3.3 设计仿真及生成器件整点报时生成器件如图3.3.3所示,器件输入为分和秒,分别接分计数器和秒计数器的高低位,输出为高频声控sig500和sig1k。
图3.3.3 整点报时3.4 分频模块3.4.1 设计原理分频模块如图3.4.1所示,系统需要用到多种不同频率的脉冲信号,上至高音报时信号,下至1Hz的计秒脉冲,所有这些脉冲信号均可以通过一个基准频率分频器生成,基准频率分频器就是一个进制很大的计数器,利用计数器的分频功能,从不同的输出位得到所需要的脉冲信号。
因此可以设计一个进制较大的计数器,分频产生各种频率的脉冲信号。
图3.4.1 分频模块3.4.2 设计程序分频器源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity FPQ isport(clk:in std_logic;hz512:out std_logic;hz64:out std_logic;hz4:out std_logic;hz1:out std_logic);end FPQ;architecture behave of FPQ issignal q:std_logic_vector(9 downto 0);beginprocess(clk)beginif clk'event and clk='1'thenq<=q+1;end if;end process;hz512<=q(0);hz64<=q(3);hz4<=q(7);hz1<=q(9);end behave;3.4.3 设计仿真及生成器件分频器仿真波形如图3.4.2所示,clk为时钟输入信号,设为1024Hz,由于1Hz和4Hz频率太小,因此在仿真波形图上为一条直线,从图上可以清楚看到512Hz和64Hz的频率图3.4.2 分频器仿真波形分频器生成器件如图3.4.3所示,其中左端为时钟输入信号clk,右端为频率端,主要是整点报时用的1000Hz与500Hz的脉冲信号,及闹钟报时的4Hz,秒输入信号1Hz。