实时图像采集系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实时图像采集系统的设计与实现
引言
随着数字多媒体技术的不断发展,数字图像处理技术被广泛应用于身份识别、电视会议、监控系统、工业检测等各种商用、民用及工业生产领域中。这些数字图像处理系统中,一个共同的特点的就是数据量庞大,尤其是在图像帧率及分辨率要求比较高的场合下,以指纹识别系统为例,图像分辨率的高低直接影响系统的鲁棒性,一般来说,为了能够清晰的辨别指纹中的特征结构,指纹图像需要达到至少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内部结构框图