EDA数字时钟设计

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

EDA 课程设计报告书

课题名称 数字时钟设计

姓 名 学 号 院、系、部 电气系 专 业 电子信息工程

指导教师

2013年 12 月 3 日

※※※※※※※※※ ※※ ※※ ※※ ※※

※※※※※

※※

2011级EDA

课程设计

数字时钟设计

一、设计目的

了解数字钟的工作原理。通过学习的VHDL语言结合EDA的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。通过对实用数字钟的设计,巩固和综合运用计算机原理的基本理论和方法,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。详细目的如下:

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

2 学习和掌握EDA设计电路的应用;

3 掌握各芯片的逻辑功能及使用方法;

4 了解数字钟的组成及工作原理;

5 熟悉数字钟应该具有的功能;

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

二、设计要求

多功能数字钟应该具有的功能有:首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从0~23时。

在设计中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。

设计中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描的确需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟进行分频。

对于报警信号,由于实验箱上只有一个小的扬声器,而要使扬声器发声,必须给其一定频率的信号进行驱动,频率越高,声音越尖。另外由于人耳的听觉范围是300Hz~3.4KHz左右,所以设计时也要选择恰当的发声频率。

Clock选择10KHZ。本设计的任务就是设计一个数字钟,要求显示格式为小时-分钟-秒钟。系统时钟选择时钟模块的10KHz,要得到1Hz时钟信号,必须对系统时钟进行10000次分频。用S1按键作为系统时钟复位,复位后全部显示00-00-00。

三、流程图设计

数字时钟设计流程图如图3-1所示:

图3-1程序流程图

四、程序设计(程序代码)

1、秒钟计数器源程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY second IS

PORT( clk,reset,setmin:STD_LOGIC;

enmin:OUT STD_LOGIC;

daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END second;

ARCHITECTURE fun OF second IS

SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL enmin_1,enmin_2:STD_LOGIC;

BEGIN

daout<=count;

enmin_2<=(setmin and clk);

enmin<=(enmin_1 or enmin_2);

PROCESS(clk,reset,setmin)

BEGIN

IF(reset='0')THEN count<="0000000";

ELSIF(clk 'event and clk='1')then

IF(count(3 downto 0)="1001")then

IF(count<16#60#)then

IF(count="1011001")then

enmin_1<='1';count<="0000000"; ELSE

count<=count+7;

END IF;

ELSE

count<="0000000";

END IF;

ELSIF(count<16#60#)then

count<=count+1;

enmin_1<='0'after 100 ns;

ELSE

count<="0000000";

END IF;

END IF;

END PROCESS;

END fun;

2、分钟计数器源程序

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;

daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ENTITY minute ;

ARCHITECTURE fun OF minute IS

SIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0);

SIGNAL enhour_1, enhour_2: STD_LOGIC;

BEGIN

daout<=count;

enhour_2<= (sethour and clk1);

enhour<= (enhour_1 or enhour_2);

PROCESS(clk,reset,sethour)

BEGIN

IF(reset='0') THEN

count<="0000000";

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

IF(count (3 DOWNTO 0) ="1001")THEN

IF(count <16#60#) THEN

IF(count="1011001") THEN

enhour_1<='1';

count<="0000000";

ELSE

count<=count+7;

END IF;

ELSE

count<="0000000";

END IF;

ELSIF (count <16#60#) THEN

count<=count+1;

enhour_1<='0' after 100 ns;

ELSE

count<="0000000";

END IF;

END IF;

END process;

END fun;

相关文档
最新文档