宋中喆+裴东兴+杨少博
摘 要: 针对目前存储测试系统中存有的数据传输慢,经常出现错误的显著问题,设计基于USB 3.0接口的高速数据传输系统。该设计以FPGA作为主控芯片,采用负延迟与乒乓缓存的方式将A/D转换的数据高速缓存到DDR2 SDRAM中。设计了GPIF Ⅱ 通用可编程接口和手动 DMA 通道,实现了USB 3.0同步从FIFO模式的高速数据传输。系统分析测试和实验结果表明,该系统实现了数据的高速可靠传输,能有效解决大容量数据采集后的数据高速传输问题。
关键词: 存储测试; USB 3.0接口; 高速数据传输; 负延迟; 乒乓缓存
中图分类号: TN919.6?34; TP334.7 文献标识码: A 文章编号: 1004?373X(2017)04?0159?04
Design of high?speed data transmission system based on USB 3.0 interface
SONG Zhongzhe1,2, PEI Dongxing1,2, YANG Shaobo1,2
(1. National Key Laboratory for Electronic Measurement Technology, North University of China, Taiyuan 030051, China;
2. MOE Key Laboratory of Instrumentation Science and Dynamic Measurement, North University of China, Taiyuan 030051, China)
Abstract: Since the current memory test system has the prominent problems of low data transmission speed and frequent fault occurrence, a high?speed data transmission system based on USB 3.0 interface was designed. The FPGA is taken as the main control chip of the design. The modes of negative delay and Ping?Pong cache are adopted to cache the data transformed through A/D into the DDR2 SDRAM with high speed. The general programming interface GPIF II and manual DMA channel were designed to realize the high?speed data transmission based on USB 3.0 synchronous slave FIFO mode. The system analysis, test and experimental results show that the system has realized the high?speed and reliable data transmission, and can effectively solve the high?speed data transmission problem occurring after large?capacity data acquisition.
Keywords: memory testing; USB 3.0 interface; high?speed data transmission; negative delay; Ping?Pong cache
0 引 言
随着当前存储测试系统[1]中存储容量的急剧增加,对数据的传输速度的要求随之也越来越高,此外在某些需要对数据进行实时传输处理的场合,人们对数据传输系统的速度要求也越来越严格[2]。本实验室以前一直在使用USB 2.0接口作为存储测试系统的数据传输接口,但受限于其理论最大480 Mb/s的传输速度,现在已逐渐难以满足数据传输的要求。新一代的 USB 3.0继承了 USB 2.0 的所有优势,能够向下兼容 USB 2.0,且在USB 2.0的基础上新增了超速传输模式,理论传输速度[3?4]可高达 5 Gb/s。并且在固件程序开发、电源管理等方面有了更好的提高。故而USB 3.0接口可以很好地解决那些问题。在未来的几年内,USB 3.0 必定能够较好地应对数字时代要求的高速性能和可靠互联性[5]。
1 系统总体方案设计
本文设计的系统主要包含五部分:传感器与信号调理电路、ADC数据转换电路、DDR2数据存储单元、FPGA控制电路和USB 3.0数据传输接口。图1为系统的总体原理框图。传感器将需要测量的物理量转换为相应的模拟电信号,信号调理电路用来将传感器输出的微弱模拟信号进行放大滤波等处理[6]。ADC数据转换电路将经过调理通道的采样模拟信号转换为数字信号。DDR2数据存储单元用来按所接收的指令来对数据进行高速缓存。数据转换和存储的操作在FPGA控制单元的控制下进行,在FPGA内部构建有PLL锁相环,用来对输入时钟进行频率转换,并将不同的输出时钟提供给A/D转换器、DDR2及USB 3.0控制电路。USB 3.0接口电路传输上位机指令,FPGA接收指令并对其解码,然后将FIFO中缓存的数据传输至上位机[7]。
2 硬件及实现原理
2.1 系统芯片选型
对于FPGA芯片的选择,本文采用Altera公司的低成本Cyclone Ⅲ系列 EP3C16F484芯片来作为系统的控制中心。该芯片内部包含较多的RAM容量,利用IP核可以搭建自己所需要的电路模块,如FIFO缓存模块,PLL锁相环等。USB 3.0接口协议芯片采用Cypress公司的CYUSB3014,DDR2 SDRAM选用MT47H64M16HR。
2.2 FPGA与DDR2存储接口设计
在实际应用中为防止有效数据在FIFO中累积而造成数据丢失,故设计了DDR2数据缓存模块,用來对海量的数据进行缓存。图2为FPGA与DDR2连接图。DDR2 能够以内部控制总线4倍的速度运行,还能够以外部总线的4倍的速度进行读/写操作。DDR2 协议包括很多用户命令,如存储器初始化、读/写命令和自动刷新等。为确保 DDR2能够在正常情况下工作,对这些命令的时序,以及命令间的顺序及间隔都有着特别严格的要求。FPGA内部有集成的高性能 DDR2 控制器内核,直接调用该模块,即可较方便地实现对数据的读/写操作。
2.3 FPGA与USB3.0通信接口设计
图3为FPGA与FX3的接口设计图。本系统将 GPIF Ⅱ(通用可编程接口)配置为32位的同步从FIFO 模式,GPIF Ⅱ的32位DQ数据总线与FPG相应的32位数据端口相连,在 FX3 系统内部,GPIF Ⅱ没有直接与 USB端口缓冲区相连,而是直接连接到FX3的内部 DMA网络。FLAGA和FLAGB为CYUSB3014的状态标志信号,用来反馈给外部主控制器 FPGA。PCLK与FPGA的CLK相连,用来接收时钟信号。此外,SLCS为片选,SLWR为写使能,SLOE为输出使能,SLRD为读使能,PKTEND为短包发送信号,均在低电平时被激活,A[1:0]为线程地址选择信号。GPIF Ⅱ的端口操作和控制信号由内部可编程的状态机引擎控制,外部处理器通过配置输入到FX3的控制信号来控制状态机的操作[8]。
3 系统程序设计
3.1 A/D采集与数据缓存流程
本设计主要完成从系统上电开始,A/D采样输入/输出信号到采样数据存储工作。主要包括系统初始化、A/D采样控制、未触发前的FIFO循环写、触发后的双FIFO乒乓存储操作。首先系统上电后,初始化A/D进行数据采集,此过程采用负延迟的方式,即有效的触发信号还没有到来,输入FIFO1进行循环采样,由于FIFO容量有限,存储的数据会不断刷新,每一时刻所存储到的数据都是此段时间内最新采样到的数据。一旦触发信号到来,FIFO1和 FIFO2都有效,此时进行双FIFO乒乓存储操作。图4为A/D采集与数据缓存流程图。
触发到来后,第一步将最初FIFO1中缓存的数据首先读出写入DDR2,同时将触发后A/D输出数据写入 FIFO2中;第二步将第一步中FIFO2缓存的数据写入 DDR2,于此同时将 A/D 输出数据写入FIFO1中;第三步将第二步中FIFO1缓存的数据写入DDR2,于此同时将A/D触发后输出数据写入 FIFO2 中,依此循环,这样通过两个 FIFO 按节拍的读写,将数据流无间断地送入DDR2中[9]。直到系统停止采样信号到来时,此过程结束。图5为乒乓缓存操作图。
3.2 USB 3.0程序设计
采集后的数据通过 USB 3.0 接口传输至上位机进行处理分析,FX3器件有一个内部DMA结构,用来将GPIF Ⅱ接口连接至系统内部存储器和其他串行外设。在FX3上运行的固件将该数据路径连接至合适的数据源,或连接至数据接收器[10]。图6为高速读写数据的DMA通道设计图。
套接字是外设硬件模块和FX3 RAM间的连接点,GPIFⅡ 一侧的套接字相当于端点[11],GPIF 线程是位于GPIF Ⅱ模块内专用的数据路径,用来将外部数据引脚同套接字连接起来。本设计使用由两位地址线 A[1:0] 决定的四个GPIF线程中的两个,采用套接字和GPIF线程的默认的对应关系:套接字1与线程1相对应,套接字0与线程0相连。线程的切换是通过FPGA控制GPIF Ⅱ接口上的地址信号A[1:0] 来实现的,当A[1:0]=0时,转到线程0,为1时则对应线程1。
固件程序中设置DMA通道时,本设计采用手动DMA通道,相比自动DMA通道,手动DMA通道允许固件管理和控制数据流,从而确保数据的可靠传输。将两组共32个缓冲器分配到特定的输入或输出DMA通道上,每个缓冲器的大小根据USB的速度而被定义:全速模式时为64 B,高速时则为512 B,超速时设为1 024 B。创建手动DMA通道时,首先设置DMA的大小,然后设置从设备DMA缓存计数,接着配置DMA的生产者和消费者套接字,最后指定DMA通道类型。
3.3 FPGA与USB 3.0通信程序设计
此部分主要完成FPGA与GPIF Ⅱ接口进行通信的设计。由于本设计中 DDR2的输出数据位宽为16 b,而GPIF Ⅱ接口采用32 b,故在FPGA中还设计了输出缓存FIFO,用来匹配不同宽度的数据接口。
在 GPIF Ⅱ Designer中,将FLAGA配置为Current_thread_DMA_RDY,FLAGB 配置为Current_thread_
DMA_watermark,两者都设为低电平有效,故当其为低电平时,它们指示满/空或一部分满/一部分空状态。 本文外部FPGA通过从设备 FIFO 对 FX3 进行突发写入传输,图7为32 b数据总线宽度的突发写入传输逻辑分析器截图。在突发模式下,在整个突发写入过程中保持激活状态。在突发写入模式下,令A[1:0]=0,GPIF Ⅱ状态机控制切换到线程0,数据被接入作为生产者的套接字0,然后当写使能信号SLWR有效时,来自外部的数据先被写入位于系统内存的DMA缓冲区的第一个缓冲器Buffer0,接着每当 PCLK 的上升沿到来时,都会将数据总线上的值写入到FX3的Buffer0内,当Buffer0状态满后,FLAGA反馈信号将被拉低,用来表明其满状态。此时FX3 CPU 即会接收到一个由GPIF Ⅱ 套接字发送的中断,来通知至此已填充了DMA 缓冲区,FX3 的CPU可将此信息发给USB套接字。此过程后调用的回调函数清空DMA 缓冲区,FLAGA状态标志重新变为高电平,然后消费端点将数据上传给上位机,接着USB套接字发送一个中断给FX3 CPU,来告知USB套接字已经清空了DMA 缓冲区,至此DMA通道即可转到第二个缓冲器。外部FPGA主设备必须监控FLAGA,以确定何时完成切换操作,以及何时可同下一个缓冲区进行数据访问。
在FX3的固件程序的 cyfxslfifo.c 文件中,添加一个CyU3PgpifSocketConfigure() API 調用,以指定水印值,水印值决定何时激活局部标志FLAGB。图7中,FLAGB在写入最后数据字的同一个周期内转为低电平。
4 系统测试
在完成了系统的设计后对系统进行数据传输性能测试。首先通过信号发生器来代替传感器与信号调理电路输入模拟锯齿波信号给ADC,图8为实验室某上位机记录仪通过USB 3.0接口接收到的锯齿波数据。由图8知波形与信号发生器的输出一致,表明数据传输正确。
图9为利用Cypress 公司streamer软件进行测试系统的传输速度,本系统的测试速度达到了252 900 KB/s,即247.0 MB/s的超高速度,相比于先前使用的USB 2.0接口的速度,有了非常明显的提高,并且整个传输过程没有错误出现。
5 结 语
本文设计了基于USB 3.0同步从FIFO模式的高速数据传输系统,采用FPGA作为整个系统主控芯片,借助其非常高效的并行处理能力,并与A/D转换模块、DDR2数据缓存模块及USB 3.0通信模块相结合,使得数据的采集、转换、存储和传输能够协调进行,达到了数据采集后的的高速传输的要求。经过多次传输测试,表明该系统的传输速度可达247.0 MB/s,而且系统非常稳定,不会出现数据丢失,能够可靠完成数据的高速传输。
参考文献
[1] 张文栋.存储测试系统的设计理论及其应用[M].北京:高等教育出版社,2002:34?40.
[2] 岳孝忠,裴东兴,王健.基于USB 3.0接口高速数据采集系统的设计[J].电子器件,2015(1):140?143.
[3] 朱耀麟,马慧铭.USB 3.0超高速多串口传输系统的设计[J].电子技术应用,2013(9):129?131.
[4] Hewlett?Packard Company, Intel Corporation, Microsoft Corporation, et al. Universal serial bus 3.0 specification [R]. USA:Alan Berkema, 2011: 45?57.
[5] 芦艳芳,郭林.USB 3.0兼容性与电源分配方案[J].电脑知识与技术,2010(27):7649?7650.
[6] 马青.高速数据采集信号调理电路的研究[D].哈尔滨:哈尔滨理工大学,2009.
[7] 柯艳,李杰,孔祥雷,等.基于USB 2.0的多路数据采集系统上位机软件设计[J].测试技术学报,2010(4):351?356.
[8] Cypress Semiconductor. EZ?USB FX3 technical reference manual [R]. USA:San Jose, 2011: 125?170.
[9] 杨世锡,梁文军,于保华.振动信号多通道同步整周期数据采集卡设计[J].振动、测试与诊断,2013,33(1):23?28.
[10] Cypress Semiconductor. FX3 programmers manual [R]. USA: San Jose, 2011:39?49.
[11] 杨少博,裴东兴,岳孝忠.高速数据采集系统中USB 3.0数据传输接口设计[J].电子器件,2015(4):912?916.