摘要:采用FPGA进行的数字电路设计具有更大的灵活性和通用性,已成为目前数字电路设计的主流方法之一。本文给出一种基于FPGA的数字钟设计方案。该方案采用VHDL设计底层模块,采用电路原理图设计顶层系统。整个系统在QuartusⅡ开发平台上完成设计、编译和仿真,并在FPGA硬件实验箱上进行测试。测试结果表明该设计方案切实可行。
EDA(Electronic Design Automation)又名电子设计自动化,其基本特征是:以超大规模可编程逻辑器件,如FPGA,为设计载体,以硬件描述语言,如VHDL,为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,完成电子系统的设计。使用EDA进行电子系统设计具有以下特点:1)用软件方式设计硬件;2)用软件方式设计的系统到硬件系统的转换是由有关开发软件自动完成的;3)设计过程中可用有关软件进行各种仿真;4)系统可现场编程,在线升级;5)整个系统可集成在一个芯片上,体积小、功耗低、可靠性高;6)设计的移植性好、效率高;7)适合分工设计、团队协作。因此,EDA技术是现代电子设计的发展趋势。
1 数字钟的设计方案
本文以FPGA平台为基础,采用VHDL语言在QuartusⅡ开发环境下设计开发多功能数字钟,具有计时、校时、蜂鸣闹铃的功能,具体功能为:1)能够对秒、分、小时进行正常计时,每日按24小时计时制,能用八个七段数码管进行友好界面的显示;2)具有复位功能,可以对当前时间进行清零;3)能够对电子时钟进行时分秒设置,方便在时钟跑错时进行校正;4)能够设定电子闹钟,在指定的时间驱动蜂鸣器等外设工作,引起使用者注意;5)电子钟具有溢出警报功能,当小时数超过24时,用一个LED小灯进行溢出警报说明,然后从00—00—00开始从新计时,此功能可以使电子钟很方便的扩展为万年历。
我们采用自顶向下的层次化设计方法进行设计,其输入为状态选择信号(使用一个2位二进制表示选择,00正常运行或显示闹铃信息,01设置秒,10设置分,11设置时)、复位信号、闹铃开关(配合状态选择信号进行闹铃的设置)、1 Hz的计时时钟信号和1 kHz的扫描时钟信号;输出为时、分、秒数字显示(这里使用了8个共阴极的七段数码管作为显示输出)、闹钟蜂鸣、溢出信号。系统由状态选择模块、时、分、秒计时校时模块、显示与闹铃模块组成。数字钟的系统框图图如图1所示。
2 核心模块设计
2.1 状态选择模块设计
该模块主要功能其实是对输入端的汇总,然后根据设置方法对不同的模块进行使能和参数传递,输出不同的信令signaling控制到各个模块,使每个模块工作在一个有序的状态。状态选择模块的电路描述如图2所示,具体说明如下:当输入一个脉冲到复位键reset时,数字钟启动并对时间清零。闹铃键clock=0时,模块根据状态选择键IS_SET输出不同秒、分、时信令到秒、分、时计时校时模块,控制这些模块的运行状态。此时,当IS_SET=00时为正常计时状态,秒、分、时的输出信令均为80;IS_SET=01时为秒校时状态,输出秒信令S_signaling为时间输入Time(显然该输出小于60),而输出分信令M_signaling和时信令H_signaling均为100,表示暂停分、时计时;IS_SET=10和11时则分别为分和时的校时状态。闹铃键clock=1时,当IS_SET=10和11时分别设置闹铃的分、时为时间输入Time并将设置的闹铃时间输出到“显示与闹铃模块”中保存;当IS_SET=00时,输出out_clock=1,控制显示与闹铃模块显示设置的闹铃时间。注意,当闹铃键clock=1时,计时正常运行,不论IS_SET如何设置,秒、分、时的输出信令均为80。
2.2 计时校时模块设计
该模块用于时、分、秒的计时校时,根据状态选择模块传输过来的信令signaling分别进行计时和校时。时、分、秒计时校时模块是一样的,只是分秒的进位为60,而小时的进位为24。我们在实体声明中的使用generic变量定义一个numn,该值设置进制为60或24,通过修改numn值就完成分、秒计时模块到小时计时模块的转换。模块的输入为扫描时钟、计时时钟和信令signaling,输出为输出时间高位time_h和输出时间低位time_l,以及进位clk_jin。
计时校时模块的电路描述如图3所示,具体说明如下:每当扫描时钟上升沿时,启动进程,并根据信令signaling执行不同操作,1)当signaling
2.3 显示、闹铃模块设计
本模块是数字钟系统中的输出模块,用于输出LED数字显示和闹铃,其输入为扫描时钟,从计时校时模块输出的秒低位、秒高位、分低位、分高位、时低位、时高位信号和状态选择模块输出的闹铃显示Nao_En闹铃时间Nan_In。如果Nao_En=0则正常显示时间,当Nao_En=1时,在LED数码管上显示闹钟时间。当当前时间与保存的闹铃时间Nan_In相同时,蜂鸣器鸣响1 min。这里我们使用了八个共阴极的七段数码管显示时间,当选位信号sel=“01111111”时,第一个数码管显示数字,其他七位不显示。我们通过动态扫描,轮流显示秒低位sec_ge、秒高位sec_shi、分低位min_ge、分高位min_shi、时低位hour_ge、时高位hour_shi共6路信号,当扫描时钟sanc_clk频率高于28 Hz时,由于人眼的视觉残留效果,使得这6路信号看上去是同时显示在6个七段数码管上。显示、闹铃模块电路描述如图4所示。
3 结束语
在QuartusⅡ软件开发平台上,采用“自顶向下设计,自底向上实现”的方法完成了数字钟的设计与实现。其基本过程如下:1)完成数字钟的总体设计;2)完成各个底层模块的设计和波形仿真:底层模块采用VHDL语言编写,在编译和仿真成功后,对其进行封装;3)完成数字钟的顶层电路设计:根据数字钟的系统框图(图1)在QuartusⅡ中采用电路原理图方式,调用封装好的底层模块,完成顶层电路图的设计;4)对顶层电路进行编译和仿真,结果表明仿真波形符合设计要求;5)进行引脚分配,再编译后,将下载文件下载到FPGA开发板中进行验证和调试。测试结果表明数码管能正确的显示计时时间,能通过按键调整时间,能实现整点报时,完全符合设计要求。