FPGA按键模式的研究与设计
2009-03-19
作者:肖 看,朱光喜,刘文予
摘 要: 对FPGA设计中使用按键的常见方式进行归纳概括,提出单键复键两类共5种典型的按键模式:琴键、脉冲、乒乓、连发和长键模式,并对每种按键模式进行了分析与设计,同时给出了设计综合的仿真结果。
关键词: FPGA;按键模式;抖动;单键;复键
在FPGA系统设计中,按键是最常见的人机交互接口部件。在没有微控制器参与的情况下,FPGA系统中按键的功能相对较弱,通常可以将按键抖动和按键处理结合起来统一考虑。关于按键的机械抖动问题,在以文献[1]和文献[2]为代表的一类文章中均有讨论;关于矩阵形式的键盘扫描问题,在以文献[3]和文献[4]为代表的一类文章中有论述。值得关注的是,在文献[3]中提到过对按键处理“能表示长时间按键的操作”的要求;在文献[4]中也涉及到“单击和连击”两种击键情况。不论是文献[3]的按键操作,还是文献[4]的击键操作,都可归结为按键模式问题。目前针对FPGA按键模式讨论的文章很少,因此本文专门探讨FPGA的按键模式。
1 FPGA按键模式的分类
常见的按键模式分为单键模式和复键模式两类。所谓单键类,就是一次按键最多只能输出一个有效键;而复键类,则指一次按键可以输出多个有效键,通常通过按键时间的长短来区别多个有效键。
单键类一般有三种按键模式:琴键模式、脉冲模式、乒乓模式。在琴键模式下,按下键时输出有效电平,释放键时输出无效电平。在脉冲模式下,每按下一次键只输出一个特定宽度的有效脉冲,其宽度常与时钟宽度相同,可以直接用做计数脉冲。在乒乓模式下,每按下一次键,键输出电平翻转一次。
复键类按键一般有连发模式和长键模式。复键类按键在按键持续时间未达到长按阈值时,输出效果与单键类按键模式相同。与单键类按键模式的不同之处在于对持续按键的不同处理方式。连发模式是指持续按键一定时间以上,以一定频率重复输出有效键值。长键模式则是指持续按键达到一定时间以上,输出另外一种不同的有效键值。为方便对比,将几种按键模式的分类情况列在表1中。
2 单键类按键模式的设计
2.1 琴键模式的设计
琴键模式是所有按键模式中相对最简单的一种,只要考虑到按键的去抖问题就可以了。机械按键的抖动是由于触点的弹性作用在开关切换的瞬间出现来回弹跳的不稳定现象,通常抖动的时间为10ms~20ms。在FPGA设计中,比较简单的去抖方法就是用50Hz的频率采样按键,将20ms以内的按键抖动滤掉。在这种消抖方式下,去抖电路非常简单,用D触发器即可方便实现。其寄存器传输级(RTL)原理图如图1所示。
不失一般性,假设按键输出高电平有效(下同),经QuartusⅡ7.2功能仿真,得到其仿真波形如图2所示。从波形图可以看出,当键KeyIn按下时,在时钟信号Clock_50Hz的上升沿到达后,输出信号KeyOut持续为高电平,直到释键后输出才变为低电平。KeyIn比较密集的脉冲代表按键或释键的抖动,从输出信号KeyOut的波形可以看出按键与释键过程的抖动均已去掉,处理后键值输出的电平变化均与时钟信号的上升沿同步。
2.2 脉冲模式的设计
与琴键模式相比,脉冲模式的不同之处就是对其按键输出有效电平限定了一个宽度,通常取时钟宽度,即为一个时钟宽度的脉冲。在琴键模式输出的基础上,再增加一个数字的微分环节,就可以获得较窄宽度的脉冲。假设以正脉冲表示有效脉冲输出(下同),其RTL原理图如图3所示。图3左边的D触发器KeyTemp起到延迟的作用,它与KeyOut~0一并实现微分效果,检测出上跳沿。图3右边的触发器KeyOut~reg0则完成去抖功能。
仿真后的输出波形如图4所示。从脉冲模式的仿真波形图中可以看出,完成一次按键动作(包括按键和释键),获得一个时钟宽度的正脉冲。为体现按键的灵敏性,正脉冲的输出尽量靠近按键动作,通常在检测到跳沿时即输出正脉冲,正如图4中KeyOut所示信号。
2.3 乒乓模式的设计
在单键类按键模式中,乒乓模式与其他两种模式的区别在于它的输出并非是一次特定的有效脉冲,而是带有输出电平记忆功能,结果与原输出电平相关,将原来的电平翻转,即高电平变为低电平,或者低电平变为高电平,每次按键输出电平翻转一次。乒乓模式的电路只需在有效跳沿检测的基础上,再跟上一个T’触发器做一个电平翻转即可,其RTL原理图如图5所示。图5右边的D触发器KeyOut~reg0构成T′触发器的翻转功能,同时兼去抖作用。
乒乓模式电路仿真后的输出波形如图6所示。从乒乓模式的仿真波形图中可以看出,完成一次按键动作(包括按键和释键),输出信号KeyOut的电平翻转一次。
3 复键类按键模式的设计
3.1 连发模式的设计
连发模式的按键过程分为两个阶段。两个阶段的划分以预先设定的按键时间tTH为阈值,当按键持续时间小于tTH时,输出处于单键值阶段,可以为琴键模式的有效电平,也可以为脉冲模式的有效脉冲。当按键持续时间大于tTH时,通常输出一个一定频率的脉冲序列,直到释放按键为止。连发模式的设计较单键类模式复杂,通常用硬件描述语言完成。其设计的控制核心可以用一个有限状态机(FSM)表述,如图7所示。该FSM包括“空闲”、“单键”和“连发”三个状态。空闲态是初始状态,没有键按下时总是处于空闲态。单键态表示有键按下,但是按键持续时间不到tTH。当键持续按下时间超过tTH时,系统处于连发态。在空闲态,系统输出低电平;在单键态,系统输出一个正脉冲(也可以根据要求输出有效电平);在连发态,系统输出一个特定频率的脉冲序列。
连发态下序列的输出频率是依据自己的应用要求设定的。阈值tTH的大小表征人按键时间的长短界限,通常选1~3s,比较符合人的按键习惯。为方便仿真,假设阈值tTH=1s,1s内输出一个时钟周期宽度的正脉冲,1s后以10Hz的频率输出宽度为时钟周期的正脉冲序列。按照有限状态机采用Verilog硬件描述语言进行设计(设计代码略去),设计综合后的仿真输出波形如图8所示。图8中的信号KeyIn模拟出两次按键过程,前两个“黑块”分别代表一次按键及释键过程,由于按键持续时间短,系统只输出一个正脉冲信号。第二次按键动作从第3个“黑块”处开始,并一直持续按下不放,可以从KeyOut信号波形上看出,先输出一个正脉冲,等待1s后,开始输出频率为10Hz的脉冲序列。
3.2 长键模式的设计
长键模式的按键过程与连发模式基本相同,其状态转换示意图如图9所示。比较图9与图7,差别仅在于图7的连发态换成了图9的长键态,用以区别两者在此时不同的状态输出。
长键模式的仿真波形如图10所示。为有效表示长键模式在长键态时的输出,引入第二个输出信号KeyOutL。当按键处于单键态时,KeyOut输出为高电平(也可以是有效脉冲),否则为低电平。当按键处于长键态时,KeyOutL输出为高电平(也可以是有效脉冲),否则为低电平。
按键是最不可缺少的人机交互设备之一。按键的去抖与模式处理是最基本的两个按键处理问题。在FPGA系统的设计背景下,按键的两个基本问题常放在一起考虑,但是目前国内的文献资料对这种情况的论述很少。
本文针对FPGA设计中使用按键的常见方式进行归纳概括,提出单键复键两类共5种典型的按键模式,并对每种按键模式进行了分析与设计,同时给出了QuartusII7.2下的功能仿真结果。这几种典型的按键模式在一般的嵌入式系统设计中也是值得借鉴与参考的。
参考文献
[1] 谷长龙,李小英.基于FPGA器件的消除按键抖动方法研究[J].吉林化工学院学报,2006,23(3):53-55.
[2] 方龙,肖献保,李威.关于消除按键机械抖动的研究[J].广西轻工业,2008(1):92,105.
[3] 王志辉,林水生.基于FPGA的键盘扫描模块的设计与实现[J].国外电子元器件,2006(5):67-69.
[4] 张志利,侯传勋,蔡伟,等.全功能硬件扫描键盘控制器IP核的实现[J].电子技术应用,2006,33(10).