摘 要: 分析了目前市面上常见的数字显微镜设计方案的利弊,提出在嵌入式平台上设计数字显微镜具有成本和性能优势。详细阐述了利用XPLD芯片配合大容量的DDR SDRAM实现数字显微镜的方案。具体分析了设计中通过定制DDR控制器解决大容量存储器和建立随机存储缓冲区的方法。
关键词: XPLD;DDR控制器;高速图像采集
随着数字多媒体技术的不断发展,越来越多的模拟视频设备被引入数字技术。传统的应用于工业、医疗和教学的显微镜也可以借助数字技术来提升产品的性能和使用的舒适性。
在大多数人的印象中,传统的显微镜是一个纯光学设备,观测者通过目镜观测被放大显微后的图像。引入数字技术后,被观测的图像可以由图像传感器收集,然后通过高速数据总线发送的专用显示屏上显示,从而大大降低由长时间观测带来的疲劳感。另外,经过数字化处理得到的图像数据可以用于后台分析,从而扩展了传统显微镜的功能。
数字显微镜是在传统光学显微镜的基础上,加装一个数字采集模块来替代目镜。数字采集模块中集成光学传感器将光学图像数字化后,经高速数据总线传输到专用的显示设备上(一般借助于电脑液晶显示器)显示出来。
数字显微镜根据应用要求的不同可分为两大类:一类是对图像采集的速度没有要求或要求不高,只需要对静止的图像进行分析,这类产品也可以称为照相显微镜;另一类应用需要实时图像数据用于后端处理,应用于各类工业监控或识别认证。前一类产品设计比较容易,而后一类产品虽然实现上有一定的难度,但其应用范围更为广泛,而且可以兼容前一类产品的需求,是未来发展的趋势。
数字显微镜内部的功能也可分成两部分:数据采集和图像处理。图像处理根据应用的不同会采用不同的算法,由于后台处理设备的差异,同一个算法的实现也不尽相同,在此不作详细讨论。而数据采集部分对于所有的数字显微镜系统本质上都是一致的,而且往往是整个系统的瓶颈所在,本文将详细讨论。
1 主流的图像采集方式
目前市面上的数字显微镜主要有两大类。
(1)使用专用的数据采集卡,通过通用的串行或并行接口和PC机相连接,使用PC机的显示屏作为显示终端。常用的数据接口有USB、firewire1394、PCI等。由于在大多数应用中数字模块会安装在小型显微镜上,考虑到设备的便携性和接口的通用性,市场上见到最多的是采用USB接口的数据采集卡。
该方案最大的优势在于借助PC平台。因为PC机集成的各种通用数据总线具有比较高的数据传输率,可以用来高速接收采集卡采集的数据,其内置大量的内存可以用作数据采集缓存,而且PC机具有丰富的通用外设(如显示和存储),因此在PC平台上搭建的数字显微镜功能扩展相对容易,产品设计周期较短。
然而,该方案的一个致命缺陷在于数据传输的速度。对于显微镜设备而言,为了能够清晰地辨别图像中的特征结构,图像需要达到至少500dpi的分辨率,这就要求图像解析度至少达到1 024×768,最好是1 280×1024(1.3 M)。如果要做到实时采集和处理(30 f/s),数据量将达到1 280×1 024×30×8=300 Mb/s。专用数据采集卡的采集速度不成问题,瓶颈在于采集卡到PC机的传输带宽。PC机PCI总线的速率为32(bit)×66=2 112 Mb/s,USB2.0的数据传输峰值可以达到480 Mb/s,firewire也可以达到400 Mb/s的传输速率,似乎都能满足要求。问题在于PC机的体系结构决定了任何外设都只可能是从设备,只能请求总线资源,而不能主动占有。在Windows(或是Linux)实时多任务操作系统的调度下,即使在系统不运行其他应用程序时,系统时间片和系统资源也会被操作系统内核和各类外设分享。以最常用的USB总线为例,理论速率是480 Mb/s,但是真正能用到的只有100 Mb/s左右。正因为如此,现在市面上基于PC的数据采集设备产品性能都不太理想,采集1.3 M像素图像时只能达到每秒7或8帧的帧率,达不到实时性要求。另外,对PC机的依赖也限制了这类系统在小型便携式设备上的应用,这也间接提高了系统成本。
(1)此类产品基本上是在前一种方案上的改进。为了解决传输速率问题,这类方案采用定制的PC和主板,并使用自己开发的操作系统,使总线专门用于数据传输,保证速度。这类产品的问题是开发和设计成本高,因此价格高昂,一般也不能用于便携式的小型显微设备中。
随着嵌入式处理器的不断发展,性能不断提高,使得在嵌入式平台上设计高速采集处理系统成为可能。本文将介绍一种基于XPLD和DSP的便携式数字显微镜方案。
2 嵌入式数字显微镜系统结构
一个成熟的系统体系结构要求系统内各部分分工明确,同时又具有一定的通用性和可移植性。嵌入式平台上一般使用DSP芯片实现图像处理。DSP芯片在数学运算方面有独到优势,但数据搬移却不是它的长项,因此需要另一个协处理器来完成繁琐的数据采集搬移任务。一般有ARM或FPGA/CPLD两种选择。ARM采用通用的系统结构,设计相对简单,但是数据接口(传感器接口和存储器接口)也相对固定,不够灵活。FPGA/CPLD虽然设计较复杂,但是应用灵活。考虑到不同的显微镜可能会用到各种不同的传感器,设计中选用了后者。另一方面,采集到的图像数据需要大量的缓存区,而DSP往往希望不受控地直接从缓存区中获得数据,这样才能发挥它的最大处理性能。最理想的结构是FPGA控制数据采集,然后把采集到的数据放到一个双口RAM中缓存起来,而DSP可以直接从双口RAM中取数据进行运算。但是双口RAM比较贵,而且容量小,用来缓存图像数据不现实,所们还需要用FPGA来实现数据缓存。
基于以上分析,显微镜前端采集处理模块结构设计如图1所示。
图像采集模块的核心是一块可编程逻辑器件XPLD,它负责连接图像传感器和后端处理设备,并实现自动的图像采集和数据传输功能。由它控制的DDR SDRAM为后端的DSP提供了大量的图像数据缓冲器。XPLD实现的另一个功能是驱动液晶显示屏显示图像。
DSP是系统的后端,负责实时处理采集到的图像数据,根据不同要求实现各种图像运算和连接外部数据存储设备。
3 关键技术的实现
3.1 DDR控制器
本设计首先面对的问题是需要大量的高速存储器保存图像数据。
从光学传感器采集的图像数据是不能直接送到显示器显示的,因为光学传感器和显示器的图像帧率是不同的。OV9630的图像输出帧率是30 f/s,而一般显示器要求的帧率是60 f/s,这就要求系统有一个大容量的数据存储区来缓冲一帧图像。本设计选择动态存储器(DDR SDRAM)主要是考虑到价格因素:大容量动态存储器的价格大概只有同样大小静态存储器的五分之一。使用动态存储器必须有相应的控制器来控制它的读写,目前有一些FPGA已经集成了动态存储器控制器或提供响应的库支持,方案中为了尽可能节省成本,选用了LATTICE公司的XPLD系列产品,它没有动态存储器控制器的资源,所以要自行设计。
动态存储器的控制比静态存储器复杂得多。为了解决大容量存储器地址总线宽度的问题,动态存储器的地址分成了行和列两部分复用到同一批管脚上。这样在保持容量不变的条件下减小了数据总线的宽度,有利于减小芯片的尺寸,因此可以实现高密度、大容量的存储,但同时也给操作带来了麻烦:数据地址需要分两次传送,而且由于内部地址译码的要求,行列地址传送还需要有一定的间隔(CAS latency)。动态存储器支持随机读写(单字节)或突发模式(一段连续的数据)以适应不同长度的数据操作。另外,动态存储器还需要通过定时充电放电(Reflesh)来保证信息不丢失。加上一些其他的错误恢复机制,一个完整的动态存储器控制器设计起来非常复杂。
对于本文的应用来说,只需要满足图像采集和暂存的要求,不需要实现所有的控制器功能,所以采用了如图2所示的控制器模型。
上电复位后进行控制器初始化,设定好控制器的工作模式,之后进入读写操作。本设计对于控制器的读写和刷新进行了极大的简化。
首先,所有的读写操作都是采用突发模式,并且设置成256 B的模式。因为显微镜应用中主要是采集和保存图像数据,这里碰到的都是连续的数据流,如对于130万像素的图像每行有1 280个连续像素点。使用最长的突发读写模式可以最大限度地提高读写效率,而且可以简化控制器的设计(不要判断是采用突发模式还是随机模式)。
其次,通用的DDR控制器都是接受系统的指令再进行相应的操作。而本文的应用要求相对固定:即接收从图像传感器发送过来的图像数据;输出相应的数据给后端DSP处理和显示器显示。因为图像输入输出数据的比例是固定的1:2(CMOS采集输入30 f/s,显示器输出要求60 f/s),即每次写操作对应2次读操作,所以可以简单地用一个状态标识Status来规定下一次操作,如表1所示。
Status设计成一个自动加“+”的2 bit的状态标志,程序根据Status的标识进入到相应的状态机实现读、写或是刷新的时序。这样的结构极大简化了DDR控制器的逻辑设计,可以方便地在相对简单和便宜的XPLD上实现。
最后,对DDR控制器的运行速度也有一定的要求。速度越高数据传输的延迟也越小,但是过高的速度会增加系统功耗。在本设计中,DDR是用于图像采集和图像显示之间的缓冲,DDR的数据吞吐速度必须要大于输入和输出数据的总和。输入端的图像传感器运行速度是48 MB/s,输出端的图像显示要求108 MB/s,因此DDR的操作速率要大于156 MB/s,考虑到各种开销,选择了192 MB/s的操作速率。
3.2 图像数据缓存
虽然解决了大容量存储器的问题,还仍不能实现所需要的显示和数据处理功能。从显示的要求看,需要连续的1 280个图像数据,而直接从DDR中读出的数据每次最多256个,所以需要另一个缓冲区缓存至少1 280个数据。从DSP处理的角度看,如前文所述,也不希望被动接收256个连续数据,最好是能方便地从一块缓冲区中取出数据运算。所以设计一个容量相对较大、又可以方便随机读写的缓存区是实现本文设计的关键。
因为缓冲区可以从DDR控制器和DSP/显示控制单元两个方面来操作,所以必须是双口RAM。从成本的角度考虑,使用外部双口RAM的方案不现实。XPLD内部提供了16块多功能模块MFB(Mul-Function Block),其结构简图如3所示。这16块多功能模块可以随意配置成TURE DPRAM(真双口RAM)、PESUDO DPRAM(伪双口RAM)、SRAM(单口RAM)、FIFO、CAM(查找表)和LOGIC多种模式。如果配置成本设计所需要的伪双口RAM(单向读,单向写),每块MFB可以配成2 KB,16块总共是32 KB,完全可以满足要求。
利用XPLD内部的伪双口RAM,设计出如图4所示的缓冲结构。
本设计中建立了3块512 B的双口RAM用于缓冲,其逻辑功能表述如下:
(1)双口RAM1、双口RAM2和DDR SDRAM共同组成图像采集的大容量高速缓冲。图像数据由传感器输出经过双口RAM1缓存后以页操作的模式写入DDR SDRAM;同时DDR控制器以前文所述的逻辑用页模式将数据从DDR SDRAM中读到双口RAM2中用于显示。这里需要注意的是双口RAM的大小。原则上说,因为图像的格式是1 280×1 024,每块双口RAM需要缓冲2行1 280×2的数据来保证旧的数据不会被新来的数据覆盖掉。但是因为前文设计的DDR控制器效率极高,且DDR的传输速率(大于200 MB/s)远大于图像传感器(48 MB/s)和显示器(108 MB/s)要求的数据速率。因此双口RAM1和双口RAM2只需要512 B,满足DDR两页轮换的要求,就可以保证没有数据丢失或被覆盖掉。
(2)双口RAM3是专门供DSP使用的,它的设置相对灵活,需要根据后端算法的不同设置大小和更新机制。本文设计的系统图像处理功能较少,所以留出512 B即可。
从以上设计的结构可以看出,整个系统基于嵌入式平台,其核心部件是一颗简单的XPLD可编程逻辑器件,它独立完成了图像采集、数据存储和图像显示功能,在采集130万像素图像时实时显示帧率达到30 f/s,以低廉的成本实现了高速数字显微镜的基本功能。而且整个实现过程没有占用DSP的处理资源,并且还给后端的DSP预留出一块高速的随机读写缓冲区。该方案稍加修改,便可以应用到各种不同的应用中,移植性极佳。
参考文献
[1] 刘德良,姚春莲,李炜,等.多分辨率图像实时采集系统的FPGA逻辑设计.电子设计应用,2003(10).
[2] 李博文,杨学友,李慧娟.VHDL在高速图像采集系统中的应用设计.单片机与嵌入式系统应用,2003(10).
[3] 俞诗鲲.基于单片DSP的指纹识别系统研究与实现.武汉大学硕士论文,2003.
[4] Lattice CPLD.http://www.latticesemi.com.
[5] TI DSP.http://www.ti.com.
[6] DDR SDRAM.http://www.samsung.com/Products/Semicon-ductor/common.
[7] ICM110U 3MP CMOS sensor.http://www.ic-media.com.