基于FPGA的多功能数字钟的设计
基于FPGA多功能数字钟的设计

• 181•人类社会步入高速发展的电子时代,电子产品逐渐代替机械产品走入我们的生活。
随着科技的进步人们对电子产品的要求越来越高、传统产品已经不能满足人们的需求。
体积小、多功能、节能、环保开始成为了电子产品发展的新目标。
本文基于VHDL 语言,利用Quartus Ⅱ设计了一款多功能数字钟,内部包含秒表、闹钟、定时器、时钟四个模块。
经过实验仿真表明多功能数字钟能很好地满足生活中的各种需要。
本产品设计主要使用VHDL 语言描述了各个模块的功能来实现主要电路,最后在Quartus II 上完成了调试与仿真。
VHDL 语言实现电子设计,是一个以软件设计为主,器件配置相结合的过程,能从多个层次对数字系统进行设计,设计数字电路更为灵活方便,设计周期也可大大减小,提高了设计效率和可靠性。
我们需要的功能,在通过使用预先设计好的别的开关进一步让数字钟工作。
通过LED 显示屏可以看到数字。
本文通过软件Quartus II 9.0设计出各个模块并往开发板内写入程序实现我们想要的功能。
3 软件部分3.1 时钟部分时钟设计有三个要求第一,具有时、分、秒计数显示的功能,并以24h 循环计时。
第二,走时误差小于等于每天10s 。
第三,具有调节分钟、小时、秒以及清零的功能。
通常情况不需要让时钟停止工作,所以这部分模块就相当于实现了计数功能,对一直不断给入的1HZ 脉冲进行计数。
秒、分、时分了三个模块进行连接。
qw 是个基于FPGA多功能数字钟的设计大连理工大学城市学院 方润生 邓佳宁 于海霞图1 系统整体过渡模块,也是校正时间所用的模块。
校正时有两个开关,一个校正分、一个校正时。
如图2所示,qw 模块主要是为了实现调时功能。
实际工程中做了元件例化。
元件例化的主要作用是在大型项目的设计中许多底层文件需要反复使用,我们写好底层文件之后通过component 语句可以直接对底层文件进行调用方便了项目的设计。
3.2 闹钟闹钟在到达设置的时间时会发出持续一分钟的信号,可提前手动关闭。
基于FPGA的多功能数字钟设计报告

***大学电工电子实验报告EDA技术基础设计报告多功能数字钟设计电子信息科学与技术年 月 日多功能数字钟设计一.任务解析用Verilog硬件描述语言设计数字钟,实现:1、具有时、分、秒计数显示功能,以二十四小时循环计时。
2、具有调节小时,分钟的功能。
3、具有整点报时同时LED灯花样显示的功能。
4、【发挥】三键(模式选择,加,减)调整,数码管闪烁指示功能。
5、【发挥】增加闹钟任意设定功能,时间精确到分。
二.方案论证第2页,共19页三.重难点解析1、模式选择键的设计//模式选择键。
有5个模式,m0为正常走钟;m1为调分;m2为调时;m3为闹钟调分;m4为闹钟调时。
module mode_key(key,clr,m);input key,clr;output [2:0]m;reg [2:0]m;always @(posedge key or negedge clr) beginif(!clr) m=0;else if(m==4) m=0;else m=m+1;endendmodule2、数字钟秒钟计数设计module cnt60_sec(clk,clr,q,c);input clk,clr;output [6:0]q;output c;reg [6:0]q;reg c;always @(posedge clk or negedge clr) beginif(!clr) begin q=0;c=0;endelse if(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;end第3页,共19页else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;endendendmodule、秒钟计数模块就是一个60的计数器,计数到59的时候清零,进位加1。
调时不需要控制秒钟,所以没有加模式选择按键。
基于FPGA的多功能数字时钟设计综述

流程说明:
1.工程师按照“自顶向下”的设计方法进行系统划分。
2.输入VHDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。
3.将以上的设计输入编译成标准的VHDL文件。
4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。
第二章
2.1
FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/FPGA。CPLD/FPGA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步[1]。
5.利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
基于FPGA多功能数字钟设计讲解

前言现代的社会是一个信息产品广泛使用,产品的性能越来越强大,做工越来越精细,工艺越来越高,更新换代越来越迅速的社会。
而支持电子信息产品高速发展的是不断提高的微电子制造工艺水平和不断发展的电子产品的设计开发技术。
微细加工技术作为微电子的代表,而电子设计自动化则是后者的代表。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。
而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。
因此,键信息输入是与软件结构密切相关的过程。
根据键盘的结构不同,采用不同的编码方法。
但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别于大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。
同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国Altera公司的可编程逻辑器件采用全新的结构和先进的技术,加上Quartus II开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。
基于FPGA的多功能数字钟课程设计

F PG A课程设计报告(实现多功能数字钟)一、标题:设计多功能数字钟控制电路二、任务书:用MAX+PLU SⅡ软件及Verilog HDL语言设计一个多功能的数字钟,包括有时、分、秒的计时,以及校时(对小时、分钟和秒能手动调整以校准时间)、正点报时(每逢整点,产生“嘀嘀嘀嘀-嘟”,4短一长的报时音)等附加功能。
三、关键词:24进制、60进制、正点报时、校时、数字钟四、总体方案:多功能数字钟控制电路框图是由三部分组成的,即秒分时控制电路、整点报时控制电路、时段控制电路。
用Verilog HDL硬件描述语言完成编译和仿真。
五、原理框图如下:↓↓↓六、Verilog HDL硬件描述语言编写的功能模块:/*秒计数器m60*/module m60(M,CP60M,CPM,RD); output [7:0]M;output CP60M;input CPM;input RD;reg [7:0]M;wire CP60M;always@(negedge RD or posedge CPM) beginif(!RD)begin M[7:0]<=0;endelsebeginif((M[7:4]==5)&&(M[3:0]==9))beginM[7:0]<=0;endelsebeginif(M[3:0]==9)beginM[3:0]<=0;if(M[7:4]==5)begin M[7:4]<=0;endelse M[7:4]<=M[7:4]+1;endelse M[3:0]<=M[3:0]+1;endendendassign CP60M=~(M[6]&M[4]&M[3]&M[0]); endmodule/*分计数器m60*/module m60(M,CP60M,CPM,RD);output [7:0]M;output CP60M;input CPM;input RD;reg [7:0]M;wire CP60M;always@(negedge RD or posedge CPM) beginif(!RD)begin M[7:0]<=0;endelsebeginif((M[7:4]==5)&&(M[3:0]==9))beginM[7:0]<=0;endelsebeginif(M[3:0]==9)beginM[3:0]<=0;if(M[7:4]==5)begin M[7:4]<=0;endelse M[7:4]<=M[7:4]+1;endelse M[3:0]<=M[3:0]+1;endendendassign CP60M=~(M[6]&M[4]&M[3]&M[0]); endmodule/*小时计数器m24*/module m24(H,CPH,RD);output [7:0]H;input CPH,RD;reg [7:0]H;always@(negedge RD or posedge CPH) beginif(!RD) H[7:0]<=0;elsebeginif((H[7:4]==2)&&(H[3:0]==3))beginH[7:0]<=0;endelsebeginif(H[3:0]==9)begin H[3:0]<=0;H[7:4]<=H[7:4]+1;endelse H[3:0]<=H[3:0]+1;endendendendmodule/*秒分时控制计数器xiaoshi2*/module xiaoshi2(CPM,CPH,CPS,CP60M,CP60S,SWM,SWH);output CPM,CPH;input SWM,SWH;input CPS,CP60S,CP60M;reg CPM,CPH;always@(SWM or SWH or CPS or CP60S or CP60M)begincase({SWM,SWH})2'b01: begin CPM<=CPS;CPH<=CP60M;end2'b10: begin CPM<=CP60S;CPH<=CPS;enddefault: begin CPM<=CP60S;CPH<=CP60M;end endcaseendendmodule/*时段控制器sdkz*/module sdkz(h,sk);input [7:0]h;output sk;reg sk;always@(h)beginif((h<=5)||(h>=19))sk<=1;elsesk<=0;endendmodule/*报时计数器baoshi*/module baoshi(m6,m4,m3,m0,s6,s4,s3,s0,dy,gy,bshi); input m6,m4,m3,m0,s6,s4,s3,s0,dy,gy;output bshi;wire bm;reg bshi;assign bm=m6&m4&m3&m3&m0&s6&s4&s0; always@(bm or s3 or dy or gy)beginif(bm&s3)bshi<=gy;else if(bm)bshi<=dy;elsebshi<=0;endendmodule七:各模块原理图及仿真波形:24进制原理图:60进制原理图:电路原理图:时段控制:报时:1、秒计数器仿真波形2、分计数器的仿真波形3、小时计数器的仿真波形4、秒分时控制电路的仿真波形5、时段控制的仿真波形6、报时器的仿真波形八、顶层文件及仿真波形顶层文件的仿真波形:管脚号的分配如下:十:课程设计结论:此次课程设计通过最终下载及编译可实现以上功能,在七段显示器上可实现秒、分计数器60进制,时计数器24进制显示,以及调节CLK1、CLK2的频率可使计数器上数字延时显示。
基于FPGA的数字电子钟的设计与实现

基于FPGA的数字电⼦钟的设计与实现背景:本实验所有结果基于Quartus II 13.1 (64-bit)实现,实验过程采⽤⾃下⽽上⽬录⼀、基本功能设计与思路基本功能:能实现秒、分钟、⼩时的计数,计数结果清晰稳定的显⽰在 6 位数码管上。
1、动态显⽰模块该模块主要功能是通过数码管的动态扫描实现 6 位数码管显⽰计数结果,本模块由扫描模块scan_cnt6,位选控制模块 dig_select,数据选择控制模块 seg_select 以及译码模块 decoder 构成扫描模块 scan_cnt6模块功能:产⽣ 位选控制端dig_select 和数据选择端 code_select 模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。
设计思路:利⽤74390芯⽚(P160 TTL 双⼗进制异步计数器)构建⼀个模六计数器,就是6进制计数器,利⽤计数到6(110)时,“q2”和“q1”为⾼电平,产⽣ ⼀个复位信号,加到74390的⾼电平有效的异步清0端“1CLR”上,使计数器回0,从⽽实现模六计数。
设计结果:cnt6模块设计图波形仿真:(默认为时序仿真)cnt6模块波形仿真图位选模块 dig_select模块功能:在地址端的控制下,产⽣位选信号。
设计思路:利⽤74138芯⽚(3线-8线译码器),当选通端输⼊端G1为⾼电平,选通端输⼊端G2AN和G2BN为低电平时,将扫描信号cnt6的输出作为输⼊信号,dig[5..0]是译码输出,输出低电平有效。
设计结果:dig_select模块设计图波形仿真:dig_select模块波形仿真图数据选择模块 seg_select模块功能:输⼊ 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从6 组数据当中选择 1 组输出。
设计思路:利⽤74151芯⽚(P91 8选1数据选择器),在控制输⼊端GN为低电平时,将扫描信号的选择下,分别选中D[5..0]对应的输⼊信号输出为Y。
基于FPGA多功能数字钟的设计

3、状态转换功能模块
该模块实现电路各状态之间的转换功能,若仅完成基本功能,系统 应包含4个状态,分别为正常计时、对秒位进行设置、对分位进行设置 和对小时位进行设置。若完成扩展功能,还可增加其他状态。这部分可 以用脉冲键输入进行切换,也可以用拨动开关进行切换。根据所选择的 切换方式,自行编写程序。
4、校时功能模块
此模块主要在状态切换到设置时,可以将时、分、秒位设置成需要的 数值,此功能可以由脉冲键输入完成。
5、译码功能模块
此模块功能将计数器产生的数值,通过编译,形成对应七段数码 管显示格式的编码。七段数码管的a-g对应实验箱上的主要引脚为 O50-O56。
6、LED显示模块
本模块使用实验箱上的8个数码管进行显示,为动态显示法,需采用 扫描的方式进行显示。此方法对于扫描频率有一定的要求,在设计时需 考虑采用那个频率作为扫描信号。8个数码管的扫描信号对应实验箱上的 引脚为SO58-SO65。
四、系统仿真
将每个模块编译成功后,进行仿真测试,若仿真结果符合设计 要求,再配置输入输出引脚,若不符合,请返回修改程序,直至仿 真结果合格。将仿真结果截图,记录至设计报告中。
精品课件!
精品课件!
五、硬件验证
将编译通过、仿真结果正确且引脚信息配置正确的程序下载至 实验箱的FPGA中,硬件验证设计是否符合要求。
2、计时功能模块
计时模块需对时、分、秒进行计数,其中小时位为24进制,分 钟和秒钟位为60进制。可以用一段程序对时、分、秒进行连续计数, 也可以对时、分、秒的高位和低位分别计数。注意,如果采用连续 计数方式,因为每位显示时有高位和低位之分,所以需将十进制数 据用BCD码进行转换后,才能输出到七段数码管上显示。
此电子钟分两种工作状态: 1、正常计时的状态; 2、设置时间的状态。
基于FPGA的多功能数字钟设计实现

其中我负责计时、报时、秒表、日期、电子琴等功能的设计和实现:
1.计时、校时与校分(自动校时、手动校时、指定时间(时、分、秒)校时);
2.日期:具备显示日期、设定日期、自动调整日期功能;
3.秒表:具备显示功能、开始与暂停功能、清零功能;
4.电子琴:具备21个声调的发音以及显示功能。
3
3.1
现场可编程门阵列(Field Programmable Gate Arrays,FPGA)是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。它是一种可编程使用的信号处理器件。通过改变配置信息,用户可对其功能进行定义,以满足设计需求。通过开发,FPGA能够实现任何数字器件的功能。与传统数字电路相比,FPGA具有可编程、高集成度、高可靠度和高速等优点。
系统采用AleraDE0开发板,并外接了蜂鸣器电路。系统由分频模块、计时模块、闹钟模块、控制模块、显示模块、秒表模块、音乐模块、日期模块、电子琴模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成需求功能。
关键词:数字时钟,时钟输入
50-MHz振荡器
VGA输出
4-bit电阻式DAC(数位类比转换)
15-pin高密度D型接头
最高支持1280x1024每秒60幅
序列ports
一组RS-232 port (不含DB-9连接器)
一组PS/2 port (若要同时接滑鼠与键盘可使用PS/2 Y Cable来扩充)
两个40-pin扩充槽
4.延时闹钟:具备使闹钟时间延迟的功能;
5.音乐闹钟:具备多种音乐供使用者选择为闹钟。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA的多功能数字钟的设计摘要数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常生活中不可少的必需品。
本文介绍了应用FPGA芯片设计多功能数字钟的一种方案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。
关键词数字钟、分频器、译码器、计数器、校时电路、报时电路。
Design ofAbstractKeywords目录0.引言 (4)1.设计要求说明 (4)1.1设计要求 (4)1.2完成情况说明 (4)2.多功能数字钟的基本原理及其在FPGA中的设计与实现 (4)2.1计时电路 (5)2.2异步清零电路 (5)2.3校时、校分功能电路 (5)2.4报时电路 (6)2.5分频电路 (7)2.6闹钟及音乐闹铃电路 (9)2.7秒表计时电路 (15)2.8译码显示电路 (15)2.9逻辑总图 (16)3.设计感想 (17)参考文献 (17)0.引言数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
1.设计要求说明1.1设计要求1)设计一个具有校时、校分、清零,保持和整点报时功能的数字钟。
2)多数字钟采用层次化的方法进行设计,要求设计层次清晰、合理;构成整个设计的功能模块既可采用原理图方法实现,也可采用文本输入法实现。
3)数字钟的具体设计要求具有如下功能:①数字钟的最大计时显示23小时59分59秒;②在数字钟正常工作时可以进行快速校时和校分,即拨动开关K1可对小时进行校正,拨动开关K2可对分钟进行校正;③在数字钟正常工作情况下,可以对其进行不断电复位,即拨动开关K3可以使时、分、秒回零;④整点报时是要求数字钟在每小时整点来到前进行鸣叫,鸣叫频率是在59分53秒、55秒、57秒时为500Hz,59分59秒时为1KHz;⑤哟啊去所有开关具有去抖动功能。
4)对设计电路进行功能仿真。
5)将仿真通过的逻辑电路下载到EDA实验系统,对其进行验证。
1.2完成情况说明:对于实验要求的基本功能我们设计的电路都能准确实现。
另外,我们还附加了显示星期、秒表、闹钟时间来时播放音乐等功能。
2.多功能数字钟的基本原理及其在FPGA中的设计与实现通过分析多功能数字钟的设计要求和所要实现的功能,应用层次化方法设计出数字钟应由计时模块、分频脉冲模块、译码显示模块、校时校分和清零模块、报时模块等几个模块组成,其原理框图如下图1所示:图1 数字钟的原理框图2.1计时电路通过分析数字钟的功能,知道数字钟计时周期是24小时,因此必须设置模24的小时计数器,两个模为60的计数器实现分和秒的计数,三个计数器之间构成进为关系,即秒计数器为分计数器提供计数脉冲信号,分计数器为时计数器提供计数脉冲信号。
另外,如果想要数字钟还可以显示星期的话,还应添加一个模7的星期计数器,由时计数器提供计数脉冲信号。
从全局设计考虑计时器应具有使能端和异步清零端。
为实现计时功能,我们可以选用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异步清零电路为实现异步清零功能,可以将异步清零开关KK3分别和各个计数器的清零信号的取反相或非后再接给清零端。
这样,当KK3关闭(低电平)时,计数器正常计数;当开关KK3开启(高电平)时,计数器全部异步清零。
2.3校时、校分功能电路数字钟的校时和校分功能原理相同,通过开关KK1、KK2控制工作状态。
当KK1打到低电平、KK2打到低电平时,各计数器的ENT端接的都是正常计数信号,ENP端都是高电平,各个计数器均正常计数;当KK1打到高电平、KK2打到低电平时,分个计数器的ENP端接的是KK2的非(高电平),进位信号正常送入分十位计数器的ENT端,分计数器快速校分,而由于秒计数器和时计数器的个位的ENP 端接的是KK1的非,所以秒计数器和时计数器被保持;当KK1打到低电平、KK2打到高电平时,正常进位信号被阻塞,分计数器可以不接受秒计数器的进位信号控制,校时信号便被送入CP 端,时计数器可以进行快速校时。
以上3部分功能可放在同一模块中实现,电路图如2所示。
图2 计时、清零、校分校时电路仿真结果如下图3所示:图3 计时、清零、校分校时电路的仿真结果2.4报时电路数字钟的报时功能由两部分组成,一部分的作用是选择报时的时间,一部分的作用是选择报时的频率。
根据设计要求,数字钟在59分53秒、55秒、57秒的报时鸣叫频率为500Hz ,59分59秒的报时鸣叫频率为1KHz 。
用与非门控制蜂鸣器信号,电路计时到59分53秒、59分55、秒59分57秒时打开与门,把500Hz 信号送入蜂鸣器,到59分59秒时打开与门,把1KHz 信号送入蜂鸣器。
经卡诺图化简后,得二与门的输出表达式为: 4330302011595f s f s f s Y •••'''=这部分电路的电路图如下图4所示:图4 报时电路这部分功能仿真结果如图5所示:图5 报时电路仿真结果2.5分频电路数字钟计时的标准信号应该是频率相当稳定的1HZ秒脉冲,所以要设置标准时间源。
由于FPGA芯片上有输出频率是48MHz的高精确度、高频稳度的晶体振荡器,所以我们只需做一些特定模的计数器进行分频就可以得到我们所需要的精确频率。
分析电路中的功能,一共需做3种计数器来分频,分别模48、模1000和模2计数器。
它们均可由74161构成,运用反馈置数法可以很容易的做成这3种计数器。
模48的计数器如下图6所示:图6 48分频器电路其仿真结果如图7所示:图7 48分频器仿真结果模1000的计数器如下图8所示:图8 1000分频器电路器仿真结果如下图9所示:图9 1000分频器仿真结果模2的计数器如下图10所示:图10 2分频电路其仿真结果如图11所示:图11 2分频仿真结果2.6闹钟及音乐闹铃电路通过分析闹钟应具有的功能,可以清楚闹钟应分成这样几个部分来做。
一是设定闹钟时间(小时、分钟)电路,可以还用类似于校时、校分的方法,用控制计数开始计数和暂停来实现设定时间;二是比较电路当正常计时的数字钟的时间和设定的闹钟时间相同时,输出一高电平,使其与发声频率相与后送给蜂鸣器来发出声响;三是显示切换电路,这个电路保证在设定闹钟时间时,虽然数码管显示的是闹钟设定的时间,但数字钟还在正常计时,只是没有显示出来。
通过以上分析发现,闹钟时间设定模块可以直接利用前面设计好的计时&校时校分模块jishi.bdf,只要在原来基础上加3个开关去控制就可以了。
其中,KK4的作用是切换显示开关,将它与1hz脉冲相与后再接给闹钟计数器的时钟,KK4打开时,设定闹钟时间的计数器才使能;KK5是设定分钟计数器的开关;KK6是设定小时计数器的开关。
比较模块则可以用4片集成的数据比较器7485(时2片、分2片)来实现比较功能,将4片7485的输出AEBO(相等时输出1)通过4与门相与后再输出,只有当4个AEBO同时出1时才代表闹钟时间和时钟时间重合。
至于显示切换电路则可以用6片2选1数据选择器74157来构成一个2路选1路的数据选择器,用切换开关KK4来判断2路选1路的数据选择器的选择输出正常计时的时间给数码管显示,还是输出闹钟设定时间给数码管显示。
这3部分的电路如下图12所示。
图12 闹钟功能电路在上面闹钟的基础上,我们还增加了播放音乐的功能,即当到达设定的闹钟时刻时,蜂鸣器会播放出优雅的《梁祝》曲子。
这部分功能需要通过VHDL硬件语言来编写程序。
要实现播放音乐功能需要包含控制、曲谱等在内5个子模块。
程序源码如下:1)模块1-- File Name: music.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 DOWNTO 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 (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 <= sub_wire0(3 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (intended_device_family => "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 => "speaker.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_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 (clk'event and clk='1')then counter<=counter+1;end if;end process;u1:music port map(address=>counter,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)begincase index iswhen "0000"=>tone<="11111111111";when "0001"=>tone<="01100000101";when "0010"=>tone<="01110010000";when "0011"=>tone<="10000001100";when "0101"=>tone<="10010101101";when "0110"=>tone<="10100001010";when "0111"=>tone<="10101011100";when "1000"=>tone<="10110000010";when "1001"=>tone<="10111001000";when "1010"=>tone<="11000000110";when "1100"=>tone<="11001010110";when "1101"=>tone<="11010000100";when "1111"=>tone<="11011000000";when others=>null;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_logic);end entity speaker;architecture one of speaker issignal preclk,fullspks:std_logic;begindivideclk:process(clk)variable count4:std_logic_vector(3 downto 0);beginpreclk<='0';if count4>11 then preclk<='1';count4:="0000";elsif clk'event and clk='1' then count4:=count4+1;end if;end process divideclk;genspks:process(preclk,tone)variable count11:std_logic_vector(10 downto 0);beginif preclk'event 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 fullspks'event and fullspks='1' then count2:=not count2;if count2='1' then spks<='1';else spks<='0';end if;end if;end process;end;5)模块5-- File Name: songer.vhdlibrary ieee;use ieee.std_logic_1164.all;entity songer isport(clk12MHZ:in std_logic;clk8HZ:in std_logic;spkout:out std_logic);end;architecture one of songer iscomponent notetabsport(clk:in std_logic;toneindex:out std_logic_vector(3 downto 0));end component;component tonetabaport(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0));end component;component speakerport(clk:in std_logic;tone:in std_logic_vector(10 downto 0);spks:out std_logic);end component;signal tone:std_logic_vector(10 downto 0);signal toneindex:std_logic_vector(3 downto 0);beginu1:notetabs port map(clk=>clk8HZ,toneindex=>toneindex);u2:tonetaba port map(index=>toneindex,tone=>tone);u3:speaker port map(clk=>clk12MHZ,tone=>tone,spks=>spkout);end;将上面5个程序输入好后分别编译,然后再将模块5songer.vhd生成芯片,再将这块芯片添加到闹钟电路里,就可以播放梁祝音乐闹铃了。