图像采集模块主要包括摄像头和外扩SRAM。由于手掌凹凸不平及受压力不同时,导致的形变较大,所以采集掌纹图像,一般不使用像采集指纹时使用的扫描设备。而如果采用数码相机,系统的体积和成本必然上升,丧失了莫优越性。笔者采用OmniVvision公司的OV7649摄像头作为图像采集设备,OV7649是30万像素的CMOS数字摄像头,体积极小,价格便宜,分辨率足以达到掌纹鉴别的要求。因为OV7649输出为8位数据宽度,所以SRAM采用了与OV7649的数据宽度相同的IDT7lV424,用来作为存储掌纹图像的缓冲区。
鉴别处理模块采用的FPGA选择Altera公司的APEX20K200F,配置了256KB的SRAM及1MB的Flash,另外我们还添置了32MB的SDRAM. SRAM和SDRAM用来为Ni0s运行程序和存储相关数据,Flash用来存储提取好的掌纹样本特征。选择Nios软核CPU作为处理模块主要考虑到它为设计带来了高的集成度和灵活性,这样再对设计方案作更改时比较方便,而且算法如果用Nios的用户指令实现,那么运算速度将会得到很大提高。AIIera也提供了一些的IP核,包括常用的UART、SRAM、F1ash和SDRAM控制器。这样在S0PCBuilder里很容易定制好自己需要的Nios处理器,假如想更改其中的某些部分只需在S0PC Builder里重新配置即可。实践证明,选择Nios软核处理器给后续的工作带来很多便利。
输入输出模块和通信模块结构相对简单.前者包括一些按键和1块16×2的汉字LCD,用来提示用户操作和显示系统相关信息,后者采用的是西门子的slml00-tcp无线通信模块。这样可保证系统的直接可以发到系统管理员的手机上.同时也为连接1naternaet提供了条件,这样系统的扩展性就得以增强了。
2 系统的硬件设计
系统硬件结构如图2所示.可以看到在l片FPGA中包含了Nios处理器、SRAM控制器、SDRAM控制器、Flash控制器、uART以及摄像头和外扩SRAM控制器、2维DCT变换的用户逻辑模块。这正体现了Nios的优势,将很多资源集中在FPGA中为设计PCB带来了便利,而且对系统的更改也变得非常容易,只要重新在FPGA中添加不同的模块就可以了。笔者分别设计了2块PCB,分别是图像采集板和无线通信模块,工作的重点主要在以下两个方面。
(1)Nios与OV7649的工作协调机制
OV7649控制信号线使用的是oMniVisn公司的SCCB总线。SCCB总线包括SIO_C和SIO_D两条信号线,分别代表时钟和串行数据I/O,无论是传输控制命令还是读写数据,都是由不同的时序来区分不同的操作。笔者并没有用Nios直接与OV7649相连.而是独立用VHDL编写了一个控制模块。这样做的原因主要有两方面:,OV7649输出的像素同步时钟频率为24MHz,同时以30帧/s的速率输出分辨率为640×480的图像数据,如此高的数据率直接用Nios提取其中一帧图像是不好实现的,因此必须编写提取图像写入外扩sRAM的VHDL模块,直接用FPGA将掌纹图像数据写入外扩SRAM;第二,Nios只占用了FPGA资源的三分之一左右,完全可以利用剩下的资源,这样编写C代码的时候就不必考虑SCCB总线的时序。对于Nios来说,图像采集只需发启动和配置命令就可以实现.然后等待控制模块的完成信号返回,直接到外扩SRAM取数据即可。
摄像头控制模块首先对摄像头进行初始化配置。初始设定为 自动增益控制、自动白平衡、VGA格式(640 x80)、30帧/s、YuV 4:2:2数字视频信号输出、设置默认的图像对比度、亮度及饱和度。然后接收OV7649产生的数字视频信号、控制信号和状态信号,即把帧同步信号VREF、行同步信号HREF、复位信号RST、像素时钟信号PCLK等引脚连接到FPGA,根据这些信号将数据写入外扩SRAM。图3和图4是OV7649输出的各种同步信号的时序图。
(2)外扩SRAM的读写控制
如前所述,开发板上配有256KB的SRAM和IMB的Flash。因为提取的每帧掌纹图像至少为320×40×2=150KB.同时图像处理的相关代码和掌纹样本库也有相当的容量,所以还需要外扩1MB的SRAM作为存储采集图像的缓冲区。为了和摄像头的数据宽度匹配,外扩的SRAM选用了IDT7lV424,作为FPGA从OV7649输出视频中提取一帧图像的存储器。这2片SRAM必须达到以下要求 在采集图像时为FPGA中的摄像头控制模块迅速将图像数据写入,其余时间则将资源释放,被Ni0s统一管理。为此,一方面根据输出视频数据的高速时钟信号利用FPGA的资源编写了VHDL模块;另一方面,根据SOPC Builder提供的配置文件修改.写出了控制IDT71424的IP,并将其集成到SOPC Builder中。
3 系统的软件设计
(1)软件开发环境与用户指令
Nios的软件开发环境叫做Nios SDK SHELL,它提供了一个基于命令行娄似于Nnix的界面,用户在此环境下可以和Nios进行通信。我们需要先将编写好的.c文件用nios-builder命令生成srec文件。这个过程是由Nlos SDKSHELL调用GNUpro编译器来完成,GNUpro负责完成C代码和相关的头文件及库函数的编译、链接等工作。编译通过后就可以用nios-run命令将生成的.srec文件通过串口到N1os上运行。在SOPC Builder中配置好Nios后,会得到为用户生成的CPU_SDK文件夹,其中有个名为excalibur.h的头文件,它包括Nios所有资源的地址映射和一些库函数。
用户指令是Nios的特点之一,也是硬核处理器无法提供给用户的。使用好用户指令可以给系统速度带来极大的提升。掌纹鉴别算法有很多种,对掌纹特征提取通常包括提取掌纹几何特征、变换域特征和代数统计特征三大娄。在本系统的设计过程中,对算法的选择主要是从如何发挥Nios的优势出发,争取能在系统的实时性、可靠性及软硬件结合三方面拽到一个平衡点。对掌垃图像进行DCT变换是这个处理过程中运算量的部分,同时这也恰恰是利用用户指令的机会。2维DCT的处理模块是在1维DCT的基础上加以改善得到的,并且在SOPC Builder中添加为用户指令。用户指令的引人为系统速度带来极大的提升。首先在SOPC Builder配置Nios时,分别使用MSEP和MuL两种乘法,运行C代码实现,然后又用2维DCT的用户指令来做相同图像的处理对比.下文会有具体的测试数据。
(2)代码流程分析
参照图5所示,现在开始分析流程图中各操作的具体步骤。
用nr_installuserisr(na_button_pio_irq,palm_isr,(int)pi0)函数来建立一个用户中断服务,对按键中断响应进入中断服务程序palm_isr.然后向摄像头控制模块发送指令,需要用的函数有
vold mitSCCBMPodule()
void WriteSCCB(unsigned char id_addr,unsigned char sub addr,unsigend char data);
unsigned char ReadSCCB(unsigned char id_addr,un-signed char sub_addr)
void EndSCCBModule();
首先用initSCCBModule函数对摄像头控制模块初始化,然后用WriteSCCB函数写入需要的摄像头配置.EndSCCBModule表示结束配置,还可以用RemdSCCB来读取摄像头的寄存器配置,检查与吸入的配置是否相同。检测到摄像头控制模块的完成信号,就可以从外扩SRAM读取数据了。接着对图像数据做一些预处理,包括提取图像的Y分量并找到掌纹的感兴趣区域。然后提取掌纹特征,这部分的运算量主要集中在DCT变换,需要使用用户指令nm_det_2.在用户指令执行完毕后,既是对特征的处理,并将处理结果显示。对于提取的掌纹特征如果需要写入Flash储存起来,那就需要调用
int nr_flash erase sector(unsigned short*flash base,unsigned short*sector address)
int nr_flash write(unsigned short*lash base unsigned short*address,unsigned short value)
无线通信模块需要与Nios的串口连接,用AT命令来控制打电话、发短信和访问Internet。需要调用的串口控制函数是voidnr txstring(char*s)和int nr_rxchar(vpid)这两个函数就是发送AT命令和接收无线模块返回的状态信息。
4 测试与分析
实验主要分为两个部分:正确鉴别率测试(如表1所列)和鉴别时间测试(如表2所列)。
从表1的数据来分析,可以看出在样本数不大的范围内随着阈值为130时得到了96.7%的正确鉴别率.对于在Nios平台下的掌纹鉴别来说这个结果是完全可以接受的,但是此时对扩展测试集有3.3%的错误接受率。笔者取的扩展测试集规模与样本数相同,假设将此系统用于住宅小区门禁系统,这就意味着此小区区外的31名人员中有1个可能能够进人该小区。为了保证安全性笔者将阈值减小至100,系统对扩展测试集的鉴别效果相当好,样本之外的掌纹不会错识为样本库中的掌纹,付出的代价就是正确鉴别率下降为93.5%。众所周知,嵌入式处理器的运算能力有限,所以对特征提取时间比较关注,这也是系统能否迈向实用化的关键之一。表2是系统实时性的测试,从中可以看出在配置Nios时选用不同的乘法器(MSTEP是Nios的标准乘法器,MUL是Nios的全硬件乘法器)运算时间有所缩短,而使用用户指令对运算的加速效果相当明显,以上数据是使用函数hr_timer_milliseconds测试得到的。
结 语
本文所设计的“基于Nios的掌纹鉴别系统”,虽然这只能算是一个掌纹鉴别系统的雏形,但是完全可以完整地实现掌纹鉴别功能。由于本设计基于Nios软核处理器,因此具有安装简单,使用方便的特点,用户使用并不需要任何特殊的技能或培训。另外,整个掌纹的采集与处理过程也将非常舒适与快速,增大了产品的适用范围。在设计过程中,将整个系统分为处理子系统、图像采集和存储子系统、通信子系统、显示子系统和供电子系统,尽量做到这些子系统可以进行独立或者部分独立的调试。由于采用这种设计思路,系统从硬件结构上相当灵活,因此该设计完全可以针对不同的具体应用场合加以定制和优化。各个子系统在硬件结构上是模块化的,而所有这些子系统的控制器全部集成在一片FPGA中,高集成度带来的不仅是成本下降,还有便利性和灵活性。Nios软核处理器的引入不仅使整个系统做到了真正的软硬件可裁减.更加把这种新的设计理念带入到嵌入式系统开发中。
基于Nios的系统设计是传统嵌入式设计和FPGA设计的综合,而凸现Nios软核处理器的特性几乎全部需要HDL的支持。可使用IP的数量和HDL的造诣将直接决定系统的品质。在本设计中将两者相结台,对高速信号的处理和算法涉及到的大量运算采用VHDL来实现,而系统的总体控制及资源管理由Nios负责。在Ni0s为我们找到了高集成度与模块化设计理想结合的问时,本设计方案也给Nios提供了的应用场合。
[1]. RISC datasheet https://www.dzsc.com/datasheet/RISC_1189725.html.
[2]. PCB datasheet https://www.dzsc.com/datasheet/PCB_1201640.html.
[3]. VGA datasheet https://www.dzsc.com/datasheet/VGA_2568786.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。