毕业设计(论文)基于FPGA的矩阵键盘控制接口设计.doc
摘 要如今键盘的应用在我们的日常生活中随处都可以见到,例如,电脑键盘,手机,计算器等等。20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。本次设计在EDA开发平台QUARTUS7.2上利用VHDL语言设计矩阵键盘控制接口电路。要求设计一个4×8矩阵键盘接口控制器,含有时序产生电路,键盘扫描电路,弹跳消除电路,键盘译码电路,键盘码存储电路,显示电路。但按一下某键时,在数码管上显示改键对应的键值。一共有三个模块,分别为:扫描电路模块、时钟产生模块、键盘译码电路和按键标志位产生电路。扫描模块中是为了产生扫描信号,来利用扫描信号来扫描键盘中是否有按键按下。键盘译码电路和按键标志位产生电路也是为了配合扫描模块来扫描电路中是否有按键按下,而且还要求它来产生按键标志信号,以便和外部电路握手。时钟产生电路是为了产生不同频率的信号,来驱动上面两个电路的运转。关键词: FPGA/CPLD;矩阵键盘;VHDLAbstractNow keyboard application in our daliy life can be seen everywhere ,for example,the computer keyboard,cellphone,calculator,etc.More countries which have advanced electronic and computer technology among the International field have been actively exploring new electronic circuit design method and design method. And they made some completely reformation in the design methods and the tools, that has achieved a huge success since the 1990s. In the Electrical Technology Design field, programmable logic device such as: CPLD, FPGAs adhibition have been already popularized. All those devices made a great flexibility to the design of the digital system. And also changed the traditional digital system design methods, design procedure and the design concept immensely. And it is greatly enhanced the development of the EDA. Circuit designing that QUARTUSdeveloping platform in EDA makes use of VHDL language design Matrix keyboard interface circuit on 7.2 originally time. Requirement is to design a matrix keyboard 4×9, a total of three modules, namely: scanning circuit module, clock generation module, the keyboard decoder circuit and the key flag generation circuit. Scanner module is to generate scanning signals to the scanning signal to scan the keyboard button press whether there. Keyboard decoding circuit and button flag generating circuit is connected to the scanning module to scan the circuit if there are key pressed, but also requires it to generate key signs and signals, and external circuit to shake hands. Clock generating circuit is to generate signals of different frequency, to drive the operation of the above two circuits.Keywords:FPGA/CPLD;Matrix keyboard;VHDL目 录1. 绪论11.1 FPGA概况11.2 本课题的研究意义21.3 设计思路2本章小结32. VHDL语言介绍与Quartus II 7.2 软件介绍42.1 VHDL语言的介绍42.1.1 VHDL语言概述42.1.2 VHDL语言的优点52.1.3 VHDL语言的基本结构72.2 Quartus II 7.2 (32-Bit)软件介绍7本章小结93. 矩阵键盘接口电路的原理与总体设计103.1 矩阵键盘接口电路的原理103.2 总体设计12本章小结124. 各模块的设计及仿真134.1 键盘扫描电路134.2 键盘译码电路和按键标志位产生电路144.3 时钟产生模块194.4 键盘接口电路顶层电路实现22本章小结24结 论25致 谢26参考文献27附录程序281. 绪论1.1 FPGA概况早期的可编程逻辑器件只有可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(E2PROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。其后出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与或”表达式来描述,所以PLD能以乘积和的形式完成大量的组合逻辑功能。这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。 PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和E2PROM技术。还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。PLA器件既有现场可编程的,也有掩膜可编程的。在PAL的基础上又发展了一种通用阵列逻辑(GAL、Generic ArrayLogic),如GAL16V8、GAL22V10等。它采用了EPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。为了弥补这一缺陷,20世纪80年代中期,Altera和Xilinx分别推出了类似于PAL结构的扩展型CPLD(Complex Programmable Logic Dvice)和与标准门阵列类似的FPGA(FieldProgrammable Gate Array),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。与门阵列等其他ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品不需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产(一般在10 000件以下)之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。121.2 本课题的研究意义近年来EDA技术在电子领域引发的技术革命,推动着电子技术的迅猛发展,为世人所瞩目,而FPGA为代表的可编程逻辑器件的应用,更是受到业内人士的普遍关注。伴随着大规模集成电路和计算机技术的高速发展,在设计工业自动化,仪器仪表,计算机设计与应用、通信、国防等领域的电子系统中,FPGA技术的含量正以惊人的速度提升。将尽可能大的完整的电子系统在单一FPGA芯片中实现已成为现实,电子类新技术项目的开发也更多地依赖于FPGA技术的应用。作为FPGA研究课题之一的矩阵键盘控制接口电路的设计,在FPGA设计中是一个经常被提到的话题,就像是利用PFGA设计数字中一样,虽然简单,但是却是一个很有研究意义的话题,涉及到怎么样才能是FPGA资源更加充分利用,现在很多电子产品都涉及到按键,小的有独立按键,大的有N*N的矩阵键盘,独立按键由于案件的个数少,也就没必要考虑资源的利用问题了。而矩阵键盘,由于按键多,对整个系统的影响大,所以肯定要考虑资源的利用问题,而且还要考虑一下电路里面的时序问题。本次设计要求设计一个4*8矩阵键盘,也就是行为4,列为8,一共可以设计32个按键。其中设计方法为:一般判断键盘中有没有按键按下是通过航线送入扫描信号,然后从列线中读取状态得到的,其方法是依次给行线送入低电平,检查列线的输入。如果列线信号趣味高电平,则代表低电平信号所在的行中无按键按下,反之,则有,则在低电平信号所在的行和出现低电平的交叉处有按键按下。一共有三个模块,分别为:扫描电路模块、时钟产生模块、键盘译码电路和按键标志位产生电路。扫描模块中是为了产生扫描信号,来利用扫描信号来扫描键盘中中是否有按键按下。键盘译码电路和按键标志位产生电路是为了配合扫描模块来扫描电路中是否有按键按下,而且还要求它来产生按键标志信号,以便和外部电路握手。时钟产生电路是为了产生不同频率的信号,来驱动上面两个电路的运转。1.3 设计思路矩阵键盘及显示电路能够将机械式4×8矩阵键盘的按键值依次显示到8个7段数码管上,每次新的按键值显示在最右端的第O号数码管上,原有第06号数码管显示的数值整体左移到第17号数码管上显示。总体而言,矩阵键盘及显示电路的设计可分为4个部分:(1)矩阵键盘的行及列的扫描控制和译码。该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。(2)机械式按键的防抖设计。由于机械式按键在按下和弹起的过程中均有510 ms的信号抖动时间,在信号抖动时间内无法有效判断按键值,因此按键的防抖设计是非常关键的,也是该设计的一个重点。(3)按键数值的移位寄存。由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。(4)数码管的扫描和译码显示。由于该设计使用了8个数码管,因此需要对每个数码管进行扫描控制,并根据按键值对每个数码管进行7段数码管的译码显示。本章小结本章首先介绍了FPGA的发展史,主要介绍了一下FPGA的发展年代,以及是怎么样发展起来的。在第二节里面介绍了以下本文的研究意义,在研究意义里面介绍了一下矩阵键盘的设计方法以及本次设计的主要设计模块。最后介绍了一下设计思路。2. VHDL语言介绍与Quartus II 7.2软件介绍2.1 VHDL语言的介绍2.1.1 VHDL语言概述VHDL 语言的英文全名是 Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言。 HDL 发展的技术源头是:在 HDL 形成发展之前,已有了许多程序设计语言,如汇编、 C 、Pascal 、Fortran 、Prolog 等。这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述。 CAD 的出现,使人们可以利用计算机进行建筑、服装等行业的辅助设计,电子辅助设计也同步发展起来。在从 CAD 工具到 EDA 工具的进化过程中,电子设计工具的人机界面能力越来越高。在利用 EDA 工具进行电子设计时,逻辑图、分立电子原件作为整个越来越复杂的电子系统的设计已不适应。任何一种 EDA 工具,都需要一种硬件描述语言来作为 EDA 工具的工作语言。这些众多的 EDA 工具软件开发者,各自推出了自己的HDL 语言。 HDL发展的社会根源是:美国国防部电子系统项目有众多的承包公司,由于各公司技术路线不一致,许多产品不兼容,他们使用各自的设计语言,使得甲公司的设计不能被乙公司重复利用,造成了信息交换困难和维护困难。美国政府为了降低开发费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望 VHDL 功能强大、严格、可读性好。政府要求各公司的合同都用它来描述,以避免产生歧义。 由政府牵头, VHDL 工作小组于1981 年 6 月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL 。1983年第 3 季度,由 IBM 公司、 TI 公司、 Intermetrics。公司签约,组成开发小组,工作任务是提出语言版本和开发软件环境。1986 年 IEEE 标准化组织开始工作,讨论 VHDL 语言标准,历时一年有余,于1987 年 12 月通过标准审查,并宣布实施,即 IEEE STD 1076 - 1987LRM87。1993 年 VHDL 重新修订,形成了新的标准,即 IEEE STD 1076 - 1993LRM93。 从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用 VHDL 文档。即第一个官方VHDL标准得到推广、实施和普及。HDL 语言在国外有上百种。高等学校、科研单位、EDA公司都有自己的HDL语言。现选择较有影响的作简要介绍。 Candence 公司是一家著名的EDA公司,财力雄厚。该公司的 Verilog HDL于1983 年由Gate Way Design Automatic公司的Phil Moorby首创。他在1984-1985年间成功设计了Verilog-XL仿真器,于1986年提出了快速门级仿真的XL 算法,使Verilog HDL 语言变得更加丰富和完善,从而受到了EDA工具设计公司的青睐。1989年Candence公司购买了GDA公司,Verilog HDL语言从此变为Candence公司的“私有财产”成为 Candence公司的EDA 设计环境上的硬件描述语言。经过Candence公司的努力, Verilog HDL于1995年成为IEEE 标准,也是民间公司第一个硬件描述语言标准,即Verilog HDL 1364-1995。由于Verilog HDL语言从C语言发展来,所以有C语言基础的设计人员能够较快入门。 ALTERA 公司是一家半导体器件公司,其CPLD器件在世界市场上占主导地位。这家公司不仅是硬件生产厂商,也是EDA工具开发商,它的EDA工具MAX+plus II、Quartus由于人机界面友好、易于使用、性能优良,而受到FPGA、CPLD器件设计人员的欢迎。运行在MAX+plus II环境下的VHDL语言具有C语言设计风格,好学好用,因此被众多用户使用。 HDL语言来自不同地方,由不同语言演变而来,为了各平台之间相互转换,又推出了EDIF (Electronic Design Interchange Format)。它不是一种语言,而是用于不同数据格式的EDA 工具之间的交换设计数据。2.1.2 VHDL语言的优点传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计。采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便。为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发周期,各ASIC研制和生产厂家相继开发了具有自己特色的电路硬件描述语言(Hardware Description Language,简称HDL)。但这些硬件描述语言差异很大,各自只能在自己的特定设计环境中使用,这给设计者之间的相互交流带来了极大的困难。因此,开发一种强大的、标准化的硬件描述语言作为可相互交流的设计环境已势在必行。于是,美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门级电路,最后用PLD实现其功能。综合起来讲,VHDL语言具有如下优点:(1)VHDL 语言功能强大,设计方式多样。VHDL语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。(2)VHDL 语言具有强大的硬件描述能力。VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL语言的强大描述能力还体现在它具有丰富的数据类型。VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。(3)VHDL语言具有很强的移植能力。VHDL语言很强的移植能力主要体现在: 对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。 (4)VHDL语言的设计描述与器件无关。采用VHDL语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL语言允许采用多种不同的器件结构来实现。(5)VHDL语言程序易于共享和复用。VHDL语言采用基于库(library)的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。32.1.3 VHDL语言的基本结构一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、程序包(Package)和库(Library)5个部分。前4个部分是可分别编译的源设计单元。实体用于描述所设计的系统的外接口信号;构造体用于描述系统内部的结构和行为;程序包存放各种设计模块都能共享的数据类型、常数和子程序等;配置用于从库中选取所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、程序包和配置。库可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。2.2 Quartus II 7.2 (32-Bit)软件介绍Quartus II设计软件提供完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境。QuartusII 软件含有 FPGA 和 CPLD 设计所有阶段的解决方案 (图2-1)。设计输入功耗分析综合仿真时序分析布局布线调试工程更改管理时序逼近包括基于模块的设计、系统级设计和软件开发图2-1 QuartusII 软件含有 FPGA 和 CPLD 设计所有阶段的解决方案此外,Quartus II 软件为设计流程的每个阶段提供 Quartus II 图形用户界面、EDA工具界面以及命令行界面。可以在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同界面。本章介绍适用于每个设计流程的选项。图形用户界面设计流程:(图2-2 )功耗分析:l PowerPlay功耗分析器l PowerPla早期功耗估算器EDA接口:l EDA网表写入综合l 分析和综合l VHDL、Verilog HDL和AHDLl 设计助手l RTL查看器l 技术射影查看器l 渐进式综合基于模块的设计:l LogicLock 窗口l 时序逼近布局l VQM写入约束输入l 分配编辑器l 引脚规划器l 设置对话框l 时序逼近布局l 设计分区窗口系统级设计:l SOPC Builderl DSP Builder设计输入l 文本编辑器l 模块和符号编辑器l Megawizard插件管理器调试:l SignalTap 2l SignalProbel 在系统存储内容编辑器l RTL查看器l 芯片编辑器时序逼近:l 时序逼近布局l LogicLock窗口l 时序优化向导l 设计空间管理器l 渐进式编译布局布线:l 适配器l 分配编辑器l 时序逼近布局l 渐进式编译l 报告窗口l 资源优化向导l 设计空间管理器l 芯片编辑器时序分析l TimeQuest时序分析器l 标准时序分析器l 报告窗口l 技术映射查看器仿真:l 仿真器l 波形编辑器编程:l 汇编器l 编程器l 转换编程文件工程更改管理:l 芯片编辑l 资源属性编辑器l 更改管路图2-2 图形用户界面设计流程Quartus II 软件包括一个模块化编译器。编译器包括以下模块(标有星号的模块表示在完整编译时,可根据设置选择使用):u 分析和综合u 分区合并*u 适配器u 汇编器 *u 标准时序分析器和TimeQuest时序分析器*u 设计助手*u EDA网表写入器*u HardCopy® 网表写入器 *EDA 工具与 Quartus II 软件配合使用时的基本设计流程:(1)创建新工程并指定目标器件或器件系列。(2)指定与 Quartus II 软件一同使用的 EDA 设计输入、综合、仿真、时序分析、板级验证、形式验证以及物理综合工具,为这些工具指定其他选项。(3)使用标准文本编辑器建立 Verilog HDL 或者 VHDL 设计文件,也可以使用MegaWizard 插件管理器建立宏功能模块的自定义变量。(4)使用Quartus II支持的EDA综合工具之一综合您的设计,并生成EDIF网表文件(.edf)或 Verilog Quartus映射文件(.vqm)。(5)(可选)使用Quartus II支持的仿真工具之一对您的设计进行功能仿真。(6)在Quartus II软件中对设计进行编译。运行 EDA网表写入器,生成输出文件,供其他 EDA工具使用。(7)(可选)使用Quartus II支持的EDA时序分析或者仿真工具之一对设计进行时序分析和仿真。(8)(可选)使用Quartus II支持的EDA形式验证工具之一进行形式验证,确保Quartus布线后网表与综合网表一致。(9)(可选)使用Quartus II 支持的EDA板级验证工具之一进行板级验证。(10)(可选)使用Quartus II 支持的EDA物理综合工具之一进行物理综合。(11)使用编程器和 Altera 硬件对器件进行编程。本章小结本章开始介绍了VHDL语言的设计分格以及设计中注意的问题,然后又介绍了Quartus II软件的使用方法。在这里我再说一下国内发展的战略选择,由于目前IT行业快速发展,以及ASIC合了Avant!和CO-Design,Cadence合了GDA等,形成了几大巨头的局面。而各可编程器件厂商,像Xilinx和Altera,也积极与EDA紧密合作,针对目前硬件描述语言的发展和国家芯片制造生产的发展战略,国内如何在原EDA基础薄弱的情况下迅速发展,使EDA成为一个合理,健康而必比可少产业;将基础研究活动与独立产生的作用合理地结合,建议开展如下的工作:1. 为了实现我国的芯片设计自主化,必须夯实基础,再结合VHDL的基础上,推广Verilog HDL设计语言,使硬件设计的底层单元库可以自主研制。2. 根据目前芯片系统的发展趋势,对系统级语言进行比较研究,在Superlog,SystemC等语言中作出选则,并进行相关工具的推广,以及与相关企业进行合作等。3. 深入HDL语言的综合和仿真等模型的研究,努力在与国外合作的基础山,建立自主知识产权的EDA公司。3. 矩阵键盘接口电路的原理与总体设计3.1 矩阵键盘接口电路的原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(8键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的FPGA的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。行列式键盘的电路原理如图3-1所示。(为了说明问题以4*4为例)Keyin3Keyin2Keyin1Keyin0 FPGAKeydrv0Keydrv0Keydrv0Keydrv01523467890ABCDEF+5v图3-1 行列式键盘的电路原理如图设置扫描信号为keydrv3keydrv0,列线按键输入信号keyin3keyin0与按键位置的关系如表3-1所示。表3-1 扫描信号和列线按键输入信号与按键之间的关系表keydrv3keydrv0keyin3keyin0对应的按键111011101110121011301114110111105110161011701118101111109110101011A0111B01111110C1101D1011E0111F3.2 总体设计系统结构的总体设计键盘译码电路按键标志产生电路4*8键盘时钟产生电路扫描电路keyvaluekeypressedclkKeyin8.0Keydrv3.0图3-2 键盘接口电路结构图由行列式键盘原理就可以知道,要正确的完成键盘输入工作必须有按键扫描电路产生keydrv3keydrv0信号。同时还必须有按键译码电路从keydrv3keydrv0信号和keyin3keyin0信号中译码出按键的值。此外,一般还需要一个按键发生信号用于和其他模块接口,通知其他模块键盘上有按键动作发生,并可以从键盘上读取按键的键值。由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟信号。因此得到接盘接口电路的结构如上图所示。67本章小结本章首先介绍了一下矩阵键盘的设计思路,总体来说行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。最后介绍了一下4*8键盘的总体设计思路。4. 各模块的设计及仿真4.1 键盘扫描电路键盘扫描电路是用于产生keydrv3keydrv0信号,其变化的顺序依次是1110-1101-1011-0111-周而复始地扫描。其停留在某个状态的时间大约为10ms。更短的停留时间是没有必要的,因为人按键的时间大约为10ms,不可能有更快的按键动作发生;另外,更短的停留时间还容易采集到抖动信号,会干扰判断。而太长的停留时间则会使某些较快的按键东走丢失。键盘扫描电路的外部接口电路如图4-1所示,其中clk_scan是周期为10ms的扫描时钟,keydrv为输出到键盘的扫描信号,宽度为4位。图4-1 键盘扫描电路的外部接口电路图其VHDL描述如下:LIBRARY ieee;USE ieee.std_logic_1164.all;- Entity DeclarationENTITY key_scan IS- ALTERA_IO_BEGIN DO NOT REMOVE THIS LINE!PORT(clk_scan : IN STD_LOGIC; -扫描时钟,周期10mskeydrv : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -输出扫描信号以上程序采用一个状态机来实现扫描电路。该状态机是一个one-hot状态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来做输出译码。这样的好处是得到的输出信号比较“干净”,没有毛刺。其仿真波形如图4-2所示。图4-2 键盘扫描电路仿真图从图4-2中很容易发现present_state的值的变化是随着扫描信号key_scan的上升沿的到来而变化的,也就是key_scan每来一个脉冲,相应的present_state的值就变化一次。很容易发现keydrv的值的变化顺序为1110-1101-1011-0111,也就是每个key_scan来一个脉冲时,保证keydrv相邻的值只有一个变化,这样为了防止产生不必要的毛刺。present_state值和keydrv值是相同的,只不过一个用的二进制,一个用的是十进制,所以它的变化为1413117。4.2 键盘译码电路和按键标志位产生电路键盘译码电路是从keydrv3 keydrv0和keyin3keyin0信号中译码出按键的键值的电路,它的真值表就是以前行扫描信号、列扫描与按键位置的关系图。按键标志位产生电路是产生按键标志位信号keypressed的电路。由于这两个电路关系紧密,因此放入同一个模块中实现。其外部接口图如图4-3所示。其中clk为局信号,它是由FPGA芯片的外部晶振给出的。clk在系统中的频率是最高,其他时钟都是它的分频产生。keydrv为键盘扫描信号,keyin为键盘输入信号,keyvalue为键值(代表按键所在的位置),keypressed表示有一个按键被按下,每发生一次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲。该信号用于与其他模块握手,负责通知其他模块键盘是否有按键发生。其他模块在keypressed有效时,可以读取键值。图4-3 键盘译码电路的外部接口其VHDL实现如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY keydecoder ISPORT(clk : IN STD_LOGIC;-全局时钟clk_scan : IN STD_LOGIC; -扫描时钟 keyin : IN STD_LOGIC_VECTOR(8 DOWNTO 0);-键盘输入keydrv : IN STD_LOGIC_VECTOR(3 DOWNTO 0);-扫描信号keyvalue : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);-键值keypressed : OUT STD_LOGIC -有按键按下);END keydecoder;temp<=keyin & keydrv;-译码进程参见附录程序-按键标志产生电路process (clk_scan)beginif (clk_scan'event and clk_scan='1') thenq1<=temp_pressed;q2<=q1;q3<=q2;q4<=q1;end if;keypressed_asy<=q1 or q2 or q3 or q4 ;end process;上面程序是改进的程序,原程序是:-同步化有键被按下PROCESS(clk)BEGINIF(clk'event and clk ='1')THENq1<=temp_pressed;q2<=q1;END IF;keypressed<=q1 and not(q2) ;END PROCESS;ENDkeydecoder_architecture;在这里先介绍一下没有改进的程序。上面程序中有两个进程。第一个进程负责译码,值得注意的是WHEN OTHEN语句有没有对temp_pressed和keyvalue信号赋值,这相当于不改变temp_presed和keyv