7.5.3 闹钟系统的控制器的设计
控制器命名为CONTROL,其外部端口如图7.17所示。
各端口的作用如下:
图7.17 闹钟控制器的外部端口
(1)CLK为外部时钟信号,RESET为复位信号。
(2)当KEY为高电平时,表示用户按下数字键(“0”~“9”)。
(3)当ALARM_BUTTON为高电平时,表示用户按下“ALARM”键。
(4)当TIME_BUTTON为高电平时,表示用户按下“TIME”键。
(5)当LOAD_NEW_A为高电平时,控制闹钟时间寄存器加载新的闹钟时间值。
(6)当LOAD_NEW_C为高电平时,控制时钟计数器设置新的时间值。
(7)当SHOW_NEW_TIME为高电平时,控制七段数码显示电路显示新的时间值,即用户输入的预置时间。当SHOW_NEW_TIME为低电平时,根据SHOW_A信号的值控制显示当前时间或闹钟时间,即当SHOW_A为高电平时,控制显示闹钟时间;否则,显示当前时间。
控制器的功能可以通过有限状态自动机(FSM)的方式来实现。根据设计要求及端口设置,需要5个状态来实现:
S0:表示电路初态,即正常时钟计数状态,完成计时功能。
S1:接收预置数字输入状态。在状态S0时,用户按下YES键后进入此状态。在此状态下,显示屏上显示的是用户预置的数字。
S2:设置新的闹钟时间。在状态S1时,用户按下ALARM键后进入此状态。S3:设置新的计时器时间。在状态S1时,用户按下TIME键后进入此状态。
S4:显示闹钟时间。在状态S0时,用户直接按下ALARM键后进入此状态。在此状态下,显示屏上显示的是所设置的闹钟时间。且经过一段时间以后,再返回状态S0显示计时器时间。
相应的状态转换及控制如表7.1所示。
表7.1 控制器状态转换及控制输出表
(续表7.1)
表7.1中没有显式说明的控制信号赋值,表示该值为零。例如在状态S0,当信号YES=1时,SHOW_NEW_TIME信号的赋值为1,而其他信号LOAD_NEW_A、LOAD_NEW_C和SHOW_A的值都为‘ 0’ 。另外,表中关于“超时”判断处理的细节见VHDL源程序中的有关部分。
由于在整个系统中有多个模块需要用到自行设计的数据类型,并且这些数据类型大部分相同,为了使用上的方便,可设计一个程序包P_ALARM。该程序既可加在调用该程序包的程序前面,也可加在整个系统的顶层设计程序的前面;但是一个比较复杂的系统,一般是分模块进行设计和调试,所以加在各个调用该程序包的程序前面会比较方便。程序包P_ALARM的具体设计如下:
根据上面的设计分析,闹钟控制器的VHDL源程序如例7.18所示。
【例7.18】
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。