刘艳昌1,王娜2
(1.河南科技学院,河南新乡453003;2.济源职业技术学院电气工程系,河南济源454650)
摘要:
在FPGA开发环境下,以QuartusII软件为系统设计平台,采用VerilogHDL语言,运用自上而下的模块化编程思想和实现方案对多功能数字钟各功能模块进行设计.在原理图文件中添加各功能模块元件符号,然后通过连线组合各底层模块来实现顶层模块设计,最后进行编译和仿真,验证设计的正确性.系统整体设计具有灵活
性强、
外围电路少、计时精度高、可靠性强等优点.最终在FPGA芯片EP2C8Q208C8上完成下载,验证系统的正确性和实用性.
关键词:
FPGA;多功能数字钟;QuartusII;VerilogHDL中图分类号:TP386文献标志码:A 文章编号:
1008-7516(2013)02-0089-06Design of multi-function digital clock based on FPGA
Liu Yanchang 1,Wang Na 2
(1.HenanInstituteofScienceandTechnology,Xinxiang453003,China;2.DepartmentofElectrical
Engineering,JiyuanVocationalTechnicalCollege,Jiyuan454650,China)
Abstract:Each functional module is designed by using of Verilog HDL language,modular programming ideas and implementations with the software platform of Quartus II system in the development environment of Altera ’s FPGA.Each functional module component symbols is added in the schematic file,and then achieve top-level module design through the connection combination from each bottom-level module.Finally,the correctness of the design is verified through compilation and simulation.The overall design of the system has the advantages of flexibility,simple hardware circuit,high timing precision and reliability.Finally,the designed file is accomplished and downloaded into FPGA COMS chip EP2C8Q208to verify the system correctness and practicality.
Key words:FPGA ;multi-function digital clock ;Quartus II ;Verilog HDL
为适应当今电子产品逐步趋向智能化、便捷化、体积最小化、功耗最低化、开发周期最短化、成本最低化的设计要求[1-2],本文在Altera公司提供的FPGA开发环境下,借助QuartusII软件平台,运用verilog语言对多功能数字钟各模块进行编程,实现了以软件方式设计硬件的目的,无需购买专用数字芯片,从而克服了传统利用多片数字集成电路设计多功能数字钟存在焊接麻烦、调试繁琐、成本较高等问题.基于FPGA的多功能数字钟系统与传统系统相比,在设计灵活、开发速度、降低成本、计时精度、功能实现上都得到大幅度提升.
1系统总体设计方案
根据系统设计功能要求,采用自上而下的模块化编程思想,设计一个基于FPGA器件的多功能电子钟电路,具有校时、校分、整点报、定闹和日期显示等功能.该系统主要由分频模块、控制模块、计时与时间调整模块、整点报时模块、闹钟模块、判断模块和显示驱动模块等组成[3-6].多功能数字钟结构图如图1所示.
收稿日期:2013-02-22
作者简介:
刘艳昌(1979-),男,河南鹤壁人,硕士,助教.主要从事智能控制与信息检测处理技术研究.doi:10.3969/j.issn.1008-7516.2013.02.021
第41卷第2期
412Vol.No.河南科技学院学报Journal of Henan Institute of Science and Technology 2013年4月2013Apr.
图1多功能数字钟结构
Fig.1DigitalclockstructureofMulti-Function
2各功能模块设计与实现
2.1底层各功能模块设计与实现
2.1.1分频模块设计分频模块是把输入clk为50MHz的基本时钟信号分频为其他模块所需的4Hz、6MHz、1kHz和500Hz信号,其中4Hz和6MHz的脉冲信号为闹钟所需;1kHz和500Hz的脉冲信号为整点报所需.在QuartusII软件中选择File→NewQuartusIIProject,进入NewProjectWizard界面,输入新建工程位置d:\mfdclock,并把Project名和顶层设计文件名设为同
一名mfdclock,然后选择FileNewVerilogHDLFile,在窗口右
半部分出来的Verilog.v文件中输入所设计的分频程序,保存
文件名fenpin.v(要与模块名一致),最后把文件fenpin.v置为
顶层文件(选择ProjectSetasTop_LevelEntity)进行编译、功
能仿真、验证设计的正确性,并将分频模块生成元件符号(选
择FileCreat/updateCreatSymbolFilesforCurrentfile),以备顶
层设计时用[6-7].分频模块电路符号如图2所示.
2.1.2控制模块设计控制模块采用按键产生控制信号,但由
于按键有抖动现象所以需要对按键进行消抖处理,本系统采用软件实现按键消抖.该模块具有计时、校时、复位和定闹功能,设置3个按键krest、kset和k_xiangshi作为输入,且均为高电平有效.其中krest控制全局复位;kset控制产生调整时状态转换;k_xiangshi控制数码管时间与日期的切换显示.输出信号state/state_0与state_xianshi的对应状态情况由kset控制,其中state_0控制着计数时钟模式的转换;state控制着定时,日期调整模式的转换;state_xianhshi由k_xiangshi产生控制数码管时间与日期的显示状态切换.这里把state与state_0分开定义是为了不影响定闹和日期调整时时钟正常计时.通过有限状态机的方式来实现模式调整控制,具体state/state_0状态转化如表1所示.
表1状态控制转化表
Tab.1Conversiontableofstatecontrol
k_xianshi
00
01
10
state/state_0
S0(state_0)
S1~S4(state_0)
S0(state)
S1~S4(state)
S0(state)
S1~S6(state)
对应模式
时钟正常计数,数码管显示时、分、秒时间及周日期
分别进入时、分、秒、周校正模式,此时按调整模块输入的kup、kdown键对其实
现连续加减数调整
时钟正常计数,数码管显示定闹模式下的时、分、秒时间及周日期
分别进入定闹时、分、秒、周校正模式,此时按调整模块输入的kup、kdown键对
其实现连续加减数调整
时钟正常计数,数码管显示日期模式下的年、月、日时间
分别进入日期的年千位、百位、十位、个位、月和日校正模式,此时按调整模块输
入的kup、kdown键对其实现连续加减数调整
新建xiaodou.v文件和zhuangtai.v
文件,分别输入相应消抖程序和状态控制程序,同时进行功能仿真
图2分频模块电路符号
Fig.2Circuitsymbolsoffrequencydivisionmodule
2013年河南科技学院学报(自然科学版)
验证设计正确性,并生成元件符号,具体步骤详见分频模块设计.控制模块电路符号如图3
所示.
图3控制模块电路符号
Fig.3Circuitsymbolsofcontrolmodule
2.1.3计时与时间调整模块设计该模块包括时分秒、年月日和周计时3个大模块.为了直观和译码方便,各计数模块均采用BCD码完成,具体各模块设计如下:
2.1.3.1时分秒计时调整模块设计时分秒计时模块采用时二十四进制和分(秒)六十进制进行计数,实现从00:00:00到23:59:59正常计数和闹钟时间设置功能.其中,hour[7..0]、min[7..0]、sec[7..0]为时钟的时、分、秒输出;week_t[7..0]、hour_t[7..0]、min_t[7..0]、sec_t[7..0]为设定闹钟时的周、时、分、秒输出,其均送给判断模块和显示驱动模块.
新建sfm_jstz.v文件,输入所设计的时分秒计时调整模块程序,同时进行功能仿真验证设计正确性,并生成元件符号,以备进行顶层设计时使用,具体步骤参见分频模块设计.时分秒计时调整模块电路符号如图4所示.
2.1.3.2年月日周计时调整模块设计该
模块主要由年、月、日3个计数子模块组
成,其各模块间通过进位信号连接实现
对日期进行记录和调整,最大可计数1
万年.这3个子模块均带有预置调整、
计数和进位功能,具体设计思路如下:
(1)日计时模块:日的进位脉信号
clk_day来自判断模块oc_day输出,当有
进位脉冲时日数加1;year[13..0]和month[3..0]来自显示模块的反馈输入,其
值用来判断是否闰年和闰月,确定该月的天数X (包括28、29、30、31四种情况),待计数到X +1瞬间产生月进位脉冲,使月计数模块加1,而日计数模块返回到1重新开始计数;outday[5..0]为天的输出送给显示驱动模块进行显示;oc为月的进位脉冲,当该月的最后一天最后一秒到来时产生进位输出.
(2)月计时模块:月进位脉冲信号clk_month来自日计时模块oc输出,当有进位脉冲时月数加1;outmonth[3..0]为月的输出送给显示驱动模块进行显示;oc为年的进位脉冲,当第12个月的最后一天最后一秒到来时产生进位输出.
(3)年计时模块:年进位脉冲信号clk_year来自月计时模块oc输出,当有进位脉冲时年数加1;outyear[13..0]为年的输出送给显示驱动模块进行显示,待计数到9999年12月31日23时59分59秒时,再来一个秒脉冲时,年计数模块返回到0000重新开始计数.
对上述3个子模块分别新建day.v、month.v和year.v文件,输入相应模块程序,同时进行功能仿真验证设计正确性,并生成对应元件符号,以备进行顶层设计时使用,具体步骤参见分频模块设计.年月日计时调整模块电路符号如图5
所示.
图4时分秒计时调整模块电路符号
Fig.4CircuitsymbolsofHour,minuteandsecondtimingadjustmentmodule
刘艳昌等:基于FPGA 的多功能数字钟设计第2期
图5年月日计时调整模块电路符号
Fig.5Circuitsymbolsofyear,monthanddaytimingadjustmentmodule
(4)周计时调整模块设计:周进位脉信号clk_day
来自判断模块oc_day输出,当有进位脉冲时天数加1,待
计数到7周末最后一天最后1秒时,周计时模块返回到
1重新开始计数;week[3..0]为周的输出送给显示驱动模
块进行显示.新建week.v文件,输入周计时调整模块程
序,同时进行功能仿真验证设计正确性,并生成元件符号,
以备进行顶层设计时使用,具体步骤参见分频模块设计.
周计时调整模块电路符号如图6所示.
年月日周计时电路功能仿真波形如图7
所示.图7日期计时电路功能仿真波形
Fig.7Simulationwaveformofdatetimingcircuitfunctional
2.1.4判断模块设计判断模块主要通过正常计时时间与设定时间进行比较产生整点报时和闹钟控制信号.其中,krest为全局复位键,当按下此键时恢复正常计时;oc_day为天的进位信号,每当23∶59∶59时产生进位脉冲;sing-k为控制闹钟信号,当正常计时时间与闹钟设定时间一致时输出1min的高电平,并与音乐模块输出相与后经或门送给扬声器,使其产生闹铃音乐信号;diyin_k和gaoyin_k分别为整点报时的低音和高音控制信号,当计到XX ∶59∶(51、53、55、57)时,diyin_k输出高电平与分频模块的clk_diyin_500Hz相与后经或门送给扬声器,使其产生4声低音,当计到XX ∶00∶59时,gaoyin_k输出高电平与分频模块的clk_gaoyin_1kHz相与后经或门送给扬声器,使其产生一声高音,从而
实现整点报时功能.
新建panduan.v文件,输入设计的判断模块程序,同时进行功能
仿真验证设计正确性,并生成元件符号,以备进行顶层设计时使用,
具体步骤参见分频模块设计.判断模块电路符号如图8所示.
2.1.5显示驱动模块设计显示驱动模块包括译码和动态扫描两部
分,将要显示时间和日期的BCD码转化为7段码,在扫描频率下动
态循环点亮8位数码管.该设计采用动态显示最大优点是每次只点
亮一个数码管,其功率仅为8个数码管静态显示的1/8且输入电流
小.只要确保每个扫描频率大于24Hz(人眼视觉暂留频率),就可以
实现点亮一个数码管显示,却能享受7个数码管同时显示的视觉效
果,由于人视觉的余晖效应,显示不出现闪烁抖动.输入信号作用前图6周计时调整模块电路符号Fig.6Circuitsymbolsofweektimingadjustment
module
图8判断模块电路符号Fig.8Circuitsymbolsofjudgmentmodule
2013年河南科技学院学报(自然科学版)
边模块已介绍,不再赘述;输出信号:a[0..6]为数码管的段选,
不同时刻显示不同的数字高电平有效;b[0..7]为数码管的位
选,选择哪个数码管显示数字,低电平有效;dp为数码管的小
数点,高电平点亮.
新建led_drive.v文件,输入共阴极数码管显示驱动模块
程序,同时进行功能仿真验证设计正确性,并生成元件符号,以
备进行顶层设计时使用,具体步骤参见分频模块设计.显示驱
动模块电路符号如图9所示.
2.2顶层模块设计与实现
2.2.1顶层模块设计及文件编译在完成各底层模块后,新建
原理图文件(选择菜单FilenewBlockdiagram/SchematicFiles,并
另存为mfdclock.bdf),在原理图文件绘图区中双击鼠标左键,并在project中将各功能模块元件添加到原理图中,通过对各模块之间连线实现顶层模块设计,将其保存后,设为顶层(选择菜单projectSetasTop-levelEntity),进行编译.顶层文件编译步骤如下:
(1)选择菜单AssignmentsDevice,选择可编程逻辑器件EP2C8Q208C8,并将所有未使用到的管脚全部置为三态输入(点击DeviceandPinOptions对话框,选择UnusedPins选项卡,将Reserveallunusedpins选择为asinputtri-stated),以防止某些高电压下会有较大电流灌向引脚,造成未用到的Flash芯片烧坏.
(2)选择菜单ProcessingStartcompilation(或者点击)进行工程编译,有错误返回进行修改,直到编译成功后,再选择菜ProcessingAnalyzeCurrentFile(或者点击)进行综合.
(3)选择菜单AssignmentsPins,弹出PinPlanner窗口,参照FPGA硬件电路对其用到的管脚进行分配.
2.2.2顶层设计文件的仿真在设计好的顶层模块窗口上,新建一个波形文件(点击菜单FileNewVectorWaveformFile),选择菜单EditEndtime和GridSize分别设置合适仿真结束时间和周期;选择菜单AssignmentsSetting...,并在Simulationmode下选择功能仿真模式Functional后,在Name窗口中双击左键添加所需要仿真的输入输出管脚名,并把输出值设为十进制代码显示;给输入管脚clk指定输入仿真时钟波形,并保存文件为mfdclock.vwf,选择菜单ProcessingGenerateFunctionalSimulationNetlist生成网络表;最后点击ProcessingStartSimulation(或点击)进行仿真.图10是以2012年2月15日凌晨为整点报和闹钟设定时间的顶层电路功能仿真波形,从图可知当计到00:59:XX(51、53、55、57)时,diyin_k输出高电平供扬声器驱动模块用,使其产生四声低音;当计到00:59:59时,gaoyin_k输出高电平供扬声器驱动模块用,使其产生一声高音;当设置闹钟周数与正常周数一致,且计时到凌晨00:00:00时,sing_k输出1min
高电平供扬声器驱动模块用.
图10顶层电路功能仿真波形
Fig.10Top-levelcircuitfunctionalsimulationwaveform
2.2.3顶层文件编译的下载与验证在确保USB-Blaster下载器驱动已安装前提下,选择菜单ToolsProgrammer(或者点击)下载文件,点击HardwareSetup,在currentlyselectedHardware下拉菜单中选择USB-Blaster后关闭该窗口,然后点击将当前工程文件中所生成的文件mfdclock.sof(JTAG下载模式)通过计算机下载到ALTERA公司的EP2C8Q208C8
芯片中,结合外围电路做在线调试.本设计外围
图9显示驱动模块电路符号Fig.9Circuitsymbolsofdisplaythedrivermodule刘艳昌等:基于FPGA 的多功能数字钟设计第2期
主要器件包括:用于显示的8位7段数码管,50MHz基本时钟源,用于复位、计时、校时和定闹的5个功能键,用于报时的蜂鸣器以及其它必要驱动电路.在线调试成功后,再用AS下载模式把mfdclock.pof文件烧写固化到该FPGA芯片上即可.
3结语
本文基于FPGA环境设计了多功能数字钟系统,实验验证表明:整个系统运行稳定,精度明显高于普通多功能数字钟.另外系统还设计出了基于FPGA芯片的专用IPCore,不仅拥有自己的知识产权,而且可以很容易嵌入到其他复杂的数字系统中,通过外围电路简单连接便可充当计时模块,从而减少体积,缩短开发周期,降低开发成本.
参考文献:
[1]李慧.基于FPGA的电子万年历设计[J].微计算机信息,2010,26(20):175-176.
[2]王永维.一种基于FPGA的数字秒表设计方法[J].电子元器件应用,2012,14(1):10-13.
[3]高锐.基于FPGA的数字钟电路设计[J].中国制造业信息化,2012,41(9):57-60.
[4]王术群.基于FPGA数字中的设计与实现[J].西南民族大学学报:自然科学版,2011,37(S1):104-107.
[5]纪欣然,丁一,梁致源.基于FPGA的多功能数字钟设计[J].电子设计工程,2012,20(16):177-179.
[6]罗杰.VerilogHDL与数字ASIC设计基础[M].武汉:华中科技大学出版社,2008:188-196.
[7]华清远见嵌入式培训中心.FPGA应用开发入门与典型实例[M].北京:人民邮电出版社,2008:148-160.
(责任编辑:卢奇)
(上接第88页)
参考文献:
[1]李萍,王言堂,李治洲.矿用隔爆兼本质安全型高压软起动器研究[J].煤矿机电,2008(5):34-36.
[2]鲍长福,杨传启.基于组态技术的矿用压风机远程在线监控系统[J].煤矿机械,2012,32(7):236-238.
[3]宏晶科技.STC12C5A60S2增强型单片机数据手册[S/OL].[2012-12-10].http://www.STCMCU.com.
[4]张培仁.基于C语言编程MCS-51单片机原理与应用[M].北京:清华大学出版社,2003:277-288.
[5]广州唯创电子有限公司.WTV系列语音芯片资料[S/OL].[2012-12-12].http://www.w1999c.com.
[6]刘爱军,刘德顺,周知进,等.矿用风机叶轮加工过程资源环境属性分析[J].制造技术与机床,2009(7):99-103.
[7]姚芳,李志刚,杨春稳.矿井风机应急供电电源三相逆变控制技术[J].低压电器,2011(22):58-62.
(责任编辑:卢奇)