数电设计数字钟基于QUARTUS完整版
数电设计数字钟基于QUARTUS

大连理工大学本科实验报告题目:数电课设——多功能数字钟课程名称:数字电路课程设计学院(系):电信学部专业:电子与通信工程班级:学生姓名: ***************学号:***************完成日期:成绩:2010 年 12 月 17 日题目:多功能数字时钟一.设计要求1)具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)2)具有手动校时校分功能3)具有整点报时功能,从59分50秒起,每隔2秒钟提示一次4)具有秒表显示、计时功能(精确至百分之一秒),可一键清零5)具有手动定时,及闹钟功能,LED灯持续提醒一分钟6)具有倒计时功能,可手动设定倒计时范围,倒计时停止时有灯光提示,可一键清零二.设计分析及系统方案设计1. 数字钟的基本功能部分,包括时、分、秒的显示,手动调时,以及整点报时部分。
基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。
利用DE2硬件中提供的50MHZ晶振,经过分频得到周期为1s的时钟脉冲。
将该信号送入计数器进行计算,并把累加结果以“时”“分”“秒”的形式通过译码器由数码管显示出来。
进入手动调时功能时,通过按键改变控制计数器的时钟周期,使用的时钟脉冲进行调时计数(KEY1调秒,LOAD2调分,LOAD3调时),并通过译码器由七位数码管显示。
从59分50秒开始,数字钟进入整点报时功能。
每隔两秒提示一次。
(本设计中以两个LED灯代替蜂鸣器,进行报时)2. 多功能数字钟的秒表功能部分,计时范围从00分秒至59分秒。
可由输入信号(RST1)异步清零,并由按键(EN1)控制计时开始与停止。
将DE2硬件中的50MHZ晶振经过分频获得周期为秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示。
3.多功能数字钟的闹钟功能部分,通过按键(KEY1,KEY2,KEY3)设定闹钟时间,当时钟进入闹钟设定的时间(判断时钟的时信号qq6,qq5与分信号qq4,qq3分别与闹钟设定的时信号r6,r5与分信号r4,43是否相等),则以LED灯连续提示一分钟。
基于QuartusⅡ可校时电子钟的设计

工 业 技 术114科技资讯 SCIENCE & TECHNOLOGY INFORMATIONDOI:10.16661/ki.1672-3791.2018.09.114基于QuartusⅡ可校时电子钟的设计孙浩程(衡水市第十三中学 河北衡水 053000)摘 要:本文介绍了基于Altera公司开发的QuartusⅡEDA软件,该软件功能强大且界面友好,在此基础上利用原理图和VHDL语言设计可校时的电子钟 。
QuartusⅡ软件具有极其丰富的功能单元,可搭接的灵活性能够满足具有复杂性和创造性的理想开发平台, 本文利用QuartusⅡEDA软件设计可校时的电子钟,达到了预期的开发设计效果。
该电子钟具有计时、清零、校时、报时等基本功能。
关键词:QuartusⅡ EDA 可校时 电子钟 中图分类号:TN70 文献标识码:A 文章编号:1672-3791(2018)03(c)-0114-02QuartusⅡ是Altera公司的综合性PLD /FPGA开发软件,界面友好,使用便捷,功能强大,是一个完全集成化的可编程逻辑设计环境,是先进的EDA工具软件。
支持原理图、VHDL、Verilog HDL以及AHDL(A1tera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
对于CPLD、FPGA、SOC和HardCopy ASIC设计,Altera Quartus Ⅱ软件在性能和效能上是业界首屈一指的软件[1-2]。
本文采用Quartus Ⅱ来设计可校时的电子钟。
1 设计原理本多功能数字钟具有的功能有:显示时—分—秒、整点报时,可校准。
根据钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1s,当秒从59s跳转到00s时,分钟增加1分,分钟在59分跳转到00分时,小时增加1小时,小时的范围是从0~23时。
基于-Quartus多功能数字钟设计

基于Quartus的多功能数字钟设计该实验是利用QuartusII软件设计一个数字钟,进展试验设计和仿真调试,实现了计时,校时,校分,清零,保持和整点报时等多种根本功能,并下载到SmartSOPC实验系统中进展调试和验证。
此外还添加了显示星期,闹钟设定,秒表和彩铃等附加功能,使得设计的数字钟的功能更加完善。
一、设计要求1.设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时等根本功能。
2.具体要求如下:1)能进展正常的时、分、秒计时功能,最大计时显示23小时59分59秒。
2)分别由六个数码管显示时分秒的计时。
3)K1是系统的使能开关,K1=0正常工作,K1=1时钟保持不变。
4)K2是系统的清零开关,K2=0正常工作,K2=1时钟的分、秒全清零。
5)在数字钟正常工作时可以对数字钟进展快速校时和校分。
K3是系统的校分开关,K3=0正常工作K3=1时可以快速校分;K4是系统的校时开关,K4=0正常工作,K4=1时可以快速校时。
3.设计提高局部要求1)时钟具有整点报时功能,当时钟计到59’51〞时开场报时,在59’51〞,59’53〞, 59’55〞,59’57〞时报时频率为512Hz,59’59〞时报时频率为1KHz。
2)星期显示:星期显示功能是在数字钟界面显示星期,到计时到24小时时,星期上显示的数据进一位。
3)闹表设定:通过开关切换显示至闹钟界面,利用闹钟校时和校分开关对闹钟时间进展设定,且不影响数字钟计时。
当计时到闹钟设定时间蜂鸣器鸣叫,并响起彩铃。
4)秒表计时:通过开关切换显示至秒表界面,分秒局部是100进制的,即当值为99时向秒位进位。
4.仿真与验证用Quartus软件对设计电路进展功能仿真,并下载到实验板上对其功能进展验证。
二、工作原理数字计时器是由计时电路、译码显示电路、脉冲发生电路和控制电路等几局部组成的,控制电路按要求可由校分校时电路、清零电路和保持电路组成。
中石油大学数电实验3基于QUARTUSII图形输入电路的设计

数字电子技术实验报告学院名称新能源学院专业班级学号姓名项目名称基于QUARTUSII图形输入电路的设计实验日期 2020年11月11日实验三基于QUARTUSII图形输入电路的设计一、实验目的1、通过一个简单的 3—8 译码器的设计,掌握组合逻辑电路的设计方法。
2、初步了解 QUARTUSII 原理图输入设计的全过程。
3、掌握组合逻辑电路的静态测试方法。
二、实验内容本次实验通过使用QUARTUSII软件模拟3-8译码器的工作,实验项目包括建立工程文件、建立图形设计文件、编译、管脚分配以及时序仿真。
1、列写真值表3-8 译码器三输入,八输出。
当输入信号按二进制方式的表示值为N 时,输出端标号为N 的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号产生。
因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为高电平的情况下,能表示所有的输入组合。
其真值表如表二-1所示2、建立工程文件(1)双击运行程序(2)选择软件中的菜单 File>New Project Wizard,新建一个工程(3)点击NEXT 进入工作目录,设定工程名。
第一个输入框为工程目录输入框,用户可以输入如 f:/eda 等工作路径来设定工程的目录(4)点击 NEXT,进入下一个设定对话框,按默认选项直接点击 NEXT 进行器件选择对话框。
这里我们以选用 CycloneⅡ系列芯片 EP2C35F484C8。
(5)按默认选项,点击 NEXT 出现新建工程以前所有的设定信息,点击 FINISH 完成新建工程的建立。
3、建立图形设计文件(1)在创建好设计工程后,选择File>NEW…菜单,出现下图所示的新建设计文件类型选择窗口。
(2)New对话框中选择Device Design Files 页下的Block Diagram/Schematic File,点击OK 按钮。
(3)设计3-8译码器,将要选择的器件符号放置在图形编辑器的工件区域,用正交节点工具将原件边接起来,定义三个输入为 A、B、C,定义八个输出为D0、D1、D2、D3、D4、D5、D6、D7。
Quartus II 电子钟设计

Quartus II 电子钟设计大连海事大学电子信息专业(3)班cdk 2220102568顶层文件原理图:秒钟模块源程序:SECONDlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic;----时钟/清零信号sec1,sec0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数beginif clr='1' then----当ckr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsif clk'event and clk='1' thenif cnt1="0101" and cnt0="1000" then----当记数为58(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数elseif cnt1<"0101" then----高位小于5时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;生成模块:波形仿真:分钟模块程序:MINUTElibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(clk,clr:in std_logic;----时钟/清零信号sec1,sec0:out std_logic_vector(3 downto 0);----秒高位/低位co:out std_logic);-------输出/进位信号end MINUTE;architecture SEC of MINUTE isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);---计数beginif clr='1' then----当ckr为1时,高低位均为0cnt0:="0000";elsif clk'event and clk='1' thenif cnt1="0101" and cnt0="1000" then----当记数为58(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsif cnt0<"1001" then----小于9时cnt0:=cnt0+1;----计数elsecnt0:="0000";if cnt1<"0101" then----高位小于5时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;生成模块:波形仿真:小时模块源程序:hourlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(reset,clk : in std_logic;daout : out std_logic_vector(7 downto 0)); end hour;architecture behav of hour issignal count : std_logic_vector(3 downto 0); signal counter : std_logic_vector(3 downto 0); beginp1: process(reset,clk)beginif reset='0' thencount<="0000";counter<="0000";elsif(clk'event and clk='1') thenif (counter<2) thenif (count=9) thencount<="0000";counter<=counter + 1;elsecount<=count+1;end if;elseif (count=3) thencount<="0000";counter<="0000";elsecount<=count+1;end if;end if;end if;end process;daout(7 downto 4)<=counter;daout(3 downto 0)<=count;end behav;生成模块:波形仿真:报警源程序:alertlibrary ieee; --alert模块程序use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert isport(clk1Hz:in std_logic;a,b,c :in std_logic_vector(3 downto 0);speak:out std_logic);end alert;architecture art of alert isbeginprocess(clk1Hz,a,b,c)beginif a = "1000" and b = "0101" and c ="0101" then speak <='Z';end if;end process;end art;生成模块:。
基于Quartus II的数字钟实现.

学校代码学号00918128分类号密级本科学年论文基于Quartus II的数字钟设计院(系)名称:电子信息工程学院专业名称:通信工程年级:2010级学生姓名:包胡斯楞指导教师:白凤山2012年9月28日基于Quartus II的数字钟设计摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。
与机械钟相比具有更高的准确性和直观性,具有更长的使用,已得到广泛的使用。
数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以用Quartus II 软件结合VHDL语言编程实现数字钟的设计。
这些方法都各有其特点,我的设计采用Quartus II软件结合VHDL语言编程实现数字钟。
Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了与结构五官的设计环境,设计者无需精通器件内部的复杂结构。
本设计由分频模块,时钟产生模块,数码管驱动模块等三个部分组成。
在Quartus II中以文本输入的方式将每个模块的源代码输入进行波形仿真,以验证设计的正确性。
关键词:数字钟 Quartus II VHDL语言波形仿真绪论 (1)1数字钟设计概述 (2)2分频模块 (3)2.1分频模块原理图 (3)2.2分频模块实现原理及程序 (3)2.3仿真波形及分析验证 (3)3时钟产生模块 (5)3.1时钟产生模块原理图 (5)3.2时钟产生模块实现原理及程序 (5)3.3仿真波形及分析验证 (5)4数码管驱动模块 (7)4.1数码管驱动模块原理图 (7)4.2数码管驱动模块实现原理及程序 (7)4.3仿真波形及仿真验证 (7)5总系统 (8)5.1总系统电路图 (8)5.2仿真波形及分析验证 (8)结论 (10)致谢 (11)参考文献 (12)附录A (13)附录B (14)附录C (16)在人们日常生活中,钟表是一个随处可见的小东西。
数电设计_数字钟(基于QUARTUS).

大连理工大学本科实验报告题目:数电课设——多功能数字钟课程名称:数字电路课程设计学院(系):专业:电子与通信工程班级:学生姓名: *************** 学号:完成日期:成绩:2010 年 12 月 17 日题目:多功能数字时钟一.设计要求1 具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)2 具有手动校时校分功能3 具有整点报时功能,从59分50秒起,每隔2秒钟提示一次4 具有秒表显示、计时功能(精确至百分之一秒),可一键清零5 具有手动定时,及闹钟功能,LED 灯持续提醒一分钟6 具有倒计时功能,可手动设定倒计时范围,倒计时停止时有灯光提示,可一键清零二.设计分析及系统方案设计1. 数字钟的基本功能部分,包括时、分、秒的显示,手动调时,以及整点报时部分。
基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。
利用DE2硬件中提供的50MHZ 晶振,经过分频得到周期为1s 的时钟脉冲。
将该信号送入计数器进行计算,并把累加结果以“时”“分”“秒”的形式通过译码器由数码管显示出来。
进入手动调时功能时,通过按键改变控制计数器的时钟周期,使用0.5s 的时钟脉冲进行调时计数(KEY1调秒,LOAD2调分,LOAD3调时),并通过译码器由七位数码管显示。
从59分50秒开始,数字钟进入整点报时功能。
每隔两秒提示一次。
(本设计中以两个LED 灯代替蜂鸣器,进行报时)2. 多功能数字钟的秒表功能部分,计时范围从00分00.00秒至59分59.99秒。
可由输入信号(RST1)异步清零,并由按键(EN1)控制计时开始与停止。
将DE2硬件中的50MHZ 晶振经过分频获得周期为0.01秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示。
3. 多功能数字钟的闹钟功能部分,通过按键(KEY1,KEY2,KEY3)设定闹钟时间,当时钟进入闹钟设定的时间(判断时钟的时信号qq6,qq5与分信号qq4,qq3分别与闹钟设定的时信号r6,r5与分信号r4,43是否相等),则以LED 灯连续提示一分钟。
基于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组件包的代码。
library ieee;use ieee.std_logic_1164.all;package my_pkg iscomponent div40M------------------------------------------------------------------元器件1 Port( clk: in std_logic;f1hz : out std_logic);end component;component count60-----------------------------------------------------------------元器件2 Port(clr,clk:in std_logic;one :buffer std_logic_vector(3 downto 0);ten :buffer std_logic_vector(3 downto 0);full:out std_logic;dout:buffer std_logic_vector(7 downto 0));end component;component count24-----------------------------------------------------------------元器件3 Port(clr,clk:in std_logic;one :buffer std_logic_vector(3 downto 0);ten :buffer std_logic_vector(3 downto 0);full:out std_logic);end component;component scan6----------------------------------------------------------------元器件4 port (clr,clk : in STD_LOGIC;h_ten,h_one,m_ten,m_one,s_ten,s_one: in STD_LOGIC_vector(3 downto 0);cs: out STD_LOGIC_vector(5 downto 0);mux_out: out STD_LOGIC_vector(3 downto 0));end component;component bin2led---------------------------------------------------------------元器件5 port (bin : in std_logic_vector (3 downto 0);led : out std_logic_vector (7 downto 0) );end component;component sh1k ----------------------------------------------------------------------元器件6 Port( clk: in std_logic;--from system clock(40MHz)f1hz : out std_logic);-- 1Hz output signalend component;component alarm_set------------------------------------------------------------------元器件7 Port(rst,hz1: in std_logic;--system clock 1Hzalarm,ok: in std_logic;--keep pushing to declare alarm setsec_tune: in std_logic;sec_one,sec_ten:out std_logic_vector(3 downto 0));end component;end my_pkg;3.2.2 count60组件由此提供分(秒)计数值,当分计数器计数到59再来一个脉冲信号秒计数器清零从新开始计数,而进位则作为小时计数器的计数脉冲,使小时计数器计数加1,同时分计数器在分设置时钟信号的响应下设置分计数器的数值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数电设计数字钟基于Q U A R T U SHEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】大连理工大学本科实验报告题目:数电课设——多功能数字钟课程名称:数字电路课程设计学院(系):电信学部专业:电子与通信工程班级:学生姓名: ***************学号:***************完成日期:成绩:2010 年 12 月 17 日题目:多功能数字时钟一.设计要求1)具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)2)具有手动校时校分功能3)具有整点报时功能,从59分50秒起,每隔2秒钟提示一次4)具有秒表显示、计时功能(精确至百分之一秒),可一键清零5)具有手动定时,及闹钟功能,LED灯持续提醒一分钟6)具有倒计时功能,可手动设定倒计时范围,倒计时停止时有灯光提示,可一键清零二.设计分析及系统方案设计1. 数字钟的基本功能部分,包括时、分、秒的显示,手动调时,以及整点报时部分。
基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。
利用DE2硬件中提供的50MHZ晶振,经过分频得到周期为1s的时钟脉冲。
将该信号送入计数器进行计算,并把累加结果以“时”“分”“秒”的形式通过译码器由数码管显示出来。
进入手动调时功能时,通过按键改变控制计数器的时钟周期,使用的时钟脉冲进行调时计数(KEY1调秒,LOAD2调分,LOAD3调时),并通过译码器由七位数码从59分50秒开始,数字钟进入整点报时功能。
每隔两秒提示一次。
(本设计中以两个LED灯代替蜂鸣器,进行报时)2. 多功能数字钟的秒表功能部分,计时范围从00分秒至59分秒。
可由输入信号(RST1)异步清零,并由按键(EN1)控制计时开始与停止。
将DE2硬件中的50MHZ晶振经过分频获得周期为秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示。
3.多功能数字钟的闹钟功能部分,通过按键(KEY1,KEY2,KEY3)设定闹钟时间,当时钟进入闹钟设定的时间(判断时钟的时信号qq6,qq5与分信号qq4,qq3分别与闹钟设定的时信号r6,r5与分信号r4,43是否相等),则以LED灯连续提示一分钟。
4. 多功能数字钟的倒计时功能部分,可通过按键(LOAD7调秒,LOAD8调分,LOAD9调时)设定倒计时开始时刻。
倒计时的时钟与数字钟的时钟相同,每迎到一个时钟上升沿,则计数器减一。
计数器减至00时,分钟位、秒钟位恢复至59,时钟位恢复至23。
倒计时结束时(即00时00分00秒),控制LED灯亮,表示倒计时结束。
本设计通过数据选择器控制译码器,使数码管独立显示,各功能之间互不影响。
当LOAD4为高电平,则对秒表信号进行译码,数码管显示秒表数据;当LOAD4为低电平,LOAD5为高电平,则对闹钟信号进行译码,数码管显示闹钟数据;当LOAD4,LOAD5为低电平,LOAD6为高电平,则对倒计时信号进行译码,数码管显示倒计时信号数据;当LOAD4,LOAD5,LOAD6全为低电平,则对正常时钟信号进行译码,数码管显示时钟信号数据。
附图1:系统总体结构框图附图2系统硬件电路设计下载时选择的开发系统模式以及管脚定义四系统的VHDL设计源程序:--代码共372行library ieee;use clock isport( load9,load8,load7,load6,load5,load4,load3,load2,load1:in std_logic;clk,rst1,rst2,en1,en2,key1,key2,key3:in std_logic;q1,q2,q3,q4,q5,q6:out std_logic_vector(6 downto 0);led1,led2,led3,led4,led5:out std_logic);end;architecture a of clock issignal qq1,qq2,qq3,qq4,qq5,qq6:std_logic_vector(3 downto 0);--数字钟计数器信号signal vis1,vis2,vis3,vis4,vis5,vis6:std_logic_vector(3 downto 0);signal cp1,cp2,cp3,cp4,cp5:std_logic;signal p1:integer range 0 to 49;signal p2:integer range 0 to 999;signal p3:integer range 0 to 999;signal clfsa:integer range 0 to 499;signal a,b,c,d,e,f,g: std_logic_vector(3 downto 0);--秒表计数器信号signal r1,r2,r3,r4,r5,r6:std_logic_vector(3 downto 0);--闹钟信号signal z1,z2,z3,z4,z5,z6:std_logic_vector(3 downto 0);--倒计时计数器信号signal alz1,alz2,alz3,alz4,alz5:std_logic;Begin-----------------------------------------------------------------------分频模块-------------------------------------------------------------------------------------process(clk) --分频1beginif rising_edge(clk) thenif p1=49 thenp1<=0;cp1<='1';elsep1<=p1+1;cp1<='0';end if;end if;end process;process(cp1) --分频2beginif rising_edge(cp1) thenif p2=999 thenp2<=0;cp2<='1';elsep2<=p2+1;cp2<='0';end if;end if;end process;process(cp2) --得到周期为1秒的信号beginif rising_edge(cp2) thenif p3=999 thenp3<=0;cp3<='1';elsep3<=p3+1;cp3<='0';end if;end if;end process;process(cp2) --得到周期为百分之一秒的信号beginif rising_edge(cp2) thenif a="1001" then a<="0000";a1<='1';else a<=a+1;a1<='0';end if;end if;process(cp2) --得到周期为秒的信号beginif rising_edge(cp2) thenif clfsa=499 thenclfsa<=0;hlfs<='1';elseclfsa<=clfsa+1;hlfs<='0';end if;end if;end process;-----------------------------------------------------------------------数字钟模块----------------------------------------------------------------------------------process(cp3,load1,key1) --数字钟秒钟计数器beginif rising_edge(cp3) thenif load1='1' thenif key1='0' then --秒钟手动调节if qq2="0101" and qq1="1001"then qq1<="0000"; qq2<="0000";elsif qq1="1001" thenqq1<="0000";qq2<=qq2+1;else qq1<=qq1+1;end if;end if;else if load1='0' thenif qq2="0101" and qq1="1001"then qq1<="0000"; qq2<="0000";cp4<='1';elsif qq1="1001" thenqq1<="0000";qq2<=qq2+1;cp4<='0';else qq1<=qq1+1;cp4<='0';end if;if qq2="0101" and en='1' then --整点报时case qq1 iswhen "0001"=>led2<='1';when "0011"=>led2<='1';when "0101"=>led2<='1';when "0111"=>led2<='1';when "1001"=>led3<='1';when others =>led2<='0';led3<='0';end case;else led2<='0';led3<='0';end if;end if;end if;end if;process(hlfs,cp4,load2) --数字钟分钟计数器beginif load2='1' then clkx<=hlfs;else clkx<=cp4;end if; --当load2为高电平时,进行分调节if rising_edge(clkx)thenif qq4="0101" and qq3="1001"then qq3<="0000"; qq4<="0000";cp5<='1';elsif qq3="1001" thenqq3<="0000";qq4<=qq4+1;cp5<='0';else qq3<=qq3+1;cp5<='0';end if;end if;if qq3="1001" and qq4="0101" then en<='1';else en<='0';end if; end process;process(hlfs,cp5,load1) --数字钟时钟计数器beginif load3='1' then clkx1<=hlfs;else clkx1<=cp5;end if; --当load3为高电平时,进行小时调节if rising_edge(clkx1) thenif qq5="0011" and qq6="0010" thenqq5<="0000"; qq6<="0000";elsif qq5="1001" thenqq5<="0000";qq6<=qq6+1;else qq5<=qq5+1;end if;end if;end process;-----------------------------------------------------------------------闹钟模块-------------------------------------------------------------------------------------process(hlfs,load5,key1) --闹钟秒计数器beginif rising_edge(hlfs) thenif load5='1' thenif key1='0' then --手动进行闹钟秒设定 if r2="0101" and r1="1001"then r1<="0000"; r2<="0000";elsif r1="1001" thenr1<="0000";r2<=r2+1;else r1<=r1+1;end if;end if;end if;end if;end process;process(hlfs,load5,key2) --闹钟分计数器beginif rising_edge(hlfs) thenif key2='0' then --手动进行闹钟分设定 if r4="0101" and r3="1001"then r3<="0000"; r4<="0000";elsif r3="1001" thenr3<="0000";r4<=r4+1;else r3<=r3+1;end if;end if;end if;end if;end process;process(hlfs,load5,key3) --闹钟小时计数器beginif rising_edge(hlfs) thenif load5='1' thenif key3='0' then --手动进行闹钟小时设定if r6="0010" and r5="0011"then r5<="0000"; r6<="0000";elsif r5="1001" thenr5<="0000";r6<=r6+1;else r5<=r5+1;end if;end if;end if;end if;end process;process(cp3,qq1,qq2,qq3,qq4,qq5,qq6,r1,r2,r3,r4,r5,r6) --数字钟与闹钟相符,以LED灯进行提示beginif rising_edge(cp3) thenif qq3=r3 and qq4=r4 and qq5=r5 and qq6=r6then led1<='1';else led1<='0';end if;end if;end process;-----------------------------------------------------------------------秒表模块-------------------------------------------------------------------------------------process(a1,rst1,en1) --秒表计数器beginif rst1='1' then b<="0000";c<="0000"; --秒表异步清零elsif rising_edge(a1) thenif en1='1' thenif b="1001" and c="1001"then b<="0000";c<="0000";c1<='1';elsif b="1001" thenb<="0000";c<=c+1;c1<='0';else b<=b+1;c1<='0';。