当前位置:文档之家› EDA键盘扫描

EDA键盘扫描

1 绪论VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。

此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。

现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。

有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

FPGA(Field Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA的使用非常灵活,同一片FPGA通过不同的编程数据可以产生不同的电路功能。

FPGA在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛应用。

随着功耗和成本的进一步降低,FPGA还将进入更多的应用领域。

本设计采用VHDL硬件语言的模块化思想,设计了PS2键盘扫描模块,七段LED动态显示模块以及16*16点阵显示模块。

2 课程设计指标主要内容:在本课程设计中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35开发板PS2键盘接口等资源,实现一个键盘驱动程序。

基本技能掌握:1 掌握键盘扫描程序的设计2 掌握键盘扫描码的显示基本功能要求1 利用外接键盘实现键盘按键的选择2 利用8位动态七段码管显示实现按键扫描码的显示扩展功能选择性要求1 利用16*16点阵显示实现按键字符的显示3 系统主题设计3.1、总体设计思路本课程设计全部采用VHDL硬件描述语言,本设计所采用的平台是基于NIOSII-EP3C40核心板为核心的Altera CycloneIII器件的一款嵌入式系统开发平台,主核芯片为Altera Cyclone III EP3C80F780C8 FPGA利用SOPC-NIOSII-EP2C35开发板PS2键盘接口等资源,实现一个键盘驱动程序。

总体设计如下图:图1 键盘驱动总体设计图3.2、PS2键盘扫描模块设计3.2.1 PS2时序逻辑PS2通信协议是一种双向同步串行通迅协议。

通迅的两端通过CLOCK(时钟信号端)同步,并通过DATA(数据端口)交换数据。

任何一方如果想要抑制另外一方的通迅时,只需要把CLOCK拉到低电平。

PS2标准,规范每笔数据传输包含起始位(start bit)、扫描码(scan code)、奇同位检查(odd parity)、以及终止位(stop bit)共计11位,并以双向串行数据传输的方式,达到通信的目的。

且当主机端(host)或从机端(slave)并无传送或接收数据时,数据传输端口及频率均将升为高电位。

图16-1所示为每一笔数据传输所包含之内容如下:Start:起始位,总为‘0’(低电平)Data0~Data7:8位数据位(低位在前,高位在后)Parity:奇偶校验位(为奇校验)Stop:停止位,总为‘ 1’(高电平)图2显示了PS2 串行传输的时序逻辑。

图2 PS2 串行传输标准3.2.2 PS2接口的物理特性PS2控制接口仅使用到两条传输端口,一为频率端口,另一则为数据端口如图3所示,且此传输埠必为三态(Tri-State)并具有双向(bidirectional)特性。

PS2 传输产品上,常见为鼠标与键盘,两者的驱动原理均相同,仅扫描码(scan code)不同。

Male (Plug)Female(Socket)6-pin Mini-DIN (PS2):1 - Data2 - Not Implemented3 - Ground4 - Vcc (+5V)5 - Clock6 - Not Implemented 图 3 PS2 端口脚位定义数据包的结构键盘的状态每改变一次,键盘至少会发出三个字节的数据包,在有键按下时会向主机发送该键的通码(Make Code),当键释放时发送断码(Break Code)。

例如:键“ A”的通码为0x1C,键“A”的断码为:0xF0, 0x1C,因此当要传送键“ A”时,键盘发送的数据包的代码是:0x1C,0xF0, 0x1C。

具体通码与断码参考附录A3.2.3 PS2键盘扫描程序设计键盘扫描程序设计采用了自上而下的模块设计方法,考虑需要设计以下几部分模块:串转并模块,判断控制模块、分拣接收模块,判断发送模块等。

这几部分的逻辑关系如图 4所示:图4 逻辑关系图键盘扫描程序是整个设计的核心,其设计流程图如下:图5 键盘扫描程序流程图具体程序设计见附件3.3、七段LED数码管模块设计3.3.1七段LED数码管七段数码管是电子开发过程中常用的输出显示设备。

在实验系统中使用的是两个四位一体、共阴极型七段数码管。

其单个静态数码管如下图4-1所示。

图6 静态七段数码管由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

数码管显示模块的电路原理如图4-2所示,表4-1是其数码管的输入与FPGA的管脚连接表。

图7 数字时钟信号模块电路原理3.3.2七段LED程序设计七段LED数码管的显示采用动态扫描方式,如图显示,八个七段LED的位选采用3-8译码器提供位选信号,数字时钟选择1KHZ作为扫描时钟,此时,由于每个灯闪烁的间隔时间低于人肉眼的最低分辨间隔,所以看得的八个数码管都显示着数据,程序设计流程图如下图所示:图 8 七段数码管动态显示流程图3.4、16*16点阵显示模块3.4.1 16*16点阵原理16*16点阵由此256个LED通过排列组合而形成16行*16列的一个矩阵式的LED阵列,俗称16*16点阵。

单个的LED的电路如下图13-1所示:图13-1 单个LED电路图由上图可知,对于单个LED的电路图当Rn输入一个高电平,同时Cn输入一个低电平时,电路形成一个回路,LED发光。

也就是LED点阵对应的这个点被点亮。

16*16点阵也就是由16行和16列的LED组成,其中每一行的所有16个LED的Rn端并联在一起,每一列的所有16个LED的Cn端并联在一起。

通过给Rn输入一个高电平,也就相当于给这一列所有LED输入了一个高电平,这时只要某个LED的Cn端输入一个低电平时,对应的LED就会被点亮。

具体的电路如下图13-2所示:图9 16*16点阵电路原理图当我们选中第一列后,根据要显示汉字的第一列中所需要被点亮的点对应的Rn置为高电平,则在第一列中需要被点亮的点就会被点亮。

依此类推,显示第二列、第三列……第N列中需要被点亮的点。

然后根据人眼的视觉原理,将每一列显示的点的间隔时间设为一定的值,那么我们就会感觉显示一个完整的不闪烁的汉字。

同时也可以按照这个原理来显示其它的汉字。

下图11-4是一个汉字显示所需要的时序图:图10 显示时序图在上图中,在系统时钟的作用下,首先选取其中的一列,将数据输入让这列的LED 显示其数据(当为高电平时LED发光,否则不发光)。

然后选取下一列来显示下一列的数据。

当完成一个16*16点阵的数据输入时,即列选择计数到最后一列后,再从第一列开始输入相同的数据。

这样只要第一次显示第一列的数据和第二次显示第一列的数据的时间足够短,那么人的眼睛就会看到第一列的数据总是显示的,而没有停顿现象。

同样的道理其它列也是这样,直到显示下一个汉字。

在实际的运用当中,一个汉字是由多个八位的数据来构成的,那么要显示多个汉字的时候,这些数据可以根据一定的规则存放到存储器中,当要显示这个汉字的时候只要将存储器中对应的数据取出显示即可。

本实验的示例程序依次显示的是“欢迎使用嵌入式SOC开发系统”。

数据量不大,所以没有放入存储器中,而在程序中直接输入对应的一个16位的数据。

示例程序的字库数据的格式如下图13-5所示:图11 字库格式3.4.3 实验点阵原理图在此实验中,16*16点阵由4个8*8点阵组成,考虑到LED电流功耗与FPGA电流功耗的关系,在实验的电路中加入驱动电路。

具体电路如下图13-6所示。

与FPGA的管脚连接如表13-1所示。

图12 16*16点阵电路图3.4.4 16*16点阵显示程序设计16*16点阵的程序流程图如下:图1316*16点阵的程序流程图4 仿真与调试分析5 课程设计总结回顾起此次课程设计,我仍感慨颇多。

从理论到实践,在整整两星期的日子里,可以说得是甜中苦更多,但是确实学到很多很多的东西。

不仅巩固了以前所学过的知识,为接下来的数电考试作准备,而且拓展了知识面,也算大开眼界了。

通过这次课程设计使我懂得了理论与实际相结合是最重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

设计过程中说不遇到困难那是吹牛皮,这毕竟第一次做的,就算不是第一次,我想也还是会有不小麻烦,在电子的世界中怎么学都不为过。

同时在设计过程中也发现了自己很多不足之处,比如对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这些都值得我们去思考。

此次电子课程设计,我为此投入了最大的热情和精力,从到处找资料,求助学长到自己设计电路图,选择元器件,使用EWB仿真电路,每一个过程都经过我们的共同探讨,其过程中出现了不少矛盾,但在学问面前一切都显得不重要。

相关主题