基于FPGA 的密码和指纹同步解锁系统设计

2023-02-23 03:30马瑞成赵小珍
电子设计工程 2023年4期
关键词:指纹图数码管指纹识别

马瑞成,赵小珍,屈 军

(1.安徽师范大学物理与电子信息学院,安徽芜湖 241000;2.长沙湘计海盾科技有限公司,湖南长沙 410000)

随着社会科技水平的逐步提高和对隐私保护意识的增强,用户对于数字设备的安全性能提出了更高的要求。传统的电子密码锁主要利用单片机进行驱动,而基于单片机运行的密码锁设计较简单,但容易产生跑飞的现象,生成的解锁系统不太稳定[1-2],且容易造成密码的泄露。因此,指纹密码锁得以迅速发展,指纹相较于数字密码具有唯一、安全和方便携带等优点,而实际应用中大多数指纹识别是利用DSP(数字信号处理)[3]或ARM[4]设计完成的嵌入式系统,造成设计周期长且外部电路复杂,很难实现集成化和小型化,导致指纹识别在小型化数字设备应用中受到了限制[5]。

FPGA 作为一种片上可编程可半定制的器件,具有功耗低、开发周期短和集成度高等特点[6],并广泛应用于通信、显示和网络等领域。该文介绍了基于FPGA 为密码解锁系统的核心器件,借助自顶向下的设计方法,驱动各模块完成相应的功能,最终组合成完整的解锁系统。

1 硬件设计

1.1 设计思路

系统的硬件部分主要为Altera 公司生产的Cyclone ⅣE系列的EP4CE10F17C8芯片,大约有10 K的逻辑单元,速度等级约为400 MHz,系统采用PCB封装,满足设计要求。系统主要包括按键模块、指纹模块和解锁模块,其中,核心设计是按键和指纹模块的同步解锁,通过矩阵键盘和电容传感器采集密码,以FPGA 芯片为控制中心,驱动各模块完成密码验证,并输出最终的判断结果。

系统的工作流程如图1 所示,系统上电后实时检测是否有按键输入,若上电后检测到复位信号为高电平,则所有信号清零;若检测到修改密码信号为高电平,则进入密码修改状态;若检测到其他按键值,则表明进入密码输入状态,密码输入完成后与初始密码进行对比,接着进行指纹采集和验证,若电子密码正确且指纹识别成功,则绿灯亮,解锁成功;若电子密码或指纹识别中有一个错误或两个都错,则红灯亮,蜂鸣器发出警报,解锁失败。

图1 系统工作流程图

1.2 电子密码部分

数码管:数码管的实质就是由多个发光二极管组合形成的一种元器件。将所有的发光二极管阳极连接在一起形成公共阳极COM,上电后COM 接+5 V,如果其中一段二极管的阴极为低电平,则该段二极管被点亮。图2 为3 位数码管等效电路图,其基本原理与8 位数码管相同,将每个位数码管的段选并联起来,通过位选信号sel来控制数码管。

图2 3位数码管电路图

矩阵按键:按键模块采用4×4 的矩阵键盘,共有8条控制线,分别为4条行控制线和4条列控制线,通过8 条控制线来控制16 个矩阵按键,有效地减少了I/O口的占用[7]。工作原理为4 根行控制线被上拉电阻拉到高电平,然后依次给列控制线发送低电平信号,若每列的行信号电平都为高,则表明没有按键按下,若其中一列的行信号为低电平,则表示有按键被按下,然后以读到的行值通过序列机代码判断当前哪一个按键被按下[8]。

无源蜂鸣器:无源蜂鸣器驱动电路如图3 所示。电路设计中电容C36可有效提升电路的抗干扰能力;二极管D5 用于保护三极管;BEEP 端口接FPGA 的输出管脚,工作时向BEEP 端口输入2~5 kHz的PWM 波,即可驱动蜂鸣器发出响声。

图3 无源蜂鸣器驱动电路

1.3 指纹识别部分

指纹识别的关键在于传感器的选型,生活中主要使用的有半导体指纹传感器和光学指纹传感器,在设计中考虑到是智能设备的解锁系统,而光学指纹传感器体积较大,在小型数字设备中的应用受到了一定的限制,而半导体指纹传感器体积小,识别灵敏度更高,因此,采用半导体指纹传感器MBF200[9]。半导体指纹传感器的工作原理是利用指纹纹路的凹凸不平,当手指与半导体器件接触时,会形成数值不同的电容和电感,因此对采集到不同的电容、电感数值进行汇总就类似于对指纹进行采集。

FPGA 与MBF200 的SPI 连接图如图4 所示,该方案的指纹部分设计中,在FPGA(主机)上选取4 个通用GPIO 口,分别与指纹传感器(从机)的使能端口(/SCS)、时钟端口(SCK)、主出从进端口(MOSI)和主进从出端口(MISO)采用SPI(串行外设接口)协议进行连接通信[10]。

图4 FPGA与MBF200的SPI连接图

2 FPGA代码设计

系统使用Verilog HDL 语言对各模块进行编译,采用Quartus II 和Modelsim 软件对各模块进行编译和仿真[11],在Quartus II 软件上生成系统的RTL 图,最终利用Quartus II 将程序烧录至开发板上进行板级验证。

2.1 电子密码部分

2.1.1 数码管显示模块设计

该模块的输入信号有时钟信号Clk、复位信号Rst_n、数码管使能信号En 和8 个数码管待显示信号disp_data[31:0];输出信号有位选信号sel[7:0]和段选信号seg[6:0]。

数码管显示模块的主要功能是实时显示按键输入的电子密码;模块时钟将50 MHz 分频得到1 kHz的扫描时钟,需要计数器循环计数25 000 次,位宽为15 位;然后编写8 位循环移位寄存器,利用循环移位寄存器来实现0000_0001b→1000_0000b 的变化,进而实现数码管的位选;利用八选一多路器,选择端为当前扫描到的数码管也就是循环移位寄存器的输出端,利用多路器将待显示数据输送到对应的数码管上;使能信号可利用一个二选一多路器便可实现对数码管位选的控制;最终利用4 输入查找表实现7 位输出显示译码。数码管显示模块的原理图如图5 所示。

图5 数码管显示模块原理图

2.1.2 矩阵按键模块设计

模块的输入信号Clk、Rst_n 和Key_Board_Row_i[3:0]分别表示时钟、复位和矩阵按键行输入信号,输出信号Key_flag、Key_value[3:0]和Key_Board_Col_o[3:0]分别表示按键按下标志信号、按键值和矩阵按键输出列信号。

矩阵按键模块的主要功能是检测按键的输入和判断按键的键值。代码设计中采用状态机来实时检测矩阵按键信号的变化,若状态机成功检测到有按键输入,则Key_Flag 信号输出一个时钟周期的高脉冲,此时判断Key_Value_tmp[7:0]的信号值,将按键值赋给输出信号Key_Value[3:0]。矩阵按键模块仿真图如图6 所示。

图6 矩阵按键模块仿真图

2.1.3 按键消抖模块设计

按键消抖模块的主要功能是防止物理按键按下时产生的抖动对数据测量产生影响;模块中输入信号有时钟Clk、复位Rst_n、按键输入信号Key_in;输出信号有按键状态切换的标志信号Key_flag 和按键状态标志信号Key_state。

在基于FPGA 的设计过程中,按键消抖在代码中通常采用状态机进行解决,如图7 所示,整个状态机共有四个状态:空闲、按下消抖、按下稳定和松手消抖。四个状态采用独热码分别定义为4'b0001、4'b0010、4'b0100 和4'b1000。代码设计时由于按键信号为外部输入信号(异步信号),存在着不确定性,直接运行可能会产生亚稳态现象,所以一般进行异步信号同步处理。

图7 按键消抖状态机图

2.1.4 密码对比模块设计

密码对比模块的主要功能是检测输入的密码是否正确,模块输入信号有时钟Clk、复位Rst_n、矩阵按键标志信号Key_flag、矩阵按键按键值Key_value[3:0]和开始比较信号start_bj;输出信号有密码错误信号error、密码正确信号right 和按键输入的最终密码mima_r[15:0]。

先定义一个4 位初始密码1234 赋给信号INITIAL_KEY,再生成一个计数器Key_cnt[1:0],当Key_flag 为1 时,计数器从0 至3 循环计数,每计数一位将Key_value[3:0]的键值依次赋给mima_r[15:12]、mima_r [11:8]、mima_r [7:4]和mima_r [3:0],最终组成的mima_r[15:0]即为输入的4 位按键信号,当start_bj为1 时,将mima_r 与INITIAL_KEY 信号进行对比,若相同则表明密码正确,输出信号;若不同则表明密码错误,输出信号;密码对比模块仿真图如图8 所示。

图8 密码对比模块仿真图

2.2 指纹识别部分

指纹识别部分主要由指纹采集、指纹处理和指纹对比组成,上电后指纹传感器便进行实时数据采集,将提取的指纹进行预处理,可得到清晰的指纹图像特征,因为Flash 存储器在掉电的情况下数据不会丢失,故将处理后的图像数据存入Flash 中形成数据库用作对比模型,指纹传感器检测到有指纹输入后,经过同样的步骤提取出较为清晰的指纹数据存入SRAM 中,等待验证信号进行指纹对比。

2.2.1 指纹采集

指纹采集直接决定了指纹对比的成功率。该文采用了MBF200 电容指纹传感器进行指纹的采集。该芯片的识别区域为1.28 cm×1.50 cm,分辨率达到500 dpi,在该区域内含有高达上万的半导体器件,可以实时检测到指纹的录入并进行提取。

图9 所示为指纹采集流程图,指纹传感器采用逐行扫描采集,逐点转换数据的方式,当指纹图像的一行数据转换完成后,传感器将自动进行下一行的扫描和采集,直至将整幅图像采集完成,最后通过SPI接口将数据传输至FPGA 中。

图9 指纹采集流程图

2.2.2 指纹处理

图像的产生和传输过程中,噪声的影响使得图像质量下降,难以提取出图像本身的特征。因此,在设计中可以通过滤波处理提高图像的质量,确保最终的识别不会产生太大的误差[12]。

因为噪声的存在会在指纹图像上生成一些干扰判断的杂质,影响了原本能够反映图像特征的点,而图像平滑处理可以削减、抑制或消除这类噪声,从而改善图像质量,中值滤波法可以使采集到的指纹图像在消除噪声的同时保证图像原有的特性,中值滤波法公式如式(1)所示:

图像锐化可以使模糊的图像变得更加清晰,因为经过中值滤波处理使图像细节变得模糊,可通过Sobel 边缘检测算法进行图像锐化来突出指纹的轮廓和细节,增强指纹图像的对比度。Sobel 边缘检测算法一般带有方向性,Sobel 卷积因子如表1所示。

表1 Sobel卷积因子

二值化原理即图像的分割,通过选取恰当的阈值,以阈值为中心点进行对比,定义图像上大于阈值的点为1,小于阈值的点为0,最终形成的图像只有黑和白两种颜色。通过锐化处理的指纹图像各处的灰度值都是不同的,若采用同一阈值进行处理,最终会丢失一部分有用信息;因此,该文采用分割的方法,将指纹图像分成若干份,对每一份分别进行阈值选取和二值化处理,避免丢失有用信息。

细化就是将图像中的纹线转换成单位像素宽度的纹线的过程,方便对指纹特征进行识别和提取[13],该文采取查表法进行指纹图像的细化,能够保存图像原有的纹线特征。

2.2.3 指纹对比

预处理过后的指纹图像特征点十分明显,可以采用Poincare Index 算法提取原始指纹的核心部分和细节部分,将最终生成的指纹数据存放于Flash中作为初始密码,便于与之后的指纹输入作对比[14];SRAM 存储器则用于存储临时输入,用于解锁的指纹数据,最终指纹图像特征点的对比程序和算法的实现需要运用C 语言在Matlab 软件上进行编写和处理,最终将生成的SOF 文件输送至FPGA 中,完成指定的功能。

2.3 解锁模块设计

分别将电子密码部分和指纹识别部分的判断信号送至解锁模块中,电子密码部分输出right 和error信号,指纹识别部分输出zw_right 和zw_error 信号,通过四个信号的值判断是否解锁成功。解锁模块仿真图如图10 所示。

图10 解锁模块仿真图

3 测试结果

表2 为数字密码正确时,录入相同指纹和不同指纹后分别测试200 次得出的结果。从表2 数据可以发现,同指纹同数字密码的平均识别正确率约为98.7%,平均错误率约为1.3%;不同指纹同数字密码平均识别正确率约为99.7%,平均错识率约为0.3%;根据数据表明设计的解锁系统基本符合需求。

表2 测试结果

4 结论

在整个系统中,采用了自顶向下的分析算法将其分解成若干个小模块,每个模块完成自己对应的功能,再通过顶层模块例化实现各个子功能模块之间的信号传输并合成一个完整的系统。在代码设计中主要运用了FPGA 的SOPC(可编程片上系统)设计进行电子密码模块和指纹识别模块的编写,最终通过FPGA 芯片驱动各功能模块。在电子密码锁的数码管显示模块中,采用了74HC595 串行移位寄存器节省FPGA 的I/O 管脚的使用;在指纹识别模块由于指纹图像对比需要耗费大量的硬件资源,所以采用Matlab 软件进行设计,并将生成的文件下载到FPGA中的处理器软核,通过处理器进行调用;整个设计利用FPGA 片上可编程功能,如果设计要求发生改变,只需修改代码和I/O 接口,并将最终修改的结果烧录至FPGA 中,无需更改硬件电路,降低了开发成本[15]。

该文根据用户需求为依据,针对目前数字设备的安全性问题,提出了将电子密码和指纹识别相结合的一种结构设计,基于FPGA 自顶向下的设计方法和片上可编程技术,将两种解锁模块整合至完整的系统中,实现密码和指纹验证功能,最终在FPGA上实现具有解锁、密码修改和警报等功能的密码锁。

结果表明,相比于传统的密码锁,整个解锁系统增加了解锁的基本要求,指纹和数字密码必须同步验证,降低了密码泄露的风险,进一步增强了数字设备的安全和稳定,具有一定的研究价值,为以后设计安全系数更高的密码锁提供了新的思考方向。

猜你喜欢
指纹图数码管指纹识别
微课教学设计之“数码管动态显示”
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
指纹图像干湿度评价及亮度自动调节方法研究
基于单片机指纹识别电子寄存柜设计
指纹识别技术综述
沉香GC-MS指纹图谱分析
基于模板检测法的指纹图像的细节特征提取
基于大容量指纹识别的实时身份认证系统