vhdl课程设计电子钟闹铃.docx

上传人:b****3 文档编号:6053669 上传时间:2023-05-09 格式:DOCX 页数:22 大小:118.20KB
下载 相关 举报
vhdl课程设计电子钟闹铃.docx_第1页
第1页 / 共22页
vhdl课程设计电子钟闹铃.docx_第2页
第2页 / 共22页
vhdl课程设计电子钟闹铃.docx_第3页
第3页 / 共22页
vhdl课程设计电子钟闹铃.docx_第4页
第4页 / 共22页
vhdl课程设计电子钟闹铃.docx_第5页
第5页 / 共22页
vhdl课程设计电子钟闹铃.docx_第6页
第6页 / 共22页
vhdl课程设计电子钟闹铃.docx_第7页
第7页 / 共22页
vhdl课程设计电子钟闹铃.docx_第8页
第8页 / 共22页
vhdl课程设计电子钟闹铃.docx_第9页
第9页 / 共22页
vhdl课程设计电子钟闹铃.docx_第10页
第10页 / 共22页
vhdl课程设计电子钟闹铃.docx_第11页
第11页 / 共22页
vhdl课程设计电子钟闹铃.docx_第12页
第12页 / 共22页
vhdl课程设计电子钟闹铃.docx_第13页
第13页 / 共22页
vhdl课程设计电子钟闹铃.docx_第14页
第14页 / 共22页
vhdl课程设计电子钟闹铃.docx_第15页
第15页 / 共22页
vhdl课程设计电子钟闹铃.docx_第16页
第16页 / 共22页
vhdl课程设计电子钟闹铃.docx_第17页
第17页 / 共22页
vhdl课程设计电子钟闹铃.docx_第18页
第18页 / 共22页
vhdl课程设计电子钟闹铃.docx_第19页
第19页 / 共22页
vhdl课程设计电子钟闹铃.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

vhdl课程设计电子钟闹铃.docx

《vhdl课程设计电子钟闹铃.docx》由会员分享,可在线阅读,更多相关《vhdl课程设计电子钟闹铃.docx(22页珍藏版)》请在冰点文库上搜索。

vhdl课程设计电子钟闹铃.docx

vhdl课程设计电子钟闹铃

数字钟的设计

一、系统功能概述

(一)、系统实现的功能:

1、具有“时”、“分”、“秒”的十进制数字显示(小时从00~23)。

2、具有手动校时、校分、校秒的功能。

3、有定时和闹钟功能,能够在设定的时间发出闹铃声。

4、能进行整点报时。

从59分50秒起,每隔2秒发一次低音“嘟”的信号,连续5次,最后一次为高音“嘀”的信号。

(二)、各项设计指标:

1显示部分采用的6个LED显示器,从高位至低位分别显示时、分、秒。

2、有一个设置调闹钟定时时间、正常时间的按钮,选择调的对象。

3、有三个按钮分别调时、分、秒的时间。

4、有一个按钮用作开启/关闭闹铃。

5、另外需要两个时钟信号来给系统提供脉冲信号,使时钟和闹钟正常工作,分

别为1Hz、1kHz的脉冲。

二、系统组成以及系统各部分的设计

1、系统结构描述//要求:

系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;

(一)系统的顶层文件:

1、顶层文件图:

(见下页)

2、各模块的解释:

1)、7个输入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、

hour_set:

其中clk_1khz为闹铃模块提供时钟,处理后能产生“嘟”、“嘀”和变化的闹铃声音;clk_1hz为计时模块提供时钟信号,每秒计数一次;key_slt选择设置对象:

定时或正常时间;key_alarm能够开启和关闭闹铃;sec_set、min_set、hour_set用于设置时间或定时,与key_slt相关联。

各按键输出为脉冲信号。

(2)、CNT60_A_SE模块:

这个模块式将clk_1hz这个时钟信号进行60进制计数,并产生一个分钟的

触发信号。

该模块能将当前计数值实时按BCD码的格式输出。

将该输出接到两位LED数码后能时时显示秒的状态。

通过alarm_clk可以选择设置对象为时间还是定时值。

在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。

在设置定时模式上,key上的脉冲只修改定时值,不影响时间脉冲clk的状态。

同时该模块具有两个输出口out_do、out_di来触发整点报时的“嘟”、“嘀”

声音。

(3)、CNT60_A_MlN模块:

这个模块式将CNT60_A_SE的输出信号进行60进制计数,并产生一个时位的触发信号。

该模块能将当前计数值实时按BCD码的格式输出。

将该输出接到两位LED数码后能时时显示分的状态。

通过alarm_clk可以选择设置对象为时间还是定时值。

在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。

在设置定时模式上,key上的脉冲只修改定时值,不影响时间脉冲clk的状态。

同时该模块具有三个输出口out_do、out_di、out_alarm来触发整点报时的“嘟”、“嘀”、闹铃声音。

(4)、CNT24_A_H01模块:

这个模块式将CNT60_A_MlN勺输出信号做24进制计数。

该模块能将当前计数值实时按BCD码的格式输出。

将该输出接到两位LED数码后能时时显示时的状态。

通过alarm_clk可以选择设置对象为时间还是定时值。

在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。

在设置定时模式上,key上的脉冲只修改定时值,不影响时间脉冲clk的状态。

同时该模块具有一个输出口out_alarm来触发整点报时的闹铃声音。

(5)、PWM_01模块:

该模块为PWM产生模块,通过EN可幵启和关闭PWM输出。

模块根据CLK信号二分频产生的高低音,并组合,能输出三种声音状态——“嘟”、“嘀”、闹铃。

而该三种声音要被秒、分、时的输出触发才能输出PWM。

(二)系统各个模块的VHDLS序:

(1)、CNT60_A_SE模块:

程序源代码如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60_a_secis

port(

使能端

模式、时间调节模式

co:

outstd_logic;--

进位输出,触发分计数模块

out_do:

outstd_logic;--

在整点报时中输出“嘟”触发信号

out_di:

outstd_logic--

在整点报时中输出“嘀”触发信号

);

end;

architectureaofcnt60_a_secis

signalqout2_l:

std_logic_vector(3downto0);

signalqout2_h:

std_logic_vector(3downto0);

signalalarm_l:

std_logic_vector(3downto0);

signalalarm_h:

std_logic_vector(3downto0);

signalclk1,clk2,tclk,aclk,ac_slt:

std_logic;

begin

process(alarm_clk)--当该端口输入一个脉冲时,修改设置模式:

时间调整或闹铃模式切换begin

ifalarm_clk'eventandalarm_clk='1'then

ac_slt<='1';

else

ac_slt<='0';

endif;

endif;

endprocess;

begin

时间调整模式

ifac_slt='0'then--

则tclk<=0,通过挖洞方式添加

aclk<='0';

ifclk='1'andkey='1'then--clk=1

一个脉冲

tclk<='0';

elsifclk='0'andkey='1'then--clk=0,则tclk<=1,产生一个高电平,

添加一脉冲

tclk<='1';

else

tclk<=clk;

endif;

elsifac_slt='1'then--闹铃调整模式

tclk<=clk;

aclk<=key;--key上的脉冲直接修改闹铃定时值

endif;

endprocess;

process(tclk,clr,enb)--60进制计数,个位、十位放在两个临时变量中,表

示秒的状态

begin

ifclr='1'then--clearingworksatthestateofhighvoltage

qout2_l<="0000";

qout2_h<="0000";

elsiftclk'eventandtclk='1'then

ifenb='1'then--enableworksathighvoltage

ifqout2_l="1001"andqout2_h="0101"then

qout2_l<="0000";--afullmodeiscompletedandacarryoutisgenerated

qout2_h<="0000";

elsifqout2_l="1001"then

qout2_l<="0000";

qout2_h<=qout2_h+1;

else

qout2_l<=qout2_l+1;--inprocessofcounting

endif;

endif;

endif;

endprocess;

process(aclk,clr,enb)--修改闹铃的定时值begin

ifclr='1'then--clearingworksatthestateofhighvoltage

alarm_l<="0000";

alarm_h<="0000";

elsifaclk'eventandaclk='1'then

ifenb='1'then--enableworksathighvoltage

ifalarm_l="1001"andalarm_h="0101"then

alarm_l<="0000";--afullmodeiscompletedandacarryoutisgenerated

alarm_h<="0000";

elsifalarm_l="0101"then

alarm_l<="0000";

alarm_h<=alarm_h+1;

else

alarm_l<=alarm_l+1;--inprocessofcounting

endif;

endif;

endif;

endprocess;

产生进位,显示时

process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk)--

间或闹铃定时值

begin

ifqout2_l="0000"andqout2_h="0000"then

co<='1';

else

co<='0';

endif;

ifac_slt='0'then--显示时间

qout_sl<=qout2_l;

qout_sh<=qout2_h;

else--显示定时值

qout_sh<=alarm_h;

qout_sl<=alarm_l;

endif;

endprocess;

process(qout2_l,qout2_h)--根据秒的状态输出“嘟”、“嘀”触发信号

begin

ifqout2_h="0101"then

ifqout2_l="0000"then

out_do<='1';

elsifqout2_l="0010"then

out_do<='1';

elsifqout2_l="0100"then

out_do<='1';

elsifqout2_l="0110"then

out_do<='1';

elsifqout2_l="1000"then

out_do<='1';

else

out_do<='0';

elsifqout2_h="0000"thenifqout2_l="0000"thenout_di<='1';out_do<='0';

else

out_di<='0';

endif;

else

out_do<='0';

out_di<='0';

endif;

endprocess;

end;

(2)、CNT60_A_MlN模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60_a_minis

port(

clk,clr,enb:

instd_logic;--clk:

时钟输入信号,clr:

清零端,enb:

使能端

key:

instd_logic;--

输入按键脉冲,调整闹铃定时或时间

alarm_clk:

instd_logic;--1:

alarm0:

clk--设置模式选择:

闹铃调节

模式、时间调节模式

qout_ml:

outstd_logic_vector(3downto0);--显示输出分的低位

qout_mh:

outstd_logic_vector(3downto0);--显示输出分的高位

co:

outstd_logic;--

进位输出,触发时计数模块

out_alarm:

outstd_logic;--

闹铃触发信号,时间到后输出高电平触发闹

out_do,out_di:

outstd_logic--在整点报时中输出“嘟”“嘀”触发信号

);

end;

architectureaofcnt60_a_minis

signalqout2_l:

std_logic_vector(3downto0);

signalqout2_h:

std_logic_vector(3downto0);

signalalarm_l:

std_logic_vector(3downto0);

signalalarm_h:

std_logic_vector(3downto0);

signalclk1,clk2,tclk,aclk,ac_slt:

std_logic;

begin

process(alarm_clk)--当该端口输入一个脉冲时,修改设置模式:

时间调整或闹铃模式切换

begin

ifalarm_clk'eventandalarm_clk='1'then

ifac_slt='0'then--如果为定时模式,将改为闹铃模式

ac_slt<='1';

else

ac_slt<='0';

endif;

endif;

endprocess;

process(key,clk,ac_slt)--根据设置模式,处理key上的脉冲信号

begin

ifac_slt='0'then--时间调整模式

aclk<='0';

ifclk='1'andkey='1'then--clk=1则tclk<=0,通过挖洞方式添加

一个脉冲

tclk<='0';

elsifclk='0'andkey='1'then--clk=0,则tclk<=1,产生一个高电平,

添加一脉冲

tclk<='1';

else

tclk<=clk;

endif;

tclk<=clk;

aclk<=key;--key上的脉冲直接修改闹铃定时值

endif;

endprocess;

process(tclk,clr,enb)--60进制计数,个位、十位放在两个临时变量中,表

示分的状态

begin

ifclr='1'then--clearingworksatthestateofhighvoltage

qout2_l<="0000";

qout2_h<="0000";

elsiftclk'eventandtclk='1'then

ifenb='1'then--enableworksathighvoltage

ifqout2_l="1001"andqout2_h="0101"then

qout2_l<="0000";--afullmodeiscompletedandacarryout

isgeneratedqout2_h<="0000";

elsifqout2_l="1001"then

qout2_l<="0000";

qout2_h<=qout2_h+1;

else

qout2_l<=qout2_l+1;--inprocessofcountingendif;

endif;

endif;

endprocess;

process(aclk,clr,enb)--修改闹铃的定时值

begin

ifclr='1'then--clearingworksatthestateofhighvoltagealarm_l<="0000";

alarm_h<="0000";

elsifaclk'eventandaclk='1'then

ifenb='1'then--enableworksathighvoltage

ifalarm_l="1001"andalarm_h="0101"then

alarm_l<="0000";--afullmodeiscompletedandacarryoutisgenerated

alarm_h<="0000";

elsifalarm_l="0101"then

alarm_l<="0000";

alarm_h<=alarm_h+1;

else

alarm_l<=alarm_l+1;--inprocessofcounting

endif;

endif;

endif;

endprocess;

产生进位,显示

process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk)--时间或闹铃定时值ofhighvoltagebegin

ifqout2_l="0000"andqout2_h="0000"thenco<='1';

else

co<='0';

endif;

ifac_slt='0'then

qout_ml<=qout2_l;

qout_mh<=qout2_h;

else

qout_mh<=alarm_h;

qout_ml<=alarm_l;

endif;

endprocess;

-判断定时值与时间值相等,输

process(qout2_l,qout2_h,alarm_l,alarm_h)

出闹铃触发信号

begin

ifqout2_l=alarm_landqout2_h=alarm_hthen

out_alarm<='1';

else

out_alarm<='0';

endif;

endprocess;

process(qout2_l,qout2_h)--根据分的状态输出“嘟”、“嘀”触发信号begin

ifqout2_l="1001"andqout2_h="0101"then

out_do<='1';

else

out_do<='0';

endif;

ifqout2_l="0000"andqout2_h="0000"then

out_di<='1';

else

out_di<='0';

endif;

endprocess;

end;

(3)、CNT24_A_HOUR块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt24_a_houris

port(

使能端

 

设置模式选择:

闹铃调节模

alarm_clk:

instd_logic;--1:

alarm0:

clk--

式、时间调节模式

显示输出时的低位

qout_hl:

outstd_logic_vector(3downto0);--

qout_hh:

outstd_logic_vector(3downto0);--显示输出时的高位

co:

outstd_logic;--进位输出

out_alarm:

outstd_logi--闹铃触发信号输出

);

end;

architectureaofcnt24_a_houris

signalqout2_l:

std_logic_vector(3downto0);

signalqout2_h:

std_logic_vector(3downto0);

signalalarm_l:

std_logic_vector(3downto0);

signalalarm_h:

std_logic_vector(3downto0);

signalclk1,clk2,tclk,aclk,ac_slt:

std_logic;

begin

process(alarm_clk)--当该端口输入一个脉冲时,修改设置模式:

时间调整或

闹铃模式切换begin

如果为定时模式,将改为闹铃模式

ifalarm_clk'eventandalarm_clk='1'then

ifac_slt='0'then--

ac_slt<='1';

else

ac_slt<='0';

endif;

endif;

endprocess;

 

begin

tclk<='0';

添加一脉冲

tclk<='1';

else

tclk<=clk;

endif;

elsifac_slt='1'then--闹铃调整模式

tclk<=clk;

aclk<=key;--key上的脉冲直接修改闹铃定时值

endif;

endprocess;

process(tclk,clr,enb)--24进制计数,个位、十位放在两个临时变量中,表

示时的状态

begin

ifclr='1'then--clearingworksatthestateofhighvoltage

qout2_l<="0000";

qout2_h<="0000";

elsiftclk'eventandtclk='1'then

ifenb='1'then--enableworksathighvoltage

ifqout2_l="1001"then

qout2_l<="0000";--afullmodeiscompletedandacarryoutisgenerated

qout2_h<=qout2_h+1;

elsifqout2_l="0011"andqout2_h="0010"then

qout2_l<="0000";

qout2_h<="0000";

else

qout2_l<=qout2_l+1;--inprocessofcounting

endif;

endif;

endif;

endprocess;

begin

ifclr='1'then--clearingworksatthestateofhighvoltagealarm_l<="0000";

alarm_h<="0000";

elsifaclk'eventandaclk='1'then

ifenb='1'then--enableworksathighvoltage

ifalarm_l="1001"thenalarm_l<="0000";--afullmodeiscompletedandacarryout

isgenerated

alarm_h<=qout2_h+1;

elsifalarm_l="0011"andalarm_h="0010"thenalarm_l<="0000";

alarm_h<="0000";

else

alarm_l<=alarm_l+1;--inprocessofcounting

endif;

endif;

endif;

endprocess;

显示

process(qout2_l,qout2_h,alarm_l,alarm_h,alarm_clk)--产生进位

时间或闹铃定时值ofhighvoltage

begin

ifqout2_l="0000"andqout2_h="0000

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2