EDA数字时钟课程设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

学生姓名学号

班级

专业电子信息工程

题目数字时钟设计

指导教师

2011 年11 月

一、任务和设计要求

1. 熟悉集成电路的引脚安排。

2. 掌握各芯片的逻辑功能及使用方法。

3. 了解数字钟的组成及工作原理。

4. 熟悉数字钟的设计与制作。

1.设计指标

(1)时间以24 小时为一个周期;

(2)显示时、分、秒;

(3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;

(4)计时过程具有报时功能,当时间到达整点前 5 秒进行蜂鸣报时。

2.设计要求

(1)画出电路原理图(或仿真电路图);

(2)元器件及参数选择;

(3)电路仿真与调试

二、设计原理

设计思路

根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。

1)时钟计数:

首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。

由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。

用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。

2)时间设置:

手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。

3)清零功能:

reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。

总体结构图

三、系统设计

1)时、分、秒计时器

时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、 (59)

00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。

2)校时电路

当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset 开关,电子钟从设置的时间开始往后计时。

四、参考程序

Alert模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY alert IS

PORT(clk:IN STD_LOGIC;

dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);

speak:OUT STD_LOGIC;

lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END alert;

ARCHITECTURE fun OF alert IS

SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);

BEGIN

speaker:PROCESS(clk)

BEGIN

--speak<=count1(1);

IF(clk'event and clk='1')THEN

IF(dain="0000000")THEN

speak<=count1(1);

IF(count1>="10")THEN

count1<="00";--count1为三进制加法计数器ELSE

count1<=count1+1;

--speak<=count1(0);

END IF ;

END IF ;

END IF ;

END PROCESS speaker;

lamper:PROCESS(clk)

BEGIN

IF(rising_edge(clk))THEN

IF(count<="10")THEN

IF(count="00")THEN

lamp<="001";--循环点亮三只灯

ELSIF(count="01")THEN

lamp<="010";

ELSIF(count="10")THEN

lamp<="100";

END IF;

count<=count+1;

ELSE

count<="00";

END IF;

END IF;

END PROCESS lamper;

END fun;

Hour模块

LIBRARY IEEE;

use IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY hour IS

PORT(clk,reset:IN STD_LOGIC;

daout:out STD_LOGIC_VECTOR(5 DOWNTO 0));

END ENTITY hour;

ARCHITECTURE fun OF hour IS

SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);

BEGIN

daout<=count;

PROCESS(clk,reset)

BEGIN

IF(reset='0')THEN count<="000000"; --若reset=0,则异步清零

ELSIF(clk'event and clk='1')THEN --否则,若clk上升沿到IF(count(3 DOWNTO 0)="1001")THEN --若个位计时恰好到"1001"即9

IF(count<16#23#)THEN --23进制

count<=count+7; --若到23D则

else

count<="000000"; --复0

END IF;

ELSIF (count<16#23#)THEN --若未到23D,则count进1

count<=count+1;

ELSE --否则清零

count<="000000";

END IF; --END IF(count(3 DOWNTO 0)="1001")

END IF; --END IF(reset='0')

END PROCESS;

END fun;

Minute模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY minute IS

PORT(clk,clk1,reset,sethour:IN STD_LOGIC;

enhour:OUT STD_LOGIC;

相关文档
最新文档