一种基于fpga的高速数据采集系统及方法

文档序号:614833 发布日期:2021-05-07 浏览:4次 >En<

阅读说明:本技术 一种基于fpga的高速数据采集系统及方法 (High-speed data acquisition system and method based on FPGA ) 是由 宋曼谷 郭志川 黄逍颖 于 2019-11-01 设计创作,主要内容包括:本发明公开了一种基于FPGA的高速数据传输采集系统及方法,一种基于FPGA的高速数据传输采集系统,其特征在于,所述系统包括数据接收模块、DDR缓存模块和数据上传模块;所述DDR缓存模块包括环形缓冲区、写指针和读指针;所述环形缓冲区存储数据,写指针指向环形缓冲区写入数据后的位置,读指针指向环形缓冲区读出数据后的位置;所述数据接收模块,用于接收网络数据包,对数据包解析后写入环形缓冲区,同步修改写指针的位置;当写指针和读指针的差值达到预先设定的数据量后,向所述数据上传模块发送读数据的指令;所述数据上传模块,用于当接收到读数据的指令时,读取环形缓冲区的读指针和写指针之间的数据,上传至上位机,并同步修改读指针的位置。(The invention discloses a high-speed data transmission and acquisition system and a method based on FPGA, the high-speed data transmission and acquisition system based on FPGA is characterized by comprising a data receiving module, a DDR cache module and a data uploading module; the DDR cache module comprises a ring buffer, a write pointer and a read pointer; the annular buffer area stores data, the write pointer points to the position of the annular buffer area after the data is written in, and the read pointer points to the position of the annular buffer area after the data is read out; the data receiving module is used for receiving a network data packet, analyzing the data packet, writing the analyzed data packet into the annular buffer area, and synchronously modifying the position of the writing pointer; when the difference value of the write pointer and the read pointer reaches a preset data amount, sending a command of reading data to the data uploading module; and the data uploading module is used for reading data between the read pointer and the write pointer of the annular buffer area when receiving a read data instruction, uploading the data to an upper computer, and synchronously modifying the position of the read pointer.)

一种基于FPGA的高速数据采集系统及方法

技术领域

本发明涉及网络信息采集领域,具体涉及一种基于FPGA的高速数据传输采集系统及方法。

背景技术

现代数字处理技术以及网络技术的飞速发展,为复杂系统对采集到的海量数据进行实时处理提供了可能性。而随着5G网络、物联网、云计算等应用不断涌现,越来越大的数据量和不断提升的数据传输速度也对现如今的数据采集处理系统提出了更高的要求。高速数据传输采集系统广泛应用于通信、网络等领域,对系统更高速,高精度,实时性的要求愈加迫切。面对日益繁重的信号采集处理任务,数据存储的速率和容量成为制约系统性能的重要因素。

随着网络带宽的逐步提高,高速口互联传输数据也日益成为业界的研究热点。在网络安全、数字算法处理等需要大量数据传输的领域,对高速网口传输的高效性、安全性、完整性要求也越来越高。而随着数据传输高速串行化的不断发展,PCIE总线、高速以太网等串行化总线标准相继提出,也使得数据的高速传输得以实现。PCIE DMA的传输方式减少了CPU干预,传输速率极快,时延较小;高速以太网与其他串行总线相比,也具有更大带宽,传输速率更快,传输距离更远等优点。

FPGA经过几十年飞速发展,已逐渐成为高速数据处理系统的主流平台之一,由于其可并行、高吞吐率的突出优点,广泛应用于网络通信各个领域。对于高速数据处理系统,通常使用FPGA来将所需处理的数据传输至上位机服务器端进行后续精度复杂的运算处理。这就涉及到FPGA与上位机间的大量数据传输的问题,因此,构建服务器与FPGA间的高速数据传输采集系统及方法已成为目前业界的研究重点。

目前常使用DDR SDRAM(DoubleData Rate SDRAM,DDR)来扩展系统的存储空间,提升数据实时存储和处理的能力。通过内存控制器来完成对内存的读写、刷新等操作,DDRSDRAM更是广泛应用于FPGA板卡设计,通过内部内存控制器的配置,完成各类需要高速缓存设计功能的实现。Xilinx、Altera、Synopsys等公司均开发公布了通用性的DDR系列控制器IP核。基于DDR SDRAM在FPGA中的重要作用,设计一种高速、低延迟的数据传输采集系统,以及一种如何将采集到的数据进行高效处理的方法具有广阔的应用场景,并且对未来网络、大数据处理具有重大的研究意义。

目前传统服务器从网口收到的数据需要经过CPU的处理,这样会占用大量的CPU资源,CPU对小包的处理能力远远不够,用纯软件方法从万兆网卡收包并放入到服务器内存,对于10Gbps如以太网长度为64字节的小包,一般线速只能做到60%甚至更低,不能达到100%线速,会出现丢包的现象。

发明内容

本发明的目的在于克服上述技术缺陷,基于FPGA提供了一套应用于网络数据采集传输场景的缓存处理系统及方法,通过该系统及方法可以实现高吞吐率数据包收发任务。服务器和FPGA板卡之间采用高速网口协议和PCIE协议进行通信,网口接收由服务器传输的数据通过AXI总线传输至DDR作为大容量缓存,再通过DMA操作将DDR中缓存的数据高速传输至上位机系统内存并进行相应的后续处理。从DDR缓存提取数据至上位机系统内存时,采用环形缓存的方法,分别设置读写指针,记录DDR缓存的数据信息,当读写指针之间的数据量达到设定值(如2MB)时,进行一次DMA操作,将数据传输至上位机系统内存。对于一路10Gbps的高速网口,本发明的方法可达到14.88Mpps(64字节小包),实现100%线速,并可把数据同步导入服务器内存。

为实现上述目的,本发明提出了一种基于FPGA的高速数据传输采集系统,所述系统包括数据接收模块、DDR缓存模块和数据上传模块;所述DDR缓存模块包括环形缓冲区、写指针和读指针;所述环形缓冲区存储数据,写指针指向环形缓冲区写入数据后的位置,读指针指向环形缓冲区读出数据后的位置;

所述数据接收模块。用于接收网络数据包,对数据包解析后写入环形缓冲区,同步修改写指针的位置;当写指针和读指针的差值达到预先设定的数据量后,向所述数据上传模块发送读数据的指令;

所述数据上传模块,用于当接收到读数据的指令时,读取环形缓冲区的读指针和写指针之间的数据,上传至上位机,并同步修改读指针的位置。

作为上述系统的一种改进,所述数据接收模块包括XGMII核接口、FIFO、AXI总线、MIG核和计数器;

所述XGMII核接口,用于接收网络数据包,通过FPGA解析二层网络协议得到前导码指示信号及当前包结束信号,将每个数据包的有效数据写入FIFO;

所述FIFO,用于将经过跨时钟域处理的数据输出至AXI总线;AXI总线通过突发设置将FIFO的数据转发至MIG核;

所述MIG核,用于将数据写入环形缓冲区;

所述计数器,用于对AXI总线突发次数进行计数,同步修改写指针的位置。

作为上述系统的一种改进,初始状态时,所述读指针和写指针均在环形缓冲存区的起始位置;修改时,读指针和写指针沿着环形缓冲区的同一个方向进行转动。

作为上述系统的一种改进,所述预先设定的数据量为256K、512K或2M。

作为上述系统的一种改进,所述数据上传模块包括PCIE核和DMA控制器;所述DMA控制器,用于当接收到读数据的指令时,通过PCIE核读取环形缓冲区的读指针和写指针之间的数据,上传至上位机。

作为上述系统的一种改进,所述系统还包括:计时器,用于实时监控XGMII核接口是否有新的数据输入,当有新的数据输入时清零;当计时值超过预设时间时,则向所述数据上传模块发送读数据的指令;DMA控制器通过PCIE核读取环形缓冲区的剩余数据,上传至上位机。

本发明还提出可一种基于FPGA的高速数据传输采集系方法,基于上述的系统实现,所述方法包括:

所述数据接收模块接收网络数据包,对数据包解析后写入环形缓冲区,计数器对AXI总线突发次数进行计数,同步修改写指针的位置;

当写指针和读指针的差值达到预先设定的数据量后,向所述数据上传模块发送读数据的指令;

当所述数据上传模块接收到读数据的指令时,通过PCIE核读取环形缓冲区的读指针和写指针之间的数据,上传至上位机,并同步修改读指针的位置。

作为上述方法的一种改进,所述方法还包括:

系统各模块初始化;

设置AXI总线突发模式;

所述读指针和写指针均设置在环形缓冲存区的起始位置。

作为上述方法的一种改进,所述数据接收模块接收网络数据包,对数据包解析后写入环形缓冲区,具体包括:

当XGMII核接口接收到数据包,其传输输出使能为1,则FIFO写使能置1,开始向FIFO传送数据,FIFO输入位数以网口数据单位为准,当达到AXI总线设置的突发次数后,读使能置1,AXI总线开始读取FIFO中的数据,并通过MIG核传输至环形缓冲区。

作为上述方法的一种改进,所述方法还包括:当计时器的计时值超过预设的时间时,则发送读数据的指令;DMA控制器通过PCIE核读取环形缓冲区的剩余数据,上传至上位机。

与现有技术相比,本发明的优势在于:

1、本发明的高速数据传输采集系统基于FPGA实现高速网络数据包的捕获,以及PCIE高速传输,具有很高的吞吐率;对于一路10Gbps的高速网口,本方法可达到14.88Mpps(64字节小包),实现100%线速,并可把数据同步导入服务器内存;

2、本发明提出的FPGA单板的DDR环形缓存写入及读取方法有较好的实用性,在网络数据传输应用中既可以保证数据包传输的完整性,又能够配合DMA传输减少CPU的干预消耗,从而提高传输效率,具有广泛的适用性;

3、本发明提供了系统和方法具有很好的普适性,同样适用于单路25G的光口,以及可适用于多个光口的并行数据采集,适用于20G/25G/40G/100G等高速网络数据采集;

4、本发明的系统及方法可以实现10Gbps及以上速率的高吞吐率网络数据采集。

附图说明

图1是本发明的基于FPGA的高速数据传输采集的系统的框架设计图;

图2是本发明的DDR缓存环形读取指针设置示意图;

图3是本发明的基于FPGA的高速数据传输采集的方法的流程示意图。

具体实施方式

下面结合附图进一步说明本发明的技术方案,这些实施例是用于说明本发明而不限于限制本发明的范围。

本发明提出了一种基于FPGA的高速数据传输采集系统,用于对网络采集到的数据包完整地传输至上位机进行处理,所述系统包括通过高速网口(10Gbps或更高速率)接收数据包的FPGA,FPGA将接收到的数据包通过解析数据链路层协议,经FIFO和AXI总线存入DDR缓存,通过DMA操作将缓存在大容量DDR中的数据经PCIE核接口高速传输至上位机,由用户做下一步处理。

基于状态机,由FPGA通过AXI总线写入DDR环形BUFFER,每次写入数据后同步修改写指针;通过DMA驱动程序从DDR环形缓存中读出大块数据,每次读出后同步修改读指针。读写指针沿着DDR环形缓存的同一个方向(如顺时针)进行转动。当写指针与读指针的差值达到一定大块数值后(如2MB),由上层应用调用DMA驱动进行一次DMA读操作。当写指针在大于一定时间间隔(如50ms)无变动时(表示网络最近一段时间无新数据),由DMA一次读取DDR环形缓存中的剩余数据。

实施例1

如图1所示,本发明的实施例1提出了一种基于FPGA的高速数据传输采集系统包括数据接收模块、DDR缓存模块和数据上传模块;

DDR缓存模块包括:环形缓冲区、写指针和读指针;环形缓冲区可以使得读写并发执行,通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。

数据接收模块:用于通过FPGA的XGMII核接口来接收某服务器发来的网络数据包,解析后通过设置的异步FIFO经AXI总线存入DDR缓存模块;

数据接收模块主要实现FPGA的数据接收,保证由网口传输的数据可以稳定、完整地缓存至DDR缓存模块。

该模块主要包括XGMII核接口、一个或多个异步FIFO、AXI总线、若干个MIG核和计数器。XGMII核接口接收某服务器发来的网络数据包,由于网口传输时钟为156MHz,AXI总线读写时钟为250MHz,因此AXI总线和网口之间需要添加FIFO,完成跨时钟域转换和数据结构转换。利用设置FIFO以及控制相应的读写使能,可以避免了因数据要求而引入复杂时序建立数据转换模块导致时序错乱、数据不稳定等问题。FIFO可保证读写使能、数据和读写时钟同源,避免跨时钟域导致传输不稳定的问题发生。将使能信号作为异步FIFO的写使能,网口输出的数据接入数据FIFO的写数据接口,经过跨时钟域处理的数据由FIFO输出至AXI总线,通过对AXI总线的突发设置经MIG核传送至环形缓冲区。

计数器对AXI总线的突发次数进行计数,同步修改写指针的位置。

写指针指向环形缓冲区中可写的缓冲区,即有效数据的末尾位置。每次写入数据后同步修改写指针。读指针指向环形缓冲区中可读的缓冲区,即有效数据的开始位置;每次读完数据后同步修改读指针,读指针指向下一个数据地址位置;

如图2所示,初始状态时,读指针和写指针在起始位置重合,读写指针沿着DDR环形缓存的同一个方向(如顺时针)进行转动。当调用MIG核连续缓存数据至DDR时,写指针随之移动,当读指针和写指针之间的数据量达到预先设定的数据量的时候,读状态开启,将读指针和写指针之间的数据量读出,读指针指向新的位置。

读写指针之间的数据量大小可按照实际需求设置为256K、512K或2M等,该数据量为与上位机进行一次DMA传输的数据块大小。本实施例采用的是2M。

所述数据上传模块:用于将环形缓冲区的数据,经PCIE DMA方式传输至上位机,供用户下一步处理;

数据上传模块主要实现FPGA和上位机的数据上传,保证缓存在DDR中的数据包可以稳定地通过FPGA板传输至上位机内存,进行下一步操作。该模块主要包括PCIE核、DMA控制器。

在FPGA设计硬件计时器,实时监控网口是否有新的数据输入,当有新的数据输入时计数器清零;当计时超过初始设定的时间(如50ms)时,则认为这段时间网口一直没有新的数据输入,将DDR环形缓冲区中剩余数据(小于2MB)以DMA方式传送至上位机。

当网络接收的数据包最后一次由DDR上传至上位机内存时,由于设置读写指针之间的数据量为2MB,最后一次上传数据包中的数据量小于2MB,此时需设置判断标志,判断DDR缓存已经完成写操作,这里设置一个50ms的写指针滞留时间作为判断标准,该标准可由实际情况进行设置,此处为常用判断时间。若滞留时间超过50ms即说明写操作已完成,需将剩余的数据量全部上传到服务器。

本发明的基于FPGA的高速数据传输采集的系统的设计步骤如下:

S01:分析各个接口协议,确定各个接口的IP核设计,包括PCIE核、xgmii核、DMA核、FIFO IP核、AXI总线IP核和MIG核。

S02:完成高速网口输逻辑设计,包括接收逻辑设计、xgmii接口设计、AXI总线设计、实现高速网口的数据传输;

S03:完成DDR存储接口设计,包括一个或多个异步FIFO设计和MIG设计,实现DDR的读写操作;

S04:完成DDR环形缓存读取方法的设计,包括读写指针设计、计时模块设计、以及计数模块的逻辑设计,实现以恒定数据量读取DDR数据至上位机内存;

S05:完成PCIE核传输逻辑设计,包括接收/发送逻辑设计、DMA控制逻辑设计,实现FPGA板卡和服务器端的高速DMA读写设计;

S06:完成整个高速数据传输采集系统的功能验证,保证FPGA端到服务器端数据传输的正确性以及高效性;

S07:移植整个平台到硬件FPGA上,包含各个硬件IP,在官方提供的软件驱动基础上编写各个硬件设备的驱动;

S08:在用户层调用各个硬件IP核,形成整个高速数据传输采集系统。

实施例2

如图3所示,基于上述系统,本发明的实施例2提出了一种基于FPGA的高速数据传输采集方法,包括:

FPGA板卡上电复位后,FPGA各模块初始化,设置总线突发模式以及DDR起始读写地址。

网口传输输出使能为1后,FIFO写使能置1,开始向FIFO传送数据,FIFO输入位数以网口数据单位为准,当达到AXI总线设置的突发次数后,读使能置1,AXI总线开始读取FIFO中的数据,并通过MIG核传输至FPGA板卡上的环形缓冲区;

计数器对AXI总线突发次数进行计数;同步修改写指针的位置;

当写指针和读指针之间的数据量到达预设量的时候,发起一次DMA操作,将环形缓冲区数据读取至上位机。

若读写指针之间的数据量未达到2MB,且写指针位置未变化时间超过50ms时,将读写指针之间剩余的数据量通过DMA方式送入上位机内存,至此由网口接收到的整个数据包已全部上传至上位机。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:存储设备的控制部件

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!