FPGA指纹识别系统设计+源码
本系统旨在以通过硬件描述语言,编写出符合FPC1011F指纹传感器读写的SPI串口时序的verilog代码,读出指纹数据。此系统大体上可以分为三个功能模块,1)SPI串口模块,此模块负责向传感器发送初始化指令、读数据指令以及接收数据。2)数据缓冲模块,读出的数据暂存于缓冲FIFO内,避免因较快的读数速度和较慢的打印速度而造成数据丢失。3)UART计算机串口打印模块,负责从数满标志位有效的Rx_FIFO中读出指纹数据并通过串口打印到计算机上。此系统通过仿真、调试下载到FPGA开发板后可以成功地读出指纹数据。
一、 系统框图 Fig1.系统简略框图
二、 系统解析
如上图所示,蓝色和绿色引脚为外部端口,红色引脚为内部信号。
1. FSM模块:其主要的功能是在系统复位后初始化Tx FIFO(发送FIFO),即把随后要发送给SPI传感器的命令写入Tx FIFO内,然后在满足SPI传感器时序的前提下,FSM模块通过控制Tx_rd_en信号读出Tx FIFO里的命令并传送到SPI模块;在Rx FIFO接收指纹数据时,当数满标志位Rx_full_n有效后说明接收FIFO里的数据已满,这时FSM就会通过相关信号来控制SPI停止接收数据,当检测到Rx_empty_n有效后(接收FIFO已空),FSM就会发出相应的信号启动SPI继续接收数据,直到指纹数据全部接收完毕。
2. Tx FIFO模块:主要功能是在初始化的时候装载待发命令,然后在Tx_rd_en信号的控制下把命令发送出去,因为总的命令数不超过FIFO的深度,所以无须空满标志位。
3. SPI模块:其主要功能是在与外部传感器通信的时候向传感器提供时钟信号SCK,以及片选信号SS,其中SCK和SS信号最初由FSM产生并由FSM进行控制;当需要向传感器发送命令时,FSM会启动SCK和SS信号,同时SPI接受从Tx FIFO读出的命令并暂存到一个8bit移位寄存器tx_shifter[7:0]中,每过一个SCK周期发送一位到至MOSI,发送完1Byte后tx_shifter会重新装载新命令继续发送直到命令发送完毕;当SPI从传感器接收数据时,FSM会启动SCK和SS信号,SPI中移位寄存器rx_shifter[7:0]会在SCK的上升沿采集输入端口MISO的数据并移一位,每8个SCK时钟周期rx_shifter中的数据就会在FSM的控制下写入Rx FIFO,直到数据接收完毕。
4. Rx FIFO模块:此模块的主要功能是对已接收到的指纹数据进行缓存,避免指纹的数据丢失,因为此系统中SPI串口的工作频率为5MHz,而UART串口的工作频率为38400Hz,UART从Rx FIFO取数据的速度远小于SPI往Rx FIFO中写数据的速度。Rx FIFO可以向UART和FSM提供数空和数满标志位rx_empty_n,和rx_full_n,因此SPI和UART可以协调工作。
5. UART模块:些模块主要功能是和计算机进行通信,把接收到的指纹数据通过计算机的终端显示出来。当UART检测到rx_full_n有效后,就会发出读信号Rx_rd_en读出FIFO中的数据发送给计算机,当检测到rx_empty_n有效后停止。三.指纹图像
运行ProcessOfFingerPrint.m文件,指纹图像处理过程如下:
1. 加载指纹文本文件,并用图像显示
2. 灰度图像取反,即将原始指纹黑色背景变为白色背景
3. 进行二文适应性去噪过滤处理
4. 扩大图像的像素至400x304,并找出扩卡后的图像的中心点,用红色’o’标注
5. 将放大后的图像进行二值化处理
6. 进行中值滤波处理
7. 二值化图像细化处理,并标注特征点和中心点。特征端点用'o'标注,特征分叉点用'+'标注,中心点用红色'*'标注
8. 特征模板建立:特征端点分类为1,特征分叉点分类为2;建立特征端点相对中心点的距离向量,和特征分叉点相对中心点的距离向量;建立特征端点相对中心点的方向向量,和特征分叉点相对中心点的方向向量。
9. 运行PointOfMatch=PointOfModel;
仅将数据PointOfMatch保存为table_PointOfMatch,即在workspace内只有PointOfMatch时,运行save table_ PointOfMatch;
10. 指纹匹配时,修改需要加载的指纹图像的文本名字,运行ProcessOfFingerPrint.m,得到待匹配的指纹图像的特征点和中心点。特征端点用'o'标注,特征分叉点用'+'标注,中心点用红色'*'标注
11. 运行Count=match(ThinFingerPrint,PointOfModel,PointOfMatch,Dpx,Dpy,Fpx,Fpy)
显示如下:
PointOfMatch passCount =85
一般能找到13个相同的特征就可以认为这些指纹出自同一个手指,但从匹配来看,平均100个特征匹配点会有3~4个误配,于是将成功匹配点设置为>20个,认为是出自同一个手指.
匹配成功的特征点:端点用红色’o’标注,分叉点用绿色标注’o’。如下图所示:说明:此C代码为基于MicroBlaze的嵌入式系统指纹数据采集程序。
传感器型号:FPC1011
采集步骤:(1) 初始化spi接口模块
(2) 复位FPC1011指纹传感器。
(3) 初始化传感器。
(4) 发送启动传感器命令rd_sensor: 0x11
(5) 重复发送读数据状态寄存器命令rd_spidstat: 0x21直到指纹数据准备完毕。
(6) 发送读数据指令rd_spidata: 0x20 读取指纹数据。
(7) 打印数据。1390
FPGA指纹识别系统设计+源码下载如图片无法显示或论文不完整,请联系qq752018766