数字钟的设计 精品.docx
- 文档编号:13377748
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:17
- 大小:1,015.33KB
数字钟的设计 精品.docx
《数字钟的设计 精品.docx》由会员分享,可在线阅读,更多相关《数字钟的设计 精品.docx(17页珍藏版)》请在冰点文库上搜索。
数字钟的设计精品
设计题目数字钟的设计
一、题目分析
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字钟的设计 精品 数字 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)