摘 要:本文设计了一个基于Xilinx公司FPGA芯片XC3S500E的实用指纹采集系统。给出了指纹采集系统的总体结构和控制流程,并详细描述了各个控制模块的工作原理以及设计实现方法。
关键词:指纹采集 ; FPGA ; I2C总线
生物识别技术是利用人体所特有的生理特性(如虹膜、声音、指纹等)进行身份鉴别的一项技术。由于人体生理特性的唯一性,使得这种技术比传统的身份识别方式具有更好的安全行和方便性。其中,指纹识别是被应用最多而且最成熟的生物识别技术。本文提出了一种利用FPGA芯片作为主控制芯片,采用OV7120指纹传感器的指纹采集系统的设计方案。
1.指纹采集系统总体设计
本系统采用Xilinx公司Spartan-3E系列XC3S500E型FPGA芯片作为控制核心,其50万门的容量满足了全系统设计的需要。选用基于OV7120黑白CMOS图像传感器芯片的指纹传感器,采集640×480的灰度指纹图像。
指纹采集系统的总体结构如图1所示。整个系统中的I2C控制模块、SRAM模块和VGA显示控制模块全部在FPGA芯片上设计实现。OV7120指纹传感器有16根信号线,通过FPC16扁平电缆连接XC3S500E系统板上的FX2-100S-1.27DS连接器。同时,XC3S500E系统板也提供了标准VGA接口连接显示器。
2.指纹采集系统控制流程设计
整个指纹采集系统的软件控制流程如下:主控FPGA芯片XC3S500E向指纹传感器发出开始工作命令;然后,通过FPGA中的I2C总线控制模块向指纹传感器发出工作方式设置命令;在I2C控制模块完成对OV7120指纹传感器的工作方式设置后,开始实时接收采集的指纹数据,同时将采集到的一帧指纹数据写入在FPGA中设计的SRAM中;最后由VGA控制模块读取SRAM中的指纹数据经VGA端口送到显示器显示。
2.1 I2C总线控制模块设计
OV7120指纹传感器的工作方式、数据输出格式、扫描模式等参数的设置通过SCCB串行接口来实现的。而SCCB串行接口就是简化的I2C总线。在XC3S500E芯片上采用VHDL语言程序软件模拟方式,实现对I2C总线接口控制,完成对OV7120指纹传感器工作方式的设置。
根据I2C总线的通信协议,将总线上的信号划分为空闲(idle)、启动(start)、写(write)、确认(ack)和停止(stop)五种工作状态。I2C控制模块在接受到FPGA发出的启动信号后,进入start状态,并根据写寄存器命令,进入write状态。由于写操作都是以字节进行的,对应8个周期的I2C总线写操作,故设计一个8节拍的计数器,使得write状态能维持8个SCL周期。在完成字节写操作之后,将进入ack状态。进入ack状态,标志一个写寄存器命令已经完成。I2C总线状态转换关系如图2所示。
I2C总线控制模块的状态转换部分源程序如下:
case sta is
when idle=> scl<='1'; ——空闲状态
sda<='1';
sta<=start;
when start=> scl<='1'; ——接收到start信号后,进入到启动状态
sda<='0';
sta<=init;
when init=> bit_cnt<=0; ——表示主控设备发送数据
data<=datain(n); ——主控设备发送的数据
sda<='0';
scl<='0';
sta<=write; ——进入维持8个SCL周期的写状态
·
·
·
when t6=> scl<='1'; ——确认状态,写寄存器工作完成。
sda<='0';
sta<=stop;
when stop=> scl<='1'; ——停止状态,重回空闲状态,等待下次启动命令
sda<='1';
sta<=idle;
end case;
2.2 SRAM模块设计
在XC3S500E芯片内部设计SRAM模块进行数据的缓存,相比采用外部SRAM芯片存储,大大提高了数据读写速度。指纹传感器输出的一帧指纹图象数据大小约为300k,相应设计的SRAM有19个地址引脚,8根数据线,有片选引脚CS、写有效引脚wr、读有效引脚rd。wr和rd分别与CS联合控制读写使能。
2.3 VGA显示控制模块设计
VGA显示控制模块设计总体结构如图3所示。图中二分频子模块把50mhz时钟频率分成25mhz并提供给其它子模块作为时钟;VGA时序控制子模块用于产生640X480显示范围,并控制显示范围和消隐范围以及产生水平同步时序信号hs和垂直同步时序信号vs的值;按照SRAM中数据存储地址读出显示数据,并将R、G、B的值通过VGA接口传到CRT显示器。
VGA时序控制子模块部分的行列控制源程序如下:
ProA:process(clk) ——行扫描控制进程,640个像素点,
Begin 行同步头时间大约等于间大约等
if(rising_edge(clk))then 于扫描160个像素点的时间
if(hcnt <800)then hcnt<=hcnt+1;
else hcnt<=0;
end if;
end if;
end process;
ProB:process(clk) ——列扫描控制进程,扫描480行的
Begin 时间,场同步头时间大约等于扫
if(rising_edge(clk))then 描45行时间
if(hcnt <640+8)then
if(vcnt<525)then
vcnt<=vcnt+1;
n<=n+1;
else vcnt<=0;
end if;
end if;
end if;
end process;
3.总结
这种基于FPGA芯片的指纹采集系统,全部控制逻辑在单个FPGA芯片内部实现,简化了外部电路设计;利用FPGA较高的工作频率使得指纹采集、传输、处理速度快,在后期还可加入图像处理的算法进一步提高成像质量。全系统具有机构简单、体积小、可靠性高等优点,具有较强的实用价值。
参考文献:
[1] 田耘,徐文波. Xilinx FPGA开发实用教程[M].清华大学出版社,2008:1-25.
[2] 徐志军,徐光辉.CPLD/FPGA的开发与应用[M].北京:电子工业出版社,2002:30-70.
[3] 李泽文.I2C总线控制及基于FPGA的实现[J].科技经济市场,2006,8:23-25.
[4] 罗钧,吴克松,廖红华.基于NiosII的图像采集和显示的实现[J].电子技术应用,2007,(2):24~27.
[5] Advanced Information Preliminary OV7620/OV7120[Z].Omnivision Inc,April,2008.