基于QuartusII软件的数字时钟设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验名称:数字时钟设计姓名:杨龙成班级:电子与通信工程学号:3120302012成绩:一、实验目的1.掌握各类计数器及它们相连的设计方法;2.掌握多个数码管显示的原理与方法;3.掌握模块化设计方式;4.掌握用VHDL语言的设计思想以及整个数字系统的设计。二、实验内容1.设计要求1)具有时、分、秒计数显示功能,在数码管显示00:00:00~23:59:59,以24小时循环计时。2)完成可以计时的数字时钟时钟计数显示时有LED灯的花样显示。3)具有调节小时、分钟及清零的功能。4)具有整点报时功能。2.性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分60进制计数,时钟—24进制计数,并且在数码管上显示数值。2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间。可以通过实验板上的键7和键4进行任意的调整,因为时钟信号均是1HZ的,所以LED灯每变化一次就来一个脉冲,即计数一次。3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。4)蜂鸣器在整点时有报时信号产生,产生“滴答.滴答”的报警声音。5)根据进位情况,LED灯在时钟显示时有花样显示信号产生。3.系统方框图三、设计原理和过程3.1硬件设计本设计使用VHDL硬件开发板,可编程逻辑器件EMP1270T144C5系列。设计过程中用到的外围电路的设计有电源部分,可编程器件EMP1270T144C5,CPLD–JTAG接口,晶振和蜂鸣器,LED数码管显示,DIP开关与按键输入(具体电路见附录)3.2软件设计3.2..1程序包my_pkg的设计说明为了简化程序设计增加可读性,系统采用模块化的设计方法,重复使用的组件以元件(component)的形式存在,以便相关块的调用。下面列出my_pkg组件包的代码。libraryieee;useieee.std_logic_1164.all;packagemy_pkgiscomponentdiv40M------------------------------------------------------------------元器件1Port(clk:instd_logic;f1hz:outstd_logic);endcomponent;componentcount60-----------------------------------------------------------------元器件2Port(clr,clk:instd_logic;one:bufferstd_logic_vector(3downto0);ten:bufferstd_logic_vector(3downto0);full:outstd_logic;dout:bufferstd_logic_vector(7downto0));endcomponent;componentcount24-----------------------------------------------------------------元器件3Port(clr,clk:instd_logic;数字时钟控制单元时调整分调整使能端信号CLK信号时显示分显示秒显示24进制60进制60进制LED显示整点报时花样显示one:bufferstd_logic_vector(3downto0);ten:bufferstd_logic_vector(3downto0);full:outstd_logic);endcomponent;componentscan6----------------------------------------------------------------元器件4port(clr,clk:inSTD_LOGIC;h_ten,h_one,m_ten,m_one,s_ten,s_one:inSTD_LOGIC_vector(3downto0);cs:outSTD_LOGIC_vector(5downto0);mux_out:outSTD_LOGIC_vector(3downto0));endcomponent;componentbin2led---------------------------------------------------------------元器件5port(bin:instd_logic_vector(3downto0);led:outstd_logic_vector(7downto0));endcomponent;componentsh1k----------------------------------------------------------------------元器件6Port(clk:instd_logic;--fromsystemclock(40MHz)f1hz:outstd_logic);--1Hzoutputsignalendcomponent;componentalarm_set------------------------------------------------------------------元器件7Port(rst,hz1:instd_logic;--systemclock1Hzalarm,ok:instd_logic;--keeppushingtodeclarealarmsetsec_tune:instd_logic;sec_one,sec_ten:outstd_logic_vector(3downto0));endcomponent;endmy_pkg;3.2.2count60组件由此提供分(秒)计数值,当分计数器计数到59再来一个脉冲信号秒计数器清零从新开始计数,而进位则作为小时计数器的计数脉冲,使小时计数器计数加1,同时分计数器在分设置时钟信号的响应下设置分计数器的数值。在count60组件中,个位(one)和十位(ten)分别计数,都设为二进制四位矢量形式,当个位从0计到9时,在下一个clk上升沿来临后,十位进1,个位变0,十位从0到5计数,在十位为5,个位9的时候,下一个上升沿来临后,十位个位都变0,进位full加1。因此在程序设计中需要两个进程process来分别完成计数,秒计数以1Hz的输入为触发信号,分计数以秒的full信号为触发信号。具体的count60的组件代码如下:Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitycount60isPort(clr,clk:instd_logic;one:bufferstd_logic_vector(3downto0);ten:bufferstd_logic_vector(3downto0);full:outstd_logic;dout:bufferstd_logic_vector(7downto0));endcount60;architecturebehavofcount60isbeginprocess(clr,clk)beginif(clr='0')thenone=0000;elsif(rising_edge(clk))thenif(one=1001)thenone=0000;elseone=one+1;endif;endif;endprocess;process(clr,clk)beginif(clr='0')thenten=0000;elsif(rising_edge(clk))thenif(one=1001)thenif(ten=0101)thenten=0000;elseten=ten+1;endif;endif;endif;endprocess;dout=ten&one;process(clk)-----------------满59进位(置full值beginif(rising_edge(clk))theniften=0101thenifone=1001thenfull='1';elsefull='0';endif;elsefull='0';endif;endif;endprocess;endbehav;设定clk与clr两个系统的输入后,课观察到one和ten的波形,在计数值达到59后,即ten为0101,one为1001以后,即进位到00000000,full进1,波形如下。3.2.3count24组件由此提供时计数值,当时计数器计数到23再来一个脉冲信号秒计数器清零从新开始计数,而进位则作为小时计数器的计数脉冲,使小时计数器计数加1,同时分计数器在分设置时钟信号的响应下设置时计数器的数值。在count24组件中,个位(one)和十位(ten)分别计数,都设为二进制四位矢量形式,在ten小于2的时候,个位从0计到9时,满9ten加1,在ten为2的时候,one从0到3计数,one为3时候,在下一个clk上升沿来临后,ten与one都变0,进位full加1。因此在程序设计中需要多个个进程process来分别完成计数,时计数以分的full的输入为触发信号,分计数以秒的full信号为触发信号。具体的count24的组件代码如下:Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitycount24isPort(clr,clk:instd_logic;one:bufferstd_logic_vector(3downto0);ten:bufferstd_logic_vector(3downto0);full:outstd_logic);endcount24;architecturebehavofcount24isbeginprocess(clr,clk)-------------------------计数0到23beginif(clr='0')thenten=0000;one=0000;elsif(rising_edge(clk))thenif(ten0010)thenif(one1001)thenone=one+0001;endif;ifone=1001thenone=0000;ten=ten+0001;endif;endif;if(ten=0010)thenif(one0011)thenone=one+0001;endif;ifone=0011thenone=0000;ten=0000;endif;endif;endif;endprocess;process(clk)---------------------------------满23进位beginif(rising_edge(clk))theniften=0010thenifone=0011thenfull='1';elsefull='0';endif;elsefull='0';endif;endif;endprocess;endbehav;小时计数模块图形分析:用来对时进行计数,当记到计数器的低四位小于2时,one从0到9计数,ten为2时,one从0到3计数,所以完成了24进制的计数,clk为系统时钟信号,具体波形如下:3.2.4div40M分频组件为了便于时钟计数,需要1Hz的时钟信号。为了节省电力耗电,输出采用7段LED数码管来显示。要提供秒钟的源信号,以便正常的计数,另外,6个led数码管要都显示,利用人眼的视觉暂留效应,需要1000hZ的时钟扫描信号。在本系统中,时钟信号发生器的信号频率为40MHz,因此要将其进行分频,产生1HZ和1KHz的信号。代码如下:LibraryIEEE;UseIEEE.std_logic_1164.all;Useieee.std_logic_unsigned.all;UseIEEE.std_logic_arith.al

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功