lcytms 发表于 2016-11-23 22:33:48

FPGA初级课程第十九讲 PS2

FPGA初级课程第十九讲 PS2

Hi,大家好!我是至芯科技的李老师。
今天讲课的题目是:PS2。
本节课我先简要地介绍一下PS2的物理原理,然后实际演示一下PS2逻辑电路的建模与仿真,我们还要结合第四讲的数码管、第十一讲的键盘矩阵一起编写一个完整的演示逻辑,并下板查看实际效果。




lcytms 发表于 2016-11-23 22:35:13

我们打开至芯科技编写的《35.炼狱传奇-PS2接口之战.pdf》文档。

lcytms 发表于 2016-11-23 22:36:39

ps2接口主要应用与计算机的键盘与鼠标的接口,但由于不支持热插拔,使用的时候需要关机插上,所以现在很多的鼠标键盘已经都改用USB接口了,但我们之所以要学习ps2接口的原因很简单,还是为了学习FPGA,练习我们设计数字电路的能力。
ps2的接口如下图所示。


其中,        1是数据线DATA;
                2是预留N/C;
                3是GND;
                4是VCC(+5V);
                5是时钟信号线CLK;
                6是预留N/C;

lcytms 发表于 2016-11-23 22:38:20

数据传输的时序图如下图所示。

lcytms 发表于 2016-11-23 22:39:11

一般的ps2接口,都是ps2产生时钟信号,而且是在上升沿的时候把数据发送出去,而在下降沿的时候被采样,大多数的ps2设备的发送数据的时钟频率是15Khz-20Khz。每一帧的数据有11位或者12位数据,其中包括:
        1位起始位:总为逻辑0;
        8位数据位:低位在前;
        1位奇偶校验位;
        1位停止位:总为逻辑1;
        1位答应位:仅用于主机对设备通信中(在本次键盘接口设计中不用)

没错,我们回到时序,主要的目的是从时序中得到数据,也就是第2-9个时钟。在这里大家有没有注意到一点,就是我们的数据顺序是D0、D1、D2、D3、D4、D5、D6、D7这表明我们ps2一帧发送过来的数据是8位,数据是先发送低位再发送高位。查找资料可以知道ps2在不工作时时钟线和数据线都是高电平。所以在设计ps2接收模块的时候,我们首先要做一个下降沿检测的小模块,来检测信号什么时候开始发送。

lcytms 发表于 2016-11-23 22:40:21

其中数据发送模式如下,当键盘的某一个按键被按下的时候,键盘会往外发送那一个按键的通码,当按键松开的时候,键盘就会往外发送那一个按键的的断码+通码。
需要注意的是,如果按着一个按键不放的话,键盘会以一定的频率发送那一个按键的通码。

键盘的通码与断码表如下图所示。

lcytms 发表于 2016-11-23 22:41:56

由于工程量的关系,我们这次仅仅做识别右侧小键盘的0-9的10个按键识别,只要把这几个按键识别出来了,其他按键的识别都是一样的。
而右侧小键盘的0-9的通码与断码如下图所示:

lcytms 发表于 2016-11-23 22:42:46

现在我们具体来举一个例子来说明ps2接口的工作原理,比如我现在按下按键小键盘中的0键,再按下按键9,然后把按键0松开,最后再松开按键9,ps2往FPGA发送的数据就会如下,先发0按键的通码8’h70,再发9按键的通码8’h7d,接着发0按键的断码8’hf0,然后再发0按键的通码8’h70,接着再发9按键的断码8’hf0,最后再发9按键的通码8’h7d,发送数据的顺序如下:8’h70→8’h7d→8’hf0→8’h70→8’hf0→8’h7d。

现在我们已经理解了键盘ps2的数据发送时序跟键盘的编码方式,我们就可以设计一个数字电路来把ps2键盘的数据给接收了,设计的思想是这样的,首先我们要设计一个ps2接收模块,其中ps2接收模块要包括有下降沿检测,11位寄存器(用于保存数据),数据有效标志位(用于标记一个完整数据发送完毕);ps2接收模块完成之后,我们还有设计一个解码模块,解码模块之间用查表法来完成即可;解码模块之后,我们还需要一个状态机,把解码后的数据做整理;最后还需要一个数码管显示模块,用于实时显示状态机发送的数据。

lcytms 发表于 2016-11-23 22:43:38

PS2的物理原理既然已经清楚,我们下面来进行系统设计。
命名逻辑为ps2。
架构图如下所示。

lcytms 发表于 2016-11-23 22:44:47

前级加上分频模块divider,后级加上数码管数据预处理模块pre_seg7和数码管模块seg7后,组成top.v模块,总体架构图如下。
其中,分频模块divider将板载50 MHz时钟分频为1 MHz。
数码管数据预处理模块pre_seg7将PS2键盘模块ps2输出的1位按键数补充到显示的6位数的低位上,高位左移。
比如,数码管原显示012345,如果键盘按下6,则数码管显示变为123456。
页: [1] 2 3
查看完整版本: FPGA初级课程第十九讲 PS2