基于FPGA的多功能密码锁的设计
扫描二维码
随时随地手机看文章
摘要:本文设计的基于FPGA的电子密码锁,具有记忆和修改6位密码、输入密码位数指示及防止多次试探密码等功能,与银行卡的原理和功能极其相似,使得密码锁的保密和安全性能进一步增强。最后,给出了在Quartus II软件开发平台上实现密码锁各项功能的仿真图,并在FPGA芯片EP1K30TC144-3上通过了验证。
关键词:现场可编程门阵列;超高速集成电路硬件描述语言;密码锁
0 引言
电子密码锁能保护用户的重要资料不被非法用户所窃取,目前使用的电子密码锁大多以单片机为控制器,通过运行程序完成密码锁的各项功能。由于受到外部干扰的影响,单片机很容易将程序“跑飞”,因而可靠性较差。仿照银行卡输入密码的原理,本文介绍了一种基于FG-PA的多功能密码锁的设计和实现方案,由于采用纯硬件实现,使得可靠性和安全性大大提高。
1 电子密码锁的功能要求
设计的密码锁至少具有下列功能:
(1)6位密码,与银行卡密码位数相同;
(2)每位密码采用十六进制数,与十进制数密码相比,密码被破译的概率大大降低;
(3)每位密码按下时,有密码位数指示,类似自动取款机输入密码时有“*”号提示;
(4)密码输入过程中密码有误时,能对已经输入的密码清除以便重新输入密码;
(5)6位密码输入都正确后,应有开锁指示,上锁时也应有上锁指示;
(6)密码连续三次输入错误,密码锁死锁,并开启报警,防止窃贼多次试探密码;
(7)初始密码默认为“123456”,密码可以修改,在密码锁打开状态下,再一次输入正确的旧密码及两次输入的新密码一致时,密码才能修改成功。
2 密码锁的系统构成
根据密码锁具有的功能,可将其实现的功能划分成分频模块、键盘和数码管扫描模块、按键抖动消除模块、按键编码模块、键值到7段数码管译码显示模块和主控制模块等6个子模块,如图1所示。
(1)分频模块。它对系统的主时钟进行分频,以产生4×8小键盘的列扫描信号和6位数码管的列扫描信号所需要的时钟。分频是因为消除按键抖动的计数器时钟要比分频后扫描时钟高得多。
(2)键盘和数码管扫描模块。它检测到分频输出信号的上升沿到来时,就对扫描的列加1,当扫描到最后一列即第7列,再从第0列开始扫描。当检测到有键按下的扫描控制信号时,则停止列扫描,直至按键释放后,再接着扫描下一列。数码管的6列扫描信号和小键盘的8列扫描信号可以共用,当扫描到小键盘的第6、7列时,并没有扫描6位数码管,由于扫描速度足够快,这并不影响数码管的动态显示。
(3)按键抖动消除模块。机械键按下时,会产生抖动现象,若不消除,一次按键会被错误地认为同一键被多次按下,从而造成无法正确地输入密码。消除的方法可以采用硬件方法如RS触发器和软件延时方法,本文采用后者。
(4)按键编码模块。它负责将按下键的行列位置码编码成0~31的键值码,键值0~15当作有效的16进制数输入密码位,大于等于16的键值可以定义成功能键,如定义清除密码键[Clear]键值为17,确认键[Enter]键值为23,修改密码键[Chgsecret]键值为24,其他没有定义的键可
以预留升级时的备用功能键。
(5)译码显示模块。它负责将按下的数值键0~F译码成7段LED共阴极字型码。
(6)主控模块。它依据消除抖动后产生的按键释放信号koff及按下的是数值键或功能键决定转移的下一状态,在不同的状态完成密码的比较、修改及多次试探密码报警提示等多项控制功能。
3 软件实现
本文采用VHDL语言实现本密码锁系统的设计。对系统中划分出的每一个模块功能都可以采用一个进程来描述。分频、扫描和译码显示三个功能模块都比较简单,本文只重点介绍剩余的3个模块实现原理及进程中的部分关键代码。完整的代码可以向本文作者发邮件索取。
根据主控制模块实现的功能,可以整理成如下图2所示的流程图,图中对修改密码的流程作了省略。
[!--empirenews.page--]
实现图2流程的部分关键代码如下:
完成消除抖动的进程是在按键释放后还要经过若干个时钟的延迟再判断按键是否释放,若真的释放,信号koff才从0变为1,该信号也是控制模块根据密码输入进行状态转移的触发信号。例如按下键产生的前沿抖动,这个抖动产生的假释放高电压一般不会持续太多个时钟(若系统的时钟频率高可以增加代码中计数器的位宽以增加延时),之后又变为稳定的低电平,则该进程再一次对计数器进行清零,重新判断。
键值编码功能是将按下键的行列位置码赋予相应的键值,自然地将0~F键定义成键值为0~15,功能键的定义比较随意。实现的部分代码如下:
[!--empirenews.page--]
4 仿真结果
本设计在QuartusⅡ9.0软件平台上进行了密码锁各项功能的波形仿真。
图3是输入了错误的密码123450并按下enter键(键值23)后,密码锁没有打开的仿真图,图4是输入正确的密码123456和enter键后,密码锁能打开的仿真图。
图5是先输入了一位密码9,又按了clead键(键值17),接着又输入了正确的密码123456和enter键后,锁能正确打开的仿真图。
图6是第一次输入密码123450,第二次输入了521087,第三次输入了450313,3次错误的密码后,启动防止多次试探密码功能,密码锁进入报警状态,并维持在报警状态不退出,相当于密码锁处于死锁状态。
图3~6中的codel~code6是临时存储输入密码的寄存器。另外,在开锁状态下,按下修改密码Chgsecrer键时,进行修改密码的仿真图,由于输入输出的数据量很多,全景视图时不是很清楚,只能局部放大浏览,这里不再给出。
5 结论
本密码锁的各项功能也在FPGA芯片上EP1K30TC144-3下载通过了验证,实验表明,此密码锁运行稳定可靠,各项功能都能满足要求。在实际应用中可将数码管显示的密码一律都用“-”来显示,起到隐藏密码位的目的