数字钟的设计 精品.docx

上传人:b****9 文档编号:26010730 上传时间:2023-06-17 格式:DOCX 页数:17 大小:1,015.33KB
下载 相关 举报
数字钟的设计 精品.docx_第1页
第1页 / 共17页
数字钟的设计 精品.docx_第2页
第2页 / 共17页
数字钟的设计 精品.docx_第3页
第3页 / 共17页
数字钟的设计 精品.docx_第4页
第4页 / 共17页
数字钟的设计 精品.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数字钟的设计 精品.docx

《数字钟的设计 精品.docx》由会员分享,可在线阅读,更多相关《数字钟的设计 精品.docx(17页珍藏版)》请在冰豆网上搜索。

数字钟的设计 精品.docx

数字钟的设计精品

设计题目数字钟的设计

一、题目分析

1、功能要求

(1)具有时、分、秒计数显示功能,以24小时循环计时。

(2)时钟计数显示时有LED灯的花样显示。

(3)具有调节小时、分钟、秒及清零的功能。

(4)具有整点报时功能。

2、总体方框图

本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

显示则小时采用24进制,而分钟和秒是采用6进制和10进制的组合。

3、设计原理

(1)时钟计数:

完成时、分、秒的正确计时并且显示所计的数字;对秒、分

——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。

(2)时间设置:

手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。

我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。

(3)清零功能:

reset为复位键,低电平时实现清零功能,高电平时正常计数。

可以根据我们自己任意时间的复位。

(4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。

产生“滴答.滴答”的报警声音。

(5)LED灯在时钟显示时有花样显示信号产生。

即根据进位情况,LED不停的闪烁,从而产生“花样”信号。

 

二、设计方案

根据总体方框图及各部分分配的功能可知,本系统可以由四个子模块和一个顶层文件构成。

采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。

1、子模块

(1)秒计数器(second)模块

它是由一个60进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,秒计时器清0;clk为系统时钟信号;setmin是分钟的设置信号;enmin为秒计时器的进位信号,作为下一级的输入信号;daout是秒计数值。

(2)分钟计数器(minute)模块

它是由一个60进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,分计时器清0;clk为系统时钟信号;clk1为设置时钟信号;sethour时设置信号;enhour为分计时器的进位信号,作为下一级的输入信号。

(3)小时计数器(hour)模块

是由一个24进制的计数器构成的,具有清0、置数和计数功能。

其中reset为清0信号,当reset为0时,时计时器清0;clk为时计数时钟信号;daout为时计数值。

(4)整点报时器(alarm)模块

它的功能是整点时,报时持续1分钟,dain为分计数值;speak为蜂鸣器报警;lamp为花样显示灯。

2、数字钟设计的电路原理图

三、设计步骤

1、打开QUARTUSII9.0,单击“file”菜单,将鼠标移到NewProjectWizard选项单击则显示如下图内容,在其中建立项目名和实体名,项目名和实体必须保持一致,最后点击finish完成。

2、在其中点击file→new,选择原理图编辑器,在这里我们建立VHDL文件,点击确定则显示下图情况,可以在里面键入程序,如下图。

3、选择目标器件并编译

(1)在Assignments选项的下拉菜单中选择器件选择项Device,如图所示。

在DeviceFamily(器件序列栏)中选定目标器件对应的序列名,EP1C6对应的是Cyclone系列。

为了选择EP1C6Q240C8器件,应将此栏下方标有ShowonlyFastestSpeedGrades的勾消去,以便显示出所有速度级别的器件。

完成器件选择后,按OK键。

(2)编译工程项目。

单机水平工具条上的编译按钮

开始编译,编译完全正确后的屏幕如下图所示。

4、时序仿真

(1)建立波形文件:

选择File->New,选择VectorWaveformFile,单击OK。

(2)双击Name下的空白处,弹出InsertNodorBus对话框,单击NodeFinder。

(3)在Filter中选择all,单击List,再单击“>>”,最后单击OK。

(4)加上输入信号后波形文件存盘,运行仿真器,在Processing菜单下选择StartSimulation项,直到Simulatorwassuccessful出现,仿真结束。

5、引脚锁定

选择AssignAssignmentEditor,在跳出的窗口中的Category中选择Pin。

在To中选择端口,Location中进行锁定,锁定如图。

6、编程下载

(1)首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源,选择模式7。

(2)打开编辑窗和配置文件。

选择,弹出一个编辑窗。

在Mode栏中选择JTAG,并在选项下的小方框打勾。

注意核对下载文件路径与文件名。

如果文件没有出现或者出错,单击左Addfile侧按钮,手动选择配置文件clock.sof。

(3)最后设置编程器,再下载标符Start,即进入对目标器件FPGA的配置下载操作。

当Progress显示100%,以及在底部的处理栏中出现ConfigurationSucceeded时,表示编程成功,如图所示。

注意,如果必要时,可再次单击Start,直至编程成功。

7、实验现象

实验箱使用模式7,键8为复位按键,键8为1时正常工作。

键4设置小时,键7设置分钟。

下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。

当秒数满60则进一位,分钟数满60进一位,当显示为23:

59:

59时,秒数在加一则显示00:

00:

00,之后从新计时。

四、实验总结

通过这次设计实验,使得我对层次化结构化设计有了更深的了解。

在设计中将设计任务分成了几个子模块,完成各子模块的设计功能,然后再将各模块合起来联试,加深了层次化设计概念。

在设计的过程中,我遇到许多问题,毕竟是第一次应用VHDL进行硬件电路系统的设计,许多EDA的知识还没有充分的掌握,遇到困难也是在所难免的,同时发现了自己的不足之处:

学习知识表面化,没有深入了解它们的原理。

只有理论知识无法实现相关的设计和实际操作,当把所学的理论知识与实践相结合起来,从理论中得出结论,这样才能把所学的理论知识更加巩固至掌握住,才能提高自己的实际动手能力和独立思考能力。

在此,也感谢周老师的悉心指导,让我学到很多。

 

五、附录

秒钟计数器VHDL语言源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsecondIS

PORT(clk,reset,setmin:

STD_LOGIC;

enmin:

OUTSTD_LOGIC;

daout:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYsecond;

ARCHITECTUREfunOFsecondIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALenmin_1,enmin_2:

STD_LOGIC;

BEGIN

daout<=count;

enmin_2<=(setminandclk);

enmin<=(enmin_1orenmin_2);

PROCESS(clk,reset,setmin)

BEGIN

IF(reset='0')THENcount<="0000000";

ELSIF(clk'eventandclk='1')then

IF(count(3downto0)="1001")then

IF(count<16#60#)then

IF(count="1011001")then

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

ELSE

count<=count+7;

ENDIF;

ELSE

count<="0000000";

ENDIF;

ELSIF(count<16#60#)then

count<=count+1;

enmin_1<='0'after100ns;

ELSE

count<="0000000";

ENDIF;

ENDIF;

ENDPROCESS;

ENDfun;

分钟计数器VHDL语言源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYminuteIS

PORT(clk,clk1,reset,sethour:

INSTD_LOGIC;

enhour:

OUTSTD_LOGIC;

daout:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYminute;

ARCHITECTUREfunOFminuteIS

SIGNALcount:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALenhour_1,enhour_2:

STD_LOGIC;

BEGIN

daout<=count;

enhour_2<=(sethourandclk1);

enhour<=(enhour_1orenhour_2);

PROCESS(clk,reset,sethour)

BEGIN

IF(reset='0')THEN

count<="0000000";

ELSIF(clk'eventandclk='1')THEN

IF(count(3DOWNTO0)="1001")THEN

IF(count<16#60#)THEN

IF(count="1011001")THEN

enhour_1<='1';

count<="0000000";

ELSE

count<=count+7;

ENDIF;

ELSE

count<="0000000";

ENDIF;

ELSIF(count<16#60#)THEN

count<=count+1;

enhour_1<='0'after100ns;

ELSE

count<="0000000";

ENDIF;

ENDIF;

ENDprocess;

ENDfun;

小时计数器VHDL语言源程序

LIBRARYIEEE;

useIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYhourIS

PORT(clk,reset:

INSTD_LOGIC;

daout:

outSTD_LOGIC_VECTOR(5DOWNTO0));

ENDENTITYhour;

ARCHITECTUREfunOFhourIS

SIGNALcount:

STD_LOGIC_VECTOR(5DOWNTO0);

BEGIN

daout<=count;

PROCESS(clk,reset)

BEGIN

IF(reset='0')THENcount<="000000";

ELSIF(clk'eventandclk='1')THEN

IF(count(3DOWNTO0)="1001")THEN

IF(count<16#23#)THEN

count<=count+7;

else

count<="000000";

ENDIF;

ELSIF(count<16#23#)THEN

count<=count+1;

ELSE

count<="000000";

ENDIF;

ENDIF;

ENDPROCESS;

ENDfun;

整点报时模块VHDL语言源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYalertIS

PORT(clk:

INSTD_LOGIC;

dain:

INSTD_LOGIC_VECTOR(6DOWNTO0);

speak:

OUTSTD_LOGIC;

lamp:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDalert;

ARCHITECTUREfunOFalertIS

SIGNALcount:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALcount1:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

speaker:

PROCESS(clk)

BEGIN

speak<=count1

(1);

IF(clk'eventandclk='1')THEN

IF(dain="0000000")THEN

IF(count1>="10")THEN

count1<="00";

ELSE

count1<=count1+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESSspeaker;

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";

ENDIF;

count<=count+1;

ELSE

count<="00";

ENDIF;

ENDIF;

ENDPROCESSlamper;

ENDfun;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1