实时图像采集系统的设计与实现引言随着数字多媒体技术的不断发展,数字图像处理技术被广泛应用于身份识别、电视会议、监控系统、工业检测等各种商用、民用及工业生产领域中。
这些数字图像处理系统中,一个共同的特点的就是数据量庞大,尤其是在图像帧率及分辨率要求比较高的场合下,以指纹识别系统为例,图像分辨率的高低直接影响系统的鲁棒性,一般来说,为了能够清晰的辨别指纹中的特征结构,指纹图像需要达到至少500DPI的分辨率。
通常,为了能够满足各类手指大小以及采集方式的要求,图像采集系统的尺寸都不可能做得太小(一般在2英寸以上),这就要求图像解析度至少达到1024×768,最好是1280×1024(1.3M),如果要做到实时采集和处理(30F/s),数据量将达到1280×1024×30×8=300Mbit/s。
伴随着超大规模集成电路和DSP处理技术的飞速发展,新的高速CPU和高性能DSP处理芯片不断推出市场,在这些技术的有力支持下,复杂的图像处理算法往往容易实现。
与此同时,图像数据采集部分由于缺乏专用芯片的支持,而且受限于系统总线带宽,已经成为数字图像系统中的主要瓶颈所在。
主流的图像采集方式目前数字图像采集主要采用两种方式:一种是以专用的数据采集卡,配合PC机的各种高速数据总线如PCI,USB2.0,firewire1394等采集数据。
PC机的优势是拥有大量的高速内存可以用作数据采集时的缓存,而且它的各种数据总线具有比较高的数据传输率,PCI总线的速率为32(Bit)×66=2112Mbit/s,USB2.0的数据传输峰值可以达到480 Mbit/s,firewire也可以达到400Mbit/s的传输速率。
问题在于,PC机的体系结构决定了任何外设都只可能是从设备,只能请求总线资源,而不能主动占有。
在Windows(或是Linux)这些实时多任务操作系统的调度下,即使在系统不运行其它应用程序的情况下,系统时间片和系统资源也会被操作系统内核和各类外设分享。
尤其是PCI总线,包括内存、硬盘在内的很多PC内置设备都会用到PCI,实际留给采集程序的总线带宽将大打折扣。
正因为如此,现在基于PC的数据采集设备性能都不太理想,采集1.3M象素图像时只能达到每秒7、8帧的帧率,达不到实时性要求。
另外,对PC机的依赖直接限制了这类系统的应用范围,也间接提高了系统成本。
另一种方法是基于嵌入式DSP和FPGA的采集方法。
通过FPGA或CPLD 的控制和调度,利用DSP的数据通道来采集数据。
嵌入式平台具有便携性好,成本较低的优势,越来越多的应用到数字图像处理的各个领域。
一个成熟的系统体系结构要求系统内各部分分工明确,同时又具有一定的通用性和可移植性。
嵌入式平台上的DSP芯片在数字信号处理方面有着独到的优势,但是通用性能无法和PC机上的CPU相比,通常主要用来处理复杂的运算。
实时数据采集属于简单而繁琐的任务,用DSP完成可谓大材小用,势必影响整个系统的性能。
即使是某些DSP可以用DMA方式采集数据,但是由于图像的输入格式各不相同,没有可以直接匹配图像输入设备的DMA模式,必须要由FPGA或CPLD来协调控制,增加了系统的复杂程度和成本。
更主要的是,DMA 方式虽然不占用系统时间,却要占用数据总线,在此期间DSP不能作任何的外部数据或设备操作,对于处理数字信号的绝大多数应用来说,这种调度策略是极不现实的。
即使能够勉强实现,必然是可移植性极差,应用上的一点小小改变(比如换一种输入模式)就必须重建整个系统。
嵌入式平台的另一个瓶颈在数据缓存上,无论从存储器的容量或是速度上来比较,嵌入式系统都和PC平台相去甚远。
目前,PC平台一般都使用动态存储器(DRAM)来作为内部存储器,比如说普通的SDRAM、DDR SDRAM,还有早期使用过的EDO内存都是动态存储器,它们共同的特点是容量大、工作频率高,价格便宜。
DSP芯片由于没有CACHE结构,很少支持DRAM存储器,大多采用SRAM代替。
SRAM操作简单,但是容量小,价格高,用来缓存大容量的图像帧数据极不合算。
即便是那些支持DRAM存储器的DSP,由于工作频率、工作模式等诸多因素的影响,也不可能用于缓存高速采集的图像数据。
正是基于上述种种原因,市场上极少见到应用于高速图像数据采集和处理的嵌入式设备,而且性能普遍不如同类的PC产品。
为了满足高分辨率图像(1.3M)和实时采集(30F/s)要求,还有一些方案中使用双DSP或是双FPGA加大容量SRAM的设计方法,其中一片DSP或FPGA配合大容量SRAM单独完成采集工作。
这些方案虽然能够达到要求,但是成本太高(往往高过同类基于PC的产品),只能应用于某些特殊的高端应用或是科学研究,无法作为消费级产品推广。
实现高速数据采集有两个关键环节:高速灵活可控的数据总线和大容量高速缓存。
从上文可以看到,主流的两种实现方法都在其中一个环节遇到了障碍,为此,我们在仔细比较二者优劣的基础上,自行设计出一个带数据CACHE的DDR SDRAM控制器,实现了嵌入式平台上的高速数据采集系统。
实现带数据CACHE的DDR SDRAM控制器嵌入式平台上难以实现DDR控制器的关键在于缺乏CACHE。
我们知道,动态存储器最主要缺点的就是随机读写速度慢,这是由其特殊的内部结构造成的,DDR SDRAM的内部结构如图1所示:图1 DDR SDRAM内部结构图可以看到,动态存储器的结构是比较复杂的,它将地址部分分成行地址和列地址两个部分,这样在保持容量不变的条件下减小了数据总线的宽度,有利于减小芯片的尺寸,因此可以实现高密度、大容量的存储功能,但是同时也给操作上带来了麻烦:数据地址需要分两次传送,而且由于内部地址译码的要求,行列地址传送还需要有一定的间隔(CAS latency)。
再加上动态存储器充电放电(ACTIVE,PRECHARGE)时间的要求,通常完成一次读(写)操作需要十几个时钟周期,200M变成了十几兆,这样一来效率就非常低下了。
为了解决这个问题,动态存储器提供了突发(BURST)模式或页操作模式:一次读(写)一页或一定长度的连续数据而只需要一次非读写的辅助操作(包括ACTIVE、PRECHARGE和发送地址)。
如果一次读写的数据数量大(一页可以达到256字节),平均起来非读写操作的开销就非常小,几乎可以达到一个周期一次读写操作。
但是这种做法只适合于连续的数据读写,而实际应用中绝大多数的读写都是随机的单个或几个字节的读写,PC平台是通过CACHE来解决这个问题的。
在PC平台上,通常都有大容量的CACHE位于处理器内部或是主机板上,这些CACHE是基于内容寻址的,速度非常快。
PC机的内存操作机制是在CACHE中保留经常使用的内容,处理器通常都是在CACHE中寻找需要的内容,如果找到了(称为命中)就直接使用,否则才去内存中读写,并且将这部分内容放入CACHE,用来顶替CACHE中最不常用的内容。
事实上,由于PC平台上的CACHE容量非常大,而且有相当成熟的CACHE算法和内存调度算法支持,通常命中率都是很高的,从操作人员的角度来看基本上可以认为内存是全速运行的。
嵌入式平台没有CACHE的支持,直接通过DSP操作动态存储器效率非常低,无法满足高速数据采集的要求。
因此,我们使用可编程逻辑器件来实现定制的DDR控制器,同时提供“智能”CACHE和CACHE算法支持,满足高速采集的带宽要求。
要实现CACHE首先要提供高速的存储单元。
从成本角度考虑不可能使用昂贵的双口RAM,我们用XPLD5512来附带实现。
XPLDISP5512是LATTICE公司的新一代24万门级的CPLD器件,它的最大的特点是内置了16块多功能模块MFB(Mul-Function Block),它的结构简图如2所示:..... ... . .. .图2 ISPXPLD5512内部结构框图这16块多功能模块可以随意配置成TURE DPRAM,PESUDO DPRAM,SRAM,FIFO,CAM和LOGIC多种模式,图3显示了MFB的使用方法:图3 ISPXPLD5512的MFB如果配置成我们所需要的PESUDO DPRAM,每块MFB可以配成2K Byte 的PESUDO DPRAM,16块的话总共就是32Kbyte,完全可以满足我们的要求。
而且这块芯片是基于PLD结构的,价格也不贵。
以下是应用到指纹识别设备的高速采集系统,它可以工作在自动采集模式和普通模式下,图4是系统的结构框图:图4 DSP与DDR数据交互示意图为了节约成本和简化系统,本设计中使用的是数字CMOS图像传感器,它的数据输出模式如图5所示:图5 数字CMOS图像传感器的数据输出格式传感器输出数据由有效图像数据(图中A的部分)和空白数据(图中Q和P 的部分)组成,这样可以方便的控制输出图像的大小。
使用FRAME_V ALID和LINE_V ALID作为使能信号,利用XPLD的逻辑门控(图6中Gating模块)可以轻松的从数据流中提取出有效的图像数据。
图像采集管道在图4中用虚线框出,其逻辑功能表述如下:·IDPRAM0、IDPRAM1是XPLD内部配置的高速双口RAM,它们和DDR SDRAM共同组成图像采集的大容量高速缓冲:图像数据由传感器输出经过IDPRAM0缓存后以页操作的模式写入DDR SDRAM;当外部处理器需要处理图像数据时,先用页模式将数据从DDR SDRAM中读到IDPRAM1里,然后就可以从IDPRAM1中随机读写数据。
由于DDR SDRAM的页模式是操作256字节的数据,因此IDPRAM0和IDPRAM1只需要512字节的大小就可以实现两页轮换,保证采集的实时性。
·采集控制逻辑控制图像的自动采集过程。
当系统工作在自动采集模式下时,采集控制逻辑根据传感器输出的行场信号,自动计算地址,将IDPRAM0中的数据准确的写入到DDR中,同时根据处理器端的读取情况,自动更新IDPRAM1中的数据,保证及时满足处理器的需求。
·DDR控制器是系统的核心,它根据采集控制逻辑和处理器端发给的控制命令,配合内部的状态机完成DDR SDRAM的读写操作,并且自动的实现初始化、定时刷新等其它的特定操作。
当系统工作在普通模式下时,可以通过IDPRAM2完成普通的数据存储和读入功能;指令译码器和地址译码器解析外部处理器发送的控制命令,变更系统的工作模式,发送相应的指令给DDR控制器。
XPLD附带完成I2C控制,设置传感器工作模式,同时还要分担一部分预处理任务。
采集系统性能特点上述设计的高速图像采集系统工作在自动图像采集模式时的性能优异,DDR SDRAM最高数据吞吐量为250Mword/s,DPRAM最高随机操作速度180Mword/s,在图像分辨率为1280×1024时(130万象素)的采集速率可以达到60F/s,完全可以满足实时采集的需要。