文献标识码:A
DOI:10.16157/j.issn.0258-7998.2016.12.014
中文引用格式:张志伟,靳鸿,杨少博. 高速大容量记录仪的USB 3.0高速读数接口设计[J].电子技术应用,2016,42(12):54-57,61.
英文引用格式:Zhang Zhiwei,Jin Hong,Yang Shaobo. Designer of USB 3.0 high speed read interface in high speed and large capacity data recorder[J].Application of Electronic Technique,2016,42(12):54-57,61.
0 引言
遥测、遥感以及雷达图像信号具有精度高、数据快、容量大的特点,在飞行器飞行过程中无法做到实时分析和处理,而必须将采集到的数据以适当的方式存储起来,待飞行任务结束后进行回读分析[1]。随着其传输速度和数据量的不断增加,记录仪的存储容量也随之增大。目前计算机常用的外部接口RS232、USB 2.0及以太网接口等[3,4]已无法满足记录仪存储数据的快速读取,而USB 3.0[5]技术的出现无疑解决了这一问题。USB 3.0协议向下兼容其他版本,并提供了超速模式,其理论最高传输速率可达5 Gb/s。本文以某高速大容量机载雷达数据记录仪为例[6],针对流水线技术构建的高速大容量存储阵列,设计了一种基于USB3.0的高速读数接口。
1 高速大容量存储系统概述
高速大容量数据记录仪结构框图如图1所示,系统主要完成18 bit LVDS形式的数据(包括16 bit并行数据、1 bit时钟信号和1 bit写使能信号)的实时接收、FIFO缓存、Flash流水线存储以及USB 3.0数据上传。16 bit并行数据传输速率为120 MB/s,LVDS数据经LVDS接口电路转换为TTL电平以及数字隔离处理后输入到FPGA,在FPGA内部Flash控制器的控制下写入Flash存储整列中;记录仪记录完成后,若需要读数时,可通过USB 3.0接口将存储阵列中的数据快速上传至计算机。
系统存储模块采用16片NAND型Flash芯片K9WBG08U1[7,8]构建成4×4存储阵列,每组4片Flash,采用了8级流水线操作进行字扩展,最快存储速率可达39.96 MB/s。4组Flash进行位扩展组成数据宽度为32 bit、存储容量共64 GB的存储阵列,Flash存储阵列存储速度最高可达39.96×4=159.85 MB/s。存储阵列结构原理如图2所示。
2 USB 3.0读数接口设计
系统采用基于CYUSB3014的USB 3.0接口实现与计算机之间的数据通信。CYUSB3014是新一代USB 3.0外设控制器[9],其有32个物理端点,支持USB 3.0和USB 2.0设备以及2.0版的高速移动(HS-OTG)主机和外设。CYUSB3014有3种接口模式,即通用I/O口模式、从设备(Slave FIFO)接口模式和GPIF主设备接口模式。高速数据传输采用后两种模式。本设计采用同步Slave FIFO接口模式[7,8],FPGA作为逻辑控制器,CYUSB3014作为从设备。FPGA与CYUSB3014的连接如图3所示。
图3中SLCS为片选信号,低电平有效;SLWR为从设备写入选通,低电平有效(写操作:由FPGA至CYUSB3014);SLRD为从设备读取选通,低电平有效(读操作:由CYUSB3014至FPGA);SLOE为从设备输出使能,低电平有效,激活该信号则CYUSB3014数据总线被驱动。A1和A0两位地址线用来选择从设备CYUSB3014上的线程,FPGA主控先驱动这两位地址线,然后激活读选通或写选通,由于USB 3.0读数接口将数据记录仪的数据回传至计算机,需用到CYUSB3014的读FIFO和写FIFO两个过程,所以必须创建两个线程;当A1:A0=0时,选择线程0,用于写过程;当A1:A0=1时,选择线程1,用于读过程。FLAGA和FLAGB为CYUSB3014端点缓冲器状态标志位,可以配置为空、满、局部空或局部满状态;FLAGA专用于线程0,而FLAGB专用于线程1。PKTEND是数据包结束信号,低电平有效,可将短数据包或零长度数据包写入从设备FIFO内。PCLK是FPGA提供给CYUSB3014的FIFO接口时钟,D[32:0]为32 bit数据线。
同步Slave FIFO写序列如图4所示,单次写操作步骤如下:
(1)主设备先驱动FIFO地址“An”,然后激活SLCS信号,主设备将它的数据驱动到数据总线上。
(2)激活SLCS后,主设备将在下一个时钟周期内激活SLWR。
(3)激活SLWR时,主设备会将数据写入到FIFO内,并且FIFO指针会在PCLK的上升沿上递增。从时钟的上升沿算起,经过3个时钟周期以及tCFLG的延时,FIFO标志将被更新。
对于连续写入模式,主设备在整个写入过程中持续激活SLWR和SLCS。主设备激活SLWR后,每当PCLK的上升沿到来时,数据总线上的数值都被写入到FIFO中。通过PKTEND信号,可主动将某个短数据包发送给USB主机。如果激活PKTEND但不激活SLWR脉冲,就生成ZLP(零长度的数据包);同时激活PKTEND和SLWR时,CYUSB3014的GPIF II状态机会将数据包作为一个短数据包,并将其发送到USB接口。
3 USB3.0接口主要程序设计
3.1 CYUSB3014固件程序设计
为了实现数据双向传输,创建2个DMA通道作为生产者的套接字和作为消费者的套接字,并分别分配4倍缓冲区大小。由于USB 3.0模式下单个缓冲区大小为1 024 B,故套接字缓冲区大小为4×1 024 B,可实现高吞吐量性能。通过外部逻辑控制器控制每次传输数据量,可避免使用局部FLAG。
按照图3定义好的FPGA与CYUSB3014的连接,利用GPIF Designer II软件进行接口设置,GPIF II接口定义如图5所示。图中CLK即为FPGA提供给CYUSB3014的时钟,Databus为16 bit数据总线,Addressbus为用于线程选择的2 bit地址线,FLAGA专用于线程0,而FLAGB专用于线程1。
GPIF II提供256种固件可编程状态,可在状态机设计界面进行状态机设计。本应用中状态机如图6所示,共有6个状态,分别为RESET(初始态)、READ(读FIFO)、WRITE(写FIFO)、ZLP(零长度数据包)、SHORT_PKT(短数据包)、IDLE(空闲态)。对于来自初始态的所有转换,转换公式被固定为LOGIC_ONE。
写FIFO过程如下:每当FLAGA=1,外部逻辑控制器可向CYUSB3014写入数据,CYUSB3014进入WRITE状态需满足SLCS=0、SLWR=0、PKTEND=1、SLRD=1。在WRITE状态CYUSB3014完成IN_ADDR和IN_DATA两个操作。通过IN_ADDR操作,GPIF硬件采样来自地址总线的值,并使用它选择DMA线程。通过IN_DATA操作对来自数据总线的数据进行采样,然后将其转移到所指定的位置(DMA通道或固件应用)。在ZLP状态和SHORT_PKT状态,通过COMMIT操作可强制缓冲器/数据包结束。写FIFO过程仿真时序如图7所示。
3.2 FPGA程序设计
记录仪采集到的数据以8级流水线方式写入到Flash存储阵列,即在写入过程中同时对4组Flash执行页编程操作,故Flash阵列数据读写的基本单位的容量为4×4 KB=16 KB,数据宽度为4×8 bit=32 bit。为了保证读出数据与写入数据完全一致,同样采用流水线的方式对Flash存储阵列中4组存储单元执行读数操作。在FPGA内部建立一个容量为4 096×32 bit=128 Kbit的FIFO,FIFO数据端设置为32 bit,32 bit输出,深度为4 096。K9WBG08U1M的单个字节的读取速度最快为25 ns。当记录仪执行读数操作时,数据写入FIFO,一旦FIFO满后,FIFO满标志位有效,同时使FIFO写使能无效以及Flash存储阵列停止读操作,当CYUSB3014的SLWR位检测到FIFO的满标志位后,使FIFO读使能有效,开始将FIFO中的数据写入CYUSB3014中。本设计中Flash的读写时钟设置为30 MHz,GPIF接口时钟设置为80 MHz。
使用ModelSim软件对读数过程进行功能仿真,结果如图8所示。读数过程通过A1:A0=0选择线程0,FLAGA用于监视当前线程的状态,当FLAGA为1时表示非满。SLCS一直为低电平有效状态,当SLWR为低电平时,FPGA可向CYUSB3014写入数据。数据在时钟上升沿写入CYUSB3014套接字缓冲区,紧接着CYUSB3014启动DMA通道,当缓冲区写满数据后,FLAGA下拉至低电平,相应的DMA回调函数被调用,数据从U端口上传至计算机。
4 分析与测试
将记录仪连接至计算机,打开Cypress公司提供的速率测试工具C++ Streamer,并按照CYUSB3014固件程序进行配置,利用该软件对USB3.0接口读数过程速率进行测试,测试结果如图9所示,平均速率达到123 200 KB/s(约120 MB/s)。按照此速率,此高速大容量记录仪存储的海量数据能够快速回传至上位机。
5 结束语
本文主要介绍了一种高速大容量机载雷达数据记录仪,针对流水线技术构建的高速大容量存储阵列,设计了一种基于USB 3.0的高速读数接口。USB 3.0采用Slave FIFO接口模式,详细介绍了GPIF II状态机设计,利用数据记录仪FPGA作为外部主控制器。在该应用中,USB 3.0接口速率可达120 MB/s,系统工作稳定,实现了对系统存储数据的快速读取,为高速大容量存储系统的快速读数提供了一种全新的手段,且具有一定的通用性,可以扩展到所有类似Flash存储系统中,具有一定的使用价值。
参考文献
[1] 祖静,申湘南,张文栋.存储测试技术[J].兵工学报,1994(4):30-34.
[2] 安海磊.高速数据采集存储系统设计[D].西安:西安电子科技大学,2012.
[3] 张诚,罗丰.基于千兆以太网的高速数据传输系统设计[J].电子科技,2011(1):44-46.
[4] 王辉,陈爱生.基于FT2232H的USB2.0数据采集系统设计[J].电子器件,2015(1):144-147.
[5] 岳孝忠,裴东兴,王健.基于USB3.0接口高速数据采集系统的设计[J].电子器件,2015(1):140-143.
[6] 任敏,张艳兵,王欢,等.基于硬件控制的双通道机载数据记录仪[J].探测与控制学报,2014,36(3):82-85.
[7] 刘东海,任勇峰,储成君.基于FPGA控制的NAND Flash存储设计[J].科学技术与工程,2013,13(34):10349-10353.
[8] 梁永刚,崔永俊,郇弢.基于NAND型FLASH的双备份固态存储系统[J].科学技术与工程,2013,13(26):7675-7682.
[9] Cypress Semiconductor Corporation.EZ-USB FX3 super speed USB controller[EB/OL].(2011)[2016].http:www.cypress.com.
[10] Rama Sai Krishna V.Designing a GPIF II master interface[EB/OL].(2013)[2016].http:www.cypress.com.
[11] Rama Sai Krishna V.Designing with the EZ-USB FX3 slave FIFO interface[EB/OL].(2014)[2016].http:www.cypress.com.