科学技术学院
SCIENCE & TECHNOLOGY COLLEGE OF
NANCHANG UNIVERSITY
《专业综合实验与设计》报告
REPORT ON INTEGRATED EXPERIMENT & DESIGN
题 目 基于FPGA的电子密码锁设计
学科部、系: 信息学科部
专业班级: 06电子信息工程(3)班
学 号: **********
**** ***
指导教师: 胡保安 樊晓星
起讫日期: 2009-11-16——2009-11-27
基于FPGA的电子密码锁设计
第一章 设计目的
1.1 掌握并能设计一个电子技术综合问题,并在微型机上实现仿真;
1.2 能通过课程设计使我们熟练运用VHDL语言,基本掌握可编程器件的运用;
1.3 掌握各类计数器及将它们相连的方法;
1.4 掌握多个数码管动态显示的原理与方法;
1.5 掌握用FPGA技术的层次化设计方法;
第二章 设计任务
要求设计的电子密码锁密码为 4 位,包含数据输入键、数码清除键、密码更改键、激活电锁键、解除电锁键,各个键的功能如下:
1.1 数据输入键:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,并将先前已经输入的数据依序左移一个数字位置。
1.2 数码清除键:按下此键可清除前面所有的输入值,清除成为“0000”。
1.3 密码更改键:按下此键时将目前的数字设定成新的密码。
1.4 激活电锁键:按下此键可将密码锁上锁,上锁灯亮。
1.5 解除电锁键:按下此键会检查输入的密码是否正确,密码正确即开锁,开锁灯亮。
第三章 设计方案
由功能分析,该电子密码锁应由三大部分组成,每一部分又包含了若干子电路,将各电路组合起来,就构成了一个整体。下面分别对各部分进行讨论:
1.1 矩阵键盘接口电路的设计
实验仪器中 4×8 矩阵键盘的电路原理图如图一所示。
扫描信号为 BCOM[8..1],在BCOM[8..1]前已接有一个3-8 译码器,3-8 译码器的输入为SEL0~SEL3。当3-8 译码器的输入为“000”时,即BCOM1 为‘0’,其他位为‘1’,我们按下第一排第一键,此时KIN0 输出‘0’,KIN1~KIN3 输出全为‘1’,按下第二排第二键时,KIN1 输出‘0’,其他输出‘1’;当3-8 译码器输入为001 时,即BCOM2 为‘0’,我们按下第一排第二键,此时KIN0 输出‘0’,KIN1~KIN3 输出全为‘1’,同理其他键依此类推。
键盘上的每个按键就是一个开关,当某键被按下时,该按键的接点会呈现‘0’状态,反之为‘1’。扫描信号为SEL[2..0]进入3-8 译码器,再从译码器输出到键盘,所以第一次只能扫描一排,依此周而复始。按键位置与数码的关系如表一所示。
若从 KIN[3..0]输出的皆为‘1’时,表示没有按键按下,代表该列没有按键被按下,则不进行按键编码的操作,反之,如果有被按下时,则应将KIN[3..0]读出的值送到译码电路进行编码。
图一 4×8 矩阵键盘电路原理图
表一 按键位置与数码关系
SEL2~SEL0 | KIN3~KIN0 | 对应的按键 |
000 | 1110 | 0 |
1101 | 6 | |
1011 | LAST | |
0111 | CTRL | |
001 | 1110 | 1 |
1101 | 7 | |
1011 | STEP | |
0111 | EMPTY1 | |
010 | 1110 | 2 |
1101 | REG | |
1011 | C | |
0111 | EMPTY2 | |
011 | 1110 | 3 |
1101 | EXEC | |
1011 | D | |
0111 | EMPTY3 | |
100 | 1110 | MEM |
1101 | 8 | |
1011 | E | |
0111 | EMPTY4 |
101 | 1110 | ESC |
1101 | 9 | |
1011 | F | |
0111 | SHIFT | |
110 | 1110 | 4 |
1101 | A | |
1011 | NEXT | |
0111 | NONE | |
111 | 1110 | 5 |
1101 | B | |
1011 | ENTER | |
1110 | NONE |
1、 时钟产生电路
当一个系统中使用不同操作频率的脉冲波形时,最方便的方法就是利用一个自由计数器
来产生各种频率。本电路中就使用三种不同频率的工作脉冲波形。它们分别是:系统时钟(它
是系统内部所有时钟的提供者,频率最高)、弹跳消除取样信号、键盘扫描信号和七段显示器扫描信号。在很多的电路设计中,键盘扫描信号和七段显示器扫描信号可以使用相同的时钟信号,本设计也采用此方法。具体做法如下:
⑴ 先建立一个N 位的计数器,N 的大小由电路的需求所定。N 的值越大,分频的次数就越多,但所占用的空间也越大。
⑵ 若要得到一个脉冲波形信号,可以只取计数器中一个值,如使用CLK<=Q(4)语句,
其值变化为0-1-0-1-1……。
⑶ 若要得到脉冲波形序列,可以取计数器中的几个值,如使用CLK<=Q(4 DOWNTO 3)
语句,其值变化为00-01-10-11-00-01……。
2、 键盘扫描电路
扫描电路的作用是用来提供键盘扫描信号(表50-1 中的SEL2~SEL0)的电路,扫描信号的变化的顺序依次为000-001-010-011-100-101-110-111……依次的周而复始。扫描时依序分别扫描八列按键,当扫描信号为000 时,扫描0 这一列按键……每扫描一列按键,就检查一次是否有按键按下,如果这排有按键按下,就马上停止扫描,立即进行按键编码动作,存储键码,如果没有按键按下,则继续扫描下一列。
3、 弹跳消除电路
因为按键大多是机械式开关结构,在开关切换的瞬间会在接触点出现来回弹跳的现象,
对于激活关闭一般电器并不会有何影响,但对于灵敏度较高的电路,却有可能产生误动作而
出错。
弹跳现象产生的原因可用图二来说明。虽然只是按下按键一次然后放掉,然而实际产生的按键信号却不只跳动一次,经过取样的检查后将会造成误判,以为按键两次。
图二 弹跳现象产生错误的抽样结果
如果调整抽样频率(如图三),就可以发现弹跳现象获得了改善。
图三 调整抽样频率后得到的抽样结果
因此必须加上弹跳消除电路,避免误操作信号的发生。注意,弹跳消除电路所使用脉冲信号的频率必须比其它电路使用的脉冲信号的频率更高;通常将扫描电路或LED显示电路的工作频率定在24HZ 左右,两者的工作频率是通常的4倍或更高。
4、 键盘译码电路
上述键盘中的按键可分为数字键和功能键。
数字键主要用来输入数字,但从表二中发现,键盘所产生的输出KIN3~KIN0无法拿
来直接使用;另外不同的数字按键也担负不同的功能,因此必须由键盘译码电路来规划第个
按键的输出形式,以便执行相应的动作。
有了表二,要写出键盘译码电路的VHDL程序就非常容易了,尤其针对有表可以对照的电路设计,只要使用CASE-WHEN或WHNE-ELSE语句,便可轻松完成设计。
表二 键盘参数表
SEL2~SEL0 | KIN3~KIN0 | 对应的按键 | 键盘译码输出 | 按键功能 |
000 | 1110 | 0 | 00000 | 数字0 |
1101 | 6 | 00110 | 数字6 | |
1011 | LAST | 10100 | 功能键 | |
0111 | CTRL | 11000 | 功能键 | |
001 | 1110 | 1 | 00001 | 数字1 |
1101 | 7 | 00111 | 数字7 | |
1011 | STEP | 10101 | 功能键 | |
0111 | EMPTY1 | 11010 | 扩展1 | |
010 | 1110 | 2 | 00010 | 数字2 |
1101 | REG | 10010 | 功能键 | |
1011 | C | 01100 | 字母C | |
0111 | EMPTY2 | 11011 | 扩展2 | |
011 | 1110 | 3 | 00011 | 数字3 |
1101 | EXEC | 10011 | 功能键 | |
1011 | D | 01101 | 字母D | |
0111 | EMPTY3 | 11100 | 扩展3 | |
100 | 1110 | MEM | 10000 | 功能键 |
1101 | 8 | 01000 | 数字8 | |
1011 | E | 01110 | 字母E | |
0111 | EMPTY4 | 11101 | 扩展4 |
101 | 1110 | ESC | 10001 | 功能键 |
1101 | 9 | 01001 | 数字9 | |
1011 | F | 01111 | 字母F | |
0111 | SHIFT | 11001 | 功能键 | |
110 | 1110 | 4 | 00100 | 数字4 |
1101 | A | 01010 | 字母A | |
1011 | NEXT | 10110 | 功能键 | |
0111 | NONE | 11110 | 无定义 | |
111 | 1110 | 5 | 00101 | 数字5 |
1101 | B | 01011 | 字母B | |
1011 | ENTER | 10110 | 功能键 | |
0111 | NONE | 11110 | 无定义 |
1 判别是否有键按下。
2 若被按下的是数字键或字母键,则编码成相对应的16进制编码。
3 若被按下的是数字键,除进行16进制编码外,同时还编码成BCD码。
4 若按下是的功能键或其他按键,则编码成16进制编码。
5、 按键码存储电路
因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后记录下来。而按键存储电路可以用移位寄存器构成。键盘接口电路的引脚如图四所示:
图四 矩阵键盘接口模块引脚图
1.2 密码锁控制电路设计
密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的响应控制。
1、 数字按键的数字输入、存储及清除
如果按下数字键,第一个数字会从最右端的数码管开始显示,此后每新按一个数字键时,数码管上的数字必须左移到新一个数码管上,以便将新的数字显示出来,这个实验一共用到四个数码管来显示。如果按下清除键四个数码管都将清零,可以再重新输入密码。
2、 功能按键的功能设计
我们在这个实验中设计了四个功能键,这四个功能键包括数码清除键、密码更改键、⑴ 激活电锁键、解除电锁键。下面分别介绍这几个键的功能:
⑵ 数码清除键:按下此键可清除前面所有的输入值,清除成为“0000”。
⑶ 密码更改键:按下此键时将目前的数字设定成新的密码。
⑷ 激活电锁键:按下此键可将密码锁上锁。
⑸ 解除电锁键:按下此键会检查输入的密码是否正确,密码正确即开锁。
3、 移位寄存器的设计与控制
移位寄存器中的数据可以在移位脉冲作用下一次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。在这个实验中当我们输入第一个数字存在最右端的那个数码管中,在输入第二个数字时数码管中的数字就要进行左移到新一个数码管中。
4、 密码清除、变更、存储、激活电锁电路、密码核对、解除电锁电路
这些电路对密码锁来说非常重要,因为它是整个电路的控制中心,下面简单介绍一下这几个电路。它们分别是:
⑴ 密码核对:在密码更改,开锁之前必须先核对密码。
⑵ 密码变更:按下此键将目前输入的数字设定为新的密码。
⑶ 激活电锁:上锁,上锁之前必须先设定密码才能上锁。
⑷ 解除电锁:检查输入的密码是否正确,正确才开锁
⑸ 密码存储:存储已经输入的密码。
⑹ 密码清除:清除所有的密码,再重新输入新的密码。
1.3 输出七段显示电路的设计
在这个实验中。我们使用的是七段数码管显示数字。但输出的只是高低电平信号。无法显示出来,在这里要设置一个七段数码显示电路,对它进行译码。我们可以根据BCD七段译码器对输出的信号进行译码识别,然后将其输出。
表三 BCD七段译码器真值表
输入 | 输出 | 字形 | |||||||||
D | C | B | A | Fa | Fb | Fc | Fd | Fe | Ff | Fg | |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 2 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 3 |
0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 4 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 5 |
0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 6 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 7 |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 8 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 9 |
1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | A |
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | B |
1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | C |
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | D |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | E |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | F |
经过前期的准备工作之后,对这个实验的原理有了充分的了解,根据实验要求写出这个实验的设计方案,用VHDL语言把实验程序写出来。实验程序写出来了把它放到QuartusⅡ软件中进行软件仿真,再把它与EDA实验箱联合起来进行硬件仿真。就是把程序通过电脑下载到EDA实验箱中的那块芯片上,下载完成之后,我们就到实验箱中进行调试,看实验要求的功能能不能都体现出来。如果说所有的功能都能体现出来,说明该实验基本上成功。如果有些功能还不能体现出来,我们就要对实验进行分析,查看是否程序有没有问题,如果发现问题就对程序进行修改。如果发现不是程序问题就要查看是否是硬件问题,检查实验箱中的引脚线是否接错,发现有错就改正过来。直到实验的所有的效果出来为止。
第四章 硬件说明
本设计所需的硬件主要有:矩阵键盘、七段数码管、发光二极管(用来模拟电子锁,红灯亮为加锁,绿灯亮为解锁)、 FPGA。
第五章 电子密码锁的总体设计框图
图六 电子密码锁的框图
第六章 设计心得
为期两周的EDA课程设计,使我对EDA的认识又提高了一个层次,现在能够较为熟练使用QuartusⅡ,能够利用VHDL语言编写简单实用的小程序。这次EDA课程设计重点学习了电子密码锁部分程序的编写、调试、对QuartusⅡ软件的进一步熟练。在整个课程设计过程中,我查阅了大量的关于EDA的资料,特别是在网络上搜索到了大量关于硬件编程的资料。在为期两周的EDA课程设计过程中,我与同学互相学习与探讨,还有在老师的帮助下让我顺利完成了EDA课程设计。在此我衷心的感谢老师对我孜孜不倦的指导和帮助,同时也非常感谢给我大力支持的同学。
第七章 参考文献
【1】潘松 EDA实用教程(第三版) 科学出版社 (2006-09)
【2】甘登岱 EDA培训教程 机械工业出版社(2005-04)
【3】尹常永 EDA技术与数字系统设计 西安电子科技大学出版社(2004-8)
【4】EDA中国门户网站 http://www.edacn.net/
课程设计成绩评定表
专业班级:06电子信息(3)班 学号:7020906104姓名: 艾雷鸣
课题名称 | 基于FPGA的电子密码锁设计 | ||
设计任务与要求 | 要求设计的电子密码锁密码为 4 位,包含数据输入键、数码清除键、密码更改键、激活电锁键、解除电锁键,各个键的功能如下: 1、数据输入键:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值, 并将先前已经输入的数据依序左移一个数字位置。 2、数码清除键:按下此键可清除前面所有的输入值,清除成为“0000”。 3、密码更改键:按下此键时将目前的数字设定成新的密码。 4、激活电锁键:按下此键可将密码锁上锁。 5、解除电锁键:按下此键会检查输入的密码是否正确,密码正确即开锁。 6、其他功能键:可以根据需要设置其他的扩展键。 | ||
指导教师评语 | 评定成绩: 指导教师: | ||
课程小组意见 | 课程负责人: |