基于FPGA的高速图像数据采集存储系统设计
2013-08-13邸丽霞张彦军洪应平
邸丽霞,张彦军,洪应平
(中北大学a.电子测试技术国家重点实验室;b.仪器科学与动态测试教育部重点实验室,山西 太原 030051)
责任编辑:魏雨博
在电子信息时代,声音和图像已经成为人们获取信息的两种主要途径,尤其是一些大型设备仪器在测试以及运行过程中的图像工况信息检测已经成为检测或校验设备正常工作的一种重要手段,利用实时监测的图像信息可以更好地了解设备仪器的工作状态,并且在设备仪器发生故障时,便于查找故障点,减小排查故障难度。因此,如何将监测的图像工况信息实时采集、存储并在事后回读、解码以恢复当时的图像,已经成为现代测试技术研究的一个重要领域。
现在的高频摄像机输出的图像数据传输速度快,存储容量庞大,普通的逻辑处理单元已经无法满足要求,而功耗低、处理速度高的FPGA(现场可编程逻辑阵列)的出现,为高速、大容量图像数据的采集、存储提供了全新的设计方案。FPGA的并行性以及灵活的可配置性有利于图像数据的采集、存储设计,同时解决了数据量庞大、可靠性、精度小以及速度不匹配等问题[1]。
1 总体方案设计
本文针对图像信号传输的特点,设计了模拟高频图像信号输出的水平同步、垂直同步以及时钟信号,即图像信号源模块。输出的图像信号源通过电缆传输到图像采集存储模块进行数据的采集、存储,并对图像数据采集存储装置进行相应的系统控制操作。在系统记录完毕所需图像信号数据后,监控读数模块将存储的图像数据读取并送至控制计算机存盘、解码以进行闭环检测与校验。系统总体框图如图1所示。
图1 系统总体框图
2 图像信号源模块设计
在该图像数据采集存储测试系统中,图像信号源模拟高频摄像机输出,为数据采集存储模块提供高速图像信号数据,包括帧同步信号、行同步信号、像素同步时钟以及图像数据[2],这些信号均从标准Camera Link接口送出,通过LVDS接口发送至图像数据采集存储装置,图像信号源发送数据时序如图2所示。
图2 图像信号源发送数据时序图
图2中Vsync为帧同步信号,电平模式,高电平有效;Hsync为行同步信号,脉冲模式,上升沿有效;CLK为像素同步时钟,脉冲模式;Data为8 bit图像数据,标准Camera Link接口在CLK的上升沿将数据发送,LVDS接口在CLK的下降沿将数据接收,CLK为常运行模式。每个Vsync有效期内有480个Hsync有效信号,第0~479个Hsync有效;每个Hsync有效期内有640个有效图像数据位。按照上述时序计算,每秒钟的图像数据量为30.72 Mbyte,即图像采集存储模块需将上述高码流的数据完整准确采集并存储到Flash存储模块中。
3 图像信号采集存储模块设计
在本图像信号采集存储测试系统中,图像信号采集存储模块是本系统的核心。图像信号经LVDS接口转变为普通CMOS电平信号进入中控逻辑单元,FPGA解码模块根据图像信号的帧同步(Vsync)、行同步(Hsync)、像素同步时钟(CLK)解码得到图像数据;存储模块上电后由中控逻辑单元控制擦除Flash memory,等待记录图像数据;接着,在3个控制信号的作用下采集高码流、大容量数据,并将数据存储到Flash存储模块中;存储完毕后,存储模块接受监控读书装置的读书请求,将存储的图像数据回传至控制计算机进行存盘以供分析。因此,针对大容量、高码流的图像数据进行了高速缓存FIFO和Flash高速数据写入设计。采集存储模块功能框图如图3所示。
3.1 高速缓存FIFO设计
传统设计常采用“乒乓型”方式或双口RAM方式作为高速数据传输系统的高速缓存方式。在现代数字电子系统设计中,FIFO存储器以其数据传输率高、可处理大量数据流、可匹配具有不同传输率的数字系统而得到了广泛使用。在本系统中,选择合适的高速缓存芯片对于提高图像数据采集存储测试系统性能很重要。
图3 采集存储模块功能框图
作为高速缓存芯片,FIFO的如下两个重要指标可以作为选择芯片型号的参考信息[3]:FIFO的宽度,即FIFO一次读写操作的数据位;FIFO的深度,即FIFO可存储多少个N bit的数据(若宽度为N)。本设计中的图像数据采集存储测试系统中,中控逻辑单元对图像信号源解码后,得到的图像数据量为30.72 Mbyte/s,所以选用一种具有很高的读写速度、能够可靠进行写入读出操作的外部FIFO用于高速图像数据的缓存至关重要。对本设计中的缓存数据进行分析,如下:
1)本设计中,4 Gbyte K9WBG08U1M型Flash接口极限写入速率可达到40 Mbyte/s,产于IDT公司的64 k×18 bit IDT72V285,其读写速度可达到65 Mbyte/s,选用该产品可以达到高速缓存的目的,可靠写入读出。
2)根据设计时序,可计算出FIFO的读写信号周期为25 ns,而IDT72V285的读写周期最小为10 ns,可实现25 ns的读写周期。
3)当IDT72V285写使能有效,且FIFO满无效时,在写时钟上升沿,将8 bit数据写入FIFO中;当FIFO非空(空标志无效),且读使能有效时,在读时钟上升沿,将8 bit数据从FIFO中读出,整个时序控制简捷高效,便于逻辑实现。
3.2 高速数据写入Flash时序设计
在本设计中,大容量数据存储模块选用4 Gbyte K9WBG08U1M型Flash芯片,该芯片以页为单位进行数据的读写,以块为单位进行数据的擦除,因此需要3类地址:Column Address,列地址;Page Address,页地址;Block Address,块地址。K9WBG08U1M的地址和命令需在I/O[7∶0]上传递,占用8 bit的数据宽度,它的写入过程包含2个步骤:第1步是通过I/O端口将数据写入每一页的寄存器内的数据加载阶段;第2步则是页编程阶段,即在芯片内部,将数据从页寄存器内部传输到存储单元中。
由于1片4 Gbyte的K9WBG08U1M型Flash由2片2 Gbyte的K9F8G08UOM型Flash组成,故在本设计中,选择K9WBG08U1M的交错式双平面(Interleave two_plane)方式,即在2片2 Gbyte的K9F8G08UOM型Flash之间交错地写数据。中控逻辑单元首先控制Flash存储模块读取8 kbyte数据,写到第1片K9F8G08UOM(chip#1)页寄存器中,接着发送页编程命令到chip#1,因此时chip#1在进行页编程,处于忙状态,而第2片K9F8G08UOM(chip#2)处于等待状态,故FPGA可控制发送数据及页编程命令到chip#2;chip#1完成页编程后,即可转换到chip#2进行页编程操作,如此反复进行下去[4]。K9WBG08U1M的接口写入速率极限可达40 Mbyte/s,在逻辑设计过程中,不考虑Flash芯片的页编程时间,采用交错式双平面并行写入的方式,在400 μs的时间内可写入16 kbyte数据,满足输入码率(30.72 Mbyte/s)要求。
当采集存储模块中控逻辑单元判断到控制信号1起作用后,对Flash存储芯片进行全空间擦除,同时将无效块地址存储到FPGA内部所建RAM存储器中;控制信号2起作用后,开始进行数据写入操作;控制信号3起作用后停止向存储模块写入数据。在交错式双平面页编程过程中,一次最大写时间(实测Tmax=130 μs)内,写入数据4 kbyte,写入数据速度约31 Mbyte/s,其中包括4 kbyte数据的写入时间以及2个Plane之间的切换时间1 μs,还有7个命令字的写入时间,充分考虑到写操作中的时间需要,进行写入速率的计算,时间计算如下:
(4 087+7)×31 ns+1 μs=128 μs(4 kbyte 数据)
1 000 000/124 ×4/1 024 Mbyte/s=31.50 Mbyte/s
系统接口处的图像信号源输出数据的码流为30.72 Mbyte/s,小于31.50 Mbyte/s,所以,该 Flash 存储模块对于图像接口处的数据能够可靠接受、缓存并存储,确保大容量数据从缓存中读取后完整准确地写入Flash模块中。Flash存储模块工作时序流程图如图4所示。
4 监控读数模块设计
图像数据采集存储完毕后,需要将数据进行完整准确的回读以对其进行解码和校验。一般情况下,大部分的存储模块与监控读数模块之间采用的是RS-422、RS-485等串行数据接口传输标准,而由于传输过程中噪声、电磁干扰、功耗、成本等方面的影响,传输速度和距离是成反比的,例如,422接口标准中传输码率和传输长度的乘积不能大于10的8次幂。同时,由于数据传输码率低,对于大容量数据的读取需要相当长的时间,且传输距离一般都在几十米以上或者更远,此时以上所说的串行数据接口标准传输速度已经不能满足要求[5]。
图4 Flash存储模块工作时序流程图
充分考虑到速度和距离的要求,本设计提出使用基于LVDS总线的低电压差分传输方式[5]。这种传输方式可满足高速数据下的短距离传输,但由于其在普通双绞线上的传输损耗随信号频率的平方根成正比增加,因此,LVDS在远程传输应用中受限。在此,需于数据发送端对信号进行驱动,以增强信号,同时,在接收端通过均衡补偿信号远程传输的损耗。
该监控读数模块通过USB与PC机相连,在此选用了CYPRESS公司研制的EZUSBFX2系列CY7C68013作为USB接口芯片,监控读数模块主控逻辑单元接收到PC机指令后,向图像数据采集存储模块发出读书请求脉冲,采集存储模块实时判断该请求,通过LVDS向监控读数模块发送有效数据,在监控读数模块读书请求无效时,发送无效数据至监控读数模块,以保证LVDS总线收发端处于不间歇通讯状态。监控读数模块主控单元收到有效数据后,实时写入内部FIFO,而USB控制芯片CY7C68013则实时判断监控读数模块中控单元内部FIFO的半满信号,半满后即读数据至PC机,以此来实现整个接口的协调、有序、高速、高效。数据长线读取传输框图如图5所示。
5 系统测试结果
图5 数据读取传输框图
在调试完毕该系统的软硬件功能之后,对系统总体功能进行综合测试。由高速视频摄像头向该高速图像数据采集存储测试系统发出图像数据(数据码流为30.72 Mbyte/s),经采集存储后,由监控读数模块通过LVDS总线读回图像数据,利用控制计算机的解码软件对图像数据进行解码,解码后图像如图6所示。
图6 综合测试下的解码图像(截图)
6 结论
基于FPGA的高速图像数据采集存储测试系统达到了对高码流、大容量图像数据进行采集、存储、数据解码及校验的系统测试功能。该系统针对图像信号传输的高速、大容量数据特征,设计了图像信号源模块、高速缓存FIFO模块、高速数据写入Flash模块以及监控读数模块,可以将图像信号(数据码流为30.72 Mbyte/s)实时采集接收并完整准确送入Flash进行存储,并在事后将存储数据回读至控制计算机解码、判读。该设计充分利用了图像的高实时性以及现场特征,为现代工业领域了解工作状态及故障定位等工况信息提供了一种全新的测试手段。
[1]褚振勇.FPGA设计及应用[M].西安:西安电子科技大学出版社,2002.
[2]章毓晋.图像处理和分析[M].北京:清华大学出版社,1999.
[3]朱岩.基于闪存的星载高速大容量存储技术的研究[D].北京:中国科学院研究生院,2006.
[4]张文栋.存储测试系统的设计理论及其应用[M].北京:高等教育出版社,2002.
[5]张健,吴晓冰.LVDS技术原理和设计简介[J].电子技术应用,2000(5):59-61.