文献标识码:A
DOI:10.16157/j.issn.0258-7998.2017.06.002
中文引用格式:马林,李锦明,张虎威,等. 高速CMOS图像存储与实时显示系统设计[J].电子技术应用,2017,43(6):7-10,14.
英文引用格式:Ma Lin,Li Jinming,Zhang Huwei,et al. Design of high-speed CMOS image storage and real-time display system[J].Application of Electronic Technique,2017,43(6):7-10,14.
0 引言
在航空航天图像监测领域,高分辨率、高帧频的工业相机有着广泛的应用,它可以有效捕捉高速飞行器的飞行姿态,最终通过计算机对图像进行分析与处理,提取出其运行速度、加速度等重要参数[1]。随着工业相机分辨率以及帧频的不断提高,对图像存储系统的要求也越来越高,特别是在载人航天测试领域,存储系统必须能够应对复杂的工况环境。传统的Nand Flash以及机械硬盘等存储介质存在容量小、操作复杂以及抗干扰能力差等缺点,而SSD固态硬盘凭借其容量大、速度快、环境特性好等特点,在科研、航空航天以及军事测试等领域,有广阔的应用前景。
现阶段,主要使用传统的Flash对图像数据进行采集。文献[2]和[3]采用Flash阵列进行数据的存储,虽然在一定程度上提高了读写速度,但是存在接口操作复杂、稳定性差等缺点。文献[4]使用图像采集卡进行图像数据的实时显示,增加了系统的体积与复杂度,而且图像的分辨率不高。本文通过采用FPGA对系统功能进行开发,利用4块SSD固态硬盘构成存储阵列对高速图像进行存储,可以在飞行器回收后读取原始图像数据,同时以抽帧并降低分辨率的形式对图像数据进行实时显示,以减小遥测数据回传时的带宽占用,实现了图像数据的大容量高速存储与实时显示,并且具有可移植性。
1 系统总体设计
系统设计总体框图如图1所示。系统选用Point Grey公司生产的GZL-CL-41C6型号高速灰度相机,通过Camera Link接口发送图像数据和同步信号,串口接收相机控制命令,图像分辨率为2 048×2 048像素,帧频为150 f/s,像素格式为8 bit[5]。由于相机产生的数据量约为600 MB/s,而SATA2.0接口的单块固态硬盘的写入速度约为180 MB/s[6],所以使用4块固态硬盘构成RAID0阵列进行存储。系统采集工业相机输出的高速图像数据,并将数据发送到FPGA后分成两路,一路经过DDR3缓存后,并行存入固态硬盘整列中;另一路经过格式转换后存入DDR3缓存中,然后通过VGA接口实时显示图像数据。
2 系统硬件电路设计
2.1 图像采集模块
系统前端工业相机使用了8-tap模式输出像素数据,即一次输出8个像素数据,所以使用Full模式Camera Link接口电路。在Full模式下,Camera Link接口使用两个连接器,需要使用3个数据接口芯片、一个相机控制芯片和一个串行通信芯片。通过接口芯片将Camera Link电缆所传输的LVDS差分信号转换为FPGA可以直接进行处理的TTL电平信号。
相机与FPGA连接示意图如图2所示。系统选用TI公司生产的DS90CR288A作为数据接收芯片,DS90LV-047ATM为控制芯片,DS90LV019TM为串行通信芯片。其中,D0~D23为数据信号,FVAL、LVAL、DVAL为同步信号,CC1~CC4为相机控制信号,SerTC与SerTFG为串行通信信号。
2.2 VGA驱动电路
FPGA的输出为3.3 V的电平信号,而VGA接口要求的输入信号为0~0.714 V的模拟信号,所以为了满足VGA显示要求,必须对FPGA的输出信号进行D/A转换,以实现0~0.714 V的模拟信号输入[7]。系统选用ADI公司生产的视频转换芯片ADV7123实现VGA驱动,由于相机输出的图像数据为灰度图像,所以将R、G、B三个通道中的任意一个与FPGA相连,并且将其他两路接地。本设计将FPGA输出与红色输入端口相连,并将未使用的绿色和蓝色模拟信号连接37.5 Ω终端电阻。
2.3千兆以太网接口电路
系统使用了Realtek公司生产的以太网收发器RTL8211EG实现千兆以太网数据传输。链路层、传输层以及网络层使用UDP/IP协议,由FPGA实现。RTL8211EG与FPGA的电路连接示意图如图3所示,RTL8211EG通过GMII接口与FPGA进行连接,主要用来连接以太网的MAC层和PHY层。当使用千兆以太网进行数据传输时,接口时钟为125 MHz。其中,接收时钟由RTL8211EG的E_RXC提供;发送时钟由FPGA的E_GTXC提供,接收与发送数据均在时钟上升沿进行采样。
3 系统软件设计与仿真
3.1 图像实时显示模块
系统相机输出的图像分辨率为2 048×2 048像素、150 f/s帧频的图像,无论是分辨率还是帧频都超过了通用VGA接口显示器的显示格式,所以可以采取抽帧并降低分辨率的方式对图像进行显示。
3.1.1 图像压缩单元设计
系统对原始分辨率为2 048×2 048像素的图像进行如图4所示的缩小,将3×3范围内的9个像素数据合成为1个像素数据,最终得到分辨率为682×682像素格式的图像。为了降低噪声信号在图像中的影响,使用了对9个像素数据取中值的方式进行合成。
在FPGA程序设计中,使用了9个FIFO对算法进行实现,实现方法如图5所示。每个FIFO的大小为1 024×8 bit,通过9个FIFO对3行像素数据进行缓存。其中,首先用FIFO1、FIFO2、FIFO3分别存储第一行的第1、2、3个数据,紧接着再存储第一行的第4、5、6个数据,直到第一行存储完毕;之后使用FIFO4、FIFO5、FIFO6以相同的方式缓存第二行数据,FIFO7、FIFO8、FIFO9缓存第三行数据。前三行数据缓存完之后,再使用另外9个FIFO存储第4、5、6行数据,与第一组FIFO构成乒乓缓存结构。这样,每一组FIFO可以在一个周期读出需要处理的9个像素数据,并对这9个数据提取中值。
对于N为奇数的中值运算,若N为9,则需要比较的次数为36次,结合FPGA并行处理的优势,同时使用36个比较器,可以达到最大处理速度[8]。此外,VGA显示器分辨率为1 024×768像素,而经过处理后的图像分辨率为682×682像素,所以图像应在显示器中央显示,在进行VGA驱动显示时,可以将其他像素补0,即黑色图像。
3.1.2 抽帧缓存模块
由于相机输出图像的帧频为150 f/s,而常用VGA分辨率格式的帧频一般都在75 Hz以下,为了匹配VGA接口分辨率,对相机图像进行抽帧缓存处理,每两帧抽取一帧,依次存入两片DDR3中,最终以1 024×768@75格式的VGA分辨率进行显示。
抽帧显示时序图如图6所示。将相机帧同步信号FVAL进行4分频,得到抽帧控制信号F_Control,再生成一个以F_Control的边沿为复位信号的FVAL上升沿计数器CNT。当F_Control为低电平时,将CNT为1的帧图像存入缓存1;当F_Control为高电平时,将CNT为1的帧图像存入缓存2。读缓存与写缓存正好相反,在F_Control为低电平时读取缓存2中的数据;在F_Control为高电平时读取缓存1中的数据。
在程序设计时,对图像分辨率、图像缩放因子、图像帧频、抽帧系数等关键参数使用Verilog HDL语言中的`define语法进行宏定义,实现任意分辨率和帧频的图像格式转换,以便相机和显示器型号的改变以及系统移植。
3.2 图像存储模块
系统以Spartan6-T系列FPGA中的GTP高速串行收发器为基础,实现SATA2.0控制器的物理层,并使用Verilog HDL语言实现链路层、传输层以及命令层的开发,最终实现SATA2.0协议的DMA传输。
在进行图像存储时,首先将图像采集模块采集到的数据先通过异步FIFO进行位宽转换,系统使用FPGA中的MCB(Memory Controller Block)硬核来控制DDR3存储器,为了最大化带宽,其用户端口位宽选择为128 bit,所以需要把Camera Link接口64 bit位宽的数据转换为128 bit位宽数据,再把数据输入数据分配模块。数据分配模块流程如图7所示。系统使用的DDR3存储器型号为MT41J256M16,容量为512 MB,将其分为上、下半页,数据以256 MB为单位按照流水线方式依次存入两片DDR3之中。
系统使用的SATA控制器的寻址方式为逻辑块寻址,每个逻辑块的大小为512 B。为了最大化利用存储带宽,使用突发读写模式,其中写突发读写控制端口cmd_bl的位宽为18 bit,最大读写深度为262 144,一次可以读写262 144×512 B,即128 MB的数据。硬盘存储数据分配流程图如图8所示,以128 MB为单位将DDR存储器每半页再次分块,SATA控制器0~SATA控制器4分别按照命令读取DDR3_0和DDR3_1中的数据,并以流水线的方式存入固态硬盘中。
4 系统测试
为了验证系统功能的正确性,对系统存储模块以及显示模块分别进行了测试。使用三星公司的750 EVO固态硬盘进行测试,在SATA控制器数据端口插入触发信号,当控制器读取或写入硬盘数据时,记录数据流量及时间,当计满1GB的数据后,计算读写速度,同时对计数器清零,之后将速度信息通过串口模块发送到上位机。系统存储模块读写速度测试如图9、图10所示。
通过Camera Link串行通信芯片发送命令,将相机图像设定为测试图像。相机测试图像在同一行中灰度值逐渐递减,可以清晰地反映图像数据的传输过程,并且可以根据每一个像素的相邻数据判断图像传输是否发生错误。通过上位机回读显示的图像与实时显示的图像均显示良好,没有发生像素缺损和错位现象。
5 结束语
本文设计了一种高速CMOS图像存储与实时显示系统,主要包括系统图像接口模块、VGA驱动电路以及图像回读模块等硬件电路,同时对图像显示模块及存储模块的软件进行设计。经过读写速度测试以及图像显示测试,表明该系统可以对分辨率为2 048×2 048像素、帧频为150 f/s的高速图像进行存储与实时显示,具有较高的可移植性以及实用价值。
参考文献
[1] 韩帅.基于工业相机的图像采集与回放系统研究[D].太原:中北大学,2015.
[2] 张惠臻,周炎,王成.基于NAND Flash的嵌入式大规模数据存储机制[J].华中科技大学学报(自然科学版),2017,45(1):46-51.
[3] 徐永刚,任国强,吴钦章,等.NAND Flash图像记录系统底层写入控制技术[J].光电工程,2012,39(9):138-144.
[4] 马志刚,刘文怡,凌伟.基于PCI和LVDS的高速数据存储系统的设计[J].电子技术应用,2014,40(4):80-83.
[5] BARRERA E,RUIZ M,SANZ D,et al.Test bed for real-time image acquisition and processing systems based on F1exRI0,Camera Link and EPICS[J].Fusion Engineering and Design,2014,89(5):633-637.
[6] 刘伟.SATA接口双硬盘控制技术研究与实现[D].太原:中北大学,2016.
[7] 吴伟学.基于FPGA的图像采集与处理系统设计[D].广州:华南理工大学,2015.
[8] 李飞飞,刘伟宁,王艳华.改进的中值滤波算法及其FPGA快速实现[J].计算机工程,2009,35(14):175-177.
作者信息:
马 林1,2,李锦明1,2,张虎威1,2,侯天喜1,2,降 帅1,2
(1.中北大学 电子测试国家重点实验室,山西 太原030051;
2.中北大学 仪器科学与动态测试教育部重点实验室,山西 太原030051)