fpga原理入门(小梅哥和你一起深入学习FPGA之PS2键盘驱动)
在我们的电子系统中,当需要用到大量的按键输入时,普通的独立按键和矩阵键盘已经无法满足我们的输入需求,这个时候,我们需要使用一种功能更加强大的键盘,来帮助我们输入更多的信息在pc机上,我们经常使用104键的键盘,这种键盘与pc机的接口,可分为USB接口和PS2接口,我们FPGA要实现USB接口比较困难,因为USB的接口线路,不是标准的TTL电平,而PS2接口,则使用标准的TTL电平,那么我们今天就使用FPGA来解码驱动一个采用PS2接口的pc机键盘,用这个键盘来扩展我们FPGA的输入系统,以使我们能够方便的输入更多的信息,下面我们就来说一说关于fpga原理入门?我们一起去了解并探讨一下这个问题吧!
fpga原理入门
在我们的电子系统中,当需要用到大量的按键输入时,普通的独立按键和矩阵键盘已经无法满足我们的输入需求,这个时候,我们需要使用一种功能更加强大的键盘,来帮助我们输入更多的信息。在pc机上,我们经常使用104键的键盘,这种键盘与pc机的接口,可分为USB接口和PS2接口,我们FPGA要实现USB接口比较困难,因为USB的接口线路,不是标准的TTL电平,而PS2接口,则使用标准的TTL电平,那么我们今天就使用FPGA来解码驱动一个采用PS2接口的pc机键盘,用这个键盘来扩展我们FPGA的输入系统,以使我们能够方便的输入更多的信息。
一、 实验目的
实现采用PS2协议的PC机键盘的解码,最终将PS2键盘作为FPGA系统的一个标准输入设备。
二、 实验原理
PS2键盘的内部结构我们不需要过多的去关注,我们只需要关心其接口协议,正确的解码其发送过来的按键信息即可,至于解码到的按键信息该怎么处理,不同的应用有不同的处理方式,这里就不做过多的介绍。PS2协议的简单描述如下:
PS2协议总共由两根线组成,一根时钟线和一根数据线。这里我们将采用PS2协议的键盘称为从机,将控制和解码PS2协议的一方成为主机,生活中最常见的主机便是我们的PC机。PS2总线协议的两根线中,时钟线传输时钟信号,该时钟信号始终由从机,即键盘产生。PS2协议发送一个字节的数据总共有11位,分别为
1位起始位
8位数据位
1位校验位
1位停止位
PS2从机发送一个完整数据包的时序图如下所示:
图2-1 PS2从机发送数据时序图
相信熟悉UART协议的同学一眼就能看出来,PS2协议和我们最熟悉的UART通信协议非常相似,那么我们的工作就简单了,既然键盘按照这个协议发送数据,我们FPGA作为主机,只需要正确的实现该协议的解码,将其中的8位数据位读取出来即可。由图可知,数据在时钟的下降沿处是稳定的,因此我们只需要去捕获时钟信号的下降沿,并在检测到这个下降沿时去读取数据线上的电平,就能够正确的读到数据。
以上是PS2协议中从机到主机的一个通讯过程,实际在PS2协议中,包含了从机到主机和主机到从机的通信时序,只是在我们进行PS2键盘的解码时,可以不需要进行主机到从机的通信,因此这部分内容小梅哥就不在这里讲解了,如果大家以后要解码PS2鼠标的话,就会用到主机到从机的通信了。
上面只是简单的介绍了PS2从机到主机的通信协议,我们知道了键盘是一个字节一个字节的往主机发送数据的,但是,每个字节代表了什么内容呢,我们还需要对照键盘编码对照表来查看。
键盘扫描码分为第一套扫描码、第二套扫描码和第三套扫描码,我们日常生活中常见的扫描码绝大多数采用第二套扫描码,因此这里小梅哥就只附上第二套扫描码的内容。
实际一个按键由按下到释放时键盘将按照如下的规定往主机发送数据:
只要一个键被按下,这个键的通码(MAKE)就被发送到计算机。通码只表示键盘上的一个按键,它不表示印刷在按键上的那个字符。 这就意味着在通码和ASCII码之间没有已定义好的关联, 直到主机把扫描码翻译成一个字符或命令。
虽然多数第二套通码都只有一个字节宽,但也有少数“ 扩展按键”的通码是两字节或四字节宽,这类的通码第一个字节总是为E0H(如“END”、“HOME”……)。正如键按下通码就被发往计算机一样, 只要键一释放, 断码就会被发送。每个键都有它自己唯一的通码,它们也都有唯一的断码。 幸运的是,你不用总是通过查表来找出按键的断码―― 在通码和断码之间存在着必然的联系。 多数第二套断码有两字节长,它们的第一个字节是F0H, 第二个字节是这个键的通码。
例如,当我们按下键盘上的“A”键时,键盘就会往主机发送”A”键对应的通码(MAKE)”1C”,如果你一直按下这个按键不释放,那么在一个短暂的延时之后,键盘会再次开始,以一定的速率持续向主机发送”1C“,直到该按键被释放。在该按键被释放后,键盘将会向主机发送“A ”的断码(Break),即首先发送“F0”,然后下一个字节再马上发送“1C”。
如果我们按下的是“END”、“PAGE UP”等扩展按键时,会怎么样呢?这里,以”END”键举例。当”END“键被按下后,键盘会首先向主机发送“E0”,发送完成后,又会接着发送下一个字节“69”,释放时也与前面的普通按键类似,先发送“E0”,然后发送“F0”,最后再发送“69”。
由上述分析可知,我们FPGA在解码到一次数据后,还需要对这个数据进行分析判断,判断该数据是否为断码标志“F0”以及扩展码标志”E0“。
三、 硬件设计
PS2电路结构简单,因此这里就略去。
四、 架构设计
本实验我们进行PS2键盘的解码实验,并将解码到的结果显示在数码管上,同时,为了使我们更加直观的感受到按键被按下和释放,小梅哥在这里增加了一个蜂鸣器,当有按键按下或释放(包括长按时每接收到一个通码)时,蜂鸣器发出一个短暂的响声,来反馈给操作者,让我们知道我们的解码模块解码到了按键信息。设计结构如下图所示:
图4-1 led实验模块组织结构图
详细端口名及其意义如下
表4-1 独立按键检测实验端口说明
因为存在模块间的连接,因此有部分内部信号,下表为内部信号的名称和功能说明
表4-2 独立按键检测实验内部信号说明
加入微信
更多内涵你懂的!
搜索电子产品世界
或用微信扫描二维码:
Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com