黄明霞 许泽恩 李如仁 李文韬 王 鲁
(沈阳建筑大学交通工程学院 辽宁 沈阳 110168)
随着社会经济的发展和居民生活水平不断提高,人们的安全意识也逐渐提高,对密码锁的可靠性、 安全性提出了更高的要求。传统的机械锁构造简单,钥匙重合性高、可复制性强,存在很大的安全隐患。随着电子技术的发展,信息数字化已经融入到人们的日常生活当中,面对机械锁存在的安全问题,电子密码锁应运而生。电子密码锁与传统的机械锁相比,用密码代替钥匙,具有保密性好、安全性高、操作简单等优点,因此逐渐受到了人们的青睐。
实际应用中大多数电子密码锁系统是采用单片机设计的,而单片机在运行过程中程序容易跑飞,系统稳定性较差[1-3]。利用FPGA技术并使用Verilog HDL硬件描述语言设计的电子密码锁不存在程序跑飞的情况,而且开发成本低,系统稳定性高,安全可靠[4-6]。
本文设计的电子密码锁系统具有解锁、修改默认密码、警报提示功能。设置的密码为4位的十进制数,当用户输入密码后与预置的默认密码进行对比,若密码正确,则解锁灯亮起,解锁成功;若密码错误,则警报灯亮起,解锁失败。修改密码时按对应的按键,输入4位十进制数,即可更改预置默认密码。
电子密码锁通常是由密码控制器和外围电路组成,其中密码控制器的功能是检测输入的密码,并与预置默认密码对比,根据对比结果发出不同指令。外围电路则是通过键盘输入密码、显示输入的密码、对输入的密码发出对应的信号。本文中的电子密码锁系统包括按键输入、按键消抖、分频模块、密码检测模块、密码输出控制模块、译码显示模块。密码锁系统框图和流程分别如图1和图2所示。
图1 密码锁系统框图
图2 密码锁系统流程
1) 按键输入。按键采用行列式按键,4×4矩阵键盘,横向布局4根及纵向布局4根分别连到开关两端,每根I/O接口互不干扰。依次给行线发送低电平信号,若列线信号全部为高电平,则低电平信号所在行中无按键按下;若有列线输入为低电平,则低电平信号所在行和出现低电平的列的交点处有按键按下。
2) 按键消抖。由于矩阵键盘是机械开关,在按键按下和释放时的一段时间内存在抖动。若不消抖,可能会出现多次按键按下的情况,从而发生错误。按键抖动时间由机械特性决定,一般为5~10 ms。解决方法为:取按键按下和释放抖动时间内的某个稳定的时间(10 ms)作为真正按键的使能。
3) 分频模块。分频模块是对输入时钟信号做分频处理。因为系统时钟信号为50 MHz,而密码检测模块、密码输出控制模块和数码管正常工作需要1 kHz的时钟信号,所以要对时钟输入信号做分频处理。
4) 密码检测模块。密码检测模块为密码锁的核心控制,控制密码的运行状态、修改和检测。检测按键输入的值,对输入的密码进行存储、验证、响应结果并输出指令。
5) 密码输出控制模块。输出控制模块接收检测模块的信号,对响应输出结果发出解锁信号或警报信号。
6) 译码显示模块。将设置密码和修改密码时输入的值(二进制码)转换为逻辑电平,并在数码管上显示。
本文主要对密码锁系统的分频模块、密码检测模块和密码输出控制模块进行编译与功能仿真。在上述设计思路下,使用Verilog HDL语言对分频模块、密码检测模块和密码输出控制模块进行编程,然后在Quartus II开发环境中综合并调出原理图,最后通过ModelSim软件仿真[7-8]。
分频模块的功能是把密码锁系统的50 MHz时钟输入信号分频为1 kHz时钟信号。分频模块输出的1 kHz信号提供密码检测模块和密码输出控制模块正常工作。在分频模块的设计中,将时钟输入和复位端设为clk_50MHz和RST,定义一个寄存器变量cnt用于计数。每经过一个clk_50MHz信号上升沿cnt1计数一次,当cnt1计数到24 999时clk_1kHz产生一次跳变输出1 kHz信号。分频模块的原理图如图3所示。
图3 分频模块原理图
密码检测模块的功能是检测输入密码和修改密码,比较输入的密码与默认的密码。若密码正确,该模块则输出密码正确信号;若密码错误,则输出警报信号;若有修改密码信号,则更改默认密码。输入信号clk_1kHz、RST、key_flag、key_xg、key_value分别表示时钟信号、复位信号、按键按下标志、修改密码信号、按键输入的值;输出信号mima_r、right、error分别表示输出的密码、密码输入正确和错误信号。key_cnt、mima_r、mima_r2、PASSWORD为寄存器变量,其中:key_cnt用于统计输入密码的位数;mima_r和mima_r2都是16位寄存器变量,分别用于存储按键输入的值和修改密码时按键输入值;PASSWORD用于存储正确密码。密码检测模块原理如图4所示。
图4 密码检测模块原理
设默认密码为1111,按键输入的值key_value[3:0]分别存储于mima_r[15:12]、mima_r[11:8]、mima_r[7:4]、mima_r[3:0]。输入密码1111,密码正确right信号跳变;输入密码2345,密码错误,error信号跳变。仿真如图5所示。
图5 密码输入正确及错误仿真
修改密码按键按下,处于修改密码状态,key_xg、key_flag处于高电平,连续输入2222,默认密码修改为2222。随后输入密码2222,密码正确,right信号跳变。仿真如图6所示。
图6 修改密码仿真
密码输出控制模块的功能是接收检测模块的right和error信号,并输出解锁信号和警报信号。该模块的设计采用三段式有限状态机,状态分为start初始化、S1输出解锁信号、S2输出警报信号,编码方式使用独热码(One-hot)编码。输入信号为clk_1kHz、RST、right、error;输出信号jiesuo、alarm、led_right、led_alarm分别表示解锁信号、警报信号、解锁灯光、警报灯光;密码输出控制模块的原理如图7所示。
图7 密码输出模块原理
本文利用FPGA技术,使用Verilog HDL硬件描述语言设计的电子密码锁可以解锁、修改密码、发出警报,具有开发成本低、稳定性好、实用性强、安全可靠等优点。而且当控制电路需要修改时,仅需借助FPGA平台重新编程即可,无须更改电路,大大提高了设计效率。由仿真结果可知,本文方法满足设计要求,达到了预期效果。