×
嵌入式 > 嵌入式开发 > 详情

基于FPGA的数字日历设计

发布时间:2020-06-17 发布时间:
|

基于FPGA设计数字日历可以实现以软件方式设计硬件的目的,无需购买专用数字芯片,从而克服了传统利用多片数字集成电路设计数字日历存在焊接麻烦、调试繁琐、成本较高等问题。而且,基于FPGA的数字日历与传统系统相比,在设计灵活、开发速度、降低成本、计时精度、功能实现上都得到大幅度提升,能够更好地满足人们日常生活的需要。

本文介绍如何利用VHDL硬件描述语言设计一个具有年、月、日、星期、时、分、秒计时显示功能,时间调整功能和整点报时功能的数字日历。在QuartusⅡ开发环境下,采用自顶向下的设计方法,建立各个基本模块,再构建成一个完整的基于FPGA设计的数字日历的顶层模块,然后对其进行编译、仿真、引脚锁定,最终下载到可编程逻辑器件上进行结果验证。

1数字日历整体设计方案

基于FPGA的数字日历设计分为硬件设计和软件设计两大部分。其原理框图如图1所示。整个数字日历由六个部分组成:显示控制部分,时分秒部分,年月日部分,定时与整点报时部分,星期部分,调整控制部分。秒、分、时分别由两个60进制的计数器和一个24进制的计数器组成。当个计数器达到进位的条件时向下一计数器进位。同样日、月、年也是由不同的计数器组成,当达到所需进位的条件时向下一计数器进位,各计数器在进位的同时分别把各自的结果输出给显示部分进行实时显示。

图1数字日历原理框图

2数字日历的工作原理

首先由外部振荡器产生稳定的高频脉冲信号,作为数字日历的时间基准,然后经过分频器输出标准秒脉冲,输入到FPGA的CLOCK端,实现计数。当秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24进1”规律计数。计满后各计数器清零,重新计数。日部分由于日有28天、29天、30天、31天4种情况,故日由年和月共同判断其天数,日计满后向月进位,月满后向年进位。计数器的输出分别经译码器送数码管显示。计时出现误差时,可以用校时电路校时、校分、校秒和校年、校月、校日。

设计中用到了6个按键K1,K2,K3,K4,ZHENG,NAO.其中K1用于切换显示,刚开始时显示日期,按两次K1显示星期+时间,再按两次K1显示定时时间,再按两次重新显示日期,以此循环。K2、K3和K4配合进行调节:开始正常显示不进行调节;当按两下K2键切换到对分钟进行调节,此时每按两下K3键分钟加1;再按两下K2键切换到对小时进行调节,此时每按两下K3键小时加1;依照分钟→小时→星期→天→月→年→定时→正常→分钟的次序循环调节,每按两下K2键切换到调节相应显示,此时每按下K3键两次,对应显示加1;当切换到定时调节时,每按两下K3键,定时的分钟加1,此时按两下K4键,切换到定时小时调节,每按两下K3键,定时的小时加1.按键ZHENG和NAO为整点报时和定时闹钟的使能端(低电平有效)。

3软件设计

软件设计分为秒分时、年月日、按键调整、控制显示、闹钟等几大模块。设计好各子模块,然后在原理图编辑窗口创建顶层原理图文件shuzirili.bdf,将各子模块按照逻辑关系连接起来得到数字日历电路核心部分的原理图。下面对各子模块设计及仿真进行介绍。

3.1时分秒模块

分和秒都是60进制的计数器,小时则是24进制的计数器,先对各个子模块进行设计编译,验证无误后再将其组织到一起。外部时钟信号通过秒模块的clk输入,产生的进位信号输送到分模块的clk,分模块产生的进位信号输送到小时模块的clk,构成时分秒模块。其结构图如图2所示。

图2时分秒原理图

3.2星期模块

星期模块为七进制计数器。其计数时钟信号来自于调时电路产生的星期进位脉冲信号,计数至6瞬间,计星期模块返回0重新开始计数。

3.3年月日模块

年月日模块有daycounter模块、days-control模块、monthcounter模块、yearcounter模块组成,具有大小月判断和闰年判断功能,其结构图如图3所示。

图3年月日连接框图

下面以年月日模块为例,连接好之后进行编译并仿真,闰/平年的2月仿真结果如图4,图5所示,年进位如图6所示。

图4仿真结果(2008年2月)

图5仿真结果(2005年2月)

图6仿真结果(2004年12月)

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机汇编语言 如何实现点亮熄灭二极管