马志刚,刘文怡,凌伟
(1.中北大学 仪器科学与动态测试教育部重点实验室,电子测试技术重点实验室,山西 太原030051;2.山西农业大学 信息科学与工程学院,山西 太谷030801)
数据采集与存储技术已经在图像数据处理、遥测信息分析、语音识别、GPS导航、可视电话等一系列高速信号记录系统中扮演着越来越重要的角色,并且逐步渗透到其他重要领域。在航天应用领域,为了了解飞行舱内的情况,飞行器在执行飞行任务的过程中,地面需要对飞行舱内的环境进行持续监测,从而精确地获取舱体内部的各种参数信息。通过事后分析这些信息,可对飞行器的性能进行评价并为下次飞行试验做好准备。然而,由于图像数据传输速度快,信息量大,飞行舱的空间有限,因此,需要设计出一种具有采集与存储速度快、容量大、体积小、抗干扰能力强、可靠性高的数据存储系统[1]。
在数据存储系统中,影响存储速率的关键因素是数据传输和存储方式。采用LVDS总线传输方式和混合编帧技术提高了数据接收的速率;为提高数据存储器存储速率,本文采用了一种可使Flash存储速度达到最优的交叉双平面页编程技术[1-3]。
本文设计的高速数据存储系统用于完成对飞行器飞行过程中图像数据的采集、编码和存储。试验结束后,通过PC控制专用的读数装置读取存储系统中的数据,并由PC上的数据处理软件完成数据的分析与处理。在单元测试过程中,PC通过PCI通信接口卡(PCI9054)完成与高速数据存储系统之间的通信,实现指令的下发、在线实时监测状态显示、数据回读、对存储数据的分析以及生成分析报告等功能。系统主要功能模块可划分为:主控单元、PC、地面监控装置、图像采集单元、图像存储器(Flash)、电压转换模块等,如图1所示。
图1 系统总体工作原理框图
本文采用PLX公司的PCI9054芯片实现PCI总线接口的逻辑设计。PCI9054的数据宽度为32 bit,本地总线支持复用/非复用的32 bit地址数据总线。PCI总线作为桥接芯片,提供了PCI总线空间、本地总线空间以及配置空间,既能作为PCI总线的发起设备也可作为PCI从设备。FPGA作为本地总线控制器,即PCI局部总线的目标设备,完成PC与下位机的通信。设计采用从模式,基于FPGA和PCI9054的硬件平台完成PCI局部总线的设计,PCI板卡整体设计框图如图2所示。
图2 PCI板卡整体设计框图
PCI板卡插入PC的PCI扩展槽使用,如果要正常工作,需要在Windows下编写驱动程序。驱动程序主要实现以下几个功能:(1)连接设备;(2)设备初始化;(3)设备读和写;(4)断开设备。Windows操作系统下驱动程序开发最常用的有 DDK、Driverstudio、Windriver等工具。其中DDK的效率最高,但编写难度较大,因而多数技术人员使用 Driverstudio、Windriver来编写驱动程序,使用这两种工具编写出来的程序也称为WDM(Windows Device Module)程序。DriverStudio中的 DriverWorks软件为 WDM驱动程序提供了完整的框架,本设计利用其DriverWizard生成驱动程序框架,然后添加各功能函数。此处利用类KMemoryRange实现对PCI9054内部存储器的读写访问,类KIoRange实现对其寄存器的访问[4]。
图3 图像信号接口时序
图像数据由LVDS接口输入,图3所示为图像信号接口时序,经解串器DS90CR216解码后转换为21 bit并行总线输出。图像数据的帧同步信号周期为10 ms,高电平有效,每帧有289行有效数据;行同步信号周期为32 μs,高电平有效,每行有 384个有效数据;其中,像素时钟为15 MHz,图像像素时钟的上升沿为触发条件。帧同步信号低电平期间仍有(10÷0.032)-289=23.5个行同步信号,即帧同步信号低电平的时间应为 23.5×0.032 ms=0.752 ms。帧同步信号高电平的时间为 9.248 ms,行同步低电平的时间为 32-(384÷15)=6.4 μs。
测量信息伴随着图像数据而来,每接收一帧图像就接收80 B的测量信息,测量信息的串行传输波特率为115 200 b/s,每包测量信息的数据共10 bit。为便于PC进行图像数据分析处理,在测量信息的数据前加上帧头0X“14 92 00”和2 B帧计数。待80 B测量信息全部读取出来后,给出图像采集模块的复位信号,同时清零行计数器并清空片内FIFO中的信息,将采集到的一帧图像数据和编好帧的测量信息写入二选一数据选择器。在帧同步信号高电平期间,将图像数据写入外部16 KB的FIFO(IDT7206);在帧同步信号低电平期间,将测量信息写入,最后等待图像记录启动信号。
图像数据的缓存、Flash存储与事后回读等过程中都用到了片内FIFO,采用片内FIFO可降低硬件的复杂度、节约了成本且更有利于完成逻辑控制。本文选用的FPGA芯片是XC3S400,该芯片内部的16个Block RAM不占用芯片的逻辑资源,设计中采用“A端口只写,B端口只读”的思想,根据每个端口的时钟信号以及使能信号分别对各个端口进行操作。利用IP核技术构建容量为1 KB的片内FIFO原理图如图4所示[1]。
图4 IP核构建的FIFO
图4中的FIFO模块调用数据宽度为8 bit、存储深度为1 024 B的双口RAM,该RAM共有两个独立的存储单元(A和B)。RAM的每一个管脚都是独立配置的,数据和地址的写入发生在各个单元的时钟上升沿。数据和地址的读/写操作还与读/写时钟有关,所以设计中将A端口写使能信号接VCC,B端口的写使能信号接GND,实现“A端口只写,B端口只读”。由外部控制模块fifo_ctrl为双口RAM的A端口产生写时钟和写地址,为B端口产生读时钟和读地址,根据读写地址的差值offset产生FIFO 的空(empty)、半满(half)以及满(full)信号。
图像传输速度快,对图像数据的存储采用写入速度最快的交叉双平面页编程(Interleave Two-plane Page Program)技术[2-3]。为实现对Flash的交叉双平面操作,首先要对Flash(K9WBG08U1M)芯片内部平面结构进行划分。整片Flash分为两片(chip#1和chip#2),每片分为 4个平面(plane),每个平面共 2 048个存储块。也就是说,整个Flash存储空间由 8个平面(plane1~plane8)组成,将这8个平面分为 4组:chip#1中的 plane0与 plane1为第 0组,plane2与 plane3为第 1组;chip#2中的 plane4与plane5为第 2组,plane6与 plane7为第 3组,Flash的交叉双平面操作必须严格按照这个分组执行。
定义矢量plane(2:0)对这8个平面进行操作管理:plane(0)用于控制平面组内的两个平面之间的切换:为0时表示对偶数平面操作,对应操作偶数块;为1时表示对奇数平面操作,对应操作奇数块。plane(1)用于完成各个平面组之间的切换:为0时表示操作的是偶数组 (第0组与第 2组),对应操作 Flash的前 4 096块,即 A31为 0;为1时表示对奇数组(第1组与第3组)进行操作,对应操作Flash的后4 096块,即A31为 1。plane(2)相当于片选信号,用于内部两片Flash之间的切换,为0表示对chip#1进行操作,为1表示对chip#2操作。进行交叉双平面操作时,可根据plane(2:0)的值确定所要操作的平面。
当对第0组平面执行编程操作时,依次往第1组、第2组、第3组的各个平面中写入命令、地址和数据。经过多次反复测试,Flash的峰值写入速度不小于30 MB/s,完成这三组平面的数据写入时间为 6×4 096 B÷30 MB/s=819.2 μs>700 μs 。如果写入 Flash 速度小于峰值速度,则后3组的数据写入时间将会更大。所以,当这4组依次编程结束准备继续对第0组其他页进行编程时,已经错过了第0组的页编程时间。交叉双平面页编程的方法省去了等待页编程的时间,缩短了Flash的写入时间,提高了写入速度[3]。交叉双平面页编程时序如图5所示。
系统上电后,先运行PC软件,检查监控装置与计算机之间通信是否正常,然后设置并启动信号源,此时监控装置开始向记录器发送数据。其中,监控装置下发的数字量串行波特率为115 200 b/s,实时监测回收的信号波特率为800 kb/s,信号源数据格式设计为:每帧共128 B,前 5 B由帧头0X “EB 90”和 3 B帧计数组成,剩余字节为0X“0F~89”递增数据。PC监测数据的内容就是监控装置向记录器发送的数据。根据实时显示的监测数据可以判断系统是否正常工作。通过PC读取并分析记录器所存数据与下发信号源是否一致,完成系统功能自检。
系统上电后,存储器接收到启动记录信号后开始记录。记录图像数据的时间不限制,直到记满。图6是用图像分析软件对测试数据还原后的某帧图像。
设计了一种以FPGA为主控单元,以Flash为存储介质的高速图像数据存储系统。系统用于完成对高速LVDS图像数据的采集、存储和实时监测,系统具有存储速度快、存储容量大、系统可靠性高等优点,能够满足实际测试的需求。在后续的设计中还可以做以下优化工作:(1)采用双片 Flash进行双备份,防止单片 Flash失效而造成数据丢失,进一步提高数据存储的完整性和可靠性[5-6]。(2)对FPGA代码进行优化、提高FPGA资源的使用率[6-8]。
图5 交叉双平面页编程时序图
图6 还原后的某帧图像
[1]李勇.基于LVDS接口的高速图像数据记录器的设计与实现[D].太原:中北大学,2013.
[2]马志刚,朱思敏,刘文怡.基于LVDS的高速图像数据存储系统设计[J].数据采集与处理,2013,28(3):382-385.
[3]郭铮,刘文怡,冯妮.基于FPGA多通道高速数据采集存储器设计[J].电视技术,2012,36(17):55-57.
[4]王丽莉.基于CPCI光纤传输卡的设计与研究[D].太原:中北大学,2012.
[5]常铁原,王欣,陈文军.多路数据采集系统的设计[J].电子技术应用,2008,11(2):21-23.
[6]刘攀,王红亮,孟令军.基于FPGA的数字图像采集存储系统的设计[J].电视技术,2010,34(6):33-35.
[7]胡振良.某导弹遥测数据存储器系统的设计与实现[D].太原:中北大学,2008.
[8]段静辉.基于存储测试技术的炮射导弹测试系统的研究[D].太原:华北工学院,2000.
[9]王国华,宋卿,徐旭伟,等.飞行数据采集器通用自动测试软件[J].测试技术学报,2010,24(3):199-204.