基于FPGA的键盘接口设计正文_第1页
基于FPGA的键盘接口设计正文_第2页
基于FPGA的键盘接口设计正文_第3页
基于FPGA的键盘接口设计正文_第4页
基于FPGA的键盘接口设计正文_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于FPGA的键盘接口设计专业:电子信息科学与技术系 作者:李先仙 指导老师:刘强摘要:现场可编程逻辑门阵列FPGA (Field Programmalbe Gate Array)具有掩膜可编程门阵列的通用结构,由逻辑功能块排成阵列组成,并由可编程的互联资源连接这些逻辑功能块以及相应的输入/输出单元来实现不同的设计。在电子产品中,键盘是最基本的输入设备,然而在应用中都采用通用的键盘扫描器件是不现实的,需要单独设计成专用的小键盘。随着电子技术和EDA (Electronic Design Automatic,电子设计自动化)技术的发展,大规模可编程逻辑器件PLD(Programmable Log

2、ic Device)、现场可编程门阵列FPGA完全可以取代大规模集成电路芯片,实现计算机可编程接口的功能,并可将若干接口电路的功能集成到一片PLD或FPGA芯片中。鉴于大规模PLD或FPGA的计算机接口电路不仅具有集成度高、体积小和功耗低等优点,而且还具有独特的用户可编程能力,从而实现计算机系统的功能重构。本文设计首先介绍行列式键盘的原理和应用,通过对其接口电路的详细分析;然后利用VHDL硬件描述语言和FPGA器件并采用模块化设计的方法完成了基于FPGA的行列式键盘接口电路的设计;最后通过计算机仿真,对本文设计的行列式键盘接口电路的正确性进行了验证。关键词:键盘;仿真;VHDL语言;FPGA;

3、模块化设计Based on FPGA Keyboard Connection DesignMajor:Electronic Information Science and Technology Author: Li Xianxian Instructor: Liu QiangAbstract: The Filed Programmmalbe Gate Array,shorted by FPGA,which has a mask-programmable gate array of generic structure and function blocks in the logic array

4、of line,through a programmable logic of internet resources connecting these function blocks and the corresponding input/output modules to achieve different design.In electronic products,the keyboard is the most basic input device,however,its unrealistic of using general keyboard scanning device in t

5、he application ,we need for the separate designing of the small keyboard. With the development of Electronic and EDA(Electronic Design Automatic)technology,Large Scale Integration chips can be replaced by PLD(Programmable Logic Device)and FPGA ,which can realize the function of the Programmable Inte

6、rface chips and feature a number of interface circuits integated into one of the PLD or FPGA chips.The computer interface circuit based on the technology of PLD and FPGA not only has the virtue of high integration,low volume and low power loss, but also has the unique programmable function,which can

7、 realize reconstruction of the function of computer system.The designing of this article first introduced the determinant keyboards theory and application,through to analysis its connection electric circuit in very great detail ,and then used VHDL hardware description language and FPGA device to com

8、plete FPGA-based determinant keyboard connection electric circuit design with modular design mathod.Fianally,through the method of simulations to verify the accuracy of the determinant keyboard connection electric circuit of the design.Key words: Keyboard; Simulalion; VHDL lauguage; FPGA; Modular de

9、sign前言键盘历史非常悠久,早在1714年,就开始相继有英、美、法、意、瑞士等国家的人发明了各种形式的打字机,最早的键盘就是那个时候用在那些技术还不成熟的打字机上的;到了20世纪中期,键盘又多了一个用武之地作为电脑的基本输入设备,用户通过它向计算机传递信息,它有机械式、电容式、电感式和薄膜式等多种形式,按获取按编码的方式,可分为编码键盘和非编码键盘;根据键盘插口方式分为AT接口键盘和PS/2接口键盘和USB接口键盘,其中AT接口键盘目前已基本被淘汰1。然而在应用中都采用通用的键盘扫描器件是不现实的,由可编程逻辑器件组成的数字电路系统中经常需要有输入/输出设备,以用来与用户更好地进行交互。现代

10、EDA(Electronic Design Automation,电子设计自动化)技术提供了一种很好的途径,利用VHDL硬件描述语言和FPGA器件可以很方便地构建键盘接口电路2。本文采用VHDL语言设计的基于FPGA的行列式键盘接口设计,行列式键盘是常用的输入/输出设备之一,它结构简单,携带方便,功耗低,能够适用于各种功率要求的场合,功能强大,能有效的提高利用I/O口的利用率。行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号,二是在按键闭合时如何防止抖动,三是如何判断为哪一个按键位动作,并对其进行译码。因此,要解决这些问题,把行列式键盘接口电路分为键

11、盘扫描电路、键盘译码电路、按键标志产生电路、时钟模块以及键盘顶层电路等四个模块来实现。首先利用VHDL硬件描述语言在FPGA芯片上实现键盘接口并利用仿真FPGA软件进行仿真;之后便可利用FPGA实验箱搭建相应的硬件电路,在硬件上实现键盘接口的一些基本功能。在Altera、Atmel等公司都推出了内嵌微处理器的FPGA,但由于价格、开发手段和方法等因素的影响,在未来一段较长的时间里,还是会更多的采用单片机与FPGA配合的方式设计系统,以发挥单片机的灵活性和FPGA的高速性3。1 VHDL和FPGA概述1.1 VHDL概述 VHDL的由来和特点VHDL是Very high speed integr

12、ated circuit Hardware Deseription Language的缩写,意思是非常高速集成电路的硬件描述语言,是HDL(Hardware Deseription Language,硬件描述语言)的一种。这是一项由美国国防部所支持的研究计划,目的是为了把电子电路的设计意义以文字或文件的方式保存下来,以便他人能轻易地了解电路的设计意义。由于VHDL电路描述语言所能涵盖的范围很广,从ASIC(Application Specific Integrated Circuit,专用集成电路)的设计到PCB(Printed Circuit Board,印刷电路板)系统的设计,VHDL电路

13、描述语言都能派上用场,所以VHDL语言毫无疑问地成为硬件设计工程师的必备工具4。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多方面具有硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(即端口)和内部(即设计实体的内部功能和算法完成部分)。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它的设计就可以直接调用这个实体5。这种将设计实体分成内、外两部分的概念是VHDL系统设计的基本点。具体特点如下:1) 与其它的硬件描述语言相比,VH

14、DL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模集成电路的重要保证。2) VHDL丰富的仿真语言和库函数,使得在大规模集成电路设计的早期就能查验出设计系统的功能可行性,可随时对设计进行功能仿真、时序仿真,使设计者在设计初期就可以对整个工程设计的可行性作出决策,从而缩短了设计周期,减少了研发成本。3) VHDL语句的行为描述能力和程序结构决定了它具有支持大规模集成电路设计的分解和对已有设计的再利用功能4。重复利用他人的IP (Intelligence Property core,知识产权核,一种正式注

15、册产权的电路设计)模块和软核(soft core)是VHDL的特色,设计不必各个都从头再来,只要在更高的层次上把IP模块利用起来,能达到事半功倍的效果。4) 对于VHDL完成的一个确定的设计,可以利用EDA工具(如MAX+PLUS)进行逻辑综合和优化,并自动把VHDL描述设计转换成门级网表。这种设计方式突破了传统门级设计中的瓶颈,极大地减少了电路设计的时间和错误发生率,降低了开发成本,缩短了设计周期。5) VHDL对设计的描述具有相对的独立性,设计者可以不懂硬件的结构,也不必关心最终设计的目标器件是什么而进行独立的设计。正因为VHDL的硬件描述与具体的工艺和硬件结构无关,VHDL设计程序的硬件

16、实现目标器件有广阔的选择范围。6) 由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的前提下,只需改变类属参数或函数,就能改变设计的规模和结构6。1.1.2 VHDL的描述风格在VHDL结构体中,可以用不同的描述方式或者说是建模方法来表达,通常可归纳为行为描述、寄存器传输RTL(Registers Transfer Language)描述和结构描述7。行为描述:行为描述只表示输入与输出间转换的行为,不包含任何结构信息。行为描述主要指顺序语句描述,即通常是指含有进程的非结构化的逻辑描述。RTL描述:也称为数据流描述,是以规定设计中的各种寄存器形式为特征,然后在寄存

17、器之间插入组合逻辑。RTL描述是建立在用并行信号赋值语句(进程)基础上的,RTL描述能比较直观地表达底层逻辑行为。它既含有逻辑单元的结构信息,又隐含表示某种行为,RTL描述主要是指非结构化的并行语句描述。结构描述:结构描述是基于元件例化或生成语句的应用,表示元件间的互连,其风格最接近实际的硬件结构。 VHDL基本程序结构一个相对完整的VHDL设计由以下几个部分组成:库、程序包;实体;结构体;配置;其各自作用如图1所示:图1 VHDL基本程序结构以上四个部分并不是每一个VHDL程序都必须具备的,其中只有一个实体和一个与之对应的结构体是必须的8。1)实体实体(ENTITY)是VHDL设计中最基本的

18、一个组成部分,VHDL表达的所有设计均与实体有关。实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只定义了该设计所需的全部输入输出信号。实体的语法格式如下:ENTITY实体名IS GENERIC (常数名:数据类型:设定值);- 表示可选项; PORT (列出设计的所有输入与输出); END 实体名;2)结构体所有能被仿真的实体都有结构体(ARCHITECTURE)描述,它描述了实体的结构或行为。在结构体描述中可采用行为描述、结构描述或数据流描述三种不同的描述方式(或称为建模方法),从不同的侧面描述结构体的行为方式。在实际应用中,为了兼顾整个设计的功能、资源、性能几方面的因素,通常

19、混合使用这三种描述方式。结构体的语法格式如下: ARCHITECTURE 结构名 OF 实体名 IS 说明语句 BEGIN 功能描述语句; END 结构体名9;1.2 FPGA概述FPGA(Field Programmable Gates Array)是现场可编程门阵列,FPGA既具有门阵列器件的高度集成度和通用性,又有可编程器件用户可编程的灵活性。所谓现场可编程,是指用户在自己的实验室内编程10。 FPGA结构和特点FPGA具有类似门阵列或类似ASIC的结构,既有门阵列的高逻辑密度和通用性,又有可编程器件的用户可编程性。它通常包含三类可编程资源:可编程逻辑功能块,可编程I/O块和可编程互联网

20、络。可编程逻辑功能块是实现用户功能的基本单元,它们通常排列成一个阵列,散布于整个芯片;可编程I/O块完成芯片上逻辑与外部封装引脚的接口,常围绕着阵列排列于芯片四周;可编程内部网络互连包括各种长度的连线线段和一些可编程连接开关,它们将各个可编程逻辑块或I/O块连接起来,构成特定功能的电路。不同厂家生产的FPGA在可编程逻辑块的规模、内部互连线的结构和采用的可编程元件上存在较大的差异,因而实现逻辑块的规模、内部互连线的结构和采用的可编程元件上存在较大的差异,因而实现逻辑功能的能力也不同。FPGA具有布线灵活,可用逻辑门数多,布线延迟不可预测的特点。FPGA一般用于逻辑仿真。设计师设计一个电子电路首

21、先要确定线路(也可以用HDL进行行为级描述,然后做逻辑综合),然后进行软件模拟及优化,以确认所设计电路的功能及性能。然后随着电路规模的不断增大,工作频率的不断提高,将会给电路引入许多分布参数的影响,而这些影响用软件模拟的方法较难直接反映出来,所以有必要做硬件仿真。FPGA可实现硬件仿真以做成模型机。将软件模拟后的线路经一定处理后下载到FPGA,就可很容易地得到一个模型机,根据这个模型机,设计师就可很直观地测试其逻辑功能及性能指标。目前已有一些优秀的EDA软件可将FPGA中的线路直接映射到标准单元库以制成版图,这样就保证了电路设计的正确性。FPGA门阵列中的每个节点不像CPLD是单独的门,而是用

22、门、触发器等做成的逻辑单元,并在各个单元之间预先制作了许多连线,所谓编程,就是安排逻辑单元与这些连线之间的关系,依靠连接点的合适配置,实现各逻辑单元之间的互联11。FPGA的主要特点是:寄存器数目多,采用查找表计数,适合时序逻辑设计。但是互连复杂。由于互连采用开关矩阵,因而使得延时估计往往不十分准确。它也有自身的局限性,其一就是器件规模的限制,其二就是单元延迟比较大。所以,在设计者选定某一FPGA器件后,要求设计者对器件的结构、性能作深入的了解,在体系结构设计时,就必须考虑到器件本身的结构及性能,尽可能使设计的结构满足器件本身的要求。这样就增加了设计的难度。离开对FPGA结构的详细了解,设计人

23、员就不可能优化设计,因而设计人员必须了解FPGA的特性和限制,熟悉FPGA的结构。在了解FPGA结构特点的基础上,就可以利用VHDL语言描写出高效的电路描述实现性能优化的电路12。 基于FPGA的数字集成电路设计过程基于FPGA的设计流程图如图2所示:功能时序仿真设计输入定时分析设计编译器件编程设计规划在线仿真形成产品设计修改图2 基于FPGA的设计流程图1)设计输入设计输入就是设计者对逻辑器件的逻辑功能描述。设计输入通常采用图形输入和VHDL文本输入方式。在设计输入过程中,往往采用层次化设计方法,分模块、分层次地进行设计描述。描述器件总功能的模块放在最上层,称顶层设计;描述器件最基本功能的模

24、块放在最低层,称低层设计;一般在顶层设计中采用图形输入法来描述模块连接关系;在低层设计中采用HDL文本输入法描述模块的逻辑功能。2)项目编辑为完成对设计的处理,MAX+PLUSll提供了一个完全集成的编译器(Compiler),可直接完成从网表提取到最后编程文件的生成。在编译过程中生成一系列标准文件可进行时序模拟、适配等。在编译过程中,若某部个环节出错,编译器会停下来,并告诉错误的原因及位置,直到编译通过。3)项目校验完成对设计的功能、时序仿真及进行时序分析、寄存器性能分析。4)项目编程将设计的项目下载/配置到所选择的器件FPGA中。由FPGA的设计流程可知,采用VHDL语言进行FPGA设计或

25、利用FPGA进行ASIC前端设计的功能验证,主要工作是系统模块的划分、对各个模块RTL(Registers Transfer Language)级可综合VHDL语言的描述、功能及时序的仿真,至此仅完成了系统软件上的仿真。由于仿真激励文件的不完善,所以时序仿真的通过并不代表加载到FPGA片中的成功,只有真正通过了FPGA的硬件调试,才是系统设计的真正成功6。2 行列式键盘介绍2.1行列式键盘概述为了减少键盘与单片机接口时所占用I/O口线的数目,在键数较多时,通常都将键盘排列成行列矩阵式,行列式键盘又叫矩阵式键盘。用带有I/O口的线组成行列结构,按键设置在行列的交点上。例如用2*2的行列结构可以构

26、成4个键的键盘,4*4的行列结构可以构成有16个键的键盘。这样,当按键数量平方增长时,I/O口线只是线性增长,这样就可以节省I/O口线。2.2行列式键盘原理行列式键盘的电路原理图如图3所示 图3 行列式键盘电路原理图按键设置在行列线交叉点,行、列线分别连接到按键开关的两端。列线通过上拉电阻接+5V的电压,即列线的输出被钳位到高电平状态。行线与按键的一个引脚相连,列线与按键的另一个引脚相连。判断键盘中有无按键按下是通过行线送入扫描信号,然后从列线读取状态得到的。其方法是依次给行线送低电平,检查列线的输入。如果列线信号全为高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则低电

27、平信号所在的行和出现低电平的列的交点处有按键按下。设行扫描信号为keydrv3keydrv0,列线按键输入信号keyin3keyin0与按键位置的关系如表1所示。表1 行扫描信号、列按键输入信号与按键位置的关系keydrv3keydrv0keyin3keyin0对应的按键111011101110121011301114110111105110161011701118101111109110101011A0111B01111110C1101D1011E0111F3 键盘电路与FPGA接口实现3.1系统结构和模块划分图4 键盘接口电路结构图由行列式键盘的原理可以知道,要正确地完成按键输入工作必须有

28、按键扫描电路产生keydrv3keydrv0信号。同时还必须有按键译码电路从keydrv3keydrv0信号和keyin3keyin0信号中译码出按键的键值。此外,一般还需要一个按键发生标志信号用于和其他模块接口,通知其它模块键盘上有按键动作发生,并可以从键盘模块中读取按键键值。由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟信号。因此得到键盘接口电路的结构如图4所示。行列式键盘电路的FPGA实现主要解决三个问题,一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。因此,要解决这些问题

29、,把行列式键盘接口电路分为键盘扫描电路、键盘译码电路和按键标志产生电路、时钟模块以及键盘顶层电路等四个模块来实现.具体流程图如图5所示13。图5 行列式键盘接口程序流程图3.2键盘扫描电路模块键盘扫描电路的原理键盘扫描电路是用于产生keydrv3keydrv0信号,其变化的顺序依次为1110110110110111周而复始地扫描。其停留在每个状态的时间大约为10ms。更短的停留时间是没有必要的,因为人按键的时间大约为10ms,不可能有更快的按键动作发生;另外,更短的停留时间还容易采集到抖动信号,会干扰判断。而太长的停留时间则容易丢失某些较快的按键动作。 图6 键盘扫描电路外部接口3.2 2键盘

30、扫描电路的语言描述及仿真键盘扫描电路的VHDL语言描述见附录1。该程序采用一个状态机来实现扫描电路。该状态机是一个one-hot状态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来做输出译码。这样做的好处是得到的输出信号比较“干净”,没有毛刺。其仿真波形如图7所示。图7 键盘扫描电路仿真图3.3键盘译码电路和按键标志产生电路模块键盘译码电路和按键标志产生电路原理键盘译码电路是从keydrv3keydrv0和keyin3keyin0信号中译码初按键键值的电路,它的真值表见表1所示。按键标志产生电路是产生按键标志信号keypressed的电路。由于这两个电路关系紧密,因此放入同一个模块中实现

31、。其外部接口如图8所示。图8 键盘译码电路的外部接口其中clk为全局时钟信号,它是由FPGA芯片的外部晶振给出的。clk在系统中的频率是最高的,其它时钟都由有它分频产生;clk_scan是用于产生扫描信号的时钟信号的,周期为10ms。keydrv为键盘扫描信号,keyin为键盘输入信号,keyvalue为键值(代表按键所在位置),keypressed表示有一个按键被按下,每发生一次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲。该信号用于与其它模块握手,负责通知其它模块键盘上有按键发生。其它模块在keypressed有效时,可以读取键值。functionkey信号是表明按键

32、是否为功能键(键A、B、C、D、E和F为功能键)的。functionkey信号的作用(在很多电路中)是需要区分按键是数字键还是功能键。当按键是功能键时,functionkey为高电平,否则为低电平。键盘译码电路和按键标志产生电路的语言描述及仿真键盘译码电路和按键标志产生电路的VHDL语言描述见附录2。该程序中有三个进程,第一个进程负责译码,值得注意的是WHEN OTHER语句中有没有对temp_pressed和keyvalue信号赋值,这相当于不改变temp_pressed和keyvalue信号的值,即实现了锁存输出。在不需要锁存输出时,在WHEN OTHER语句中,一定要对所有case语句中

33、出现的信号逐一赋值,以免产生意想不到的结果。第二个进程是负责按键标志产生电路模块,其敏感信号clk_scan是用于产生扫描信号的时钟,周期为10ms。按键信号temp_pressed首先通过clk_scan信号的上升沿采样。通过采样后,抖动噪声被消除。采样后的信号被分别延迟14个clk_scan周期得到4个信号进行或运算得到一个宽约80ms并且与全局时钟一步的按键信号keypressed_asy。这样,一个长时间的按键过程有可能被认为是多次按键,通过这种方法使得一个长时间的按键仍然被认为是一次按键。第三个进程负责把按键同步信号同步化为与全局时钟同步的并且脉宽为一个周期的脉冲14。该电路的仿真结

34、果如图9所示。图9 键盘译码电路仿真波形通过仿真波形图可以看出,按键动作的抖动不会影响输出的结果;无论一个按键动作持续多久的时间,仍然会被认为是一次按键。3.4时钟产生模块时钟产生模块原理时钟产生模块是用于产生扫描时钟的,它的输出提供给键盘扫描模块和按键标志产生模块,其外部接口如图10所示。它的输入是全局时钟,在这里假设全局时钟频率为12MHz。它的输出是周期为100ms的扫描时钟。 图10 时钟产生模块外部接口时钟产生模块的语言描述及仿真时钟产生模块的VHDL语言描述见附录3。该程序主要包含有一个计数器模块和一个译码输出模块,该程序是通过计数器模块实现分频的。要从12MHz的全局时钟得到10

35、0Hz的时钟,必须进行120000倍的分频。这么大的分频需要仿真时间太久。仿真时一般采用小的分频来替代,(在本程序中采用200分频来仿真)以方便快速观察到结构。等到真正下载到电路上时,就需要采用1200000分频了。另一点值得注意的是译码器的输出采用了寄存器锁存输出,这是为了消除毛刺。多输入的组合逻辑电路中,某些输入信号在理想情况下应该同时发生变化,但由于延迟路径不同造成这些输入信号发生变化的时间有微小差别(门延迟时间量级),这时得到的输出信号就会有毛刺,这些毛刺有可能会给下一级电路带来问题,使得整个系统运行不稳定。因此,为保证系统的稳健性,一般情况下,都应该给输出信号消去毛刺,是之变得干净。

36、在本程序中,译码器的输入是计数器的输出,计数器各级输出延迟是不一样的,因此译码器输出clk_scan信号波形就会有毛刺。解决毛刺的方法有两种:1)设法使得组合逻辑电路的输入每一时刻只有一个发生变化。在本例中就是把计数器从二进制码改为格雷码(Gray Code)计数器。格雷码计数器的特点是相邻的计数值只有一位不同,即每次计数值改变时,只有一位信号会发生变化。这一特点就可以保证没有毛刺产生15。2)把有毛刺的信号通过时钟采样,即通过一个D触发器。本例中就是使用这种方法。这种方法的缺点是信号通过一个D触发器后,就延迟了一个时钟周期。在本例中这种延迟是允许的,然而在有些电路中延迟是不允许的。该电路的仿

37、真结果如图11所示。图11 时钟产生模块仿真波形图3.5键盘接口电路顶层电路实现键盘接口电路顶层电路实现原理键盘接口电路的顶层电路比较简单,基本上只是把键盘扫描模块、键盘译码且按键标志产生模块和时钟产生模块连接起来,其结构如图12所示。图12 键盘接口电路图键盘接口电路顶层电路的语言描述及仿真键盘接口电路的VHDL语言描述见附录4。仿真波形如下图13所示:图13 键盘接口电路仿真波形4 结束语经过几个月的努力,我终于完成了对本论文的编写。其中包括研究课题的提出、国内外发展动态的调研、资料的收集、方案的论证、软硬件的设计与调试和最后的测试。本文论述了基于FPGA的键盘接口设计,先介绍VHDL和F

38、PGA的相关知识,然后以行列式键盘为例,介绍了行列式键盘的基本原理及其电路模块的划分,并详细叙述了键盘扫描电路、键盘译码电路、按键标志产生电路、时钟模块以及键盘顶层电路等四个模块的原理及实现过程。在设计中,利用VHDL硬件描述语言在FPGA芯片上实现键盘接口设计并利用仿真FPGA软件进行仿真,主要解决了三个问题:一是如何检测是否有按键按下并防止采集到干扰信号;二是在按键闭合时如何防止抖动;三是如何判断为哪一个按键位动作,并对其进行译码。由于本人的理论水平和实践经验有限,错误在所难免,敬请给予批评和指正。5 参考文献:1杨勇 刘佩军主编微型计算机接口技术(第3版)M电子工业出版社,2005,13

39、5-1422张海劲 刘强 蔡桂玲用VHDL语言开发可编程逻辑器件J光电技术应用,2003,03:16-183田源基于VHDL语言实现FPGA设计J火控雷达技术2004,01:58-604曾繁泰 陈美金主编VHDL程序设计M清华大学出版社,2000,2-165张晓军 解大 陈陈VHDL语言在电子设计自动化中的应用J电力自动化设备2002,05:32-336韩进基于FPGA的计算机可编程外围接口芯片的设计与实现D山东科技大学,2003:5-87周彩宝 刘应学VHDL语言及其应用J计算机工程1998,10:64-658吴建国 张建勋VHDL综合系统若干问题处理方法J安徽大学学报,2002,02:18

40、-239刘淑荣 蒋彬基于VHDL语言的数字电路设计J长春工程学院学报,2002,04:60-6110王开军 姜宇柏主编面向CPLD/FPGA的VHDL设计M机械工业出版社,2007,143-14811罗朝霞 高书莉主编CPLD/FPGA设计及应用M人民邮电出版社,2007,10-4612罗旻 沈绪榜 高德远FPGA的VHDL设计策略J小型微型计算机系统2003,07:1194-119613吕文浩 李玉惠 李勃基于FPGA的行列式键盘接口电路设计J仪器仪表用户2007,05:64-6514求是科技CPLD/FPGA应用开发技术与工程实践M人民邮电出版社,2005,368-37015蒋毅可编程逻辑

41、器件的应用参考J世界电子元器件2005,09:30-326 致谢在做毕业论文的几个月中,我的指导老师和同学不但对我的论文提出了宝贵的意见,而且在各方面都给我很大的支持,使我的论文顺利完成初稿并进入复稿阶段。首先在这里我要感谢我的指导老师刘强,他不但给我论文思路上的提示,而且帮助我搜集了大量的资料,使我论文的原材料丰富而不复杂,同时他耐心的指导我们在硬件和软件方面的知识,才使我的论文比较顺利的完成,他渊博的知识,耐心的指导,以及务实的研究态度,使我深受感动。在此,我也要感谢教过我的老师,是他们传授我知识,才能有今天这篇论文的产生,他们在四年不但传授我知识,而且也给我不少人生的指点。同时我要感谢我

42、的同学,他们给我莫大的支持,在我做论文期间,和我一起讨论,给我的论文提了宝贵的意见。最后,我想感谢大学里一切帮助过我的人,没有他们的帮助,我不可能顺利地毕业,正因为有了这么多帮助我的人,我才能走到今天。衷心地祝福每个人事事顺心,幸福。附录1键盘扫描电路的VHDL描述语言LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY keysan ISPORT( clk_scan:IN STD_LOGIC; -扫描时钟,周期10ms keydrv: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -输出扫描信号END keysan;ARCHIT

43、ECTURE behavier OF keysan IS CONSTANT s0: STD_LOGIC_VECTOR(3 DOWNTO 0):="1110" -定义状态机编码 CONSTANT s1: STD_LOGIC_VECTOR(3 DOWNTO 0):="1101" CONSTANT s2: STD_LOGIC_VECTOR(3 DOWNTO 0):="1011" CONSTANT s3: STD_LOGIC_VECTOR(3 DOWNTO 0):="0111"SIGNAL present_state: S

44、TD_LOGIC_VECTOR(3 DOWNTO 0); -状态机现态SIGNAL next_state: STD_LOGIC_VECTOR(3 DOWNTO 0); -状态机次态BEGIN-状态更新进程PROCESS(clk_scan)BEGIN IF(clk_scan'event and clk_scan='1')THEN present_state<=next_state; END IF;END PROCESS;-状态译码PROCESS(present_state)BEGIN CASE present_state IS WHEN s0=>next_st

45、ate<=s1; WHEN s1=>next_state<=s2; WHEN s2=>next_state<=s3; WHEN s3=>next_state<=s0; WHEN OTHERS=>next_state<=s0; END CASE;END PROCESS;-输出译码keydrv<=present_state;END behavier;附录2键盘译码电路和按键标志产生电路的VHDL描述语言LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE. std_logic_arith.AL

46、L;ENTITY keydecoder_deb ISPORT( keyin:IN STD_LOGIC_VECTOR(3 DOWNTO 0); -键盘输入keydrv: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -扫描输出clk: IN STD_LOGIC; -全局时钟 ck_scan: IN STD_LOGIC; -扫描时钟keyvalue: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -键值keypressed: OUT STD_LOGIC; -有按键被按下标志functionkey: OUT STD_LOGIC); -功能键标志END key

47、decoder_deb;ARCHITECTURE rtl OF keydecoder_deb ISSIGNAL temp: STD_LOGIC_VECTOR(7 DOWNTO 0);-用于产生KEYPRESSEDSIGNAL temp_pressed: STD_LOGIC;-6个寄存器SIGNAL q1,q2,q3,q4,q5,q6: STD_LOGIC;-同步化的keypressedSIGNAL keypressed_asy:STD_LOGIC;BEGIN temp<=keydrv&keyin; -译码进程PROCESS(temp)BEGINCASE temp IS WHEN&

48、quot;11101110"=>keyvalue<=CONV_STD_LOGIC_VECTOR(1,4); temp_pressed<='1' functionkey<='0' WHEN"11101101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(2,4); temp_pressed<='1' functionkey<='0' WHEN"11101011" =>keyvalue<=CONV_ST

49、D_LOGIC_VECTOR(3,4); temp_pressed<='1' functionkey<='0' WHEN"11100111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(4,4); temp_pressed<='1' functionkey<='0' WHEN"11011110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(5,4); temp_pressed<='1

50、' functionkey<='0' WHEN"11011101" =>keyvalue<=CONV_STD_LOGIC_VECTOR(6,4); temp_pressed<='1' functionkey<='0' WHEN"11011011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(7,4); temp_pressed<='1' functionkey<='0' WHEN"

51、11010111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(8,4); temp_pressed<='1' functionkey<='0' WHEN"10111110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(9,4); temp_pressed<='1' functionkey<='0' WHEN"10111101" =>keyvalue<=CONV_STD_LO

52、GIC_VECTOR(0,4); temp_pressed<='1' functionkey<='0' WHEN"10111011" =>keyvalue<=CONV_STD_LOGIC_VECTOR(10,4); temp_pressed<='1' functionkey<='1' WHEN"10110111" =>keyvalue<=CONV_STD_LOGIC_VECTOR(11,4); temp_pressed<='1' functionkey<='1' WHEN"01111110" =>keyvalue<=CONV_STD_LOGIC_VECTOR(12,4); temp_pressed<='1' functionkey<='1' WHEN"01111101" =>keyvalue<=CONV_S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论