数字电子钟的设计及其VHDL实现
2021-12-17黄卫华
黄卫华
(广西机电职业技术学院, 南宁 530007)
VHDL是超高速集成电路硬件描述语言的简称,是一种用于电路设计的高级语言[1]。VHDL功能强大,设计灵活,具有强大的数字电路描述能力,且易于修改,方便移植,使用VHDL进行数字电路设计目前已经成为数字电路设计的一种先进技术和手段[2]。通过编写VHDL语言对硬件电路进行描述从而实现对硬件电路的设计,使得硬件电路的设计更为灵活、方便和快捷。同时将VHDL代码现场编程下载到FPGA(现场可编程逻辑阵列)芯片中,就可以观察所设计电路的功能及时序是否满足实际应用要求,从而降低成本、实现高效设计。本文使用VHDL代码对数字钟进行了设计,特别分析了秒、分钟、小时同步计数和异步计数的设计思路及其VHDL代码,对VHDL语言的学习者和FPGA开发人员有一定的借鉴意义。
1 数字钟基本功能及模块划分
数字钟是一种用数字电路技术实现时、分、秒计时的钟表,广泛应用于各种数字设备[3]。数字钟的主体结构是时钟的正常走时及显示,有时也会有其它功能,比如通过按键调整时间、整点报时或闹钟等。本文设计的数字钟只包含基本功能及调时功能,即通过动态数码管显示实时时间,并能通过按键实现对分钟和小时的显示进行调整。因此,该设计的模块划分主要包含分频模块,计时模块、按键模块和动态数码管显示模块。其中分频模块将系统时钟分频,产生时钟计时所需的1Hz时钟,计时模块完成基本的实时时钟计数,输出为小时、分钟和秒的十位和个位的4位二进制数,按键模块完成对按键的消抖,动态数码管显示模块将计数值的4位二进制数进行译码并由数码管进行显示,整个系统模块划分如图1所示。
图1 数字钟功能模块划分
2 时钟走时模块及其VHDL代码分析
在时钟走时模块中,可以将该模块分成3个小模块,分别为小时计时、分钟计时和秒计时,在设计时需要考虑到秒向分钟的进位、分钟向小时的进位处理问题以及按键调时处理问题。可以有两种处理方式:第一种方式是使用同步电路,即秒、分钟和小时的计时时钟均为1 Hz时钟;第二种方式是使用异步电路,即秒的进位输出信号作为分钟的计时时钟,而分钟的进位输出信号做为小时的计时时钟。两种设计方式均可以实现正常计时。在其中适当加入按键控制电路,即可实现通过按键调时间功能。
同步电路和异步电路的设计电路原理图如图2所示,其仿真波形如图3所示(原理图只提供设计思路,实际设计为VHDL代码)。由仿真波形可以看出,两种电路设计均可以实现正常走时,也可以实现按键调时功能。比较而言,同步电路由于使用同一个时钟,电路相对简单,容易控制,且不会由于延迟产生误操作,按键处于低电平时为调时状态,调时时钟为1Hz,因此调时速度相对较慢。而异步电路小时、分钟和秒电路使用不同的时钟进行计时,电路设计上相对复杂,但是按键设计上,比较容易将按键做为调时时钟,因此调时速度相对较快,但这时候需要给按键增加消抖功能模块,图2(b)图原理图中的按键没有包含消抖功能。
图2 同步电路和异步电路设计电路图
图3 同步电路和异步电路仿真波形图
同步计数电路参考VHDL程序如下,将秒计数的进位输出端做为分钟的计数使能端,即可实现由秒向分钟的进位,若要将按键因素考虑进去,可以将按键信号和秒进位信号进行一定的逻辑运算之后再做为分钟的使能信号,这里我们使用的是或运算,即通过enm<=cs or (not keym);语句加入按键。此时,按键为低电平时调时。
异步计数电路参考VHDL程序如下,将秒计数的进位输出端做为分钟的计时时钟,使用异或运算将按键加入,同时实现计时和调时功能。此时按键可以作为时钟进行分钟和小时的调时,但是由于按键在按下和释放的时候具有抖动,因此需要加按键消抖程序。
两种VHDL代码下载到FPGA芯片中,均实现了计时和调时的功能,下载实物及显示结果如图4所示。六个数码管分别显示小时,分钟和秒,通过两个按键可以分别对小时和分钟进行调整,使显示的时间与实际时间相符。
图4 VHDL代码下载后数码管显示实物图
通过拓展添加报时,闹钟等功能,使数字钟的功能更加多样化;也可以将该VHDL代码移植到液晶显示屏,并添加星期、日期,使其应用更加全面。
3 结束语
上述的两个设计通过Quartus软件平台下载到FPGA芯片中,均可实现预期的功能。大部分的数字电路均会有时钟对电路进行触发,而时钟控制的方式有同步和异步的区别,一般来讲,同步电路设计相对简单,易于实现和纠错,而异步电路更需要考虑时序问题。本文通过数字钟的VHDL设计,对两种电路的设计思路和VHDL代码进行了分析比较,对VHDL的学习者和硬件电路的设计开发人员提供了一定的参考。