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