[0035] 下面将结合附图,对本实用新型的优选实施例进行详细的描述。
[0036] 参见图1、图2,一种基于FPGA的分布式数据传输系统,包括若干个FPGA10、和若干个PC20;
[0037] 其中,每个FPGA10分别与每个PC20通信连接,若干个PC20中的一个PC20作为主机,其余PC20作为从机,每个FPGA10依次连接;
[0038] FPGA10包括SFP接口11、接收控制模块111、Aurora接收端112、接收FIFO113、发送控制模块114、发送FIFO115、Aurora发送端116、控制寄存器110、GPIO19、DMA13、XDMA15、AXI Interconnect16和DDR4内存17;其中,SFP接口11至少设置两个,分别与Aurora接收端112和Aurora发送端116连接,Aurora接收端112由接收控制模块111控制接收数据,接收后存入接收FIFO113,Aurora发送端116由发送控制模块114控制发送数据,发送的数据由发送FIFO115中取出;所述控制寄存器110经GPIO19接收DMA13中的数据,控制寄存器110与接收控制模块111和发送控制模块114分别连接,DMA13还与接收FIFO113和发送FIFO115分别连接;DMA13和XDMA15均与AXI Interconnect16连接,AXI Interconnect16还DDR4内存17连接。
[0039] FPGA10之间通过SFP连接通信。FPGA10与PC20通过PCIE连接通信。
[0040] DMA13与GPIO19通过AXI_Lite总线18连接;DMA13与AXI Interconnect16通过AXI总线14连接;XDMA15与AXI Interconnect16通过AXI总线14连接;AXI Interconnect16与DDR4内存17通过AXI总线14连接。
[0041] 其中,单通道小型光纤可插拔收发器SFP(Small Form‑factor Pluggable)、高速串行计算机扩展总线PCIE(Peripheral Component Interconnect Express)、第四代双倍速率同步动态随机存储器DDR4(Dual Data Rate SDRAM 4)、DMA13(Direct Memory Access,直接存储器访问)、XDMA15(DMA13/Bridge Subsystem for PC20I Express,用于PC20I Express的DMA13/桥子系统)、AXI Interconnect16(AXI总线14型接口连接器。
[0042] PC20包括文件选择模块、分发模式选择模块、文件列表显示模块、站点计算选择模块以及文件传输测速模块。文件选择模块选择文件类型,并通过PCIE发送给FPGA10,或者通过PCIE接收FPGA10传来的数据;所述分发模式选择模块用于选择分发的方式,可选固定一个后端节点,或者均衡发送;所述文件列表显示模块用于显示已经发送的文件的名称、类型和大小;所述站点计算选择功能用于选择分布式计算的种类,包括CNN卷积神经网络训练和随机森林数据分析;所述文件传输测速模块用于在传输过程中显示传输速度。
[0043] 利用FPGA10作为PC20主机间交互的转换中介,其中FPGA10与PC20的数据交换采用的是PC20I Express 3.0X8规范协议,理论速度可达50Gbps以上,FPGA10平台之间采用Aurora 64b/66b协议进行数据传输,该协议单通道传输速度可达10Gbps以上。每个PC20都与一个FPGA10相连,FPGA10之间也通过SFP接口11相连,为方便描述,对发送数据的PC20称为Master PC20,对与Master PC20相连的FPGA10称为Master FPGA10,接收数据的PC20称为Slave PC20,与Slave PC20相连的FPGA10称为Slave FPGA10;显然Master FPGA10和Slave FPGA10通过SFP接口11相连以传输数据。
[0044] 整个数据流如下:Master PC20将所要下发给Slave PC20的数据和指令通过PCIE接口写入Master FPGA10端的DDR4内存17空间,然后数据进行Aurora64b/66b协议的光纤数据路由;Slave FPGA10接收相应光纤数据进行解析,缓存进该Slave FPGA10的DDR4内存17空间并通知Slave PC20进行数据读取,Slave PC20通过PCIE接口获取数据后进行数据解析,形成相应文件信息,表明一次传输完成。FPGA10作为传输中介,不但要实现PCIE、Aurora64b/66b协议、DDR4的读写控制,还要进行数据的缓存,指令的解析,端口的路由,并保证接口之间的无缝配合。
[0045] 在FPGA10内部又分为两个部分,一是DMA13部分:该部分有两种数据通路,一种为AXI总线14的内存映射,另一种是AXI_Lite的寄存器映射接口。通过前者,PC20传输的PCIE数据可以直接映射到FPGA10的DDR4内存17空间,通过后者,PC20可以对AXI_Lite总线18接口的Slave端当作GPIO19控制,即可以通过AXI总线14实现大数据传输,通过AXI_Lite总线18实现控制指令的传输。此外添加5个GPIO19,分别用来接收PC20控制信息、FPGA10控制信息、传输文件大小、DDR4内存17空间以及其他控制信息,PC20可以实时监听这五个控制寄存器110并与之进行轻量级数据交换,这不会影响正常的PCIE大数据流传输。二是数据传输部分:为实现全双工工作模式,又因为光纤的发送和接收端不止要发送数据信息,还用来发送指令信息(例如一次传输的大小,传输的源端ID,传输的目的端ID等),因此需要编写相应的控制逻辑进行读写仲裁,并解析相应信息,另外,传输的数据需要通过DMA13控制器与内存进行数据交换,因此DMA13控制器需要设计相应的控制逻辑;数据从内存到Aurora模块属于跨时钟域传输,因此输入输出端都需要添加FIFO实现跨时钟域。故设置了SFP接口11、接收控制模块111、Aurora接收端112、接收FIFO113、发送控制模块114、发送FIFO115、Aurora发送端116和控制寄存器110。
[0046] 在PC20端,在文件选择模块选择要传送的本地文件;然后在分发模式选择模块可以选择分发的方式,可选固定一个后端节点,或者均衡发送;在站点计算选择模块选择想要进行的计算:CNN(Convolutional Neural Networks)卷积神经网络训练或者随机森林数据分析;在文件列表显示模块右键点击文件选择开始发送,数据便开始传输;在传输过程中,会自动弹出文件传输测速模块,用以显示传输文件大小和传输速度。在此过程中利用文件与内存的映射mmap(memory map,内存映射)技术,这样可以大大提高对于大文件的读取效率,为了避免大量数据一块通过PCIE接口从而造成数据阻塞,控制每次分发数据块的大小。利用文件内存指针索引分块读取,减少传输过程不必要的CPU负担。在接收节点接受完成后,可以利用分布式存储的优点进行分块计算,CNN卷积神经网络利用像素点并行卷积的优势,将大量图像数据源分配到不同的主机可以弥补单一计算机内存与CPU的计算能力的极限,利用Python语言的rPC20远程过程调用方式,进行从机节点的计算调节,以及分布计算的返回值结果。然后主机节点对于返回值进行汇总,实现总分总的结构。用户可以在完全不懂FPGA原理和VIVADO软件操作的情况下,只需在上位机中选择所需传输文件以及相应功能即可。
[0047] 方法实施例
[0048] 一种基于FPGA10的分布式数据传输方法,采用上述基于FPGA10的分布式数据传输系统,参见图3为PC20界面图,方法包括以下步骤:
[0049] S10,先在作为主机的PC20上选择要分布式处理的文件,再上传文件,[0050] 参见图4;
[0051] S20,文件通过PCIE传给与作为主机的PC20连接的FPGA10,再通过FPGA10的SFP接口11传给与从机PC20连接的FPGA10的DDR4内存17中;
[0052] S30,从机PC20选择接收文件位置并开始接收,参见图5;
[0053] S40,与从机PC20连接的FPGA10接收到信号,并将数据通过PCIE传给从机PC20,待文件全部保存到从机PC20上时,表示一次传输完成。
[0054] 参见图6所示是本实用新型文件传输的测速界面,此界面在文件传输完成后,显示保存文件速度达到410Mb/s左右。为实现高速数据传输,本实用新型选用PC20I Express 3.0协议标准,其通信速率理论为8GT/s,实测速度为3.5GB/s,FPGA10设置4个SFP光纤接口,使用G bit高速收发器GTH(Gigabyte Transceiver中的一种)作为物理层,使用Aurora64b/
66b作为传输层协议,单通道理论线速度约为2GB/s,板卡实测最高线速度为1.3GB/s,通过理论计算,单通道实际速度最高为3.5G/4≈800MB/s,去除光纤双工读写仲裁和内存读写仲裁时间,一个PCIE X8接口的带宽最高大约可以承载4通道SFP光纤的最高速度约为700MB/s。
[0055] PCIE通过AXI Interconnect16与DDR4内存17直接进行相连,因此PC20可以方便的与DDR4内存17进行数据交换:通过AXI总线14实现大数据传输,通过AXI_Lite总线18实现控制指令的传输,并且XDMA15的IP核需要对AXI_Lite总线18的基地址和偏移地址做出相应的转换。但是用户模块要想获得DDR4内存17数据,就必须也将模块封装为AXI Master(AXI总线型主接口)通过AXI Interconnect16(AXI总线型接口连接器)来对DDR4内存17进行读写,这是因为DDR4内存17的数据是按照AXI总线型接口进行传输的,并且需要与不同模块进行数据读写,所以需要用AXI Interconnect16对数据进行路由。DMA13实现的功能是内存直接获取,从本质实现方式来讲也即完成了从AXI总线14到用户接口的转换功能。本实用新型采用MSXBO提供的开源DMA控制模块,对DDR4内存17进行数据读写通过控制相应的请求信号即可,并且还可以设计突发长度大小、总线宽度、突发数量等信息,此外该模块的数据接口可以直接作为输入输出缓冲FIFO的读写使能信号,该模块的端口参见图7。
[0056] 本实用新型所设计的FPGA分布式传输为全双工工作模式,又因为光纤的发送和接收端不止要发送数据信息,还用来发送指令信息,如一次传输的大小,传输的源端ID,传输的目的端ID,因此需要编写相应的控制逻辑进行读写仲裁,并解析相应信息,所以设计了图8所示的数据包格式。另外,传输的数据需要通过DMA控制器与内存进行数据交换,因此DMA控制器需要设计相应的控制逻辑;数据从内存到Aurora模块属于跨时钟域传输,因此输入输出端都需要添加FIFO实现跨时钟域,两个FIFO的控制线也归为控制逻辑设计。本实用新型的控制逻辑均采用Verilog HDL语言设计,设计层次参见图9。传输过程中FPGA内部的Aurora64b/66b发送部分的数据波形参见图10。
[0057] 实际中,传输文件可能因为一个字节数据传输错误而导致整个文件校验失败,再加上文件的格式多种多样性,接收与发送必须定义好一致的通信协议。当系统传输数据的时候,只有原始内存数据,接收端无法得知文件的类型,所以要提前对文件进行分类,比如pdf,mp4,jpg,png等。根据不同的文件类型进行简单编码标注操作,这样接收端才可以通过标注进行相应文件类型保存。在要传输的数据前面开辟两个字节存放传递文件类型对应的编码,不同文件类型对应不同的数据头,先行判断数据头选择保存的文件类型。为了防止数据粘包情况出现,在传输的数据头不仅有文件类型还要记录文件的大小,避免接收数据过多或者过少与原始数据的容量不一致导致恢复失败。所以在文件类型后面开辟八个字节的空间,通过文件容量大小进行求余计算并且在八字节对应位置进行置一操作。因此本实用新型设计了图8的通信协议。
[0058] 传输时,接收端首先读取内存头部分数据判断文件类型,通过提前指定的协议标准,解码出对应的不同文件类型。然后读取后面的几个字节的文件大小,通过十六进制与十进制的转换,计算准确的文件大小。获得文件大小后,通过内存指针的索引,改变分段保存的对应类型的文件,保证传输数据的完整性。因为PC的CPU的工作效率有极限,假如发送端传输的某个本地文件容量过大,此时仍然按照传输文件的传统数据流读取方法,会进行多次硬盘数据读取,这将会浪费大量时间,甚至会出现读取进程阻塞的情况,这时PC一直处于读取文件的状态,读取进程会出现长时间未响应的后果,阻塞时间过长会导致程序崩溃,读取文件失败。为此需要先进行判断,若文件过大,比如文件大小大于500MB,就需要使用mmap文件内存映射,通过文件数据直接映射到内存段,这样就不需要CPU的切换直接对内存数据读取,读取速度大大提高。此操作需要使用PC的虚拟内存,并保证映射的文件大小小于PC预留出的虚拟内存。如果大于虚拟内存,就需要通过头指针进行分段按顺序读取,从而提高系统的传输效率,避免系统出现“假死”的状态。
[0059] 最后说明的是,以上优选实施例仅用以说明本实用新型的技术方案而非限制,尽管通过上述优选实施例已经对本实用新型进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本实用新型权利要求书所限定的范围。