PS2键盘接口设计
- 格式:doc
- 大小:546.39 KB
- 文档页数:13
研究生课程设计报告
课程名称: 基于FPGA的现代数字系统设计
设计名称: PS/2键盘接口设计
姓 名:
学 号:
课程教师:
起止日期: 2016,
西南科技大学信息工程学院制
2 设 计 任 务 书
学生班级: 学生姓名: 学号:
设计名称: PS/2键盘接口设计
起止日期: 2016,12,21至2016,12,28 课程教师:
设计要求:
(1)通过对 PS/2 键盘接口信号的定义,采用 VerilogHDL 模拟 PS/2 键盘的传输协议,并用 2
个数码管显示按键的通码值。
(2)完成系统的设计、仿真。
(3)合理设计下载测试平台,进行下载测试。
3 设计题目
一、 设计目的和意义
键盘是嵌入式系统的最重要的输入设备之一,是实现人机交互的重要途径。除了可以自行设计扫描式矩阵键盘之外,还可以选择标准 PS/2键盘实现人机交互。扫描式矩阵键盘虽然电路简单,但不具有通用性,当需要使用较多的按键输入时,则会占用较多的I/O 端口,在软件上则要进行上电复位、按键扫描及通信的处理,而且还要加上按键的去抖动处理,增大了系统软、硬件的开销,开发周期较长。标准PS/2 键盘由于接口通信协议简单,在系统中占用软硬件资源少,高可靠性,表达信息量大而得到了越来越广泛的应用本设计根据PS/2键盘的通信时序,利用Verilog HDL硬件描述语言来设计PS/2接口键盘的输入识别电路,并在CPLD/FPGA上实现,避免了硬件电路的焊接与测试。Verilog HDL语言满足数字系统设计和综合的所有要求,设计中充分运用Verilog HDL层次化与模块化的思想,使整个设计过程简单、灵活。同时运用EDA工具ISE Design Suite10.1验证设计。经过对系统进行编译、仿真、测试,完成把键盘按键扫描码转的通码的显示,成功实现PS/2接口键盘的输入识别及显示的功能。本设计具有较好的通用性和可移植性,可取代自行设计扫描式矩阵键盘而用于许多嵌入式系统设计中。
二、 设计原理
1 PS/2模块
1.1、SP/2键盘接口
PS/2通信协议是一种双向同步串行通迅协议。通迅的两端通过CLOCK(时钟信号端)同步,并通过DATA(数据端口)交换数据。任何一方如果想要抑制另外一方的通迅时,只需要把CLOCK拉到低电平。
PS/2控制接口仅使用到两条传输端口,一为频率端口,另一则为数据端口如图2.1所示,且此传输埠必为三态并具有双向特性。PS/2 传输产品上,常见为鼠标与键盘,两者的驱动原理均相同,仅扫描码不同。以PS/2键盘为例进行说明
Male
(Plug) Female
(Socket) 6-pin Mini-DIN
(PS/2):
1 - Data
2 - Not Implemented
3 - Ground
4 - Vcc (+5V)
5 - Clock
6 - Not Implemented
图1 PS/2 端口脚位定义
4
1.1 数据格式
表1 数据帧格式
1个起始位 总是逻辑0
8个数据位 (LSB)低位在前
1个奇偶校验位 奇校验
1个停止位 总是逻辑1
1个应答位 仅用在主机对设备的通讯中
表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。
PS/2设备的clock和data都是集电极开路的,平时都是高电平。当PS/2设备等待发送数据时,它首先检查clock是否为高。如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。如果clock为高电平,PS/2则开始向PC发送数据。
一般都是由PS/2设备产生时钟信号。发送按帧格式。数据位在clock为高电平时准备好,在clock下降沿被PC读入。
数据从键盘/鼠标发送到主机或从主机发送到键盘/鼠标,时钟都是PS/2设备产生.主机对时钟控制有优先权,即主机想发送控制指令给PS/2设备时,可以拉低时钟线至少100μS,然后再下拉数据线,最后释放时钟线为高。PS/2设备的时钟线和数据线都是集电极开路的,容易实现拉低电平。
1.3、数据发送时序
从ps/2向PC机发送一个字节是可按照下面的步骤进行的,只要满足它的时序就能实现功能。
图2 键盘接口时序 (a)键盘发送时序;(b)键盘接收时序
1.4、键盘的返回值
5 现在PC机使用的PS/2键盘都默认采用第二套扫描码集,扫描码有两种不同的类型:通码(make code)和断码(break code)。当一个键被按下或持续按住时,键盘会将该键的通码发送给主机;而当一个键被释放时,键盘会将该键的断码发送给主机。第二套通码都只有一个字节宽,但也有少数“扩展按键”的通码是两字节或四字节宽,这类码的第一个字节总是0xE0。与通码一样,每个按键在释放的时候,键盘就会发送一个断码。每个键也都有它自己的唯一的断码,断码与断码之间存在着必然的联系。多数第二套断码有两个字长,它们的第一个字节是0xF0,第二个字节就是对应按键的通码。扩展按键的断码通常有三个字节,前两个字节0xE0和0xF0,最后一个字节是这个按键通码的最后一个字节。附录列出了本次课程设计中所用键盘的扫描码。
2、数码管显示模块
数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个共阴极型七段数码管。由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。共阳极性的数码管与之相么。其单个静态数码管如下图3所示。
图3 静态七段数码管
三、 详细设计步骤
1,总体设计
模块化处理使得结构清晰,编程更加方便。总体分为两个部分,即PS/2接收模块和数码管显示模块。
2,,PS/2接收模块
接收模块的主要作用是根据时钟信号接收来自PS/2键盘的数据,判断有没有数据传进来,依次的把11位的数据接收进来,并提取出8位数据,接收完毕所存并转化高四位和低四位。,
3,数码管显示模块
把接收模块的数据用数码管显示模块显示,实现的功能就是分别显示通码的高四位和低四位。
6 4,程序的设计
②双击ISE Design Suite10.1软件快捷图标进入ISE Design Suite10.1集成开发环境,新建工程项目文件,并在该项目下新建Verilog源程序文件,输入程序代码,建立模块层次结构图,
总的软件设计流程如下:
有
否
否
有 否
有
否
有
图4程序流程图
开 始
是否有复位信号
是否有时钟到来
是否有数据起始低电平
接收数据
是否有断码出现
显示通码
7 四、 设计结果及分析
1设计的结果
1.1接收模块
为了在显示模块中用两个数码管显示通码,接收模块中分别把接收的数据转换为低位和高四位分别保存在A[3:0],B[3:0]。为了方便举例,在这里选择就收0键的通码值0x45。
图5 接收模块图
1.2显示模块
在显示模块中把接收的0键通码值0x45分为低四位和高四位用两个数码管显示。
图6 显示模块图
1.3顶层模块
这里还是用0键通码值0x45举例,和各模块对比,易于观察。
图7 顶层模块图
8 2,出现的问题和分析
课程设计中碰到一些问题,碰到问题最多的是编程问题,通过查阅相关资料,如PS/2键盘接口使用,对于什么是通码,什么是断码有很大了解,由于自己对于程序不是很熟,所以过程中会出现许多小的错误。
其中由于不能在always函数中使用wire变量而要使用reg,还有变量位宽忘记设置,导致测试程序无法通过得到正确的结果。导致程序一直调试不出来,这是我犯的知识还不熟的问题,需要在后期加强。
由于自己没有FPGA的板子,所以没能把程序下载到板子上验证,只有仿真图,所以这是这次课程实验的遗憾之一。
五、 体会
本次课程设计成功实现了较为简单的PS/2键盘按键输入功能,并且显示在数码管上。此项技术在生活中已得到广泛应用,我对它的学习使得我对通信协议有了进一步的理解,HDL项目设计的目的就是让我们在理论学习的基础上,通过完成一个涉及时序逻辑、组合逻辑、声光输出的,具有实用性、趣味性的小系统设计,使我们不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对分析、解决实际的数字电路问题进一步加深认识,为今后能够独立进行某些数字应用系统的开发设计工作打下一定的基础。课程设计完成了,在这个过程中我学到了很多东西。首先在遇到困难时学会自己想办法解决,培养了自己的毅力和实践动手能力。并且在项目中更深层次地了解Verilog HDL这门课程,更加熟悉了它的编程方式以及编程语言。然后在查阅资料时,还了解了很多关于同步、异步通信的知识。通过编程,我发现HDL语言跟C语言、汇编语言在某些方面是相通的,所以无形之中我也对计算机语言有了更深的认识。收获最大的是不管以后干什么,都要从大处着眼,小处着手,先将任务分成几个部分,再一部分一部分的去完成,最终再完成总体的设计,不然直接设计一个整体的模型,不方便调试,出了错也不知道是哪部分出了问题。在课设中我付出了很多,也收获很多。我觉得本次课程设计无论对于学习还是自身的成长方面都有较大帮助。