王喜喜 沈祖斌
摘 要:利用电子设计自动化(EDA)的技术自顶向下的设计方法,设计可校时电子钟各模块及相应具体电路,利用Quartus Prime软件平台对电路进行设计,设计包括对系统时钟精确的分频以及动态刷新驱动七段数码管显示,最后通过Quartus Prime软件平台编译、仿真,并下载到EPM1270开发板上。在开发板上显示“时”,“分”,“秒”,并可通过两个功能键进行校时。
关键词:校时;电子钟;动态刷新;分频电路
中图分类号:TH714 文献标志码:A 文章编号:2095-2945(2018)19-0089-03
Abstract: Utilizing Electronic Design Automation (EDA) technology top-down design methodology, designing corrective electronic clock modules and corresponding specific circuits, using the Quartus Prime software platform to design the circuit, the design includes precise frequency division of the system clock and the dynamic display method is used to drive the seven-segment digital display, which is finally compiled and emulated by the Quartus Prime software and downloaded to the EPM1270 development board. The "hour", "minute", "second" are displayed on the Development Board and the time can be corrected by two function keys.
Keywords: correcting time; electronic clock; dynamic display; frequency divider
1 概述
在电子技术设计领域,可编程逻辑器件的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
随着现场可编程门阵列(field program mablegate array,FPGA)的出现,电子系统向集成化、大规模和高速度等方向发展的趋势更加明显,作为可编程的集成度较高的 ASIC,可在芯片级实现任意数字逻辑电路,从而可以简化硬件电路,提高系统工作速度,缩短产品研发周期。故利用FPGA这一新的技术手段来研究电子钟有重要的现实意义。
本设计使用EPM1270开发板,利用Quartus Prime软件设计的一个可校时电子钟。
2 电子钟功能描述
开发板上八个并排的七段数码管采用动态刷新驱动的方式分别用于显示电子钟的“十时”、“时”、“十分”、“分”、“十秒”、“秒”、“1/10秒”及“1/100秒”;校时功能模仿传统手表校时方式,分别对“时”和“分”逐位校时,对“秒”采用清零进位(秒针小于30,清零时不进位)的方式进行校时;功能按键采用开发板上未经去抖且常态为高电平的两个按键。同时,开发板系统时钟为50MHz有源晶振。
如图1电子钟工作说明图,其工作原理是:由系统提供的时钟脉冲信号经过分频电路的分频后,分别产生用于校时电路的去抖频率、校时时使所校时数码管闪烁的频率、计时电路的计时频率和数码管动态刷新驱动的刷新频率;计时电路的输出通过刷新电路的刷新频率分时输入到七段显示译码器,经过译码器译码后送到七段数码管上显示,数码管在刷新电路的作用下分时选择数码管,使得在同一时刻计时电路对应的输出显示到对应的数码管上,即动态刷新驱动的显示方式,采用这种显示驱动方式能有效节省I/O引脚的消耗。当电路计时出现误差时,可以由校时电路通过两个功能键分别对“时”、“分”、“秒”进行校时。一个功能键进行模式选择,分别可选择对时进行逐位加一模式,对分进行逐位加一模式,对秒、1/10秒、1/100秒清零模式,以及常态模式。在前三钟模式的状态下,所校时的数码管闪烁。另外对秒的清零所采取的办法是,滿30秒,清零的同时对分进行加一。
3 电路设计
由于数码管采用动态刷新驱动的方式需要合适的刷新频率,再加上电子钟的计时与校时功能分别需要对应的时钟频率,则需要分频模块设计合适的电路对系统时钟频率进行分频处理;多个不同模的计数器需要经过计时模块合理的电路设计,才能实现我们整个系统的计时功能;另外,计时模块中各个计数器的输出分别能送到对应的七段数码管上,以及八个数码管能完成工作,即能实现动态刷新都需要显示模块完成设计。最后,校时功能需要对按键进行去抖处理以及对按键的功能设计,则需要校时模块进行电路设计;电路设计采用层次化结构,顶层电路设计可分为四个大模块,分别为显示模块、计时模块、分频模块和校时模块组成。
如图2所示,FRE32是一个可分别产生1/2,1/4,1/8...,1/231,1/232分频的分频电路,由clock输入系统时钟,由q[31..0]输出分频后的时钟信号;Time_Fre则是将系统时钟分频后,每10ms输出一个高电平,其输出作为计时模块的控制信号,每当Time_Fre的输出端EN_OUT为高电平时,计时电路Counter_Time则才可响应系统时钟,其内部的计数器才可计数,即实现了每10ms计时电路的最低位,即1/100秒计数器计数一次;图中FRE32和Time_Fre构成了整个分频模块,提供整个系统需要的各种频率的时钟信号;图中counter8是一个模八计数器,输入系统的1/217分频后,其输出的计数结果000->111,分别送到图中的View来选择对应的数码管,和Counter_Time来选择计时电路中对应的计数器的输出,因此整个显示电路由图中counter8模八计数器、View以及7447译码器组成;图中校时电路Control将功能按键进行去抖处理后,模式选择由Control的SEL_MODE_OUT[2..0]输出送到View选择对应的数码管闪烁,送到Counter_Time选择要调节的计数器,而图中CLK_USER_OUT则送到计时电路Counter_Time替代系统时钟对计时电路进行校时。
3.1 分频模块
分频电路的功能是对系统产生的时钟信号频率进行分频处理,一方面产生用于计时模块的精确计时频率,另一方面产生用于显示模块动态刷新驱动数码管的刷新频率和用于校时的闪烁效果频率以及校时模块得的按键去抖的频率。
由于计时电路时间精确到百分之一秒。要保证电子钟的精确度,就需要利用实验板上的50MHz晶振源得到100Hz的时钟脉冲。因此,用于计时模块的分频电路采用一个模500000的计数器,即每经过50万个时钟脉冲,其输出端输出一个高电平。此高电平作为计时电路的使能信号,让计时电路在系统时钟下工作,即每经过50万个系统时钟,计时电路最低位计数一次(100Hz)。
3.2 计时模块
计时模块内部电路总共由八个计数器,分别由五个模十计数器、两个模六计数器和一个模三计数器组成。
其工作流程是:1/100秒计数器通过外部每10ms产生的一个使能信号使1/100秒计数器计数一次,1/100秒计数器每计满10次产生一个使能信号使1/10秒计数器计数一次,1/10秒计数器每计数满10次产生一个使能信号使秒计数器计数一次,秒计数器每计数满10次产生一个使能信号使十秒计数器计数一次,十秒计数器每计数满6次产生一个使能信号使分计数器计数一次,分计数器每计数满10次产生一个使能信号使十分计数器计数一次,十分计数器每计数满6次产生一个使能信号使时计数器计数一次,时计数器每计数满10次或4次产生一个使能信号使十时计数器计数一次,十时计数器则每计数3次一个循环。
由于受到七段数码管只能显示一位十进制数的限制,对于电子钟的时分秒的显示,其个位与十位要分别输出显示到七段数码管上,并且对于小时的显示更加特殊。由于小时每满24小时一个循环,其个位的进制会因为十位的进制的不同而有所变化。即当十位为0或1时,其个位每满十进一,而当十位为2时,其个位满四进一。因此根据这个特点,可以利用一个模三计数器作为十位的计数,模十计数器作为个位的计数。并且,将模十计数器和部分逻辑门组合提供一个模四计数器的进位输出。当十位的模三计数器计数值2时,选择个位的模四计数的进位输出作为使能信号,否则选择个位的模十计数的进位输出作为使能信号。
其原理是,当模三计数器的输出QD QC QB QA=0010,模十计数器的输出QD QC QB QA=0011时,模十计数器的置数端有效,模三计数器的使能端有效,在下一个脉冲信号来临时,0000从模十计数器的A B C D口置入,则模十计数器从输出QD QC QB QA=0000,同时模三计数器计数一次,完成一次循环计数,QD QC QB QA的输出由0010变为0000,该过程即完成了时钟的小时部分从23时到00时的过程。
3.3 計校时模式控制
无论何种方案设计出的电子钟都或多或少会存在误差, 因此必须考虑校时模块的设计。当由于某种原因电子钟走时不准时,可以校对时、分、秒。系统采用双键校时法进行设计,为选择并校对时、分、秒,需设计一译码电路分别产生校时、分、秒的使能信号;为完成时、分、秒计数值的修改,需产生一个单脉冲信号。
如图3所示,Mode与SET为开发板上两个常态为高电平的两个按键,Mode进行模式选择,SET修改计数值;Mode经过去抖电路处理后,产生的单脉冲作为模四计数器的脉冲输入,模四计数器的输出经过2-4译码器的译码使2-4译码器的输出Y0 Y1 Y2 Y3依次输出高电平,当Y0为高电平时,Y1 Y2 Y3为低电平,此时时、分、秒计数器的计数脉冲都将输入系统脉冲,并且时计数器的使能端由分计数器的输出和秒计数器输出控制,分计数器的使能端由秒计数器的输出控制,秒计数器的使能端则由分频电路输出的精确的100Hz使能信号控制,电子钟正常计时;当Y1为高电平时,秒计数器的清零端与去抖后的Set单脉冲接通,分计数器的计数脉冲切换为Set单脉冲,并且在秒计数器输出大于等于30秒时使能分计数器,此时可通过SET键对秒的数值进行清零,如果在秒计数器的输出大于等于30秒时,分计数器被使能,此时Set单脉冲同时作用给分计数器,分计数器则实现加一,即实现了满30秒,对秒计数器清零的同时对分计数器进行加一;当Y2为高电平时,分计数器的计数脉冲切换到去抖后的Set单脉冲,并且使能分计数器,此时可通过SET键对分的数值进行调整。当Y3为高电平时,时计数器的计数脉冲切换到去抖后的Set单脉冲,并且使能时计数器,此时可通过SET键对时的数值进行调整。
4 结束语
现场可编程门阵列 FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。本文运用Quartus Prime软件开发平台,基于EPM1270设计了一款可校时电子时钟,并下载到EPM1270实验平台中进行验证, 结果表明系统能以很小的误差显示时、分、秒,并运用SET、Mode两个键实现校时。采用的动态刷新驱动的显示方式,把八个七段数码管的64个引脚(8个数据引脚×8)节省为16个引脚(8个数据引脚+8个位选引脚),这种方式有效节省I/O引脚的消耗;对系统的时钟50MHz的时钟频率进行了很精确的分频,才使得所设计的电子钟走时精准。最后在校时的处理上对物理按键进行了去抖处理,并分别实现了对秒采用的清零进位(秒针小于30,清零时不进位)校时,对分、时采用的逐位校时的方式。最终完善了整个可校时电子钟的设计,并且达到了非常好的验证效果。
参考文献:
[1]张强.基于FPGA的多功能数字钟的设计与实现[J].仪器仪表用户,2008,15(6):103-104.
[2]赵文来,杨俊秀,严国红,等.基于FPGA的电子钟设计与实现[J].浙江理工大学学报,2010,27(04):590-594.
[3]欧阳星明.数字逻辑[M].华中科技大学出版社,2005.
[4]许锐,沈祖斌,邹光毅.数字电子钟的EDA实现详例[J].工业控制计算机,2011,24(03):103-104.
[5]Quartus Prime 数据手册[Z].