基于VHDL语言的多功能数字钟设计_第1页
基于VHDL语言的多功能数字钟设计_第2页
基于VHDL语言的多功能数字钟设计_第3页
基于VHDL语言的多功能数字钟设计_第4页
基于VHDL语言的多功能数字钟设计_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于VHDL语言的多功能数字钟设计悬赏分:20|解决时间:2008-3-515:26|提问者:lOOlyg多功能数字钟的主要功能如下:(1)计时和校时,时间可已24h制或12h制显示。(2)日历:显示年、月、日、星期及设定功能。(3)跑表:启动、停止、保持显示和清除。(4)闹钟:设定闹钟时间,整点提示希望能帮上忙的好心人发至我的邮箱: HYPERLINK mailto: 最佳答案数字电子钟的设计一、绪论(一)引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新

2、换代的节奏也越来越快。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时

3、功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。(二)论文的研究内容和结构安排本系统采用石英晶体振荡器、分频器、计数器、显示器和校时电路组成。由LED数码管来显示译码器所输出的信号。采用了74LS系列中小规模集成芯片。使用了RS触发器的校时电路。总体方案设计由主体电路和扩展电路两大部分组成。其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能。论文安排如下:1、绪论阐述研究电子钟所具有的现实意义。2、设计内容及

4、设计方案论述电子钟的具体设计方案及设计要求。3、单元电路设计、原理及器件选择说明电子钟的设计原理以及器件的选择,主要从石英晶体振荡器、分频器、计数器、显示器和校时电路五个方面进行说明。4、绘制整机原理图该系统的设计、安装、调试工作全部完成。二、设计内容及设计方案(一)设计内容要求1、设计一个有“时”、“分”、“秒”(23小时59分59秒)显示且有校时功能的电子钟。2、用中小规模集成电路组成电子钟,并在实验箱上进行组装、调试。3、画出框图和逻辑电路图。4、功能扩展:(1)闹钟系统整点报时。在59分51秒、53秒、55秒、57秒输出750Hz音频信号,在59分59秒时,输出1000Hz信号,音像持

5、续1秒,在1000Hz音像结束时刻为整点。日历系统。(二)设计方案及工作原理数字电子钟的逻辑框图如图1所示。它由石英晶体振荡器、分频器、计数器、译码器显示器和校时电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别经译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分。图1数字电子钟逻辑框图三、单元电路设计、原理及器件选择(一)石英晶体振荡器1、重要概念的解释反馈:将放大电路输出量的一部分或全部,通过一定的方式送回放大电路的输入端

6、。耦合:是指信号由第一级向第二级传递的过程。2、石英晶体振荡器的具体工作原理石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整。它被广泛应用于彩电、计算机、遥控器等各类振荡电路中。它还具有压电效应:在晶体某一方向加一电场,晶体就会产生机械变形;反之,若在晶片的两侧施加机械压力,则在晶片相应的方向上将产生电场,这种物理现象称为压电效应。在这里,我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。用反相

7、器与石英晶体构成的振荡电路如图2所示。利用两个非门G1和G2自我反馈,使它们工作在线性状态,然后利用石英晶体JU来控制振荡频率,同时用电容C1来作为两个非门之间的耦合,两个非门输入和输出之间并接的电阻R1和R2作为负反馈元件用,由于反馈电阻很小,可以近似认为非门的输出输入压降相等。电容C2是为了防止寄生振荡。例如:电路中的石英晶体振荡频率是4MHz时,则电路的输出频率为4MHz。图2石英晶体振荡电路(二)分频器、8421码制,5421码制用四位二进制码的十六种组合作为代码,取其中十种组合来表示0-9这十个数字符号。通常,把用四位二进制数码来表示一位十进制数称为二-十进制编码,也叫做BCD码,见

8、表1。表18421码5421码00000000010001000100100010001100110100010001011000011010010111101010001011100111002、分频器的具体工作原理由于石英晶体振荡器产生的频率很高,要得到秒脉冲,需要用分频电路。例如,振荡器输出4MHz信号,通过D触发器(74LS74)进行4分频变成1MHz,然后送到10分频计数器(74LS90,该计数器可以用8421码制,也可以用5421码制),经过6次10分频而获得1Hz方波信号作为秒脉冲信号。(见图3)图3分频电路3、图中标志的含义CP输入的脉冲信号C0进位信号Q输出的脉冲信号(三)计

9、数器秒脉冲信号经过6级计数器,分别得到“秒”个位、十位,“分”个位、十位以及“时”个位、十位的计时。“秒”、“分”计数器为60进制,小时为24进制。1、60进制计数器(1)计数器按触发方式分类计数器是一种累计时钟脉冲数的逻辑部件。计数器不仅用于时钟脉冲计数,还用于定时、分频、产生节拍脉冲以及数字运算等。计数器是应用最广泛的逻辑部件之一。按触发方式,把计数器分成同步计数器和异步计数器两种。对于同步计数器,输入时钟脉冲时触发器的翻转是同时进行的,而异步计数器中的触发器的翻转则不是同时。(2)60进制计数器的工作原理“秒”计数器电路与“分”计数器电路都是60进制,它由一级10进制计数器和一级6进制计

10、数器连接构成,如图4所示,采用两片中规模集成电路74LS90串接起来构成的“秒”、“分”计数器。图460进制计数电路IC1是十进制计数器,QD1作为十进制的进位信号,74LS90计数器是十进制异步计数器,用反馈归零方法实现十进制计数,IC2和与非门组成六进制计数。74LS90是在CP信号的下降沿翻转计数,QA1和QC2相与0101的下降沿,作为“分”(“时”)计数器的输入信号,通过与非门和非门对下一级计数器送出一个高电平1(在此之前输出的一直是低电平0)。QB2和QC2计数到0110,产生的高电平1分别送到计数器的清零R0(1),R0(2),74LS90内部的R0(1)和R0(2)与非后清零而

11、使计数器归零,此时传给下一级计数器的输入信号又变为低电平0,从而给下一级计数器提供了一个下降沿,使下一级计数器翻转计数,在这里IC2完成了六进制计数。由此可见IC1和IC2串联实现了六十进制计数。其中:74LS90可二/五分频十进制计数器74LS04非门74LS00二输入与非门2、24进制计数器小时计数电路是由IC5和IC6组成的24进制计数电路,如图5所示。当“时”个位IC5计数输入端CP5来到第10个触发信号时,IC5计数器自动清零,进位端QD5向IC6“时”十位计数器输出进位信号,当第24个“时”(来自“分”计数器输出的进位信号)脉冲到达时,IC5计数器的状态为“0100”,IC6计数器

12、的状态为“0010”,此时“时”个位计数器的QC5和“时”十位计数器的QB6输出为“1”。把它们分别送到IC5和IC6计数器的清零端R0和R0(2),通过7490内部的R0(1)和R0(2)与非后清零,从而完成24进制计数。图524进制计数电路译码与显示电路1、显示器原理(数码管)数码管是数码显示器的俗称。常用的数码显示器有半导体数码管,荧光数码管,辉光数码管和液晶显示器等。本设计所选用的是半导体数码管,是用发光二极管(简称LED)组成的字形来显示数字,七个条形发光二极管排列成七段组合字形,便构成了半导体数码管。半导体数码管有共阳极和共阴极两种类型。共阳极数码管的七个发光二极管的阳极接在一起,

13、而七个阴极则是独立的。共阴极数码管与共阳极数码管相反,七个发光二极管的阴极接在一起,而阳极是独立的。当共阳极数码管的某一阴极接低电平时,相应的二极管发光,可根据字形使某几段二极管发光,所以共阳极数码管需要输出低电平有效的译码器去驱动。共阴极数码管则需输出高电平有效的译码器去驱动。2、译码器原理(74LS47)译码为编码的逆过程。它将编码时赋予代码的含义“翻译”过来。实现译码的逻辑电路成为译码器。译码器输出与输入代码有唯一的对应关系。74LS47是输出低电平有效的七段字形译码器,它在这里与数码管配合使用,表2列出了74LS47的真值表,表示出了它与数码管之间的关系。表2输入输出显示数字符号LT(

14、)RBI(-)A3A2A1A0BI()/RBO()a()b()c()d()e()f()g()1100001000000101X00011100111111X00101001001021X00111000011031X01001100110041X01011010010051X01101110000061X01111000111171X10001000000081X1001100011009XXXXXX01111111熄灭10000001111111熄灭0XXXXX100000008LT():试灯输入,是为了检查数码管各段是否能正常发光而设置的。当LT()=0时,无论输入A3,A2,A1,A0为

15、何种状态,译码器输出均为低电平,若驱动的数码管正常,是显示8。BI():灭灯输入,是为控制多位数码显示的灭灯所设置的。Bl()=0时。不论LT()和输入A3,A2,A1,A0为何种状态,译码器输出均为高电平,使共阳极数码管熄灭。RBI():灭零输入,它是为使不希望显示的0熄灭而设定的。当对每一位A3=A2=A1=A0=0时,本应显示0,但是在RBI()=0作用下,使译码器输出全为高电平。其结果和加入灭灯信号的结果一样,将0熄灭。RBO():灭零输出,它和灭灯输入Bl()共用一端,两者配合使用,可以实现多位数码显示的灭零控制。3、译码器与显示器的配套使用译码是把给定的代码进行翻译,本设计即是将时

16、、分、秒计数器输出的四位二进制数代码翻译为相应的十进制数,并通过显示器显示,通常显示器与译码器是配套使用的。我们选用的七段译码驱动器(74LS47)和数码管(LED)是共阳极接法(需要输出低电平有效的译码器驱动)。译码显示电路如图6所示。图6译码显示电路校时电路1、RS触发器(见图7)图7基本RS触发器R()S()QQ()说明01101100010或11101或01置0置1保持原来状态不正常状态,0信号消失后,触发器状态不定2、无震颤开关电路无震颤开关电路的原理:(见图8)当开关K的刀扳向1点时,S()=0,R()=1,触发器置1。S()端由于开关K的震颤而断续接地几次时,也没有什么影响,触发

17、器置1后将保持1状态不变。因为K震颤只是使S(-)端离开地,而不至于使R(-)端接地,触发器可靠置1。当开关K从S(-)端扳向R(-)端时,有同样的效果,触发器可靠置0。从Q端或Q()端反映开关的动作,输出电平是稳定的。3、校时电路的实现原理当电子钟接通电源或者计时发现误差时,均需要校正时间。校时电路分别实现对时、分的校准,由于4个机械开关具有震颤现象,因此用RS触发器作为去抖动电路。采用RS基本触发器及单刀双掷开关,闸刀常闭于2点,每搬动一次产生一个计数脉冲,实现校时功能,电路如图8所示。图8校时电路(六)调试毕满清等.电子技术实验与课程设计.北京:机械工业出版社,1995.131132这本

18、书上很全时钟vhdlvhdl与数字电路设计vhdl数字系统设计vhdl数字钟程序数字频率计vhdlvhdl数字钟vhdl数字钟设计数字锁相环vhdl数字秒表vhdl我们做实验要用把程序发到这里算了无错无警告一、设计目的掌握各类计数器及将它们相连的方法;掌握多个数码管动态显示的原理与方法;掌握用FPGA技术的层次化设计方法;进一步掌握用VHDL硬件描述语言的设计思想;了解有关数字系统的设计。二、设计要求基本要求:1、24小时计数显示;2、具有校时功能(时,分);附加要求:1、实现闹钟功能(定时,闹响);三、源代码libraryieee;useieee.std_logic_1164.all;use

19、ieee.std_logic_unsigned.all;entityszzisport(clk:instd_logic;clk1:instd_logic;md1:instd_logic;md2:instd_logic_vector(1downto0);speak:outstd_logic;dout:outstd_logic_vector(6downto0);selout:outstd_logic_vector(2downto0);endszz;architectureoneofszzissignalsel:std_logic_vector(2downto0);signalhou1:std_lo

20、gic_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);signalsec

21、1:std_logic_vector(3downto0);signalsec2:std_logic_vector(3downto0);signalh1:std_logic_vector(3downto0);signalh2:std_logic_vector(3downto0);signalm1:std_logic_vector(3downto0);signalm2:std_logic_vector(3downto0);signals1:std_logic_vector(3downto0);signals2:std_logic_vector(3downto0);begin模6计数choice:p

22、rocess(clk1)beginifclk1eventandclk1=1thenifsel=101thensel=000;elsesel=sel+1;endif;endif;endprocesschoice;小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginifclkeventandclk=1thenif(hou1=0010andhou2=0011)and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou1=0000;elsifhou1=0010andhou2=0

23、011andmd1=0andmd2=01then-当时间为23点且处于校时状态时hou1=0000;elsif(hou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)or(hou2=1001andmd1=0andmd2=01)thenhou1=hou1+1;endif;endif;endprocessh110;小时个位h220:process(clk,min1,min2,sec1,sec2,md1,md2,hou1)beginifclkeventandclk=1thenif(hou1=0010andhou2=0011)and(

24、min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;elsifhou2=1001and(min1=0101andmin2=1001)and(sec1=0101andsec2=1001)thenhou2=0000;uQqq.二CH上10pueq-UOAO上10!Iu-sQq(ZPUIIPUICZOQScioqsmuiui210)ssQoORdaIIUI日+套ozzqssooORdPUQ匕puo匕puo-上IOH上cods-I+znoqHznoqUO*(、IO、小PBpgo丄P曰)ro(、io2、heospg、ISO、丄00s

25、)pue(、I02、nzupupue、IS0、HIUPI)MSIO-JFp曰QOOOFcnoquoqpcIso、小noqPUSOIOO、丄noq)Ro(、s、小pmpueo丄PBpue、ss、小noq)XSIO(ZPUIJPUIMooscoqs210)ssooORdaZZUI日琴OOIIUIssooORdPUQPUQ门-!IPUQ匕puo-I+IUIUIVfuIUIuoqMoo、小PBpgo丄P曰pue、I02、小up!)Ro(、ss、heospue、iso、丄00s)pue、I02、nzupu)XSIOQ0000、nIUPIUMMOO、小PBpgo丄P曰)pue、ss、小u-!I曰pue、I

26、so、丄upuXSIOQ0000、nIUPIuoqpcIOOrnEOSpue、ISO、丄00s)pue(、I02、nzupupue、ISO、HIUPI)OZZ曰ssooORdPUQPUQ-!IPUQ匕puo二+ZUIUtzu-1I曰UMMOO、小P曰pgo丄P曰)X0(、ss、heospue、ss、noos)4-!IOslo-ooopcuwuoqMoo、小PBpgo丄P曰)pue、I02、小upuXSIO-ooopcuwuoqMsorHEOSpue、ss、noos)pue、ss、小u-!I曰J-!IuQqq.二CH上10PaeFUQAQ上10!Iu-sQq(上10)ssooORdazzsOII

27、SssooORdPUQPUQ-!IPUQ匕puo-i+iodshioqsuoqhIOOrHEOSXOsloQoooo、召sUMFcIOOrnEOSpue、ISO、丄00s)士uQqq.二CH上10PaeFUQAQ上10!Iu-sQq(上10)ssooORdaIISbeginifclkeventandclk=1thenifsec2=1001thensec2=0000;elsesec2=sec2+1;endif;endif;endprocesss220;时间设置小时部分sethour1:process(clk,seth2)beginifclkeventandclk=1thenifseth1=001

28、0andseth2=0011thenseth1=0000;elsifseth2=1001thenseth1=seth1+1;endif;endif;endprocesssethour1;sethour2:process(clk,md1,md2,seth1)beginifclkeventandclk=1thenif(seth1=0010andseth2=0011)orseth2=1001thenseth2=0000;elsifmd1=1andmd2=00thenseth2=seth2+1;endif;endif;endprocesssethour2;时间设置分钟部分setmin1:process

29、(clk,setm2)beginifclkeventandclk=1thenifsetm1=0101andsetm2=1001thensetm1=0000;elsifsetm2=1001thensetm1=setm1+1;endif;endif;endprocesssetmin1;setmin2:process(clk,md1,md2)beginifclkeventandclk=1thenifsetm2=1001thensetm2doutdoutdoutdout=0000110;setm2=setm2+1;endif;endif;endprocesssetmin2;闹铃speaker:proc

30、ess(clk1,hou1,hou2,min1,min2)beginifclk1eventandclk1=1thenifseth1=hou1andseth2=hou2andsetm1=min1andsetm2=min2thenspeak=clk1;elsespeak=0;endif;endif;endprocessspeaker;disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginifsel=000thenseloutdoutdout=1000000;endcase;elsifsel=0

31、01thenseloutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout=1000000;endcase;elsifsel=010thenseloutdout=0111111;selout=100;seloutdoutdoutdoutdoutdout=1000000;endcase;elsifsel=011thenseloutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout=1000000;endcase;elsifsel=101thenseloutd

32、outdoutdoutdoutdoutdoutdoutdoutdoutdout=1101111;endcase;endif;ifmd1=0then计时时间显示和设置模式h1=hou1;h2=hou2;m1=min1;m2=min2;s1=sec1;s2=sec2;else闹铃时间现实和设置模式h1=seth1;h2=seth2;m1=setm1;m2=setm2;s1=1111;s2=0ANDCOUNT210THENCOUNT2:=COUNT2+1;ELSECOUNT2:=0;DOUT2=NOTDOUT2;ENDIF;ENDIF;ifclrm=1then-当clr为1时,高低位均为0cnt1:

33、=0000;cnt0:=0000;elsifclkeventandclk=1thenifstop=1thencnt0:=cnt0;cnt1:=cnt1;endif;ifcnt1=1001andcnt0=1000then当记数为98(实际是经过59个记时脉冲)co=1;进位cnt0:=1001;低位为9elsifcnt01001then小于9时cnt0:=cnt0+1;计数-elsifcnt0=1001then-clk1=notclk1;elsecnt0:=0000;ifcnt11001then高位小于9时cnt1:=cnt1+1;elsecnt1:=0000;co=0;endif;endif;

34、endif;secm1=cnt1;secm0=cnt0;endprocess;endSEC;秒模块程序清单libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitySECONDisport(clk,clr:instd_logic;时钟/清零信号sec1,sec0:outstd_logic_vector(3downto0);秒高位/低位co:outstd_logic);输出/进位信号endSECOND;architectureSECofSECONDisbeginprocess(clk,clr)varia

35、blecnt1,cnt0:std_logic_vector(3downto0);-计数beginifclr=1then当ckr为1时,高低位均为0cnt1:=0000;cnt0:=0000;elsifclkeventandclk=1thenifcnt1=0101andcnt0=1000then当记数为58(实际是经过59个记时脉冲)co=1;进位cnt0:=1001;低位为9elsifcnt01001then小于9时cnt0:=cnt0+1;计数elsecnt0:=0000;ifcnt10101then高位小于5时cnt1:=cnt1+1;elsecnt1:=0000;co=0;endif;e

36、ndif;endif;sec1=cnt1;sec0=cnt0;endprocess;endSEC;分模块程序清单libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityMINUTEisport(clk,en:instd_logic;min1,min0:outstd_logic_vector(3downto0);co:outstd_logic);endMINUTE;architectureMINofMINUTEisbeginprocess(clk)variablecnt1,cnt0:std_logic

37、_vector(3downto0);beginifclkeventandclk=1thenifen=1thenifcnt1=0101andcnt0=1000thenco=1;cnt0:=1001;elsifcnt01001thencnt0:=cnt0+1;elsecnt0:=0000;ifcnt10101thencnt1:=cnt1+1;elsecnt1:=0000;co=0;endif;endif;endif;endif;min1=cnt1;min0=cnt0;endprocess;endMIN;时模块程序清单libraryieee;useieee.std_logic_1164.all;us

38、eieee.std_logic_unsigned.all;entityHOURisport(clk,en:instd_logic;输入时钟/高电平有效的使能信号h1,h0:outstd_logic_vector(3downto0);时高位/低位endHOUR;architecturehour_arcofHOURisbeginprocess(clk)variablecnt1,cnt0:std_logic_vector(3downto0);记数beginifclkeventandclk=1then-上升沿触发ifen=1then-同时“使能”为1ifcnt1=0010andcnt0=0011the

39、ncnt1:=0000;高位/低位同时为0时cnt0:=0000;elsifcnt01001then低位小于9时,低位记数累加cnt0:=cnt0+1;elsecnt0:=0000;cnt1:=cnt1+1;高位记数累加endif;endif;endif;h1=cnt1;h0=cnt0;endprocess;endhour_arc;动态扫描模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitySELTIMEisport(clk:instd

40、_logic;扫描时钟secm1,secm0,sec1,sec0,min1,min0,h1,h0:instd_logic_vector(3downto0);分别为秒个位/时位;分个位/daout:outstd_logic_vector(3downto0);输出sel:outstd_logic_vector(2downto0);位选信号endSELTIME;architecturefunofSELTIMEissignalcount:std_logic_vector(2downto0);计数信号beginsel=111)thencount=000;elsecountdaoutdaoutdaoutd

41、aoutdaoutdaoutdaoutdaout=h1;endcase;endprocess;endfun;报时模块libraryieee;useieee.std_logic_1164.all;entityALERTisport(m1,m0,s1,s0:instd_logic_vector(3downto0);输入秒、分高/低位信号clk:instd_logic;高频声控制q500,qlk:outstd_logic);低频声控制endALERT;architecturesss_arcofALERTisbeginprocess(clk)beginifclkeventandclk=1thenifm

42、1=0101andm0=1001ands1=0101then当秒高位为5,低位为9时且分高位为5ifs0=0001ors0=0011ors0=0101ors0=0111then-当分的低位为1或3或5或7时q500=1;低频输出为1elseq500=0;否则输出为0endif;endif;ifm1=0101andm0=1001ands1=0101ands0=1001then-当秒高位为5,低位为9时且分高位为5,分低位为9时,也就是“59分59秒”的时候“报时”qlk=1;高频输出为1elseqlkqqqqqqqqqq=1101111;-显示9endcase;endprocess;enddis

43、p_are;顶层文件(原理图输入)*数字钟设计模块与程序(不含秒表)*1.分频模块(原理图输入)2.秒模块程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitySECONDisport(clk,clr:instd_logic;sec1,sec0:outstd_logic_vector(3downto0);co:outstd_logic);endSECOND;architectureSECofSECONDisbeginprocess(clk,clr)variablecnt1,cnt0:std_l

44、ogic_vector(3downto0);beginifclr=1thencnt1:=0000;cnt0:=0000;elsifclkeventandclk=1thenifcnt1=0101andcnt0=1000thenco=1;cnt0:=1001;elsifcnt01001thencnt0:=cnt0+1;elsecnt0:=0000;ifcnt10101thencnt1:=cnt1+1;elsecnt1:=0000;co=0;endif;endif;endif;sec1=cnt1;sec0=cnt0;endprocess;endSEC;分模块程序libraryieee;useieee

45、.std_logic_1164.all;useieee.std_logic_unsigned.all;entityMINUTEisport(clk,en:instd_logic;min1,min0:outstd_logic_vector(3downto0);co:outstd_logic);endMINUTE;architectureMINofMINUTEisbeginprocess(clk)variablecnt1,cnt0:std_logic_vector(3downto0);beginifclkeventandclk=1thenifen=1thenifcnt1=0101andcnt0=1

46、000thenco=1;cnt0:=1001;elsifcnt01001thencnt0:=cnt0+1;elsecnt0:=0000;ifcnt10101thencnt1:=cnt1+1;elsecnt1:=0000;co=0;endif;endif;endif;endif;min1=cnt1;min0=cnt0;endprocess;endMIN;时模块程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityHOURisport(clk,en:instd_logic;h1,h0:outstd

47、_logic_vector(3downto0);endHOUR;architecturehour_arcofHOURisbeginprocess(clk)variablecnt1,cnt0:std_logic_vector(3downto0);beginifclkeventandclk=1thenifen=1thenifcnt1=0010andcnt0=0011thencnt1:=0000;cnt0:=0000;elsifcnt01001thencnt0:=cnt0+1;endif;endif;endif;h1=cnt1;h0=cnt0;endprocess;endhour_arc;扫描模块程

48、序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitySELTIMEisport(clk:instd_logic;sec1,sec0,min1,min0,h1,h0:instd_logic_vector(3downto0);daout:outstd_logic_vector(3downto0);sel:outstd_logic_vector(2downto0);endSELTIME;architecturefunofSELTIMEissig

49、nalcount:std_logic_vector(2downto0);beginsel=101)thencount=000;elsecountdaoutdaoutdaoutdaoutdaoutdaoutqqqqqqqqqq=1101111;endcase;endprocess;enddisp_are;定时闹钟模块程序libraryieee;useieee.std_logic_1164.all;entityALERTisport(m1,m0,s1,s0:instd_logic_vector(3downto0);clk:instd_logic;q500,qlk:outstd_logic);end

50、ALERT;architecturesss_arcofALERTisbeginprocess(clk)beginifclkeventandclk=1thenifm1=0101andm0=1001ands1=0101thenifs0=0001ors0=0011ors0=0101ors0=0111thenq500=1;elseq500=0;endif;endif;ifm1=0101andm0=1001ands1=0101ands0=1001thenqlk=1;elseqlk=0;endif;endif;endprocess;endsss_arc;基于VHDL语言的多功能数字钟设计(有需要的拿去,最

51、好自己验证下)多功能数字钟的主要功能如下:已完成功能完成时分秒的依次显示并正确计数,利用六位数码管显示;时分秒各段个位满10正确进位,秒分能做到满60向前进位,有系统时间清零功能;定时器:实现整点报时,通过扬声器发出高低报时声音;时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分时钟进行调整闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃。有静音模式。待改进功能:系统没有万年历功能,正在思考设计方法。应添加秒表功能。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.

52、std_logic_arith.all;useieee.std_logic_unsigned;entityCLKisport(clk0,clr,clr1,mclock,hoclock,tm,th,res,rst:instd_logic;out1,out2,out3,out4,out5,out6:outstd_logic_vector(3downto0);speaker:outstd_logicelseclkl=clkl+1;elseclkl=clkl+1;);endCLK;architectureBehavioralofCLKissignalsech,secl:std_logic_vector

53、(3downto0);-计时器,秒高低位signalminh,minl:std_logic_vector(3downto0);-计时器,分高低位signalhh,hl:std_logic_vector(3downto0);-计时器,时高低位signalhoh,hol,mh,ml:std_logic_vector(3downto0);-闹钟,时/分高低位signalclk:std_logic_vector(8downto0);-1HZ时钟信号signalclkl:std_logic_vector(1downto0);-500HZ时钟信号signalthh,thl,tmh,tml:std_logi

54、c_vector(3downto0);-时钟调整,时/分高低位signalclk1,q500,qlk,clk500,speaker1,music,a,b,c:std_logic;-声音,高音/低音/闹钟beginprocess(clk0)-分频模块beginif(clk0eventandclk0=1)thenifclkl二10then将1000HZ信号,2分频clkl=00;clk500=clkl(1);得到频率为500hz信号elseendif;ifclk=111110100then-将500HZ信号,500分频clk=000000000;elseclk=clk+1;endif;clk1=c

55、lk(8);-得到频率为1HZ信号作为系统时钟endif;endprocess;process(clk1,clr)-计时器,秒模块beginifclr=1thensech=0000;secl=0000;elsifclk1eventandclk1=1thenifsech=0101andsecl=1000thensecl=1001;elsifsecl1001thensecl=secl+1;elsesecl=0000;ifsech0101thensech=sech+1;elsesech=0000endif;endif;endif;endprocess;process(clkl,clr,sech,se

56、cl,rst)计时器,分模块,M60beginifclr=1thenminh=0000;minl=0000;elsifrst=1then-rst使能,计时器分被赋值为调整时间minh=tmh;minl=tml;elsifclk1eventandclk1=1thenif(sech=0101)AND(secl=1001)thenifminh=0101andminl=1000thenminl=1001;elsifminl1001thenminl=minl+1;minl=0000;ifminh0101thenminh=minh+1;elseminh=0000;endif;endif;endif;end

57、if;endprocess;process(clk1,clr,sech,secl,minh,minl,rst)-计时器,小时模块M60beginifclr=1thenhh=0000;hl=0000;elsifrst=1then-rst使能,计时器时被赋值为调整时间hh=thh;hl=thl;elsifclk1eventandclk1=1thenIF(sech=0101)AND(secl=1001)AND(minh=0101)AND(minl=1001)thenifhh=0010andhl=0011then-模24计数器hh=0000;hl=0000;elseelseelsifhl1001the

58、nhl=hl+1;elsifhl=1001thenhh=hh+1;hl=0000;endif;endif;endif;endprocess;process(clk1,minh,minl,sech,secl)-整点报时模块beginifclk1eventandclk1=1thenifminh=0101andminl=1001andsech=0101thenifsecl=0001orsecl=0011orsecl=0101orsecl=0111thenq500=1;-在59分50秒之后,每奇数秒响低音elseq500=0;endif;endif;ifminh=0101andminl=1001and

59、sech=0101andsecl=1001thenqlk=1;-在59分59秒时,响高音qlk=0;endif;endif;a=qlkandclk0;-高音接1000HZ信号b=q500andclk500;-低音接500HZ信号speaker1=aorb;-扬声器发生endprocess;process(clr1,tm)-时钟调整,分模块M60beginifclr1=1thentmh=0000;tml=0000;elsiftmeventandtm=1then-tm沿触发iftmh=0101andtml=1000thentml=1001;elsiftml1001thentml=tml+1;els

60、etml=0000;iftmh0101thentmh=tmh+1;elsetmh=0000;endif;endif;endif;endprocess;process(clr1,th)-时钟调整,小时模块M24beginifclr1=1thenthh=0000;thl=0000;elsiftheventandth=1then-th沿触发ifthh=0010andthl=0011thenthh=0000;thl=0000;elsifthl1001thenthl=hl+1;elsifthl=1001thenthh=thh+1;thl=0000;endif;endif;endprocess;proce

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论