您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于vhdl的电子闹钟设计
基于VHDL的数字闹钟设计-1-基于VHDL的数字闹钟设计摘要:随着EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能。本文介绍了基于VHDL硬件描述语言设计的多功能数字闹钟的思路和技巧。在Quartus11开发环境中编译和仿真了所设计的程序,并逐一调试验证程序的运行状况。仿真和验证的结果表明,该设计方法切实可行,该数字闹钟可以实现调时定时闹钟播放音乐功能具有一定的实际应用性。关键字:闹钟FPGAVHDLQuartusII一、电子钟相关功能描述如下:(1)计时功能:这是本计时器设计的基本功能,可进行时、分、秒计时,并显示。(2)闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出一段音乐,并维持一分钟。(3)调时调分调闹钟功能:当需要校时或者要重新设置闹钟的时间时,可通过实验箱上的按键控制。二、设计原理:数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。数字闹钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,基于VHDL的数字闹钟设计-2-秒的进位,分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,speak将会被赋予梁祝音乐信号用于驱动扬声器,持续1分钟。三、实验代码:1)顶层文件:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYclockISPORT(CLK12MHZ:INSTD_LOGIC;CLK8HZ:INSTD_LOGIC;SPKOUT:OUTSTD_LOGIC;CLK:INSTD_LOGIC;KEY1:INSTD_LOGIC;KEY2:INSTD_LOGIC_VECTOR(1DOWNTO0);H1,H2,M1,M2,S1,S2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREoneOFclockISCOMPONENTshizhongPORT(clk:instd_logic;md1:instd_logic;md2:instd_logic_vector(1downto0);clken:outstd_logic;h1,h2,m1,m2,s1,s2:outstd_logic_vector(3downto0));ENDCOMPONENT;COMPONENTNoteTabsPORT(clk:INSTD_LOGIC;ToneIndex:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;COMPONENTToneTabaPORT(Index:INSTD_LOGIC_VECTOR(3DOWNTO0);Tone:OUTSTD_LOGIC_VECTOR(10DOWNTO0);en:instd_logic);ENDCOMPONENT;COMPONENTSpeakeraPORT(clk:INSTD_LOGIC;Tone:INSTD_LOGIC_VECTOR(10DOWNTO0);SpkS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTone:STD_LOGIC_VECTOR(10DOWNTO0);SIGNALToneIndex:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALclken:STD_LOGIC;SIGNALen:STD_LOGIC;基于VHDL的数字闹钟设计-3-BEGINu1:ShizhongPORTMAP(clk=CLK,md1=KEY1,md2=KEY2,clken=en,h1=h1,h2=h2,m1=m1,m2=m2,s1=s1,s2=s2);u2:NoteTabsPORTMAP(clk=CLK8HZ,ToneIndex=ToneIndex);u3:ToneTabaPORTMAP(Index=ToneIndex,Tone=Tone,en=en);u4:SpeakeraPORTMAP(clk=CLK12MHZ,Tone=Tone,SpkS=SPKOUT);END;2)时钟控制模块:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityshizhongisport(clk:instd_logic;md1:instd_logic;md2:instd_logic_vector(1downto0);clken:outstd_logic;h1,h2,m1,m2,s1,s2:outstd_logic_vector(3downto0));endshizhong;architectureoneofshizhongissignalhou1:std_logic_vector(3downto0);signalhou2:std_logic_vector(3downto0);signalmin1:std_logic_vector(3downto0);signalmin2:std_logic_vector(3downto0);signalseth1:std_logic_vector(3downto0);signalseth2:std_logic_vector(3downto0);signalsetm1:std_logic_vector(3downto0);signalsetm2:std_logic_vector(3downto0);signalsec1:std_logic_vector(3downto0);signalsec2:std_logic_vector(3downto0);begin-----------------------------------------------小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou1=0000;elsifhou1=0010andhou2=0011andmd1='0'andmd2=01then--当时间为23点且处于校时状态时hou1=0000;elsif(hou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001))or(hou2=1001andmd1='0'andmd2=01)thenhou1=hou1+1;基于VHDL的数字闹钟设计-4-endif;endif;endprocessh110;-----------------------------------------------小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginifclk'eventandclk='1'thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elsifhou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elsif(hou2=1001andmd1='0'andmd2=01)or(hou1=0010andhou2=0011)thenhou2=0000;--md='1';--elsif((min1=0101andmin2=1001)and(sec1=0101andsec2=1001))or(md1='0'andmd2=01)thenhou2=hou2+1;--speak=clk;--endif;endif;endprocessh220;-----------------------------------------------分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginifclk'eventandclk='1'thenif(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenmin1=0000;elsifmin1=0101andmin2=1001and(md1='0'andmd2=00)thenmin1=0000;elsif(min2=1001and(sec1=0101andsec2=1001))or(min2=1001andmd1='0'andmd2=00)thenmin1=min1+1;endif;endif;--endif;endprocessm110;----------------------------------------------分钟个位m220:process(clk,sec1,sec2,md1,md2)beginifclk'eventandclk='1'thenifmin2=1001and(sec1=0101andsec2=1001)thenmin2=0000;elsifmin2=1001and(md1='0'andmd2=00)thenmin2=0000;基于VHDL的数字闹钟设计-5-elseif(sec1=0101andsec2=1001)or(md1='0'andmd2=00)thenmin2=min2+1;endif;endif;endif;endprocessm220;---------------------------------------------秒十位s110:process(clk)beginifclk'eventandclk='1'thenif(sec1=0101andsec2=1001)thensec1=0000;elseifsec2=1001thensec1=sec1+1;endif;endif;endif;endprocesss110;--------------------------------------------秒个位s220:process(clk)beginifclk'eventandclk='1'thenifsec2=1001thensec2=0000;elsesec2=sec2+1;endif;endif;endprocesss220;-------------------------------------------时间设置小时部分sethour1:process(clk,seth2)beginifclk'eventandclk='1'thenifseth1=0010andseth2=0011thenseth1=0000;elsifseth2=1001thenseth1
本文标题:基于vhdl的电子闹钟设计
链接地址:https://www.777doc.com/doc-69412 .html