基于USB3.0高速图像数据传输系统设计

2019-04-10 09:39王国忠储成群任勇峰焦新泉
仪表技术与传感器 2019年3期
关键词:传输速度缓冲区线程

王国忠,刘 磊,储成群,任勇峰,焦新泉

(中北大学,电子测试技术国家重点实验室,山西太原 030051)

0 引言

随着大数据智能化时代的到来,以及工业4.0的提出,智能化系统对图像分辨率的要求越来越高,即图像采集系统需要传输的数据量越来越大。数据传输的速度和缓冲区的大小是图像采集系统中非常重要的一部分,如果缓冲的速度与传输的速度不匹配的话,就会使数据丢失或者堵塞,因此需要对整个系统进行综合设计。

1 总体方案设计

系统总体方案设计如图1所示,由图像采集模块、数据处理模块、数据传输模块3部分组成。图像采集模块采集模拟数据,并转化为数字图像数据传输给数据处理模块;数据处理模块接收图像数据,经处理后转存到缓冲芯片DDR2 SDRAM中,同时接收上位机下发命令,把数据实时上传;数据传输模块把数据上传到上位机软件进行图像显示,并负责上位机与FPGA之间的通信。

本系统采用MT9P031图像传感器作为本系统数据采集模块,把高速图像数据实时上传给数据处理模块[1]。数据处理模块把数据重新编帧后转存到DDR2 SDRAM中。数据传输模块采用USB3.0传输,把图像数据实时上传到上位机软件,在数据编码方面,USB3.0采用了安全性更高的8b/10b编码,使用这种编码方式可以保持电路中的直流平衡,从而提高可靠性;在逻辑设计中,采用手动DMA模式,提高了传输速度,同时提高了数据传输的正确率以及可靠性[2]。

2 系统硬件电路设计

2.1 FPGA硬件设计

FPGA作为整个系统的硬件控制核心,是整个系统数据传输的中转站,其主要功能是实现各模块之间的数据交换和接口时序等协调控制。同时FPGA既要实现与USB控制芯片CYUSB3014连接,也要与DDR2连接,因此本系统选择I/O口丰富、内部资源多、处理速度快的EP3C40F484C6N作为控制中心。该芯片内部具有较多的RAM容量,利用IP核可以搭建逻辑控制模块,如FIFO缓冲模块,PLL锁相环等。

图1 总体方案设计

2.2 DDR2硬件电路设计

图2 DDR2与FPGA硬件连接图

本系统为了防止有效数据在FIFO中积累而丢失,设计了外置DDR2 SDRAM缓冲模块,用来存储海量的图像数据。图2为DDR2与FPGA的硬件连接图。选用MT47H128M16RT-25EC作为DDR2 的芯片,其内存为2 Gbit,数据位宽为16 bit,内部有8个块,能以内部控制总线4倍的速度工作,还能以外部总线4倍的速度进行读写操作。CK和CKN为时钟差分线,在他们的相交处均有数据传输,即在CLK的上升沿和下降沿均有数据传输。A[13:0]为列地址,BA[2:0]为块地址,对DDR2进行数据读写时,首先发送要读取或写入的具体地址。D[15:0]为16位数据线。CKE,ODT,CS分别为DDR2的控制信号线,对DDR2进行读写操作时,首先要激活时钟使能信号线(CKE)和片选信号线(CS),ODT为一种新技术叫片内终结电阻,通过控制该信号,来实现对匹配电阻的值及其开关状态进行控制,从而达到读写信号的完整性。RAS,WE,CAS为命令信号线,通过这3条命令FPGA控制DDR2的读写。采用UDQS和UDQSN、LDQS和LDQSN作为双向差分信号线,写数据时由FPGA发出,读数据时由DDR2发出,可以减少信号间串扰的影响,同时减少信号输出脉宽对工作电压和温度稳定性的依赖。UDM,LDM在进行突发传输时,可屏蔽掉不存储的数据[3]。

2.3 USB3.0的硬件电路设计

本系统采用CYUSB3014作为USB3.0的控制芯片,该芯片具有高度集成的灵活特性,具有一个可进行数据并行读写的通用可编程接口GPIFⅡ,其内部同时集成了USB3.0和USB2.0物理层(PHY)以及32位ARM926EJ-S微处理器,具有强大的数据处理能力。GPIFⅡ接口可进行8位、16位、32位数据传输,可实现与FPGA之间无缝连接;GPIFⅡ为一种可编程状态机,其接口即可作为主控制器也可作为从器件,并行和串行接口均可通过该接口实现。本系统将CYUSB3014配置为32位并行的SLAVE FIFO模式,实现与FPGA之间的高速图像数据传输,FPGA通过GPIFⅡ接口可访问其内部32个缓冲区[4]。

图3为USB3.0周围的硬件电路。如图3所示,GPIFⅡ的32位数据总线直接与FPGA的I/0口相连,而在CYUSB3014内部GPIFⅡ直接连接到了DMA通道上。SLCS为片选信号,系统开始工作时被激活。PKTEND为短包数据发送结束信号,当一包数据结束时该信号有效。FLAGA和FLAGB为DMA通道对应的缓冲区空满状态的标志信号,由CYUSB3014芯片发出,FPGA接收。SLWR为写使能信号,当通过USB3.0读取数据时,该信号使能有效,GPIFⅡ随之将数据通过DMA通道存入到对应的缓冲区中。SLOE为读使能信号,即FPGA发出读请求时,该信号使能有效同时驱动数据总线DQT翻转。A(1∶0)为线程选择信号,通过改变它的数值,对GPIFⅡ内部的4个独立进程进行选择,从而实现选用那个DMA通道进行数据传输。

图3 USB3.0硬件电路图

SLRD为读请求信号,当该信号有效时,FPGA读取GPIFⅡ接口的数据。PCLK与FPGA的CLK相连,提供最高可达100 MHz的接口频率。

图3中的24FC1025T-I/SN是容量为1 024KB的EEPROM,用于存储USB3.0的固件程序,通过I2C总线与CYUSB3014相连。而I2C总线是由一条数据线和一条时钟线构成,根据I2C总线规范,总线空闲时必须为高电平,所以本设计通过2.21 kΩ电阻连接至3.3 V电源上拉。NCP361SN1G为过压保护芯片,CYUSB3014的VBUS引脚的最大输入电压为6 V,而在USB接口上VBUS的供电电压最大可达9 V,因此为了保护CYUSB3014的VBUS免受损坏,本设计增加了过压保护芯片。同时为了使输入电压稳定,在VBUS串联一个2.2 μH的电感。使用2.2 μH的电感与105电容并联,同时将USB插座上的“屏蔽”引脚接地,实现隔离屏蔽的作用。本系统选用四通道的SP3010-04UTG作为SSRX+、SSRX-、SSTX+、SSTX-的外部ESD器件,它具有高性能、低电容的特性,其保护电平为±8 kV接触放电和±15kV气隙放电[5]。

3 逻辑设计

3.1 DDR2读写逻辑设计

DDR2 SDRAM的读写控制是整个系统的关键。在系统上电后,DDR2 SDRAM内部需要进行一系列复杂的初始化操作,才能开始正常工作。具体操作为:预充电→空命令→配置外部寄存器→空命令→配置内部寄存器→预充电→空命令→自动刷新→空命令→开始接收命令。在正常开始工作,每次读写切换和行、块地址变化时,必须通过预充电来关闭当前读写的存储单元,同时在进行新的操作时,需要先激活要读写的存储单元所在的地址[6]。

图4 DDR2逻辑设计图

由于DDR2 SDRAM只有一套数据、地址和控制总线,在某一时刻只能读或者写,因此本文采用输入FIFO和输出FIFO对DDR2 SDRAM进行分时复用读写控制[7]。DDR2 SDRAM的读写逻辑控制如图4所示,通过判断DDR2 SDRAM内部的控制信号,来控制FIFO的读写。当上位机发出采集命令时,图像采集前端配置完寄存器之后开始采集图像数据,DDR2 SDRAM控制器通过监测场同步信号的到来,把图像数据不断存入输入FIFO中,当FIFO中达到一次突发传输数据量2 KB时,DDR2 SDRAM控制器发出写命令,并一次性读完输入FIFO中的所有数据,DDR2 SDRAM控制器不断监测输入FIFO的数据量并发出写命令。因为图像数据有场消隐和行消隐的时间,在此期间对DDR2 SDRAM进行写操作,且写的速率比较快,因此在一定系统时钟条件下,图像采集前端不会出现数据堵塞。

当上位机发出读取数据的命令时,DDR2 SDRAM控制器首先检测输入FIFO的状态,在空信号有效时DDR2 SDRAM一次性向输出FIFO写入2 KB数据,此时用户通过输出FIFO进行数据读取。当FIFO中的数据即将读完时,DDR2 SDRAM一次性向输出FIFO写入2 KB数据,然后通过USB3.0把图像数据不断上传到上位机,其实际传输速度达390 MB/s,因此不会出现丢数的情况。

3.2 USB3.0数据传输的逻辑设计

本系统采取手动DMA传输模式,用来将GPIFⅡ接口连接至内部缓冲器和USB3.0数据传输接口,通过手动DMA模式可以控制图像数据的传输速度,从而保证了数据的可靠传输。该模式可以把其中2个线程中共32个缓冲器分别分配到输入和输出DMA通道上,缓冲器的容量通过USB3.0的传输速度来设置。图5为DMA通道的设计图[8]。

如图5所示,设计中只用了GPIFⅡ 4个线程中的2个,线程0和线程1,并且采用了默认的对应关系,套接字0与线程0相对应;套接字1与线程1相对应[9]。线程的切换是FPGA通过控制USB_A0和USB_A1信号来实现,当为00时,选择线程0;当为01时,选择线程1。套接字是外部硬件与内部缓冲区之间的桥梁,即套接字可以看作是外设的接口,每个硬件模块有其固定的套接字。其中每个描述符存有缓冲区的地址和缓冲区的容量,以及指向下一个描述符的指针。

图5 DMA通道的设计图

在逻辑设计中,将USB_FLGA和USB_FLGB均设置为低电平有效,故当其为低电平时,它们指示缓冲区进入满状态[10]。本设计FPGA通过从设备FIFO控制USB3.0进行突发传输,图6为32位数据总线突发传输的逻辑分析仪截图,在突发传输过程中,为了保证数据连续输出,USB_RD和USB_OE始终保持有效,只要一行图像数据写入完成,就对DDR2 SDRAM进行读操作。这样一来DMA缓冲区就不会出现满状态,即整个过程USB_FLGA和USB_FLGB一直为高电平,为了避免DMA通道的失锁以及对上次数据的清空处理,本设计采用了每次重新写入数据时,再次激活GPIFⅡ接口的思想,即USB_CS信号在USB_WR从低电平变为高电平时,重新被激活。

图6 突发传输的逻辑图

4 结果分析及验证

本系统图像采集模块采集到的图像分辨率为2 048×1 536,帧频为21 fps,且显示为256级8位灰度图像,因此每秒采集的数据量为63 MB(2 048×1 536×21B)。DDR2工作在125 MHz时钟下,其传输速度峰值高达500 MB/s(125 MHz×2B×2),通过逻辑分析仪发现突发传输1行图像数据需要512个系统时钟,而DDR2自动刷新、预充电、状态信息等消耗50个系统时钟,因此DDR2实际平均数据吞吐量为500 MB/s×512/(512+50)≈456 MB/s。USB3.0数据传输速度为390 MB/s,通过理论分析,本系统可以正常工作。而且经过长时间重复测试,在没有上位机引起其他开销的情况下,采集的图像如图7所示。其画面清晰、流畅,且实时性较好,证明了本系统能够实时进行图像数据上传,且稳定可靠。

5 结束语

本设计中,采用了占用资源少、支持热插拔、可连接多个设备的USB3.0数据总线和缓冲速度快的DDR2缓冲器,设计了高速图像传输系统,大幅提高了图像数据的传输速度和存储空间,在逻辑设计中采用了手动DMA模式,实现了海量图像数据的传输,确保了高清图像的实时显示。

图7 图像截图

猜你喜欢
传输速度缓冲区线程
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
SSD移动硬盘大降价,可以考虑了
一类装配支线缓冲区配置的两阶段求解方法研究
关键链技术缓冲区的确定方法研究
初涉缓冲区
电网中无线通信技术的应用探析
浅谈提升互联网信息传输速度技术分析
多目标缓冲区生成算法