




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的PS/2鼠标接口设计及VGA显示 内容摘要:本文主要介绍基于FPGA的PS/2鼠标接口设计及VGA显示的原理和工作流程,然后用鼠标操作并用VGA显示作为实例,把鼠标接口和VGA显示部分的各个应用模块体现出来,最后对各个模块进行硬件设计和软件编程。本次设计采用的现场可编程门阵列是Altera公司的EP2C5T144C8,并用VHDL语言在Quartus软件环境下编程、仿真实现设计所要实现的功能。当用鼠标操作并在VGA上显示实现我们想要的功能的时候,就充分说明了大规模可编程逻辑器件的重要作用。本次设计先分别介绍FPGA的内部结构、PS/2的接口协议、VGA的显示时序,然后再它们的基础上以FPGA为核心器件实现本次设计的功能。在设计过程中,对FPGA的正确编程是有关本设计成败的关键,也是本设计的难点。 关键词:现场可编程门阵列 可编程控制器 鼠标接口 VGA显示Design of PS / 2 mouse and VGA display based on FPGAAbstract: This paper mainly introduces the PS / 2 mouse interface design and VGA display principle and work process based on the FPGA,and then use the mouse to operate and use VGA to display as an example to reflect the mouse interface and VGA display portion of each application module; at the end , design each module hardware and programm software . This design using field programmable gate array is from Altera EP2C5T144C8, and programm VHDL language in Quartus software environment and simulate to realize the function which is designed. When use the mouse to operate and display on the VGA to realize the features we want , fully illustrates the importance of the large-scale programmable logic device in . The design at the first introduced the inner structure of FPGA, PS / 2interface protocol, VGA display timing, then realize the design function based on the formers with FPGA as the core . In the design process, the FPGA correct programming is the key related to the success which is also the difficulty of this design.Keywords: FPGA Programmable controller Mouse VGA display.目 录前言11 FPGA的介绍11.1 FPGA的简介11.2 FPGA的结构和工作原理11.2.1 FPGA的芯片结构21.2.2 FPGA各部分的作用与工作原理2PS/2的介绍42.1 PS/2的接口特性42.2 PS/2的接口协议42.3 PS/2鼠标工作模式52.4 PS/2的数据包格式53 VGA的简介53.1 VGA的时序53.2 VGA接口64 VHDL简介64.1 VHDL的设计方法64.2 VHDL的设计流程75 设计方案75.1 设计任务75.2 设计原理75.3 模块电路设计75.3.1 PS/2鼠标接口电路75.3.2 VGA显示模块85.4 系统顶层文件96 结束语10附录11参考文献29基于FPGA的PS/2鼠标接口设计及VGA显示前言 随着电子技术的发展,现代电子产品已经深入到社会的各个领域,有利的促进了社会的发展,但同时人们对电子产品的性能和要求也越来越高,产品的换代速度也越来越快。然而微电子技术是电子技术发展的根基,尤其在半导体工艺技术的发展上更能体现出微电子技术。所以现在在单片硅片上集成了更多的晶体管,集成电路也在向低成本、低功耗和高速的方向发展,各种专用集成电路的成本不断降低,最终实现了片上系统。现代电子技术的核心是EDA技术,它结合了物理层在硬件电路实现的发展,也体现了现代电子技术与计算机软件技术有效的融合和升华。EDA技术的发展有效的结合了这两者,是这两个技术的共同产物,所以电子技术全方位技术EDA时代。工程师们用EDA工具,开发专用集成电路及其复杂的IP核模块。特别是硬件描述语言的出现,使更加复杂的电子系统的设计和调试更加的简单。所以为了实现电子技术的发展,EDA技术对于我们而言及其重要。本文介绍了基于FPGA控制的PS/2鼠标接口电路设计的基本结构、性能特点、及其设计理念。本设计采用EP2C5T144C8 FPGA芯片,采用EDA技术,并使用VHDL语言设计各个模块,并在Quartus下进行软件编程实现正确的工作时序后,将编译结果下载到FPGA芯片上,最终实现本次设计的要求。 1 FPGA的介绍1.1 FPGA的简介 随着EDA技术的发展,在电子领域里的模电与数电、硬件和软件、器件与系统的集成等更加良好的融入到一起。所以更大规模的FPGA器件不断更新。FPGA(Field Programmable Gate Array)是一款大规模可编程逻辑器件,它和CPLD、GAL等可编程逻辑器件不一样,后者都是基于乘积项的可编程结构,而前者是用的查找表结构,LUT是可编程的最小逻辑单元。FPGA的出现使开发数字电路的技术进一步提高。它的特点是直接面向用户,具有极大的通用性和灵活性,使用简单方便,硬件检测和实现快捷,开发周期短,成本低,便于维护等。FPGA应用EDA技术,以硬件描述语言,原理图等形式作为输入设计逻辑,经过一系列的变换,最后转换成FPGA器件所识别的编程文件,最终实现电子线路系统功能。1.2 FPGA的结构和工作原理对于大多数FPGA而言都是采用的基于静态随机存储器的查找表逻辑形成机构,简单的说就是用静态随机存储器来够成逻辑函数发生器,其4输入LUT的内部结构如图1.2-1所示。查找表LUT输入输入输入输入输出图1.2-1 FPGA查找表单元1.2.1 FPGA的芯片结构目前的FPGA芯片已经远远的超过了以前版本的基本性能,并且整合了常用功能(如:RAM)的硬核模块。FPGA主要由七部分构成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。其芯片内部结构如图1.2.1-1所示。图1.2.1-1 FPGA内部结构1.2.2 FPGA各部分的作用与工作原理 可编程输入/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适配不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻。目前,I/O口的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2Gbps的数据速率1。 CLB是FPGA内的基本逻辑单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些 选型电路(多路复用器等)和触发器组成。开关矩阵是高度灵活的,可以对其进行配置以便处理组合逻辑、移位寄存器或RAM。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM1。业内大多数FPGA均提供数字时钟管理(Xilinx的全部FPGA均具有这种特性)。Xilinx推出最先进的FPGA提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟综合,且能够降低抖动,并实现过滤功能1。 大多数FPGA都具有内嵌的RAM,这大大拓展了FPGA的应用范围和灵活性。RAM可被配置为单端口RAM、双端口RAM、内容地址存储器 (CAM)以及FIFO等常用存储结构。CAM存储器在其内部的每个存储单元中都有一个比较逻辑,写入 CAM中的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址,因而在路由的地址交换器中有广泛的应用。除了块RAM,还可以将 FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。在实际应用中,芯片内部块RAM的数量也是选择芯片的一个重要因素。单片块RAM的容量为18kbit,即位宽为18bit、深度为1024,可以根据需要改变其位宽和深度,但要满足两个原则:首先,修改后的容量(位宽 深度)不能大于18kbit;其次,位宽最大不能超过36bit。当然,可以将多片块RAM级联起来形成更大的RAM,此时只受限于芯片内块RAM的数量,而不再受上面两条原则约束1。布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;第二类是长线资源,用以完成芯片 Bank间的高速信号和第二全局时钟信号的布线;第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系1。内嵌功能模块主要指DLL(Delay Locked Loop)、PLL(Phase Locked Loop)、DSP和CPU等软处理核(SoftCore)。现在越来越丰富的内嵌功能单元,使得单片FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOPC平台过渡。DLL和PLL具有类似的功能,可以完成时钟高精度、低抖动的倍频和分频,以及占空比调整和移相等功能。Xilinx公司生产的芯片上集成了 DLL,Altera公司的芯片集成了PLL,Lattice公司的新型芯片上同时集成了PLL和DLL。PLL 和DLL可以通过IP核生成的工具方便地进行管理和配置1。内嵌专用硬核是相对底层嵌入的软核而言的,指FPGA处理能力强大的硬核(Hard Core),等效于ASIC电路。为了提高FPGA性能,芯片生产商在芯片内部集成了一些专用的硬核。例如:为了提高FPGA的乘法速度,主流的FPGA 中都集成了专用乘法器;为了适用通信总线与接口标准,很多高端的FPGA内部都集成了串并收发器(SERDES),可以达到数十Gbps的收发速度。Xilinx公司的高端产品不仅集成了Power PC系列CPU,还内嵌了DSP Core模块,其相应的系统级设计工具是EDK和Platform Studio,并依此提出了片上系统(System on Chip)的概念。通过PowerPC、Miroblaze、Picoblaze等平台,能够开发标准的DSP处理器及其相关应用,达到SOPC的开发目的1。PS/2的介绍2.1 PS/2的接口特性PS/2接口多用于鼠标和键盘,IBM是开发和使用最早的。PS/2接口从物理上有两种类型的连接器,它们分别是5脚的DIN和6脚的MINI-DIN,如图2.1-1和2.1-2所示。14253图2.1-1 5脚DIN531246图2.1-1 6脚MINI-DIN2.2 PS/2的接口协议 PS2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100s抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。2.3 PS/2鼠标工作模式PS/2鼠标有四种工作模式 ,它们分别为5: Reset模式:当鼠标上电或主机发复位命令给它时,进入Reset模式; Stream模式:这是鼠标的默认模式,当鼠标上电或复位完成后,鼠标自动进Stream模式,鼠标大部分就是用此模式工作; Remote模式:只有当主机发送了设置命令后,鼠标才进入Remote模式; Wrap模式:Wrap模式只用于测试鼠标与主机连接是否正确。2.4 PS/2的数据包格式鼠标在实际工作中,会把及时收到的数据状态发送给主机,让主机做出相应的动作。鼠标发送数据的具体方式如下5: Byte1中的Bit0、Bit1、Bit2分别表示左、右、中键的状态,状态值表示释放,表示按下; Byte2和Byte3分别表示轴和轴方向的移动计量值,是二进制补码值; Byte4的低四位表示滚轮的移动二进制补码值,高四位作为扩展符号位。这种数据包由带滚轮的三键三维鼠标产生,若是不带滚轮的三键鼠标,产生的数据包没有Byte4,其余的相同。 3 VGA的简介VGA的英文名字叫Video Graphic Array是计算机显示器标准的一种,其最早的是640X480这种显示模式。它能显示16种色彩,并且在320X240分辨率下能同时显示256种颜色。3.1 VGA的时序VGA(640480,60Hz)信号时序中,其点时钟DCLK为25.175MHz,场频为59.94Hz。Vsync为场同步信号,场周期Tvsync为16.683mS,每场有525行,其中480行为有效显示行,45行为场消隐期。场同步信号Vs每场有一个脉冲,该脉冲的低电平宽度twv为63S(2行)。场消隐期包括场同步时间twv、场消隐前肩tHV(13行)和场消隐后肩tVH(30行),共45行。行周期THSYNC为3178S,每显示行包 括800点,其中640点为有效显示,160点为行消隐期(非显示 区)。行同步信号Hs每行有一个脉冲,该脉冲的低电平宽度tWH为3.81S(即96个DCLK);行消隐期包括行同步时间tWH,行消隐前肩tHC(19个DCLK)和行消隐后肩tCH(45个DCLK),共160个点时钟。复合消隐信号是行消隐信号和场消隐信号的逻辑与,在有效显示期复合消隐信号为高电平,在非显示区域它是低电平,其时序图如图3.1-1所示。图3.1-1 VGA的时序图3.2 VGA接口VGA接口又叫D-sub,它是一种D型接口,采用非对称分布的15PIN连接方式,共有15针,分成3排,每排5个孔。这种接口类型是显卡上应用最为广泛的,绝大部分显卡都带有VGA接口。它能传输红、绿、蓝模拟信号以及同步信号水平和垂直信号。VGA接口有15根针,其对应接口定义如下,具体位置如表3.2-1、3.2-2所示: 表3.2-1 VGA接口定义编号1234567接口定义红基色绿基色蓝基色地址码自测试红地绿地表3.2-2 VGA接口定义编号89101112131415接口定义蓝地保留数字地地址码地址码行同步场同步地址码4 VHDL简介4.1 VHDL的设计方法在EDA技术中,硬件描述语言VHDL是非常重要的组成部分。它具有很强的电路描述和建模能力,能从多个层次对系统进行建模,大大减少了硬件设计,提高了效率和设计的可靠性。VHDL语言由于具有与具体硬件电路无关的特性,并且具有很强的电路行为描述和系统描述的能力,因此在语言易读性和层次化设计方面表现出了强大的应用潜力。VHDL支持各种模式的设计方法,所以设计者用它进行系统设计的时候可以专心致力于其功能,而不需要对不影响功能的工艺有关的因素花费过多的精力3。VHDL的设计方法和传统的电子设计方法不同,前者是自顶向下的设计方法,而后者恰恰相反。设这种设计方法使比较复杂的系统可以分解为各个模块的组合,然后分别对各个模块进行计,最后把不同的模块集成最终的系统,并进行综合测试3。对于使用VHDL语言的主系统及子系统最初的功能能被VHDL仿真程序编译的可执行文件。由于综合工具能将高级别的模型转化成为门级模型,对于整个设计过程基本由计算机自动完成。人能做的就是根据仿真的结果和优化的指标,从而控制逻辑综合的方式和指向。所以我们在设计的过程中要对仿真的结果进行优化,并对模块进行及时的修改,从而改进整个系统的功能,提高系统的工作效率,降低功耗和成本38。4.2 VHDL的设计流程对于本次的设计,有了自顶向下的设计方法,解决了最底层的硬件问题,并且可靠性比较高。用逐级设计和测试的方法使具体目标器件的技术问题得到较大的解决,从而缩短了设计周期。VHDL的设计流程如下所示3:u 书写设计说明书;u 建立VHDL行为模型;u VHDL行为仿真;u VHDL-RTL级建模;u 前端功能仿真;u 逻辑综合;u 测试向量生成;u 功能仿真;u 结构综合;u 门级时序仿真;u 硬件测试。5 设计方案5.1 设计任务本次设计的任务是以FPGA为核心芯片,使用VHDL语言设计各个模块,并在Quartus下进行软件编程仿真实现正确的工作时序后,将编译结果下载到FPGA芯片上,应用PS/2协议实现PS/2鼠标接口,并在VGA显示时当鼠标左键按下时“十”字形鼠标图象的中间方块改变颜色,右键按下时箭头改变颜色,最终实现本次设计的要求。5.2 设计原理本设计由核心器件FPGA来实现PS/2时序并在PS/2协议下读取指令,然后FPGA芯片又把数据送到VGA显示模块显示,其原理图如图5.2-1所示。所以本次设计由以下几个模块组成:PS/2鼠标接口电路、FPGA核心芯片和VGA显示模块,如图5.2-2所示。鼠标PS/2时序FPGAVGA时序图5.2-1 系统原理图PS/2FPGAVGA显示 图5.2-2 系统总框图5.3 模块电路设计5.3.1 PS/2鼠标接口电路本设计的模块用VHDL语言编程,然后按照PS/2的协议进行解析,暂存解析到的8位数据,并且对8位数据的判断,判断它是通码还是断码,最后将断码转变格式输出,程序并将断码顺便转换成相对应的ASCII码。首先主机复位后,向鼠标发送初始化命令,当鼠标收到命令字后会给出一个应答字节,主机根据应答字节来判断鼠标是否正确应答。如果应答正确则接收鼠标数据包,然后从接收到的数据包中获得鼠标位置及状态数据,并输出给显示模块。显示模块在VGA上显示出当前鼠标的状态和位置,否则,停止处理。当状态机m2_state复位时,即进入m2_reset状态,并在 一个clk周期后进入m2_hold_clk_l状态,当ps2_clk_hi_z(时钟线)被拉低并保持400S后进入m2_data_low_1状态,此时向鼠标 发送起始 位和d0、d1(d0=d1=0)。完成后进入m2_data_high_1状态, 发送d2(d2=1)并进入m2_data_low_2状态,此时向鼠标发送d3位(d3=0), 完成发送进入m2_data_high_2状态,向鼠标发送d4、d5、d6、d7(d4=d5=d6=d7=1),完成发送进入m2_data_low_3状 态,向鼠标发送奇偶校验位,然后进入m2_data_high_3状态,将数据线拉高,等待鼠标返回应答信号。若PS/2时钟信号下降沿来临时,数据线仍未变为高电平,则进入m2_error_no_ack状态,此时握手失败,系统将保持m2_error_no_ack状态直到下一次复位,否则进入m2_await_response状态接收应答字,接收完成进入m2_verify数据校验,然后进入m2_use状态,锁存输出数据,并进入m2_wait状态,等待接收数据。当检测到时钟下降沿后进入m2_gather状态,接收鼠标数据包,接收完成进入m2_verify状态,此时便形成了数据接收循环567。在上述的理论基础上,首先编写VHDL硬件实现流程图,然后用VHLD语言在Quartus软件下编写程序,并进行综合和时序仿真,最后得到PS/2接口模块,如图5.3.1-1、5.3.1-2所示。PS/2接口的VHDL硬件实现流程图见附录1,PS/2接口电路的VHDL语言见附录2。图5.3.1-1 PS/2接口模块图5.3.1-2 PS/2接口模块仿真时序图5.3.2 VGA显示模块VGA显示模式要求:行、场同步都为负极性,即都是负脉重。所以在设计显示模块的时候要注意时序驱动和VGA信号的电平驱动,其行、场扫描时序如表5.3.2-1、5.3.2-2所示3表5.3.2-1 行扫描时序行同步头行图像行周期对应位置TfTaTbTcTdTeTg时间8964086408800表5.3.2-2 场扫描时序行同步头行图像行周期对应位置TfTaTbTcTdTeTg时间222584808525当HS和VS都等于0的时候,CRT显示的内容为亮,这个过程为正向扫描。当一行扫描完成的时候,CRT扫描产生消隐,电子束回到CRT左边下一行的起始位置,依次进行扫描,其VGA显示模块如图5.3.2-1所示,源代码见附录4。图5.3.2-1 VGA显示模块5.4 系统顶层文件由以上两个模块:PS/2接口模块和VGA显示模块,根据方案图封装成系统所需的顶层模块就得到系统所需的顶层文件。如图5.4-1所示。图5.4-1 系统顶层模块5.5 功能实现在得到系统顶层模块后,先进行全程编译,并进行时序仿真,然后对芯片进行配置,最后将编译产生的SOF格式文件下载到FPGA芯片中进行硬件测试。 6 结束语毕业设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。随着EDA技术发展的日新日异,EDA已经成为现代电子技术中必不可少的技术, 在生活中可以说得是无处不在。因此作为电子专业的学生来说掌握EDA的开发技术是十分重要的。 我本次设计的题目是基于FPGA的PS/2鼠标接口设计及VGA显示,对于我们这些实践中的新手来说,这是一次考验。这次毕业设计让我学到很多很多的东西,学会了怎么在遇到问题时去解决问题。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次毕业设计设计通过我的努力终于顺利完成了,在设计中遇到了很多问题,最后在导师的辛勤指导下,终于迎刃而解,在此我表示感谢!附录1:PS/2接口的VHDL硬件实现流程图初始化判断鼠标是否正确应答接收数据输出并传给VGA复位是否附录2:设计流程图编写设计说明书建立PS/2行为模型建立VGA驱动行为行为仿真行为仿真RTL级建模RTL级建模前端功能仿真PS/2功能仿真逻辑综合测试向量表功能仿真结构综合门级时序仿真下载并硬件测试设计完成附录3:PS/2接口电路的VHDL语言源程序5library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mouse is Port ( clk : in std_logic; reset : in std_logic; ps2_clk : inout std_logic; ps2_data : inout std_logic; left_button : out std_logic; right_button : out std_logic; mousex: buffer std_logic_vector(9 downto 0); mousey: buffer std_logic_vector(9 downto 0); data_ready : out std_logic;- rx_read_o error_no_ack : out std_logic ); end mouse; architecture Behavioral of mouse is constant TOTAL_BITS : integer :=33; - 数据包位数 constant WATCHDOG : integer :=320; - 400usec所需sys_clk脉冲数 -constant DEBOUNCE_TIMER : integer := 2; -type m1statetype is ( m1_clk_h, m1_falling_edge, m1_falling_wait, - m1_clk_l, m1_rising_edge, m1_rising_wait); type m2statetype is (m2_reset, m2_wait, m2_gather, m2_verify, m2_use, m2_hold_clk_l, m2_data_low_1, m2_data_high_1, m2_data_low_2, m2_data_high_2, m2_data_low_3, m2_data_high_3, m2_error_no_ack, m2_await_response); -signal m1_state,m1_next_state : m1statetype; signal m2_state,m2_next_state : m2statetype; -signal m3_state,m3_next_state : std_logic; signal watchdog_timer_done : std_logic;-命令传输超时标志 signal q : std_logic_vector(TOTAL_BITS-1 downto 0);-位序列 signal bitcount : std_logic_vector(5 downto 0);-位计数器 signal watchdog_timer_count : std_logic_vector(8 downto 0); -等待时间 -signal debounce_timer_count : std_logic_vector(1 downto 0); signal ps2_clk_hi_z : std_logic; signal ps2_data_hi_z : std_logic; signal fallsig,risesig : std_logic_vector(2 downto 0); signal clean_clk : std_logic; - 从m1跟随ps2_clk反向输出 signal rise,n_rise : std_logic; - m1状态机输出数据 signal fall,n_fall : std_logic; - m1状态机输出数据 signal output_strobe : std_logic; - 锁存数据到输出寄存器 signal packet_good : std_logic; - 检查数据是否有效 -signal x_increment : std_logic_vector(8 downto 0); -signal y_increment : std_logic_vector(7 downto 0); signal mouseyy : std_logic_vector(9 downto 0); begin ps2_clk = 0 when ps2_clk_hi_z=0 else Z; ps2_data = 0 when ps2_data_hi_z=0 else Z; - -检测ps2clk上升沿和下降沿 - detect_ps2clkfall : process(clk,reset,ps2_clk) begin if reset=0 then fallsig = 000; elsif clkevent and clk=1 then fallsig(0) = ps2_clk; fallsig(1) = fallsig(0); fallsig(2) = fallsig(1); end if; end process; fall = 1 when fallsig=110 else 0; detect_ps2clkrise : process(clk,reset,ps2_clk) begin if reset=0 then risesig = 000; elsif clkevent and clk=1 then risesig(0) = ps2_clk; risesig(1) = risesig(0); risesig(2) = risesig(1); end if; end process; rise = 1 when risesig=001 else 0; -m2 状态 m2statech: process (reset, clk) begin if (reset=0) then m2_state = m2_reset; elsif (clkevent and clk=1) then m2_state = m2_next_state; end if; end process; -m2 状态传输逻辑 m2statetr: process (m2_state, q, fall,rise,watchdog_timer_done,bitcount,ps2_data,packet_good) begin - 输出信号的缺省值 ps2_clk_hi_z = 1; ps2_data_hi_z = 1; error_no_ack = 0; output_strobe - 复位后向鼠标发送命令字 m2_next_state if (fall=1) then m2_next_state = m2_gather; else m2_next_state if (watchdog_timer_done=1) and (bitcount=TOTAL_BITS)then m2_next_state = m2_verify; else m2_next_state -if (bitcount TOTAL_BITS) then -替换 packet_good=1 -m2_next_state = m2_wait; -else m2_next_state output_strobe = 1; m2_next_state ps2_clk_hi_z = 0; - 启动看门狗! if (watchdog_timer_done=1) then m2_next_state = m2_data_low_1; else m2_next_state ps2_data_hi_z = 0; - 数据位 开始位, d0 and d1 if (fall=1 and (bitcount = 2) then m2_next_state = m2_data_high_1; else m2_next_state ps2_data_hi_z = 1; - 数据位 d2 if (fall=1 and (bitcount = 3) then m2_next_state = m2_data_low_2; else m2_next_state ps2_data_hi_z = 0; - 数据位 d3 if (fall=1 and (bitcount = 4) then m2_next_state = m2_data_high_2; else m2_next_state ps2_data_hi_z = 1; - 数据位 d4,d5,d6,d7 if (fall=1 and (bitcount = 8) then m2_next_state = m2_data_low_3; else m2_next_state ps2_data_hi_z = 0; - 奇偶校验位 if (fall=1) then m2_next_state = m2_data_high_3; else m2_next_state ps2_data_hi_z = 1; - 允许鼠标拉成低电平(ACK脉冲) if (fall=1 and (ps2_data=1) then m2_next_state = m2_error_no_ack; elsif (fall=1 and (ps2_data=0) then m2_next_state = m2_await_response; else m2_next_state error_no_ack = 1; m2_next_state -if (bitcount = 22) then m2_next_state = m2_verify; -else - m2_next_state m2_next_state = m2_wait; end case; end process;-m2 状态结束 -位计数器 bitcoun: process (reset, clk) begin if (reset=0) then bitcount 0); - normal reset elsif (clkevent and clk=1) then if (fall=1) then bitcount = bitcount + 1; elsif (watchdog_timer_done=1) then bitcount 0); - rx watchdog timer reset end if; end if; end process; - 数据移位寄存器 dataseq: process (reset, clk) begin if (reset=0) then q 0); elsif (clkevent and clk=1) then if (fall=1) then q = ps2_data & q(TOTAL_BITS-1 downto 1); end if; end if; end process; - 看门狗时间计数器 watchcount: process (reset,rise,fall, clk) begin if (reset=0) or (rise=1) or (fall=1) then watchdog_timer_count 0); elsif (clkevent and clk=1) then if (watchdog_timer_done=0) then watchdog_timer_count = watchdog_timer_count + 1; end if; end if; end process; watchdog_timer_done = 1 when (watchdog_timer_count=WATCHDOG-1) else 0; - 接收数据包有效标志 packet_good = 1; - 输出数据 outdata: process (reset, clk) begin if (reset=0) then left_button = 0; right_button = 0; -x_increment 0); -y_increment 0); elsif (clkevent and clk=1) then if (output_strobe=1) then left_button = q(1); right_button = q(2); -x_increment = 0 & q(19 downto 12); mouseyy = n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超声报告书写培训
- 九年级历史上册 第六单元 第17课 英国工业革命教学设计 华东师大版
- 初中校本研修培训
- 2025年全球电力评论报告(英文版)-EMBER
- 人教统编版必修 上册第六单元10(劝学 师说)10.2 师说第二课时教案
- 人教部编版七年级下册登幽州台歌教案设计
- 内蒙古鄂尔多斯市东胜区第一中学九年级化学上册 第四单元 课题2 水的净化教学设计 (新版)新人教版
- 2024中智天津人力资源服务有限公司基础招聘2人笔试参考题库附带答案详解
- 七年级数学上册 第5章 相交线与平行线5.1相交线 3同位角、内错角、同旁内角教学设计 (新版)华东师大版
- 感控管理培训
- 血管瘤的治疗课件
- 2024年《宪法》知识竞赛必背100题题库带解析及参考答案(考试直接用)
- MOOC 电子线路分析基础-西安电子科技大学 中国大学慕课答案
- 《急性缺血性卒中血管内治疗中国指南2023》解读
- 老人孤独的护理措施
- 心脏瓣膜疾病一病一品
- 2024-2025年全国初中化学竞赛试卷及答案
- YS-T 3038-2020 黄金生产用颗粒活性炭
- 新生儿低蛋白血症指南课件
- 四川省宜宾市2023-2024学年八年级上学期期末义务教育阶段教学质量监测英语试题
- 电力各种材料重量表总
评论
0/150
提交评论