基于FPGA的PS2键盘控制设计及仿真实现

上传人:gbs****77 文档编号:10079965 上传时间:2020-04-09 格式:DOC 页数:32 大小:1.05MB
返回 下载 相关 举报
基于FPGA的PS2键盘控制设计及仿真实现_第1页
第1页 / 共32页
基于FPGA的PS2键盘控制设计及仿真实现_第2页
第2页 / 共32页
基于FPGA的PS2键盘控制设计及仿真实现_第3页
第3页 / 共32页
点击查看更多>>
资源描述
本科毕业论文(设计)论文题目 : 基于FPGA的PS2键盘控制设计及仿真实现作者声明本毕业论文(设计)是在导师的指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。因本毕业论文(设计)引起的法律结果完全由本人承担。特此声明作者专业:通信工程作者学号:作者签名:年 月 日基于FPGA的PS2键盘控制设计及仿真实现The Design and Simulation Implementation of the PS2 Keyboard Control based on FPGA 2013年5月10日摘 要本文简述了PS2键盘的特点和工作原理,重点介绍了在FPGA 上实现PS2键盘的结构设计和VHDL代码设计。PS2键盘具有价格低、通用可靠,且连接线少(仅使用2根信号线)的特点。并可满足多种系统的要求。FPGA(Field Programmable Gate Array)是一类高集成度的可编程逻辑器件,它结合EDA技术以硬件描述语言、电路原理图、状机等形式输入设计逻辑;并提供功能模拟、时序仿真等模拟手段,再经过一系列的变换,将输入逻辑转换成FPGA器件所需的编程文件,以实现专用集成电路ASIC。应用FPGA设计PS2键盘控制器,不仅有硬件电路简单,更具灵活性,集成度高更容易移植等特点,更重要的是现代EDA(电子设计自动化)技术提供了一种很好的途径,利用VHDL硬件描述语言和FPGA器件可以很方便地构建键盘扫描模块。设计使得使用VHDL语言基于FPGA芯片实现PS2键盘成为研究的方向。本文对基于VHDL的PS2键盘实现进行了研究,并设计了PS2键盘。所做的主要工作为:(1)以PS2键盘控制的基本理论为依据,对其进行了详细的讨论。(2)本设计中采用了自上而下的层次化、模块化的设计思想,将整个接口划分为多个模块,同时利用VHDL语言的描述方法对各个功能模块进行了设计,最终完成了PS2键盘的系统设计。(3)运用ISE软件进行仿真。 关键词: VHDL;PS2键盘;ISE - 26 -AbstractThis paper describes the characteristics and working principle of PS2 keyboard, introduced in the structure of FPGA to realize the PS2 keyboard design and VHDL code design.PS2 keyboard has low price and reliable in general and less cables (USES only 2 signal lines). And can meet the requirements of a variety of systems.FPGA (Field Programmable Gate Array) is a kind of high level of integration of Programmable logic devices, it combined the technology of EDA with hardware description language (such as form input, circuit principle diagram, machine design logic; And provide the function simulation and timing simulation modeling technology, then after a series of transformation, which converts the input logic programming files needed for the FPGA device, in order to realize the special integrated circuit ASIC. PS2 keyboard controller using FPGA design, not only the hardware circuit is simple, flexibility, high level of integration is more easy to transplant, more important is the modern EDA (electronic design automation) technology provides a good way, using the VHDL hardware description language and FPGA device can be easily construct the keyboard scan module. Design makes use of VHDL language based on the FPGA chip to realize the PS2 keyboard become the direction of research.In this paper, the PS2 keyboard implementation based on VHDL are studied, and design the PS2 keyboard. The main work done as follows:(1) to the PS2 keyboard control on the basis of the basic theory, and carries on the detailed discussion.(2) the design adopts the top-down hierarchical, modular design thought, will the whole interface is divided into several modules, at the same time, use of VHDL language description method of each function module design, finally completed a PS2 keyboard system design.(3) using ISE software simulation.Key words: VHDL; PS2 keyboard; ISE 目 录1 概 述11.1 本选题研究的目的及意义11.2 本选题国内外研究状况综述11.3 本选题研究的主要内容22 PS2键盘的理论研究32.1 PS2键盘的结构特点32.2 PS2键盘的工作原理32.3 PS2协议43 ISE工具概述73.1 硬件描述语言73.2 ISE使用方法124 PS2接口的设计164.1 模块结构设计164.2 VHDL代码设计164.3 仿真验证17结 语18主要参考文献19附 录20附录 1 PS2键盘接口程序设计201 概 述1.1 本选题研究的目的及意义现今生活中,随着社会的发展,各式各样的生活用品慢慢地走上了“智能”的道路,越来越令人感觉到方便。这与一个优秀的人机交流界面密不可分。与此同时作为计算机最常用的输入设备的键盘也日新月异。1981年IBM推出了IBM PC/XT键盘及其接口标准。该标准定义了83键,具5脚DIN连接器和简单的串行协议。采用我们现在提及的作为第一套扫描码集然则它并没有主机到键盘的命令。为此,1984年IBM推出了IBM AT键盘接口标准。该标准定义了84101键,与PC键盘不同的是它采用双向串行通讯协议,此协议采用第二套键盘扫描码集并设有8个主机到键盘的命令。到了1987年,IBM又推出了PS2键盘接口标准。该标准仍旧定义了84101键的基础上采用6脚mini-DIN连接器,此连接器在封装上比5脚DIN连接器更小巧,仍然用双向串行通讯协议并且提供有可选择的第三套键盘扫描码集,同时支持17个主机到键盘的命令。现在,市面上的键盘都和PS2及AT键盘兼容,只是功能不同而已。在工业电子设备“智能化”和升级换代迅速的电路设计中,常常需要使用键盘,而使用标准PS2键盘则可简化设计。由于FPGA不仅可以用编写代码的方法实现复杂逻辑电路,而且其内部是由规则的逻辑阵列所组成的。因此利用FPGA设计键盘控制器,不仅使硬件电路简单,设计周期短而且编码过程比通用MCU比,更加简单易行。1.2 本选题国内外研究状况综述如果将CPU比作电脑的心脏,显示器比作电脑的脸,那么键盘就是电脑的嘴,是它实现了人和电脑的沟通。它作为嵌入式系统的常用人机接口设备,在嵌入式系统中有着广泛的应用。目前,无论是国外还是国内,各键盘制造厂商针对使用者对于键盘的功能性及使用舒适度等需求,在设计上作了相当大的调整,就市场角度来看,键盘技术在可预期的几年内将朝着以下几个趋势发展:(1)USB介面设计:USB(Universal Serial Bus)即为一种可联结127个装置的万用序列流排,同时支持PC97的一种外接标准,并成为目前电脑界最新的介面标准,因USB介面能够提供更简单,更直接的联结方式,即插即用,可高速存取。据市场趋势显示,USB已经发展为便于利用,增强功能及降低成本的标准。在WinHEC大会上,Microsoft总裁Bill Gates大力倡导USB的标准下,不仅Intel全部新型的主机板均支持USB而且几乎所有PC供应商都致力于发展USB的系统,因此它被预测成为整个新型PC周边设备产品爆炸性创新的催化剂。(2)多媒体功能:键盘的设计已开始走向多媒体世界的舞台,它拥有操控多媒体周边设备的功能同时,使用者还可依自己的需求,自行设定所需的应用功能于功能键上。多媒体的市场正在快速发展中,键盘技术的发展也必将顺应着它的潮流而不断改进,面对这种改进,有人说是把简单的键盘复杂化(因热键必须和软件的驱动程式相配合)。也有人认为:聪明的键盘就该如此。(3)人体工学设计: 随着人们对于电脑的日趋依赖,逐渐衍生出了电脑症候群。针对此非必要性的伤害,市场上已逐渐出现并流行起号称符合人体工学原理的键盘。PS2键盘是IBM于1987年正式推出的,在整体设计上与AT键盘相差不大,更改的最多的可能是主机到键盘命令的增加。此外,PS2键盘出人意料的使用一种古怪的扫描码。这使得它的兼容性大打折扣。正如大家所熟知的那样,PS2系统并不流行,后来几乎没人再用了。到了20世纪中期,电子键盘代替了机械键盘,1936年美国人Dvorak在QWERT式键盘的基础上发明Dvorak键盘。在20世纪70年代,一位名为Lilian Malt的发明家又对DVORAK键盘作了进一步改进发明了Malt键盘。键盘的接口有AT接口、PS/2接口和最新的USB接口,高档的品牌机多采用PS/2接口,最早也是IBM公司的专利俗称“小口”,不过越来越多新型主板都开始提供PS/2键盘接口。虽然目前USB作为新兴的结构,一些公司迅速推出了USB接口的键盘,但USB接口只是一个卖点,对性能的提高收效甚微,可以说现在主流的还是PS2接口,因为它价格低、通用可靠,且连接线少(仅使用2根信号线)并可满足多种系统的要求。1.3 本选题研究的主要内容PS/2是较早电脑上常见的接口之一,用于鼠标,键盘等设备。虽然IBM的PS/2电脑在市场中失败了,但是PS/2接口一直沿用至今,键盘是嵌入式系统的重要输入设备,实现人机交互的重要途径,随着标准PS/2键盘技术的不断成熟,在嵌入式系统中,用标准PS/2键盘会越来与广泛。由于VHDL所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,因此它成为IC设计验证的技术主流。利用VHDL通过模块组合可以实现特定的功能,所以对于标准PS/2键盘,用VHDL设计基于FPGA的标准PS/2键盘接口,实现了标准PS/2键盘到NiosII嵌入式CPU的数据单向通信。本文主要分为5章,章节安排如下: (1)绪论。主要介绍了开题的背景和研究意义,以及PS2键盘的国内外研究现状以及课题的研究内容和具体工作等。(2)PS2键盘的理论研究。主要介绍PS2键盘的基本知识以及其设计的基本方法。(3)ISE工具概述。介绍了VHDL硬件语言及其设计方法、ISE软件的运用等。 (4)PS2键盘控制的设计。介绍了PS2键盘控制的设计的模块划分和PS2键盘控制的各模块的实现,并对PS2键盘控制设计进行了系统仿真和验证。(5)结语。主要介绍本论文中的优点和不足之处。 2 PS2键盘控制的理论研究键盘是嵌入式系统的重要输入工具,是实现人机交互的重要手段之一。随着标准PS2键盘技术的成熟和价格的不断下降,使得在嵌入式系统的设计中用标准的PS2键盘取代自制简易的扫描式矩阵式键盘成为可能。现在主流的是PS/2接口,键盘和鼠标都可以使用PS/2接口,它内嵌自动去除按键抖动的设计自动地识别键的按下与释放,软硬件可发简便,价格便宜、稳定可靠,将PS2键盘作为嵌入式系统的输入设备已经成为可行的方案。2.1 PS2键盘的结构特点 现在主流的是PS/2接口,即具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。PS/2 最初由IBM开发,它的连接端口只有四个脚有意义。分别是第1脚DATA(数据脚)、第3脚Ground(电源地)、第4脚+5V(电源脚)和第5脚Clock(时钟脚)。PS2引脚结构和外形如图2.1所示:各引脚定义为:1:Data线 4:+5V电源线2:未用 5:Clock线3:Ground线 6:未用 图2.1 PS/2硬件接口外形图2.2 PS2键盘工作原理 PS2键盘靠PC的PS2端口提供+5V电源,由于Clock(时钟脚)和DATA(数据脚)两个脚都是集电极开路的,则必须接大阻值的上拉电阻。一般上拉电阻设置在主设备中, 主从设备之间的数据通信采用双向同步方式传输, 时钟信号一般由从设备产生。它们平时一般保持高电平,并很容易下拉到地(逻辑0)任何连接到PS2键盘上的设备在时钟和数据线上都必须接大阻值的上拉电阻,有输出时才会被拉到低电平,之后会自动上浮到高电平。(即置“0”就把线拉低,置“1”就把线上浮成高电平)。数据和时钟的一般接口结构如图2.2所示:图2.2 集电极开路PS2键盘通信协议履行一种双向同步串行协议。也就是说每次数据线上发送一位数据并且每在时钟线上发生一个脉冲就被读人,PS2键盘可以发送数据到主机,而主机也可以发送数据到设备,但主机总是在总线上有优先权,因此它只需把时钟拉低就可抑制在任何时候来自于键盘的通讯。从键盘发送到主机的数据在时钟信号的下降沿当时钟从高变到低的时候被读取;从主机发送到键盘的数据在上升沿当时钟从低变到高的时候被读取;不论通讯的方向怎样键盘总是产生时钟信号,如果主机要发送数据它必须首先告诉设备开始产生时钟信号,这个过程最大的时钟频率是33kHz 而且大多数设备工作在10 20kHz。2.3 PS2协议PS/2协议是键盘与其他硬件通信时的一种双向半双工通信协议,键盘通过Data线向外发送数据,数据时钟由键盘产生,在协议中数据的传送格式为短帧格式,一般为11位,各位的含义如下图2.3所示:图2.3 数据帧的含义 Start:起始位,总为0(低电平) D0D7:8位数据位(低位在前,高位在后) Parity:奇偶校验位(为奇校验) Stop:停止位,总为1(高电平)(1)设备到主机的通讯: 图2.4 键盘发送时序键盘发送时序如图2.4所示。键盘首先会检查Clock线和Data线是否同时为高电平,如果不是,那么是主机抑制了通讯设备必须缓冲任何要发送的数据直到重新获得总线的控制权键盘有16 字节的缓冲区。如果是,那么键盘则产生Clock信号,并将待发的数据按照数据帧的格式逐位放在数据线上,数据线在时钟的高电平期间改变状态,时钟的下降沿将数据锁定到数据线上,此时外界就可以到数据线上读取数据。键盘同步时钟的最大频率为33KHZ,一般情况下使用1020KHZ的频率。推荐值在 15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40s。每一数据帧包含1112个位,具体含义如表2.2所示: 表2.2 数据帧格式说明1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中 表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,如果数据位中1的个数加上校验位中1的个数总为奇数,那么总进行奇校验。(2)主机到设备的通讯:图2.5 键盘接收时序键盘接收时序如图2.5所示。首先PS/2 设备总是产生时钟信号如果主机要发送数据,它必须先下拉时钟线(至少100us)抑制通信,表示“请求发送”,然后释放时钟。在时钟信号的上升沿,数据被锁存读取;在时钟信号的低电平,数据线改变状态。并且设备应该在不超过10 ms的间隔内检查这个状态。当设备检测到这个状态它将开始产生时钟信号并且时钟脉冲标记下输入八个数据位和一个停止位主机仅当时钟线为低的时候,改变数据线而数据在时钟脉冲的上升沿被锁存这在发生在设备到主机通讯的过程中正好相反。在停止位发送后设备要应答接收到的字节就把数据线拉低并产生最后一个时钟脉冲如果主机在第11个时钟脉冲后不释放数据线设备将继续产生时钟脉冲直到数据线被释放然后设备将产生一个错误。主机可以在第11 个时钟脉冲应答位前中止一次传送只要下拉时钟线至少100us即可。其中主机到设备通讯的详细过程图如图2.6所示: 图2.6 主机到设备的过程图中描述了两个重要的定时条件:(a)设备开始产生时钟脉冲的时间必须步大于15ms;(b)数据包被发送的时间必须不大于2ms。3 ISE工具概述随着计算机软件、硬件和集成电路制造技术的飞速发展,数字电路硬件设计复杂程度的快速增长,以及产生的设计成果可继承性的需要,对数字电子系统的设计方法产生了极大的影响,传统的以中小规模集成电路为基础模块、以电路图为表达方式的数字电子系统的设计方法正逐步被EDA技术的设计方法所取代。3.1 硬件描述语言硬件描述语言(HDL,Hardware Description Language)是EDA技术的重要组成部分,常用的硬件描述语言有VHDL、Verilog、ABEL等,VHDL是EDA技术的主流硬件描述语言之一,也是本文设计所采用的硬件描述语言。3.1.1 VHDL的特点VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内、外两部分的概念是VHDL系统设计的基本点。相对于其他硬件语言的优势如下:(1)VHDL语言功能强大,设计灵活VHDL语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。(2)VHDL语言覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL语言的强大描述能力还体现在它具有丰富的数据类型。VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。(3)VHDL语言具有很强的移植能力VHDL语言很强的移植能力主要体现在:对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。(4)VHDL语言具有良好的可读性,且易于修改VHDL语言既可以被计算机接受,也容易被人们所理解;同时在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因VHDL语言易读和结构化的特点,所以易于修改设计。(5)VHDL语言的设计描述与器件无关采用VHDL语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。(6)VHDL语言程序易于共享和复用VHDL语言采用基于库(library)的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。3.1.2 VHDL的基本程序结构一个相对较完整的VHDL设计由实体(Entity)、结构体(Architecture)、配置(Configuration)、程序包和程序包体(Package)以及库(Library)5个部分组成。其各自作用分别为下表3.1所示:表3.1 各部分作用实体(Entity)描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口结构体 (Architecture)描述系统内部的结构和行为包集合 (Package)存放各设计模块能共享的数据类型、常数和子程序等配置 (Configuration)指定实体所对应的结构体库 (Library)存放已经编译的实体、结构体、包集合和配置每一个VHDL程序并不是都具备以上四个部分的,只有一个实体和一个与之对应的结构体是必须具备的。VHDL的基本设计单元结构:程序包说明、实体说明和结构体说明三部分.3.1.3 VHDL语言的使用 (1)实体实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。它也是设计的基本模块和设计的初级单元,在分层次设计中,顶层有顶级实体,含在顶级实体中的较低层次的描述为低级实体,通过配置可把顶层实体和底层实体连接起来。实体语句用关键词ENTITY开头,实体名rsff是描述的符号名,在结束实体语句的END rsff之间,实体语句可以用关键词BEGIN把实体语句分成两部分:即BEGIN之前是实体说明,BEGIN之后是实体语句。在ENTITY语句的实体说明部分,常用PORT付语描述实体对外界连接的端口(数目、方向和数据类型)。实体rsff有4个端口,Set/Reset是输入IN模式,Q/QB是输出BUFFER(缓冲)模式,都为BIT类型。实体的语法格式如下:ENTITY 实体名 ISGENERIC(常数名:数据类型:设定值 ;常数名:数据类型:设定值 );PORT(端口名:端口模式 数据类型;端口名:端口模式 数据类型);END ENTITY 实体名;实体名由设计者自由命名,用来表示被设计电路芯片的名称,但是必须与VHDL程序的文件名称相同。要与文件名一致;其中,GENERIC是用于说明设计实体和其外部环境通信的对象,规定端口的大小、实体中子元件的数目、实体的延时特性等。只能用整数类型表示,如整型、时间型等,其他类型的数据不能逻辑综合。格式如下:GENERIC (CONSTANT属性名称:IN子类型标识:=静态表达式,);PORT 关键字用于定义模块的端口,它的格式如下:PORT(SIGNAL 端口名称:方向类型标识BUS :=静态表达式,SIGNAL 端口名称:方向 类型标识BUS :=静态表达式,SIGNAL 端口名称:方向 类型标识BUS :=静态表达式);SIGNAL:SIGNAL 是关键字,但是由于PORT 之后必须是信号类,所以一般可以将SIGNAL 关键字省略。端口方向:IN, OUT,INOUT,BUFFER表明端口方向的关键字如表3.2所示:表3.2 关键字的含义说明符含义IN(输入)信号进入实体内部,内部的信号不能从该端口输出。OUT(输出)信号从实体内部输出,不能通过该端口在实体内部反馈使用INOUT(双向)信号不但可以输入到实体内部,还可以从实体内部输出,也允许用于内部反馈。BUFFER(缓冲)信号输出到实体外部,同时也可以通过该端口在实体内部反馈使用。“OUT”和“BUFFER”都可定义输出端口如图3.1所示; 图3.1 输出端口引脚图若实体内部需要反馈输出信号,则输出端口必须被设置为“BUFFER”,而不能为“OUT”。 (2)结构体结构体描述实体的行为功能,一个实体可以有多个结构体。结构体是一个基本设计单元,它具体地指明了所设计模块的行为、元件及内部的连接关系,也就是定义了设计单元具体的功能。结构体对其基本设计单元的输入/输出关系可以用3 种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。不同的描述方式只体现在描述语句上,而结构体的结构是完全一样的。由于结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。结构体的语法格式如下:ARCHITECTURE 结构名 OF 实体名 IS 说明语句BEGIN功能描述语句;END 结构体名;其中说明语句用于声明该结构体将用到的信号、数据类型、常数、子程序和元件等。声明的内容是局部的。而功能描述语句则是具体描述结构体的功能和行为。VHDL结构体描述常常用到3种语句结构:PROCESS语句结构进程语句是一种并发处理语句,在一个结构体中多个PROCESS语句可以同时并行运行(相当于多个CPU同时运作)。PROCESS语句是VHDL 语言中描述硬件系统并发行为的最基本语句。PROCESS语句的格式如下:进程名:PROCESS(信号1,信号2,)BEGINEND PROCESS;BLOCK语句结构BLOCK语句的格式如下:块名:BLOCK(条件)参数GENERIC 说明; 参数映射; 端口说明; 端口映射; 块说明语句BEGIN并发语句组;END BLOCK 块名;BLOCK放在结构体的并行语句组中。和PROCESS语句不同,BLOCK内的语句是并发执行的。只要BLOCK右边的条件满足,BLOCK内的语句就被执行。如果省略条件,表示本BLOCK 被无条件执行。子程序结构所谓子程序结构就是将一部分实现代码放到公用的程序(即程序包Package)文件中实现。子程序在调用时首先要进行初始化,执行结束后子程序就终止,再调用时要再进行初始化。因此子程序内部的值不能保持,子程序返回以后才能被再调用,它是一个非重入的程序。VHDL中有两种类型的子程序过程(Procedure)和函数(Function)。(a)过程过程的格式如下:PROCEDURE 过程名(参数1;参数2;) IS定义语句;BEGIN顺序语句组;END 过程名;每个参数的说明格式如下:参数名:方向类型方向一般为 3 种:IN、OUT、INOUT。如果方向为IN 则可省略方向说明。(b)函数函数的格式如下:FUNCTION 函数名(参数1;参数2;) RETURN 数据类型 IS定义语句;BEGIN顺序语句组;RETURN 返回变量名;END 函数名;3.2 ISE使用方法3.2.1 ISE的主要功能ISE的主要功能包括设计输入、仿真、综合、下载和实现,涵盖了可编程逻辑器件开发的整个过程,从功能上讲,完成CPLD/FPGA的设计流程且无需借助任何第三方EDA软件。下面简要说明各功能的作用: (1)设计输入:ISE提供的设计输入工具包括用于HDL代码输入和查看报告的ISE文本编辑器(The ISE Text Editor),用于原理图编辑的工具,用于生成IP Core的Core Generator,用于状态机设计的StateCAD以及用于约束文件编辑的Constraint Editor等。 (2)综合:ISE的综合工具不但包含了Xilinx自身提供的综合工具XST,同时还可以内嵌Mentor Graphics公司的Leonardo Spectrum和Synplicity公司的Synplify,实现无缝链接。 (3)仿真:ISE本身自带了一个具有图形化波形编辑功能的仿真工具HDL Bencher,同时又提供了使用Model Tech公司的Modelsim进行仿真的接口。 (4)实现:此功能包括了翻译、映射、布局布线等,还具备时序分析、管脚指定以及增量设计等高级功能。 (5)下载:下载功能包括了BitGen,用于将布局布线后的设计文件转换为位流文件,还包括了IMPACT,功能是进行芯片配置和通信,控制将程序烧写到FPGA芯片中去。 3.2.2 ISE的使用方法 (1)创建工程用ISE完成一个HDL设计的仿真,必须建立一个ISE工程。ISE的向导功能,能帮助开发者迅速创建仿真工程。启动ISE,单击菜单【File】/【New Project】,就会出现对应的“Create New Project”窗口。窗口中包含工程名、工程路径、“Top-level source type”等。单击“Create New Project”窗口上的【Next】按钮,弹出“Device Properties”的窗口。直接单击【Next】进入下一步,一直点击【Next】直到【Finish】完成。完成后在Sources窗口中显示工程文件夹以及工程所用芯片。右击可以新建文件,添加已经写好的文件,添加文件并复制该文件到工程文件夹中。新建文件的类型,不同的类型有着不同的功能和意义。我们选择“VHDL Module”类型,输入一个名字点击【Next】,进入下一级的添加实体端口,输入端口名和端口的类型及位数点击【Next】,就进入了最后的Summary窗口,上面给出了该文件的概要。输入要运行的程序,这样一个工程就建立完成了。 (2)编译代码编写好后,点击保存,然后检查看编写代码是否有错误,如图3.2所示,Check Syntax 点击检查后是绿色的勾,则代码没有语法错误,可以进行下一步功能仿真。图3.2 代码的编译 (3)行为(功能)仿真同样在Sources 区域右键添加New Source 如图3.3所示,添加图形仿真文件:图3.3 添加图形仿真文件选择测试程序,点【Next】,【Finish】,双击测试文件,到如图3.4所示界面:图3.4 测试程序界面删除此段程序,添加如图3.5所示程序: 图3.5修改程序界面点Finish进入波形编辑界面,如图3.6所示(rst是要编辑的波形): 图3.6 波形编辑界面4 PS2接口的设计4.1 模块结构设计本设计则采用自顶向下的方法。考虑需要设计以下几部分模块: 串并转换模块, 分拣接收模块, 控制模块, 封装发送模块等。这几部分的逻辑关系如图4.1所示: 图4.1 模块逻辑间关系其中串并转换模块的主要作用是接收和发送传输数据, 并能够将串行数据转变成所需要的并行数据。而分拣接收模块的功能则是把串并转换模块传过来的数据包按照一定的要求进行分拣提取, 从而获得有用的信息。控制模块是整个设计模块中的核心,由于 PS/2 接口是半双工串行总线, 因此其发送和接收是不能够同时进行的, 整个设计中控制模块不仅要对其时序进行严格的控制而且负责协调整其全过程。同时在本设计中也采用了状态机的设计思路。封装发送模块和分拣接收模块相似, 只是要把要传送的命令数据转变成PS/2 协议要求的发送数据包的格式。4.2 VHDL代码设计整个设计的流程图如图4.2所示:图4.2 设计流程图当系统上电或复位的时候, 主设备会首先向键盘发送初始化信号, 在得到键盘的应答信号后, 系统则进入到了总线空闲状态, 此时可以进行数据的发送和接收, 但由于主设备拥有更高的优先级, 因此正处在接收状态时如果得到发送请求, 会中断数据接收, 直接进入数据发送状态。使用ISE 14.4 对设计进行了软件仿真, 按照模块化的设计思路分别对每个模块独立进行了仿真。图4.3是接收数据模块的仿真时序图。4.3 仿真验证本文在ISE 14.4环境下对PS2键盘接口时序进行仿真。仿真图如图4.3所示:图4.3 仿真图结 语近年来,随着社会的发展,电子产品越来越多的走上了“智能”的道路,成为了我们生活中必不可少的一部分。随着计算机的普及,以及电子设备之间相互沟通的更加频繁,如今键盘是嵌入式系统的重要输入工具,是实现人机交互的重要手段之一。本论文为实现PS2键盘接口完成了以下研究:首先,以PS2协议接口的基本理论为依据,论述了PS2键盘接口的结构及设计,先介绍VHDL和FPGA的相关知识,PS2键盘的基本原理及其电路模块的划分,并详细叙述了键盘扫描电路、键盘译码电路、按键标志产生电路、时钟模块以及键盘顶层电路等四个模块的原理及实现过程。在设计中,利用VHDL硬件描述语言在FPGA芯片上实现键盘接口设计并利用仿真FPGA软件进行仿真。为了更好的验证仿真结果的正确性,文中应用了ISE软件对设计的电路进行仿真测试,由于某些参数的设置不成功,没有能正确仿真出预先设计的波形指标。从以上对PS2键盘接口模拟仿真结果可以看出,整个时序不完全满足PS2键盘的时序要求,但是由于个人水平有限,在短时间内没有设置成功。导致在设计中有很多不足之处没有解决,同时在实际中运用,一些理论完美化的设计需通过实际验证来判断接口的顺利传输。 本人认真进行了课题的研究并完成了本论文,由于作者水平有限,论文中可能仍有错误和不足之处,敬请大家批评指正。最后,感谢指导老师的关怀和细心的指导,感谢同学们的帮助。谢谢!主要参考文献1 夏宇闻主编Verilog数字系统设计教程北京:北京航空航天大学出版社,20032 田耕,徐文波编著. FPGA 数字电子系统设计与开发实例导航. 北京:电子工业出版社,20053 刘韬,楼兴华主编. FPGA 数字电子系统设计与开发实例导航. 北京:人民邮电出版社,20054 刘福奇主编. FPGA嵌入式项目开发实战. 北京:电子工业出版社,20095 潘松,黄继业,潘明主编EDA技术实用教程Verilog HDL版北京:科学出版社,20106 王开军,姜宇柏主编面向CPLD/FPGA的VHDL设计机械工业出版社,20077 孙航Xilinx 可编程逻辑器件的高级应用与设计技巧.北京:电子工业出版社,20048 徐欣,于红旗,易凡,等.基于FPGA的嵌入式系统设计.北京:机械工业出版社,20059 纪志成,高春能主编.FPGA数字信号处理设计教程System Generater入门与提高.西安:西安电子科技大学出版,200810 刘勇,王玉晶,曲斌,于洋一种嵌入式PC非标准键盘的设微计算机信息,200711 Adam Chapweske.PS2技术参考.200212 张海劲 刘强 蔡桂玲用VHDL语言开发可编程逻辑器件.光电技术应用,200313 田源基于VHDL语言实现FPGA设计.火控雷达技术200414 http:/www.61eda.com15 http:/www.21ic.com16 Xilinx公司主页Spartan-3E FPGA Family:Complete Data Sheet EB/OL. (2007-5-29)附 录附录 1 PS2键盘接口程序设计(1) library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity top is port( clr : in std_logic; clk : in std_logic; ps2clk : in std_logic; ps2data : in std_logic; a_to_g : out STD_LOGIC_VECTOR (6 downto 0); sel : out STD_LOGIC_VECTOR (3 downto 0); dp : out STD_LOGIC ); end top;architecture Behavioral of top is signal clk4,sclk : std_logic; signal dat : std_logic_vector(15 downto 0); component divclk is port( clk : in std_logic; -50MHZ clk400 : out std_logic; -400KHZ scanclk : out std_Logic );end component;component key_board isport( clr : in std_logic; clk400 : in std_logic; -400KHZ ps2clk : in std_logic; ps2data : in std_logic; dataout : out std_logic_vector(15 downto 0) );end component;component disp isport(clr : in std_logic; scanclk : in std_logic; datain : in std_logic_vector(15 downto 0); a_to_g : out STD_LOGIC_VECTOR (6 downto 0); sel : out STD_LOGIC_VECTOR (3 downto 0); dp : out STD_LOGIC );end component; begin inst1: divclk port map(clk,clk4,sclk); inst2: key_board port map(clr,clk4,ps2clk,ps2data,dat); inst3: disp port map(clr,sclk,dat,a_to_g,sel,dp); end Behavioral;(2)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity divclk is port( clk : in std_logic; -50MHZ clk400 : out std_logic; -400KHZ scanclk : out std_Logic );end divclk;architecture Behavioral of divclk isbegin process(clk) variable count : std_logic_vector(19 downto 0):=X00000;begin if(rising_edge(clk)then count:=count+1;end if; clk400=count(2); scanclk=count(12);end process;end Behavioral;(3)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity key_board is port( clr : in std_logic; clk400 : in std_logic; -400KHZ ps2clk : in std_logic; ps2data : in std_logic; dataout : out std_logic_vector(15 downto 0) );end key_board;architecture Behavioral of key_board is signal clk : std_logic:=0; signal data : std_logic:=0; signal shift1,shift2 : std_logic_vector(10 downto 0); signal ps2c,ps2d : std_logic;begin ps2c=ps2clk; ps2d=ps2data; dataout=shift1(8 downto 1) & shift2(8 downto 1); process(clk400,clr) variable tempclk : std_logic_vector(7 downto 0):=X00; variable tempdata: std_logic_vector(7 downto 0):=X00; begin if(clr=0) then tempclk:=X00; tempdata:=X00; clk=0; data=0;else if(clk400event and clk400=1) then tempclk(0):=ps2c; tempclk(7 downto 1):=tempclk(6 downto 0); tempdata(0):=ps2d; tempdata(7 downto 1):=tempdata(6 downto 0);end if;end if; if(tempclk=11111111) then clk=1;else if(tempclk=00000000) then clk=0; end if;end if; if(tempdata=11111111) then data=1;else if(tempdata=00000000) then data=0; end if;end if;end process;process(clk,clr)begin if(clr=0)then shift1 0); shift2 0);else if(clkevent and clk=0) then shift1(10)=data; shift1(9 downto 0)=shift1(10 downto 1); shift2(10)=shift1(0); shift2(9 downto 0)=shift2(10 downto 1); shift1(0)=data; shift1(10 downto 1)=shift1(9 downto 0); shift2(0)=shift1(10); shift2(10 downto 1)=shift2(9 downto 0);end if;end if;end process;end
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!