数字钟.docx
- 文档编号:24148630
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:19
- 大小:68.92KB
数字钟.docx
《数字钟.docx》由会员分享,可在线阅读,更多相关《数字钟.docx(19页珍藏版)》请在冰豆网上搜索。
数字钟
黑龙江科技学院
课程设计任务书
一、设计题目:
二、设计的主要内容:
指导教师:
日期:
教师评语:
评阅成绩:
评阅人:
日期:
摘要
随着EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。
EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
本文介绍了基于VHDL硬件描述语言设计的多功能数字钟的思路和技巧。
在Quartus11开发环境中编译和仿真了所设计的程序,并逐一调试验证程序的运行状况。
仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟播放音乐功能具有一定的实际应用性。
。
关键词:
闹钟FPGAVHDLQuartusII
第1章数字钟概述
●设计采用同步时序逻辑,计数器组中的触发器使用相同的触发信号,按进位条件进行计数。
这种方法的时钟信号单一,有利于校时控制,便于消除内部竞争和冒险问题。
●整个系统设计了五个模块:
计数器模块、时钟分频模块、状态控制模块、扫描显示模块、报时报警模块。
MODESET时钟信号
图1数字钟连接模块示意图
1.1实现功能
1.能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒钟的计数器显示。
2.能利用扬声器做整点报时:
(1)当计时到达59分钟的第“51、53、55、57”秒鸣叫声频为512Hz;
(2)当计时到达59分钟的第“59”秒整点报时,频率为1KHz。
3.能利用按键实现“校时”“校分”“闹钟”功能:
(1)按下“SET”键时进入秒校时,第二次按下进入分校时,第三次按下小时校时,第四次按下进入闹钟分设定,第五次按下进入闹钟时设定,第六次按下返回正常工作状态。
(2)秒校时状态:
蜂鸣器发出“滴”的周期为1秒,按住“MODE”键秒钟以3Hz的频率递增技数;
(3)分校时状态:
蜂鸣器发出“滴”“滴”的周期为1秒,按住“MODE”键秒钟以3Hz的频率递增技数;
(4)小时校时状态:
蜂鸣器发出“滴”“滴”“滴”的周期为1秒,按住“MODE”键秒钟以3Hz的频率递增技数;
(5)闹钟分设置状态:
蜂鸣器发出“滴”的周期为1秒,按住“MODE”键秒钟以3Hz的频率递增技数;
(6)闹时分设置状态:
蜂鸣器发出“滴”“滴”的周期为1秒,按住“MODE”键秒钟以3Hz的频率递增技数
第2章数字钟设计思想
2.1具体设计
设计采用同步时序逻辑,计数器组中的触发器使用相同的触发信号,按进位条件进行计数。
这种方法的时钟信号单一,有利于校时控制,便于消除内部竞争和冒险问题。
整个系统设计了五个模块:
计数器模块、时钟分频模块、状态控制模块、扫描显示模块、报时报警模块。
2.1.1报时报警模块:
B1B2=1时,输出512Hz信号;
B1B3=1时,输出1024Hz信号;
SET_ALARM有信号时,直接输出
2.1.2计数器模块:
S[2..0]=0时,计数器按H1正常记数
S[2..0]=1时,若MODE有效秒钟计数器按H3计数
S[2..0]=2时,若MODE有效分钟计数器按H3计数
S[2..0]=3时,若MODE有效小时计数器按H3计数
S[2..0]=4时,若MODE有效闹钟的分计数器按H3计数
S[2..0]=5时,若MODE有效闹钟的小时计数器按H3计数
2.1.3状态控制模块:
连续按下SET键,则信号S[2..0]在0~5之间变化;
S[2..0]=0为正常工作状态
S[2..0]=1为秒校准
S[2..0]=2为分校准
S[2..0]=3为小时校准
S[2..0]=4为闹钟分设置
S[2..0]=5为闹钟小时设置
:
2.1.4时钟分频模块:
对输入信号进行分频,提供系统所需的全部时钟信号、报时信号、扫描显示信号和校时提示信号。
2.1.5扫描显示模块:
实现小时、分、秒的动态扫描显示;
SEL[2..0]为数码管的位选择信号;
A,B,C,D,E,F,G为数码管段选择信号;
第3章具体设计
计数模块
S[2..0]=0时,计数器按H1正常记数
S[2..0]=1时,若MODE有效秒钟计数器按H3计数
S[2..0]=2时,若MODE有效分钟计数器按H3计数
S[2..0]=3时,若MODE有效小时计数器按H3计数
S[2..0]=4时,若MODE有效闹钟的分计数器按H3计数
S[2..0]=5时,若MODE有效闹钟的小时计数器按H3计数
控制模块
连续按下SET键,则信号S[2..0]在0~5之间变化;
S[2..0]=0为正常工作状态
S[2..0]=1为秒校准
S[2..0]=2为分校准
S[2..0]=3为小时校准
S[2..0]=4为闹钟分设置
S[2..0]=5为闹钟小时设置
时钟分频模块
对输入信号进行分频,提供系统所需的全部时钟信号、报时信号、扫描显示信号和校时提示信号。
扫描显示模块:
实现小时、分、秒的动态扫描显示;
SEL[2..0]为数码管的位选择信号;
A,B,C,D,E,F,G为数码管段选择信号
第五章结束语
通过本次实验,系统的复习整个VHDL的知识,,能够熟练的运用MAX-plubII这个软件,尤其重要的是,在老师的指导学会了使用这个软件来给程序配置引脚,并且实际的通过模拟的几个程序控制整个操作的过程,终于感到自己所学到的知识可以付诸到实践了,对以后的学习也有很大的帮助。
参考文献
1周润景《基于quartusII的FPGA/CPLD数字系统设计实例》[M]电子工业出版社、
2汪国强《EDA技术与应用》[M]电子工业出版社
3赵雅兴《FPGA原理、设计与应用》[M]天津大学出版社
4湖南科技学院电子工程与物理系.基于FPGA的仪表用多功能数字时钟的嵌入设计[J]《电测与仪表》2008年01期
5张子刚基于VHDL的数字时钟的设计[J]《气象水文海洋仪器》2008年第2期
……………
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTERIS
PORT(M,H1,H3:
INSTD_LOGIC;
SET:
INSTD_LOGIC_VECTOR(2DOWNTO0);
HOU:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
MIN:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
SEC:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
B1,B2,B3:
OUTSTD_LOGIC;
N:
OUTSTD_LOGIC);
ENDCOUNTER;
ARCHITECTUREAOFCOUNTERIS
SIGNALCLKS,CLKM,CLKH:
STD_LOGIC;
SIGNALHOUR1,HOUR0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALMINI1,MINI0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSECO1,SECO0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSETH1,SETH0,SETM1,SETM0:
STD_LOGIC_VECTOR
(3DOWNTO0);
BEGIN
--SECONDCOUNTER
CLKS<=H1WHENSET=0ELSE
H3WHEN(SET=1ANDM='1')ELSE
'0';
PROCESS(CLKS)
BEGIN
WAITUNTIL(CLKS='1');
IFSECO0=9THENSECO0<="0000";
ELSESECO0<=SECO0+1;
ENDIF;
IFSECO0=9THEN
IFSECO1=5THENSECO1<="0000";
ELSESECO1<=SECO1+1;
ENDIF;
ENDIF;
ENDPROCESS;
--MINUTECOUNTER
CLKM<=H1WHENSET=0ELSE
H3WHEN(SET=2ANDM='1')ELSE
'0';
PROCESS(CLKM)
BEGIN
WAITUNTIL(CLKM='1');
IF((SECO1=5ANDSECO0=9)OR(SET=2ANDM='1'))THEN
IFMINI0=9THENMINI0<="0000";
ELSEMINI0<=MINI0+1;
ENDIF;
IFMINI0=9THEN
IFMINI1=5THENMINI1<="0000";
ELSEMINI1<=MINI1+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
--HOURCOUNTER
CLKH<=H1WHENSET=0ELSE
H3WHEN(SET=3ANDM='1')ELSE
'0';
PROCESS(CLKH)
BEGIN
WAITUNTIL(CLKH='1');
IF(((SECO1=5ANDSECO0=9)AND(MINI1=5ANDMINI0=9))OR
(SET=3ANDM='1'))THEN
IF(HOUR1=2ANDHOUR0=3)THEN
HOUR1<="0000";HOUR0<="0000";
ELSIFHOUR0=9THEN
HOUR0<="0000";HOUR1<=HOUR1+1;
ELSEHOUR0<=HOUR0+1;
ENDIF;
ENDIF;
ENDPROCESS;
--ALARMSETTING
PROCESS(H3)
BEGIN
WAITUNTIL(H3='1');
IF(M='1'ANDSET=4)THEN
IFSETM0=9THENSETM0<="0000";
ELSESETM0<=SETM0+1;
ENDIF;
IFSETM0=9THEN
IFSETM1=5THENSETM1<="0000";
ELSESETM1<=SETM1+1;
ENDIF;
ENDIF;
ENDIF;
--HOURCOUNTER
IF(M='1'ANDSET=5)THEN
IF(SETH1=2ANDSETH0=3)THEN
SETH1<="0000";SETH0<="0000";
ELSIFSETH0=9THEN
SETH0<="0000";SETH1<=SETH1+1;
ELSESETH0<=SETH0+1;
ENDIF;
ENDIF;
ENDPROCESS;
--LEDDISPLAY
PROCESS(SET)
BEGIN
IFSET<4THEN
HOU(7DOWNTO4)<=HOUR1;
HOU(3DOWNTO0)<=HOUR0;
MIN(7DOWNTO4)<=MINI1;
MIN(3DOWNTO0)<=MINI0;
SEC(7DOWNTO4)<=SECO1;
SEC(3DOWNTO0)<=SECO0;
ELSE
HOU(7DOWNTO4)<=SETH1;
HOU(3DOWNTO0)<=SETH0;
MIN(7DOWNTO4)<=SETM1;
MIN(3DOWNTO0)<=SETM0;
SEC(7DOWNTO4)<="0000";
SEC(3DOWNTO0)<="0000";
ENDIF;
ENDPROCESS;
--ALARM
N<='1'when(HOUR1=SETH1ANDHOUR0=SETH0ANDMINI1=SETM1ANDMINI0=SETM0)ELSE
'0';
B1<='1'WHEN(MINI1=5ANDMINI0=9)ELSE
'0';
B2<='1'WHEN(SECO1=5AND(SECO0=1ORSECO0=3ORSECO0=5ORSECO0=7))ELSE
'0';
B3<='1'WHEN(SECO1=5ANDSECO0=9)ELSE
'0';
END;-----状态控制
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entityset_modeis
port(set_key,h128:
instd_logic;
set:
outstd_logic_vector(2downto0));
endset_mode;
architectureaofset_modeis
typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11);
signalpresent:
state;
Begin
process(h128)
begin
if(h128'eventandh128='1')then
casepresentis
whens0=>--set<="000";
ifset_key='0'thenpresent<=s0;elsepresent<=s1;
endif;
whens1=>--set<="001";
ifset_key='0'thenpresent<=s2;elsepresent<=s1;
endif;
whens2=>--set<="001";
ifset_key='0'thenpresent<=s2;elsepresent<=s3;
endif;
whens3=>--set<="010";
ifset_key='0'thenpresent<=s4;elsepresent<=s3;
endif;
whens4=>--set<="010";
ifset_key='0'thenpresent<=s4;elsepresent<=s5;
endif;
whens5=>--set<="011";
ifset_key='0'thenpresent<=s6;elsepresent<=s5;endif;
whens6=>--set<="011";
ifset_key='0'thenpresent<=s6;elsepresent<=s7;endif;
whens7=>--set<="100";
ifset_key='0'thenpresent<=s8;elsepresent<=s7;endif;
whens8=>--set<="100";
ifset_key='0'thenpresent<=s8;elsepresent<=s9;endif;
whens9=>--set<="101";
ifset_key='0'thenpresent<=s10;elsepresent<=s9;endif;
whens10=>--set<="101";
ifset_key='0'thenpresent<=s10;elsepresent<=s11;endif;
whens11=>--set<="000";
ifset_key='0'thenpresent<=s0;elsepresent<=s11;endif;
endcase;
endif;
endprocess;
--setvalue
process(present)
begin
casepresentis
whens0=>set<="000";
whens1=>set<="001";
whens2=>set<="001";
whens3=>set<="010";
whens4=>set<="010";
whens5=>set<="011";
whens6=>set<="011";
whens7=>set<="100";
whens8=>set<="100";
whens9=>set<="101";
whens10=>set<="101";
whens11=>set<="000";
endcase;
endprocess;
enda;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCLK_SOURIS
PORT(SIGNAL_IN:
INSTD_LOGIC;
SET:
INSTD_LOGIC_VECTOR(2DOWNTO0);
H1,H3,A3:
OUTSTD_LOGIC;
H128,H512,H1024:
OUTSTD_LOGIC;
SET_ALARM:
OUTSTD_LOGIC);
ENDCLK_SOUR;
ARCHITECTUREAOFCLK_SOURIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(9DOWNTO0);
BEGIN
--1024COUNTER
PROCESS(SIGNAL_IN)
BEGIN
IF(SIGNAL_IN'EVENTANDSIGNAL_IN='1')THEN
COUNT<=COUNT+1;
ENDIF;
ENDPROCESS;
--1Hz,3Hz,4Hz...
H1<='1'WHENCOUNT=8ELSE
'0';
H3<='1'WHEN(COUNT=8ORCOUNT=344ORCOUNT=680)ELSE
'0';
A3<=COUNT(7);
H128<=COUNT
(2);
H512<=COUNT(0);
H1024<=SIGNAL_IN;
--ALARMSIGNAL
SET_ALARM<=SIGNAL_INWHEN(SET=1AND(COUNT>=8)AND
(COUNT<=71))ELSE
SIGNAL_INWHEN(SET=2AND(((COUNT>=8)AND(COUNT<=71))
OR((COUNT>=136)AND(COUNT<=199))))ELSE
SIGNAL_INWHEN(SET=3AND(((COUNT>=8)AND(COUNT<=71))
OR((COUNT>=136)AND(COUNT<=199))
OR((COUNT>=264)AND(COUNT<=327))))ELSE
COUNT(0)WHEN(SET=4AND(COUNT>=8)AND(COUNT<=71))ELSE
COUNT(0)WHEN(SET=5AND(((COUNT>=8)AND(COUNT<=71))
OR((COUNT>=136)AND(COUNT<=199))))ELSE
'0';
ENDA;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdisplayIS
PORT(h512:
INSTD_LOGIC;--扫描信号
hou,min,sec:
INSTD_LOGIC_VECTOR(7DOWNTO0);
sel:
BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);--扫描位选择信号
A,B,C,D,E,F,G:
OUTSTD_LOGIC);--数码管段信号a,b,c,d,e,f,g
ENDdisplay;
ARCHITECTUREoneOFdisplayIS
SIGNALS:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALDin:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(h512)--显示扫描信号
BEGIN
IFh512'eventANDh512='1'THENsel<=sel+1;
ENDIF;
ENDPROCESS;
PROCESS(sel)--数据选择器
BEGIN
CASESELIS
WHEN"000"=>Din<=sec(3downto0);--秒
WHEN"001"=>Din<=sec(7downto4);
WHEN"010"=>Din<="1010";--杠
WHEN"011"=>Din<=min(3downto0);--分
WHEN"100"=>Din<=min(7downto4);
WHEN"101"=>Din<="1010";--杠
WHEN"110"=>Din<=hou(3downto0);--时
WHEN"111"=>Din<=hou(7downto4);
WHENOTHERS=>din<="1111";
ENDCASE;
PROCESS(Din)--BCD译码器
BEGIN
CASEDinIS--a,b,c,d,e,f,g
WHEN"0000"=>S<="0000001";--0
WHEN"0001"=>S<="1001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字