基于FPGA的SpaceFibre-USB3.0接口卡设计
2019-09-10董伟涛伊小素曾华菘王家兴
董伟涛,伊小素,曾华菘,熊 瑞,王家兴,刘 辉
(北京航空航天大学仪器科学与光电工程学院,北京 100191)
0 引言
随着星载通信系统内部各个设备间的数据交换量越来越大,传统的数据总线已经很难满足需求,这就对星载总线提出了更高的要求。SpaceFibre总线技术是高速空间总线,是一种面向吉比特每秒级高速数据传输需求而提出的基于SpaceWire协议体系结构的新标准[1]。目前SpaceFibre传输速率可达2 Gbps(有效传输速率0~1.6 Gbps),是超高速光纤传输总线。随着SpaceFibre总线的不断发展和完善,数据处理和性能测试都需要采用通用计算机设备来获取SpaceFibre高速网络中的大容量数据。由于计算机不具有SpaceFibre接口,因此需要设计一种接口卡为计算机提供获取SpaceFibre总线数据的能力。
USB总线具有速度快、通用性好、扩展性强、功耗低、稳定、易开发等优点,在工业领域获得了广泛的应用[2]。目前,USB3.0的理论传输速率为5 Gbps,能够满足SpaceFibre采集速率要求。基于研究与应用的需要,本文设计了基于FPGA的SpaceFibre-USB3.0接口卡,实现了SpaceFibre与USB3.0的桥接设计。经测试,PC机可以通过接口卡实时采集、显示SpaceFibre总线传输的图像数据,达到设计目的,为通用计算机采集SpaceFibre总线数据提供了一种参考方案。
1 SpaceFibre-USB3.0接口卡设计
本文在研究SpaceFibre总线协议和USB3.0总线协议的基础上,采用FPGA作为硬件控制器,设计了相应的硬件电路和软件程序,实现SpaceFibre总线与USB总线的桥接设计。FPGA将采集到的SpaceFibre总线数据通过USB3.0传输给PC实现SpaceFibre总线的采集。
1.1 接口卡总体设计
SpaceFibre总线采集系统由SpaceFibre-USB3.0接口卡和上位机组成,接口卡主要负责采集SpaceFibre高速总线数据,对数据进行缓存,然后通过USB3.0发送给上位机进行处理分析。接口卡整体方案设计如图1所示。
图1 SpaceFibre-USB3.0接口卡整体结构图
接口卡采用FPGA作为硬件控制器,FPGA选型为Cyclone Ⅲ系列的EP3C16F484C7芯片,FPGA负责SerDes芯片和USB3.0芯片的控制以及数据的缓存与处理。SpaceFibre物理层芯片选型为TLK2711a-RCP的SerDes芯片,这款芯片主要负责SpaceFibre总线8b/10b编码的实现,光模块采用FTLF8519P2BNL芯片,主要负责实现光电信号的转换,实现了SpaceFibre总线的物理层和链路层,搭配嵌入在FPGA中的SpaceFibre IP核实现SpaceFibre数据的采集。USB3.0芯片选用CYUSB3014芯片,该芯片内嵌ARM内核、512 KB嵌入式SRAM、32位数据总线,而且提供C++,C#的函数库[3],满足本设计要求,实现与上位机的通信。
1.2 SpaceFibre总线接口设计
SpaceFibre总线接口设计如图2所示。
图2 SpaceFibre总线接口连接图
SpaceFibre总线编码方式采用8b/10b编码,8b/10b编码具有很好的直流平衡特性以及抗干扰能力和一定的检错能力[4]。SpaceFibre接口设计利用Serdes芯片实现8b/10b编解码功能。光模块用于实现光电转换,在采集SpaceFibre总线数据时,将光信号转换为电信号,电信号通过SerDes芯片,经过串并转换将高速的串行信号转换为低速的20位并行信号,再通过8b/10b解码功能将数据转换为16位有效信号,输入到FPGA中,FPGA中嵌入了SpaceFibre总线协议IP核,将采集到的数据缓存在SpaceFibre接收FIFO中实现SpaceFibre总线数据的采集过程。
1.3 USB3.0接口设计
USB3.0芯片选用CYUSB3014芯片,通过编写固件程序实现USB3.0总线传输[5]。本系统USB3.0接口设计如图3所示。
图3 USB3.0接口连接图
GPIF接口是CYUSB3014芯片与FPGA进行连接的高性能通用可编程接口,支持8位、16位和32位并行数据总线,接口频率可达100 MHz。为了满足本系统高带宽、低延时的传输要求,FPGA上行到PC数据量较大,因此缓冲区Buffer设置为10个,每个Buffer大小为16 Kbytes,PC到FPGA数据量较小,缓冲区Buffer设置为2个,每个Buffer大小为16 Kbytes。本系统将固件程序配置为Slave FIFO模式[6],时序逻辑由外部控制器FPGA控制[7]。
1.4 FPGA内部设计
FPGA作为接口卡的控制核心,实现SpaceFibre接口与USB接口的桥接通信。FPGA程序运行状态转移如图4所示。
图4 FPGA程序运行状态转移图
板卡上电首先进入初始化状态,FPGA分别检测SpaceFibre接收FIFO和USB输出Buffer中是否有数据,如果SpaceFibre接收FIFO中有数据待读,则表明SpaceFibre端采集到了数据,此时状态跳转进入将SpaceFibre接收FIFO中的数据向USB3.0写入的状态,在该状态内检测到数据包尾后将一包数据进行打包,实现数据流由SpaceFibre到USB的流动,写状态完成,状态自动跳回初始状态。如果USB输出Buffer中有数据待读,则表明USB3.0端发送来了数据,因为从PC端发出的数据一般为控制指令,因此数据由USB到SpaceFibre传输过程中加入防误传措施,即从PC端发送的数据需要遵循既定的格式,此时进入判断状态,读取3个数即一包的包头进行判断,如果符合预定格式,则状态跳入将USB3.0 Buffer中数据向SpaceFibre发送FIFO中写入的状态,在该状态中读入相应长度的数据进行打包,实现数据流由USB到SpaceFibre的流动,写状态完成,状态自动跳回初始状态;如果不符合预定格式,说明PC端发送来的数据为误操作无效数据,此时状态跳入丢弃无效数据状态,将USB Buffer中数据丢掉,完成后状态自动跳回初始状态。设置控制指令优先级最高,即如果检测SpaceFibre接收FIFO和USB输出Buffer中同时有数据待读,则优先进行USB输出Buffer中数据的读取操作。
2 接口卡性能分析
2.1 实时性分析
数据从SpaceFibre接收FIFO中读出向CYUSB3014芯片内部Buffer缓冲区写入时刻记为t1,数据传输到PC上位机时刻记为t2,系统时延为t2-t1。由于t1与t2时间基准无法统一,无法直接得到时延,故将时延分为两部分进行分析。即把采集到的1包数据填写进CYUSB3014芯片内部Buffer缓冲区所需的时间和PC端读取Buffer缓冲区1包数据所需的时间,两项之和即为系统的主要时延来源。
数据填写进CYUSB3014芯片内部Buffer缓冲区时所用时钟频率为100 MHz,时钟周期为0.01 μs,每个时钟填写16位(2 Bytes),填写单个数据包所需时间与数据包大小紧密相关,表1为通过计算所得的填写1包数据所用时间与数据包大小的关系。
表1 填写1包数据所用时间与数据包大小的关系表
PC端读取数据包所需时间也与数据包大小紧密相关,调用API库中的相关类和函数对USB3.0芯片进行数据读取完成PC端对CYUSB3014芯片内部Buffer缓冲区数据采集,这个过程PC机操作系统会根据请求分配时间片用于数据的采集,时延也就因此而产生。为保证PC读取数据时Buffer缓冲区数据已经准备就绪,CYUSB3014固件程序配置为芯片内部自动生成Buffer数据。测试每秒读取数据包个数计算得到读取单个数据包的平均时延。表2为PC平均读取1包数据所需时间与数据包大小之间的关系。
表2 PC平均读取1包数据所用时间与数据包大小的关系表
两项时间之和即为采集系统主要时延,相加计算所得时延如表3所示。
表3 采集时延与数据包大小的关系表
结果显示,打包单个数据包越大,单包传输时延越长。
2.2 USB3.0采集速率测试
PC机通过USB3.0读取速率与每次读取的数据包大小紧密相关,将数据包打包成不同的大小通过PC读取测试得到USB3.0平均传输速率与PC单次读取数据量的关系,如图5所示。
图5 接口卡传输速率图
随着单次读取数据包大小的增加,平均速率会不断提高,在单次读取1 KB数据时速率为39 MB/s,在单次读取16 KB数据时平均采集速率能够达到225 MB/s,能够满足SpaceFibre总线的采集速率要求。
2.3 数据包打包原则
通过2.1和2.2关于数据包传输时延和传输速率的分析和测试,可以看出平均传输速率和单包传输时延都会随着单个数据包增大而增加。针对不同应用情景下采集SpaceFibre数据时可根据如下原则进行数据包打包大小的选取:SpaceFibre总线有效传输速率为0~200 MBytes/s,当SpaceFibre总线全速即以200 MBytes/s传输时,USB3.0接口传输速率在打包大小为11 K以上时完全满足SpaceFibre采集速率要求;当SpaceFibre总线传输速率低于200 MBytes/s时,可将采集数据打包成满足SpaceFibre总线传输速率要求的最小包大小,这样可以既满足采集速率要求,又可以使单包采集时延最小。
3 系统测试与验证
为了能够直观演示接口卡的功能,SpaceFibre数据源选择图像数据源,采用OV7725摄像头作为图像数据输出,该图像传感器分辨率为640×480,输出格式为RGB565,RGB565即每个像素点由16比特组成,其中红、绿、蓝三色占比为{R[4:0],G[5:0],B[4:0]},帧率为每秒25帧,每秒输出数据量为14.648 MBytes。通过采集速率图可以看出USB3.0传输速率完全满足CMOS的输出速率要求,根据打包原则,为了达到传输的最优化,以最小时延进行采集传输,OV7725摄像头每行的数据为1 280 Bytes(640×2),FPGA每次将1行图像数据进行打包,为了防止行错乱,在打包时需要加入包头和行信息,这样每包数据量为1 280 Bytes图像数据+4Bytes包头信息。PC端上位机设置为每次读1 284 Bytes数据。这样设置可以在满足传输速率要求的前提下以最小时延进行采集传输以达到最佳采集效果。采集系统实物连接如图6所示。
图6 采集系统实物连接图
本系统上位机图像显示界面采用WPF构建图形化界面,使用C#语言,调用API库中的相关类和函数对USB3.0芯片进行数据读取,完成PC端对数据的高速采集与显示。
接口卡采集SpaceFibre图像数据通过USB3.0发送到PC上,最后通过WPF设计的上位机界面对视频图像进行显示。上位机运行流程图如图7所示。
图7 上位机运行流程图
PC端通过上位机界面发送控制指令,指令通过USB3.0接口发送到接口卡。接口卡解析指令数据,开始采集SpaceFibre总线端数据,FPGA将采集的数据打包后通过USB3.0接口发送到上位机。为了提高数据采集速率,上位机设置2个线程,线程1用于采集数据和缓存,线程2用于数据的处理和显示[8]。
PC读取数据对应代码如下:
int singalpacketlen = 1284;
MyDevice.BulkInEndPt.XferData(ref buf1,ref singalpacketlen);
将图像数据处理显示对应代码如下:
WriteableBitmap wb = new WriteableBitmap (640,480,96,96,PixelFormats.Bgr565,null);
Int32Rect rect = new Int32Rect(0,0,640,480);
wb.WritePixels(rect,imagebuf2,wb.BackBufferStride,0);
image1.Source = wb;
上位机视频图像显示结果如图8所示。
图8 上位机显示采集到的视频图像界面
PC通过USB发送控制命令后,可以实时接收SpaceFibre端的图像数据并清晰地显示采集到的SpaceFibre视频图像,无帧错乱、丢帧等情况。
4 结束语
本文设计了SpaceFibre-USB3.0接口卡,实现了SpaceFibre与USB3.0总线之间的桥接设计,使得通用计算机能够实时采集高速SpaceFibre总线中数据。包括硬件电路的设计,主控芯片FPGA程序的编写实现以及上位机软件的设计,并分析了系统时延和采集速率,给出了数据包打包原则的选取方案。经测试,上位机可以实时采集显示SpaceFibre总线传输的图像数据,系统采集速率最高可达1.8 Gbps,满足SpaceFibre总线最高传输速率(1.6 Gbps),符合设计要求。本文为通用设备采集高速SpaceFibre总线数据提供了一种可行的方案,对于SpaceFibre总线的研究与测试具有参考意义。