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

下载本文档

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

文档简介

1、基于FPGA的多功能数字钟的设计基于FPGA的多功能数字钟的设计摘要 数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常生活中不可少的必需品。本文介绍了应用FPGA芯片设计多功能数字钟的一种方案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。关键词 数字钟、分频器、译码器、计数器、校时电路 、报时电路。Design of AbstractKeywords目录0.引言41.设计要求说明4 1.1设计要求41.2完成情况说明42.多功能数字钟的基本原理及其在FPGA中的设计与实现 42.1计时电路52.2异步清零电路 52.3校时、校分功能电路5 2.4报时

2、电路62.5分频电路7 2.6闹钟及音乐闹铃电路9 2.7秒表计时电路15 2.8 译码显示电路152.9逻辑总图163.设计感想17参考文献170引言数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。因此,研究数字钟及扩大其应用,有着非常现实的意义。1. 设计要求说明1.1设计要求1) 设计一个具有校时、校分、清零,保持和整点报时功能的数字钟。2) 多数字钟采用层次化的方法进行设计,要求设计层次清晰、合理;构成整个设计的功能模块既可采用原理图方法实现,也可采用文本输入法实现。3) 数字

3、钟的具体设计要求具有如下功能: 数字钟的最大计时显示23小时59分59秒;在数字钟正常工作时可以进行快速校时和校分,即拨动开关K1可对小时进行校正,拨动开关K2可对分钟进行校正;在数字钟正常工作情况下,可以对其进行不断电复位,即拨动开关K3可以使时、分、秒回零;整点报时是要求数字钟在每小时整点来到前进行鸣叫,鸣叫频率是在59分53秒、55秒、57秒时为500Hz,59分59秒时为1KHz;哟啊去所有开关具有去抖动功能。4) 对设计电路进行功能仿真。5) 将仿真通过的逻辑电路下载到EDA实验系统,对其进行验证。1.2完成情况说明:对于实验要求的基本功能我们设计的电路都能准确实现。另外,我们还附加

4、了显示星期、秒表、闹钟时间来时播放音乐等功能。2.多功能数字钟的基本原理及其在FPGA中的设计与实现通过分析多功能数字钟的设计要求和所要实现的功能,应用层次化方法设计出数字钟应由计时模块、分频脉冲模块、译码显示模块、校时校分和清零模块、报时模块等几个模块组成,其原理框图如下图1所示:图1 数字钟的原理框图21计时电路通过分析数字钟的功能,知道数字钟计时周期是24小时,因此必须设置模24的小时计数器,两个模为60的计数器实现分和秒的计数,三个计数器之间构成进为关系,即秒计数器为分计数器提供计数脉冲信号,分计数器为时计数器提供计数脉冲信号。另外,如果想要数字钟还可以显示星期的话,还应添加一个模7的

5、星期计数器,由时计数器提供计数脉冲信号。从全局设计考虑计时器应具有使能端和异步清零端。为实现计时功能,我们可以选用74160通过反馈清零法来构成模7、模24和模60计数器。分别用2片74160做成1个模7计数器、1个模24计数器和2个模60计数器。这4个计时器使用相同的1hz脉冲,将他们的进位端都连好,分计数器的个位的ENT接59秒,时计数器的个位的ENT接59分59秒,星期计时器的ENT接23小时59分59秒。由于是反馈清零法,所以将秒计数器、分计数器的状态60,时计数器的状态24,星期计数器的状态7分别接给各自的清零端,这样就可以实现计数功能了。2.2异步清零电路为实现异步清零功能,可以将

6、异步清零开关KK3分别和各个计数器的清零信号的取反相或非后再接给清零端。这样,当KK3关闭(低电平)时,计数器正常计数;当开关KK3开启(高电平)时,计数器全部异步清零。2.3校时、校分功能电路数字钟的校时和校分功能原理相同,通过开关KK1、KK2控制工作状态。当KK1打到低电平、KK2打到低电平时,各计数器的ENT端接的都是正常计数信号,ENP端都是高电平,各个计数器均正常计数;当KK1打到高电平、KK2打到低电平时,分个计数器的ENP端接的是KK2的非(高电平),进位信号正常送入分十位计数器的ENT端,分计数器快速校分,而由于秒计数器和时计数器的个位的ENP端接的是KK1的非,所以秒计数器

7、和时计数器被保持;当KK1打到低电平、KK2打到高电平时,正常进位信号被阻塞,分计数器可以不接受秒计数器的进位信号控制,校时信号便被送入CP端,时计数器可以进行快速校时。以上3部分功能可放在同一模块中实现,电路图如2所示。图2 计时、清零、校分校时电路仿真结果如下图3所示: 图3 计时、清零、校分校时电路的仿真结果2.4报时电路数字钟的报时功能由两部分组成,一部分的作用是选择报时的时间,一部分的作用是选择报时的频率。根据设计要求,数字钟在59分53秒、55秒、57秒的报时鸣叫频率为500Hz,59分59秒的报时鸣叫频率为1KHz。用与非门控制蜂鸣器信号,电路计时到59分53秒、59分55、秒5

8、9分57秒时打开与门,把500Hz信号送入蜂鸣器,到59分59秒时打开与门,把1KHz信号送入蜂鸣器。经卡诺图化简后,得二与门的输出表达式为: 这部分电路的电路图如下图4所示: 图4 报时电路这部分功能仿真结果如图5所示:图5 报时电路仿真结果2.5分频电路数字钟计时的标准信号应该是频率相当稳定的1HZ秒脉冲,所以要设置标准时间源。由于FPGA芯片上有输出频率是48MHz的高精确度、高频稳度的晶体振荡器,所以我们只需做一些特定模的计数器进行分频就可以得到我们所需要的精确频率。分析电路中的功能,一共需做3种计数器来分频,分别模48、模1000和模2计数器。它们均可由74161构成,运用反馈置数法

9、可以很容易的做成这3种计数器。模48的计数器如下图6所示:图6 48分频器电路其仿真结果如图7所示:图7 48分频器仿真结果模1000的计数器如下图8所示:图8 1000分频器电路器仿真结果如下图9所示:图9 1000分频器仿真结果模2的计数器如下图10所示: 图10 2分频电路其仿真结果如图11所示: 图11 2分频仿真结果2.6闹钟及音乐闹铃电路通过分析闹钟应具有的功能,可以清楚闹钟应分成这样几个部分来做。一是设定闹钟时间(小时、分钟)电路,可以还用类似于校时、校分的方法,用控制计数开始计数和暂停来实现设定时间;二是比较电路当正常计时的数字钟的时间和设定的闹钟时间相同时,输出一高电平,使其

10、与发声频率相与后送给蜂鸣器来发出声响;三是显示切换电路,这个电路保证在设定闹钟时间时,虽然数码管显示的是闹钟设定的时间,但数字钟还在正常计时,只是没有显示出来。通过以上分析发现,闹钟时间设定模块可以直接利用前面设计好的计时&校时校分模块jishi.bdf,只要在原来基础上加3个开关去控制就可以了。其中,KK4的作用是切换显示开关,将它与1hz脉冲相与后再接给闹钟计数器的时钟,KK4打开时,设定闹钟时间的计数器才使能;KK5是设定分钟计数器的开关;KK6是设定小时计数器的开关。比较模块则可以用4片集成的数据比较器7485(时2片、分2片)来实现比较功能,将4片7485的输出AEBO(相等时输出1

11、)通过4与门相与后再输出,只有当4个AEBO同时出1时才代表闹钟时间和时钟时间重合。至于显示切换电路则可以用6片2选1数据选择器74157来构成一个2路选1路的数据选择器,用切换开关KK4来判断2路选1路的数据选择器的选择输出正常计时的时间给数码管显示,还是输出闹钟设定时间给数码管显示。这3部分的电路如下图12所示。图12 闹钟功能电路在上面闹钟的基础上,我们还增加了播放音乐的功能,即当到达设定的闹钟时刻时,蜂鸣器会播放出优雅的梁祝曲子。这部分功能需要通过VHDL硬件语言来编写程序。要实现播放音乐功能需要包含控制、曲谱等在内5个子模块。程序源码如下:1)模块1- File Name: musi

12、c.vhdLIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY music ISPORT(address: IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (3 D

13、OWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family: STRING;width_a: NATURAL;widthad_a: NATURAL;numwords_a: NATURAL;operation_mode: STRING;outdata_reg_a: STRING;address_aclr_a: STRING;outdata_aclr_a: STRING;width_byteena_a: NATURAL;init_file: STRING;lpm_hint: STRING;lpm_type: STRING);PORT (

14、clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (3 DOWNTO 0);END COMPONENT;BEGINq Cyclone,width_a = 4,widthad_a = 8,numwords_a = 256,operation_mode = ROM,outdata_reg_a = CLOCK0,address_aclr_a = NONE,outdata_aclr_a = NONE,width_byteena_a = 1,init_file = spe

15、aker.mif,lpm_hint = ENABLE_RUNTIME_MOD=NO,lpm_type = altsyncram)PORT MAP (clock0 = clock,address_a = address,q_a = sub_wire0);END SYN;2)模块2- File Name: notetabs.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetabs isport(clk:in std_logic;toneindex:out std_logic

16、_vector(3 downto 0);end;architecture one of notetabs iscomponent musicport(address:in std_logic_vector(7 downto 0);clock:in std_logic;q:out std_logic_vector(3 downto 0);end component;signal counter:std_logic_vector(7 downto 0);begincnt8:process(clk)beginif counter=138 then counter=00000000;elsif (cl

17、kevent and clk=1)then countercounter,q=toneindex,clock=clk);end;3)模块3- File Name: tonetaba.vhdlibrary ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0);end;architecture one of tonetaba isbeginsearch:process(index)begi

18、ncase index iswhen 0000=tonetonetonetonetonetonetonetonetonetonetonetonetonenull;end case;end process;end;4)模块4- File Name: speaker.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speaker isport(clk:in std_logic;tone:in std_logic_vector(10 downto 0);spks:out std_lo

19、gic);end entity speaker;architecture one of speaker issignal preclk,fullspks:std_logic;begindivideclk:process(clk)variable count4:std_logic_vector(3 downto 0);beginpreclk11 then preclk=1;count4:=0000;elsif clkevent and clk=1 then count4:=count4+1;end if;end process divideclk;genspks:process(preclk,t

20、one)variable count11:std_logic_vector(10 downto 0);beginif preclkevent and preclk=1 thenif count11=16#7ff# then count11:=tone;fullspks=1;else count11:=count11+1;fullspks=0;end if;end if;end process;delayspks:process(fullspks)variable count2:std_logic;beginif fullspksevent and fullspks=1 then count2:

21、=not count2;if count2=1 then spks=1;else spksclk8HZ,toneindex=toneindex);u2:tonetaba port map(index=toneindex,tone=tone);u3:speaker port map(clk=clk12MHZ,tone=tone,spks=spkout);end;将上面5个程序输入好后分别编译,然后再将模块5songer.vhd生成芯片,再将这块芯片添加到闹钟电路里,就可以播放梁祝音乐闹铃了。2.7秒表计时电路秒表也是数字钟上常见的一个工具,先来分析一下秒表的具体功能。秒表后两位是100进制的将1

22、s分成100份,秒表的中间两位是60进制的(单位是秒),秒表的最高两位也是60进制的(单位是分)。通过以上分析可以明确秒表的时钟脉冲不是1Hz,而是100Hz,这样才能符合秒表的进位关系。秒表计时器也可以仿照计时、清零模块去做,只要将清零,和进位信号稍加改动便可设计出秒表计时器。其电路图如下图13所示:图13 秒表计时器 秒表计时器的仿真结果如图14所示: 图14 秒表计时器仿真结果2.8译码显示电路 通过分析本数字钟的功能后,发现我们需要3路显示,每路显示7个数码管,所以应该用动态显示,但是最高位的数码管一直显示星期不用切换。据此,我们设计了一个2路选1路数据选择器,每路有24位数。第一路是

23、数字钟正常计时的6片计数器74160的输出h13.0h03.0m13.0m03.0s13.0s03.0(从高到低依次是时十位、时个位、分十位、分个位、秒十位、秒个位);第二路是设定闹钟时间的计数器的输出nh13.0nh03.0nm13.0nm03.0ns13.0ns03.0;第三路是秒表计数器的输出mh13.0mh03.0mm13.0mm03.0ms13.0ms03.0。这3路数据可以通过先后2次的2路选1路选择输出。让第一路和第二路用2路选1路通过KK4判断输出的第四路(新的一路),KK4=0,第四路=第一路;KK4=1,第四路=第二路。再将第四路和第三路用2路选1路通过KK7判断最终路(最

24、终的输出一路),KK7=0,最终路=第四路;KK7=1,最终路=第三路。综上,即KK7KK4=00,输出第一路(正常计时);KK7KK4=01时,输出第二路(闹钟定时);KK7KK4=10时,输出第三路。另外,还需一动态显示电路,这部分功能可以由一个模7计数器74160、一个3线8线译码器74138和一个7路选1路数据选择器(每路4位)来实现。将74160的低3位输出充当3线8线译码器74138的地址码,再将74138的低7位输出分配给7个数码管使能端的管脚,使其实行动态显示。将2路选1路数据选择器的最终输出用作7路选1路数据选择器的输入数据,用74160的低3位输出作2路选1路数据选择器的地址码。7路选1路数据选择器的输出经过4线7线译码器74248的译码输出后再取反,就可分配给数码管ag的管脚。显示电路的电路图如图15所示。 图15 译码显示电路2.9逻辑总图

温馨提示

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

评论

0/150

提交评论