CN117978749B - 一种基于fpga实现数据源流控的方法及系统 - Google Patents
一种基于fpga实现数据源流控的方法及系统 Download PDFInfo
- Publication number
- CN117978749B CN117978749B CN202410354196.8A CN202410354196A CN117978749B CN 117978749 B CN117978749 B CN 117978749B CN 202410354196 A CN202410354196 A CN 202410354196A CN 117978749 B CN117978749 B CN 117978749B
- Authority
- CN
- China
- Prior art keywords
- flow control
- time length
- state machine
- state
- data frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 78
- 238000004891 communication Methods 0.000 claims description 23
- 230000005540 biological transmission Effects 0.000 claims description 16
- 238000004806 packaging method and process Methods 0.000 claims description 6
- 238000012937 correction Methods 0.000 claims description 3
- 239000000725 suspension Substances 0.000 abstract description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012806 monitoring device Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/43—Assembling or disassembling of packets, e.g. segmentation and reassembly [SAR]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/30—Flow control; Congestion control in combination with information about buffer occupancy at either end or at transit nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于FPGA实现数据源流控的方法及系统,当网卡模块的缓存单元的剩余容量小于阈值容量,说明缓存单元的剩余容量不足,则发送流控需求信号至FPGA模块,FPGA模块生成流控允许信号,并输入状态机;正常状态下,状态机在初始状态和识别状态下循环,即实时正常发送数据帧至外部设备;在需要进行流控延时时,状态机会在识别状态下进入第一流控状态,在第一流控状态下,状态机等待第一预设时长来实现暂缓发送数据帧,即调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,即在单位时间内降低了数据帧发送至接收设备的网卡单元的数量,从而避免接收设备的网卡单元因数据拥堵而造成数据丢失的情况。
Description
技术领域
本发明涉及FPGA技术领域,具体涉及一种基于FPGA实现数据源流控的方法及系统。
背景技术
数据源,可以简单理解为数据源头,提供了应用程序所需要的数据。数据源保证了应用程序与交互模块之间交互的规范和协议,数据源中包含了用户的验证信息和交互时所需的一些特性配置,简而言之,数据源即是产生用户数据的源头,可以是各类实际应用硬件(例如能够实时产生图像数据的摄像头)。
FPGA芯片广泛应用于通信、数字信号处理、视频图像处理以及告诉接口设计等领域;数据源在产生数据后,通常需要将产生的数据进行存储或发送至其他外部设备,也就是将数据从数据源发送至接收设备(可以是存储设备,也可以是其他的单独外部设备),而数据源将数据发送至接收设备时,由于接收设备的网卡可能会同时接收大量的数据,进而导致接收设备在接收来自数据源的数据的过程中出现数据拥堵,而数据拥堵容易导致数据源发送至接收设备的数据出现丢失情况,但现有技术中尚没有如何避免因接收设备出现数据拥堵而导致出现数据丢失的情况的方案。
发明内容
本发明的主要目的是提供一种基于FPGA实现数据源流控的方法及系统,旨在解决因接收设备出现数据拥堵而导致出现数据丢失的问题。
本发明提出的技术方案为:
一种基于FPGA实现数据源流控的方法,应用于基于FPGA实现数据源流控的系统;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器;所述方法,包括:
FPGA模块搭建状态机,以使状态机进入初始状态;
FPGA模块接收来自发送设备的应用数据,并将应用数据拆分生成多个数据块,其中,每个数据块的大小一致;
当网卡模块的缓存单元的剩余容量小于阈值容量时,接收设备生成流控需求信号并发送至FPGA模块;
当接收到流控需求信号时,FPGA模块生成流控允许信号,并输入状态机;
在初始状态下,状态机在FPGA模块将应用数据拆分生成多个数据块之后对数据块进行封装以生成数据帧;
生成数据帧后,状态机进入识别状态;
在识别状态下,状态机判断是否接收到了流控允许信号;
若是,状态机进入第一流控状态,并删除流控允许信号;
若否,状态机将数据帧发送至网卡模块,且状态机再次进入初始状态;
在第一流控状态下,状态机基于计数器和时钟信号等待第一预设时长之后再将数据帧发送至网卡模块,然后进入初始状态。
优选的,所述在初始状态下,状态机在FPGA模块将应用数据拆分生成多个数据块之后对数据块进行封装以生成数据帧,包括:
状态机为数据块添加数据帧头,在数据帧头和数据块之间添加第一校验符,在数据块之后添加第二校验符,在第二校验符之后添加数据帧尾以得到数据帧,其中,第一校验符和第二校验符用于接收设备接收到数据帧后判断数据帧的完整性。
优选的,接收设备还包括存储模块;所述当网卡模块的缓存单元的剩余容量小于阈值容量时,接收设备生成流控需求信号并发送至FPGA模块,包括:
接收设备实时获取网卡模块的缓存单元在当前时刻的剩余容量和阈值容量之间的差值,并标记为容量差值;
接收设备获取数据自缓存单元输入至存储模块的平均速度;
当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长;
接收设备将流控需求信号、流控延时时长和平均速度打包发送至FPGA模块;
所述方法,还包括:
接收到流控需求信号后,FPGA模块基于流控延时时长和平均速度计算第一预设时长,其中,第一预设时长为根据容量差值确定的流控延时时长。
优选的,所述当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长的计算公式为:
,
式中,为流控延时时长,单位为纳秒;/>为容量差值,单位为字节;/>为平均速度,单位为字节每纳秒;A为修正常数,取正数,单位为纳秒。
优选的,每个数据帧的大小一致;所述接收到流控需求信号后,FPGA模块基于流控延时时长和平均速度计算第一预设时长,包括:
FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长;
FPGA模块基于数据帧的大小、第一目标时长和第二目标时长计算得到未进行流控延时的正常传输速度:
,
式中,为正常传输速度,单位字节每纳秒;/>为单个数据帧的大小,单位为字节;/>为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒;
FPGA模块获取自身与接收设备之间的通信延时时长,并基于通信延时时长、平均速度、正常传输速度和流控延时时长计算第一预设时长:
,
式中,为第一预设时长,单位为纳秒;/>为FPGA模块与接收设备之间的通信延时时长,单位为纳秒。
优选的,数据帧头包括唯一的帧序列号;所述方法,还包括:
FPGA模块将第一校验符和第二校验符发送至接收设备;
接收设备将接收到的第一校验符标记为第一验证符,将接收到的第二校验符标记为第二验证符;
接收设备接收到数据帧之后,判断数据帧是否满足如下条件:数据帧内的第一校验符和第一验证符一致,且数据帧内的第二校验符和第二验证符一致;
若否,接收设备生成与数据帧对应的错误信息并发送至FPGA模块,其中,错误信息包括数据帧的帧序列号。
优选的,还包括:
FPGA模块获取过去第一预设时间段内接收到的来自接收设备的错误信息的数量,标记为丢包数量;
当丢包数量大于阈值数量时,FPGA模块生成第一流控信号,并输入状态机;
所述生成数据帧后,状态机进入识别状态,之后还包括:
在识别状态下,状态机判断是否接收到了第一流控信号;
若是,状态机进入第二流控状态;
若否,执行所述在识别状态下,状态机判断是否接收到了流控允许信号,及之后的步骤;
在第二流控状态下,状态机基于计数器和时钟信号等待第二预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第二预设时长为根据丢包数量确定的流控延时时长。
优选的,还包括:
FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长;
FPGA模块基于第一目标时长和第二目标时长计算得到第二预设时长:
,
式中,为第二预设时长,单位为纳秒;B为调整比例系数,取正数;/>为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒。
优选的,所述接收设备实时获取网卡模块的缓存单元在当前时刻的剩余容量和阈值容量之间的差值,并标记为容量差值,之后还包括:
当剩余容量大于阈值容量时,接收设备获取缓存单元的剩余容量在过去第二预设时间段内的减少速度;
当减少速度大于阈值速度时,接收设备生成第二流控信号,并发送至FPGA模块;
FPGA模块将接收到的第二流控信号输入状态机;
所述生成数据帧后,状态机进入识别状态,之后还包括:
在识别状态下,状态机判断是否接收到了第二流控信号;
若是,状态机进入第三流控状态;
若否,执行所述在识别状态下,状态机判断是否接收到了流控允许信号,及之后的步骤;
在第三流控状态下,状态机基于计数器和时钟信号等待第三预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第三预设时长为根据缓存单元的剩余容量减小速度确定的流控延时时长。
本发明还提出一种基于FPGA实现数据源流控的系统,应用基于FPGA实现数据源流控的方法;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器。
通过上述技术方案,能实现以下有益效果:
本发明提出的基于FPGA实现数据源流控的方法能够避免因接收设备出现数据拥堵而导致出现数据丢失的情况;当网卡模块的缓存单元的剩余容量小于阈值容量,说明缓存单元的剩余容量不足,需要进行延时流控;发送流控需求信号至FPGA模块,当接收到流控需求信号时,FPGA模块生成流控允许信号,并输入状态机;正常状态下,状态机在初始状态和识别状态下循环,即实时正常发送数据帧至外部设备;在需要进行流控延时时,状态机会在识别状态下进入第一流控状态,在第一流控状态下,状态机等待第一预设时长来实现暂缓发送数据帧,即调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,即在单位时间内降低了数据帧发送至接收设备的网卡单元的数量,从而避免接收设备的网卡单元因数据拥堵而造成数据丢失的情况。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本发明提出的一种基于FPGA实现数据源流控的方法第一实施例的流程图。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提出一种基于FPGA实现数据源流控的方法及系统。
如附图1所示,在本发明提出的一种基于FPGA实现数据源流控的方法的第一实施例,本方法应用于基于FPGA实现数据源流控的系统;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器;本实施例包括如下步骤:
步骤S110:FPGA模块搭建状态机,以使状态机进入初始状态。
具体的,状态机也称为同步有限状态机,这里的“同步”是指状态机中所有的状态跳转都是基于时钟信号进行的,而“有限”则是说状态的个数是有限的。
具体的,本实施例中FPGA模块采用Verilog代码搭建状态机,其中,状态机包括初始状态、识别状态和第一流控状态。
步骤S120:FPGA模块接收来自发送设备的应用数据,并将应用数据拆分生成多个数据块,其中,每个数据块的大小一致。
具体的,这里的应用数据即是发送设备在日常运行过程中产生的需要发送至接收设备的数据,例如监控设备产生的监控数据。
步骤S130:当网卡模块的缓存单元的剩余容量小于阈值容量(例如缓存单元总容量的5%)时,接收设备生成流控需求信号并发送至FPGA模块。
具体的,当缓存单元的剩余容量小于阈值容量时,说明缓存单元的剩余容量不足,需要进行流控,以避免接收设备的网卡模块在接收数据时出现数据拥堵。
步骤S140:当接收到流控需求信号时,FPGA模块生成流控允许信号,并输入状态机。
步骤S151:在初始状态下,状态机在FPGA模块将应用数据拆分生成多个数据块之后对数据块进行封装以生成数据帧。
具体的,这里生成的每个数据帧的大小均一致。
步骤S152:生成数据帧后,状态机进入识别状态。
步骤S153:在识别状态下,状态机判断是否接收到了流控允许信号.
若是,执行步骤S154:状态机进入第一流控状态,并删除流控允许信号。
若否,执行步骤S155:状态机将数据帧发送至网卡模块,且状态机再次进入初始状态。
具体的,进入第一流控状态,并删除流控允许信号,即进行单次流控延时,下次状态机进入初始状态后,除非状态机新输入了流控允许信号,否者并不再次进入第一流控状态;也就是说,状态机接收1次流控允许信号,只对应的进入1次第一流控状态。
步骤S156:在第一流控状态下,状态机基于计数器和时钟信号等待第一预设时长之后再将数据帧发送至网卡模块,然后进入初始状态。
具体的,在第一流控状态,通过等待第一预设时长来实现暂缓发送数据帧,从而调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,降低数据帧发送至接收设备的传输速度,避免出现数据拥堵。
本发明提出的基于FPGA实现数据源流控的方法能够避免因接收设备出现数据拥堵而导致出现数据丢失的情况;当网卡模块的缓存单元的剩余容量小于阈值容量,说明缓存单元的剩余容量不足,需要进行延时流控,以避免网卡单元出现数据拥堵;发送流控需求信号至FPGA模块,当接收到流控需求信号时,FPGA模块生成流控允许信号,并输入状态机;正常状态下,状态机在初始状态和识别状态下循环,即实时正常发送数据帧至外部设备;在需要进行流控延时时,状态机会在识别状态下进入第一流控状态,在第一流控状态下,状态机等待第一预设时长来实现暂缓发送数据帧,即调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,即在单位时间内降低了数据帧发送至接收设备的网卡单元的数量,从而避免接收设备的网卡单元因数据拥堵而造成数据丢失的情况。
在本发明提出的一种基于FPGA实现数据源流控的方法的第二实施例中,基于第一实施例,步骤S160,包括如下步骤:
步骤S210:状态机为数据块添加数据帧头,在数据帧头和数据块之间添加第一校验符,在数据块之后添加第二校验符,在第二校验符之后添加数据帧尾以得到数据帧,其中,第一校验符和第二校验符用于接收设备接收到数据帧后判断数据帧的完整性。
具体的,在本实施例中的Verilog代码中,使用IDLE以表示状态机的初始状态。使用FRAME_HEAD表示数据帧头,也可以采用其他自定义代码来表示数据帧头,数据帧头用于识别数据的开始位置。使用FRAME_RSV0表示第一校验符。使用FRAME_DATA表示数据帧中的的有效数据(即数据块)。使用FRAME_RSV1表示第一校验符。使用FRAME_LAST表示数据帧尾,也可以采用其他自定义代码来表示数据帧尾,数据帧尾用于表示数据帧的结束位置。
此外,在本实施例中的Verilog代码中,使用FRAME_WAIT表示识别状态,即在此状态下判断是否需要激活流控功能,在FPGA内部可定义信号Delay_en来表示流控允许信号,若不需要流控则直接跳回初始状态(IDLE),若需要流控,进入第一流控状态。即使用FRAME_DELAY表示第一流控状态,流控功能在该状态实现,即通过计数器和时钟信号来控制前一数据帧和本次发送的数据帧之间的时间间隔,以达到流控的作用;还可以根据计数器计算出数据帧的传输速率(具体请参考后续实施例)。
在本发明提出的一种基于FPGA实现数据源流控的方法的第三实施例中,基于第一实施例,接收设备还包括存储模块;步骤S130,包括如下步骤:
步骤S310:接收设备实时获取网卡模块的缓存单元在当前时刻的剩余容量和阈值容量之间的差值,并标记为容量差值。
步骤S320:接收设备获取数据自缓存单元输入至存储模块的平均速度。
步骤S330:当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长。
具体的,这里的流控延时时长即是缓存单元在不接收新的数据的前提下,将自身的数据输入至存储模块以使剩余容量大于阈值容量所需要的时长;也就是FPGA模块发送数据帧时所需要暂缓的等待时长的基础,即基于流控延时时长计算得到第一预设时长。
步骤S340:接收设备将流控需求信号、流控延时时长和平均速度打包发送至FPGA模块。
本实施例还包括如下步骤:
步骤S350:接收到流控需求信号后,FPGA模块基于流控延时时长和平均速度计算第一预设时长,其中,第一预设时长为根据容量差值确定的流控延时时长。
具体的,本实施例给出了如何基于接收设备的参数计算得到第一预设时长的方案。
在本发明提出的一种基于FPGA实现数据源流控的方法的第四实施例中,基于第三实施例,所述当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长的计算公式为:
,
式中,为流控延时时长,单位为纳秒;/>为容量差值,单位为字节;/>为平均速度,单位为字节每纳秒;A为修正常数,取正数,单位为纳秒,例如10纳秒。
具体的,本实施例给出了计算得到流控延时时长的具体公式。
在本发明提出的一种基于FPGA实现数据源流控的方法的第五实施例中,基于第四实施例,每个数据帧的大小一致;步骤S350,包括如下步骤:
步骤S510:FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长。
步骤S520:FPGA模块基于数据帧的大小、第一目标时长和第二目标时长计算得到未进行流控延时的正常传输速度:
,
式中,为正常传输速度,单位字节每纳秒;/>为单个数据帧的大小,单位为字节;/>为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒。
具体的,这里的正常传输速度即是在不进行流控的前提下,FPGA模块正常发送数据帧至网卡单元的速度。
步骤S530:FPGA模块获取自身与接收设备之间的通信延时时长,并基于通信延时时长、平均速度、正常传输速度和流控延时时长计算第一预设时长:
,
式中,为第一预设时长,单位为纳秒;/>为FPGA模块与接收设备之间的通信延时时长,单位为纳秒。
具体的,本实施例给出了计算第一预设时长的具体方案;第一预设时长的计算考虑到了流控需求信号发送至FPGA模块所耗费的时长(即通信延时时长),因在流控需求信号发送至FPGA模块的过程中,FPGA模块仍在按照正常传输速度向网卡单元发送数据帧,需要将这部分数据量考虑进去以计算得到第一预设时长(即最终的流控等待时长)。
在本发明提出的一种基于FPGA实现数据源流控的方法的第六实施例中,基于第三实施例,数据帧头包括唯一的帧序列号;本实施例还包括如下步骤:
步骤S610:FPGA模块将第一校验符和第二校验符发送至接收设备。
步骤S620:接收设备将接收到的第一校验符标记为第一验证符,将接收到的第二校验符标记为第二验证符。
步骤S630:接收设备接收到数据帧之后,判断数据帧是否满足如下条件:数据帧内的第一校验符和第一验证符一致,且数据帧内的第二校验符和第二验证符一致。
若否,执行步骤S640:接收设备生成与数据帧对应的错误信息并发送至FPGA模块,其中,错误信息包括数据帧的帧序列号。
具体的,本实施例给出了当接收设备检测到数据帧出现传输错误时的应对方案,即向FPGA模块发送错误信息。
在本发明提出的一种基于FPGA实现数据源流控的方法的第七实施例中,基于第六实施例,本实施例还包括如下步骤:
步骤S710:FPGA模块获取过去第一预设时间段(例如10秒)内接收到的来自接收设备的错误信息的数量,标记为丢包数量。
步骤S720:当丢包数量大于阈值数量时,FPGA模块生成第一流控信号,并输入状态机。
具体的,本实施例中,这里的阈值数量取值为FPGA模块在过去第一预设时间段内发送至网卡单元的数据帧的总数量的5%,当当丢包数量大于阈值数量时,说明丢包数量明显增加,很可能是由于网卡单元出现数据拥堵而导致的数据丢失,因此需要进行数据流控,故FPGA模块生成第一流控信号,并输入状态机。
步骤S152,之后还包括如下步骤:
步骤S730:在识别状态下,状态机判断是否接收到了第一流控信号。
若是,执行步骤S740:状态机进入第二流控状态,
若否,执行步骤S153,及之后的步骤。
步骤S750:在第二流控状态下,状态机基于计数器和时钟信号等待第二预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第二预设时长为根据丢包数量确定的流控延时时长。
具体的,当状态机接收到第一流控信号后,直接进入第二流控状态,在此状态下,通过等待第二预设时长来实现暂缓发送数据帧,从而调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,降低数据帧发送至接收设备的传输速度,避免出现数据拥堵,从而降低数据丢包的情况。
在本发明提出的一种基于FPGA实现数据源流控的方法的第八实施例中,基于第七实施例,本实施例还包括如下步骤:
步骤S810:FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长。
步骤S820:FPGA模块基于第一目标时长和第二目标时长计算得到第二预设时长:
,
式中,为第二预设时长,单位为纳秒;B为调整比例系数,取正数,例如0.2;/>为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒。
具体的,本实时例给出了计算得到第二预设时长的方案;本实施例中的第二预设时长与第一目标时长和第二目标时长相关;当状态机接收到第一流控信号后,每次发送数据帧都会进入第二流控状态,即每次发送数据帧都会进行流控延时,从而降低整体发送速率,以避免出现数据拥堵,从而降低数据丢包的情况;状态机运行一段时间(例如第五预设时长,例如10分钟)后,FPGA模块再次检测丢包数量仍大于阈值数量,若仍大于,则增大B的值,以增大第二预设时长,并以增大的第二预设时长来执行步骤S740,直至丢包数量不大于阈值数量。
在本发明提出的一种基于FPGA实现数据源流控的方法的第九实施例中,基于第三实施例,步骤S310,之后还包括如下步骤:
步骤S910:当剩余容量大于阈值容量时,接收设备获取缓存单元的剩余容量在过去第二预设时间段(例如5秒)内的减少速度。
具体的,减少速度的单位为字节每纳秒。
步骤S920:当减少速度大于阈值速度时,接收设备生成第二流控信号,并发送至FPGA模块。
具体的,当减少速度为正数时,说明缓存单元内剩余容量正在逐渐减少,即缓存单元将数据传输至存储模块的速度不及缓存单元接收新的数据的速度;当减少速度大于阈值速度时,缓存单元若继续按照该减少速度运行,则会在较短的时长(例如第四预设时长,这里的第四预设时长即为当缓存单元的剩余容量的减少速度按照阈值速度减少时,剩余容量达到阈值容量所需要的时长,例如本实施例中取3秒;故通过第四预设时长、当前时刻的缓存单元的剩余容量,以及缓存单元的阈值容量即可计算得到阈值速度)内使缓存单元的剩余容量小于阈值容量;故需要对FPGA模块进行流控,以防止网卡单元出现数据拥堵而导致的数据丢失,故接收设备生成第二流控信号,并发送至FPGA模块。
步骤S930:FPGA模块将接收到的第二流控信号输入状态机。
步骤S152,之后还包括如下步骤:
步骤S940:在识别状态下,状态机判断是否接收到了第二流控信号。
若是,执行步骤S950:状态机进入第三流控状态。
若否,执行步骤S153,及之后的步骤。
步骤S960:在第三流控状态下,状态机基于计数器和时钟信号等待第三预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第三预设时长为根据缓存单元的剩余容量减小速度确定的流控延时时长。
具体的,当状态机接收到第二流控信号后,直接进入第三流控状态,在此状态下,通过等待第三预设时长来实现暂缓发送数据帧,从而调节前一数据帧和本次数据帧之间的发送间隔时长,从而实现流控延时,降低数据帧发送至接收设备的传输速度,避免出现数据拥堵,从而降低数据丢包的情况。
此外,当状态机接收到第二流控信号后,每次发送数据帧都会进入第三流控状态,即每次发送数据帧都会进行流控延时,从而降低整体发送速率,以避免出现数据拥堵,从而降低数据丢包的情况。
本发明还提出一种基于FPGA实现数据源流控的系统,应用基于FPGA实现数据源流控的方法;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
Claims (9)
1.一种基于FPGA实现数据源流控的方法,其特征在于,应用于基于FPGA实现数据源流控的系统;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器;所述方法,包括:
FPGA模块搭建状态机,以使状态机进入初始状态;
FPGA模块接收来自发送设备的应用数据,并将应用数据拆分生成多个数据块,其中,每个数据块的大小一致;
当网卡模块的缓存单元的剩余容量小于阈值容量时,接收设备生成流控需求信号并发送至FPGA模块;
当接收到流控需求信号时,FPGA模块生成流控允许信号,并输入状态机;
在初始状态下,状态机在FPGA模块将应用数据拆分生成多个数据块之后对数据块进行封装以生成数据帧;
生成数据帧后,状态机进入识别状态;
在识别状态下,状态机判断是否接收到了流控允许信号;
若是,状态机进入第一流控状态,并删除流控允许信号;
若否,状态机将数据帧发送至网卡模块,且状态机再次进入初始状态;
在第一流控状态下,状态机基于计数器和时钟信号等待第一预设时长之后再将数据帧发送至网卡模块,然后进入初始状态;
接收设备还包括存储模块;所述当网卡模块的缓存单元的剩余容量小于阈值容量时,接收设备生成流控需求信号并发送至FPGA模块,包括:
接收设备实时获取网卡模块的缓存单元在当前时刻的剩余容量和阈值容量之间的差值,并标记为容量差值;
接收设备获取数据自缓存单元输入至存储模块的平均速度;
当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长;
接收设备将流控需求信号、流控延时时长和平均速度打包发送至FPGA模块;
所述方法,还包括:
接收到流控需求信号后,FPGA模块基于流控延时时长和平均速度计算第一预设时长,其中,第一预设时长为根据容量差值确定的流控延时时长。
2.根据权利要求1所述的一种基于FPGA实现数据源流控的方法,其特征在于,所述在初始状态下,状态机在FPGA模块将应用数据拆分生成多个数据块之后对数据块进行封装以生成数据帧,包括:
状态机为数据块添加数据帧头,在数据帧头和数据块之间添加第一校验符,在数据块之后添加第二校验符,在第二校验符之后添加数据帧尾以得到数据帧,其中,第一校验符和第二校验符用于接收设备接收到数据帧后判断数据帧的完整性。
3.根据权利要求1所述的一种基于FPGA实现数据源流控的方法,其特征在于,所述当剩余容量小于或等于阈值容量时,接收设备生成流控需求信号,并基于容量差值和平均速度计算流控延时时长的计算公式为:
,
式中,为流控延时时长,单位为纳秒;/>为容量差值,单位为字节;/>为平均速度,单位为字节每纳秒;A为修正常数,取正数,单位为纳秒。
4.根据权利要求3所述的一种基于FPGA实现数据源流控的方法,其特征在于,每个数据帧的大小一致;所述接收到流控需求信号后,FPGA模块基于流控延时时长和平均速度计算第一预设时长,包括:
FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长;
FPGA模块基于数据帧的大小、第一目标时长和第二目标时长计算得到未进行流控延时的正常传输速度:
,
式中,为正常传输速度,单位字节每纳秒;/>为单个数据帧的大小,单位为字节;为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒;
FPGA模块获取自身与接收设备之间的通信延时时长,并基于通信延时时长、平均速度、正常传输速度和流控延时时长计算第一预设时长:
,
式中,为第一预设时长,单位为纳秒;/>为FPGA模块与接收设备之间的通信延时时长,单位为纳秒。
5.根据权利要求1所述的一种基于FPGA实现数据源流控的方法,其特征在于,数据帧头包括唯一的帧序列号;所述方法,还包括:
FPGA模块将第一校验符和第二校验符发送至接收设备;
接收设备将接收到的第一校验符标记为第一验证符,将接收到的第二校验符标记为第二验证符;
接收设备接收到数据帧之后,判断数据帧是否满足如下条件:数据帧内的第一校验符和第一验证符一致,且数据帧内的第二校验符和第二验证符一致;
若否,接收设备生成与数据帧对应的错误信息并发送至FPGA模块,其中,错误信息包括数据帧的帧序列号。
6.根据权利要求5所述的一种基于FPGA实现数据源流控的方法,其特征在于,还包括:
FPGA模块获取过去第一预设时间段内接收到的来自接收设备的错误信息的数量,标记为丢包数量;
当丢包数量大于阈值数量时,FPGA模块生成第一流控信号,并输入状态机;
所述生成数据帧后,状态机进入识别状态,之后还包括:
在识别状态下,状态机判断是否接收到了第一流控信号;
若是,状态机进入第二流控状态;
若否,执行所述在识别状态下,状态机判断是否接收到了流控允许信号,及之后的步骤;
在第二流控状态下,状态机基于计数器和时钟信号等待第二预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第二预设时长为根据丢包数量确定的流控延时时长。
7.根据权利要求6所述的一种基于FPGA实现数据源流控的方法,其特征在于,还包括:
FPGA模块基于计数器和时钟信号得到状态机在初始状态下进行数据块封装所耗费的时长,并标记为第一目标时长,基于计数器和时钟信号得到状态机处于识别状态所耗费的时长,并标记为第二目标时长;
FPGA模块基于第一目标时长和第二目标时长计算得到第二预设时长:
,
式中,为第二预设时长,单位为纳秒;B为调整比例系数,取正数;/>为第一目标时长,单位为纳秒;/>为第二目标时长,单位为纳秒。
8.根据权利要求1所述的一种基于FPGA实现数据源流控的方法,其特征在于,所述接收设备实时获取网卡模块的缓存单元在当前时刻的剩余容量和阈值容量之间的差值,并标记为容量差值,之后还包括:
当剩余容量大于阈值容量时,接收设备获取缓存单元的剩余容量在过去第二预设时间段内的减少速度;
当减少速度大于阈值速度时,接收设备生成第二流控信号,并发送至FPGA模块;
FPGA模块将接收到的第二流控信号输入状态机;
所述生成数据帧后,状态机进入识别状态,之后还包括:
在识别状态下,状态机判断是否接收到了第二流控信号;
若是,状态机进入第三流控状态;
若否,执行所述在识别状态下,状态机判断是否接收到了流控允许信号,及之后的步骤;
在第三流控状态下,状态机基于计数器和时钟信号等待第三预设时长之后再将数据帧发送至网卡模块,然后进入初始状态,其中,第三预设时长为根据缓存单元的剩余容量减小速度确定的流控延时时长。
9.一种基于FPGA实现数据源流控的系统,其特征在于,应用如权利要求1-8中任一项所述的基于FPGA实现数据源流控的方法;所述系统包括FPGA模块、发送设备和接收设备;发送设备通信连接于FPGA模块;接收设备包括网卡模块;网卡模块通信连接于FPGA模块;FPGA模块包括计数器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410354196.8A CN117978749B (zh) | 2024-03-27 | 2024-03-27 | 一种基于fpga实现数据源流控的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410354196.8A CN117978749B (zh) | 2024-03-27 | 2024-03-27 | 一种基于fpga实现数据源流控的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117978749A CN117978749A (zh) | 2024-05-03 |
CN117978749B true CN117978749B (zh) | 2024-05-28 |
Family
ID=90853605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410354196.8A Active CN117978749B (zh) | 2024-03-27 | 2024-03-27 | 一种基于fpga实现数据源流控的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117978749B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5646943A (en) * | 1994-12-30 | 1997-07-08 | Lucent Technologies Inc. | Method for integrated congestion control in networks |
US8296695B1 (en) * | 2010-06-11 | 2012-10-23 | Altera Corporation | Method and apparatus for performing fast incremental resynthesis |
JP2015170860A (ja) * | 2014-03-04 | 2015-09-28 | 富士通株式会社 | パケット処理システム及びパケット処理方法 |
CN110611644A (zh) * | 2018-06-15 | 2019-12-24 | 视联动力信息技术股份有限公司 | 一种数据的传输方法和装置 |
CN112104667A (zh) * | 2020-11-09 | 2020-12-18 | 湖南戎腾网络科技有限公司 | 一种流量控制方法、装置及系统 |
CN116389366A (zh) * | 2023-03-30 | 2023-07-04 | 西安电子科技大学 | 一种基于fpga的低资源消耗的流量控制方法 |
-
2024
- 2024-03-27 CN CN202410354196.8A patent/CN117978749B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5646943A (en) * | 1994-12-30 | 1997-07-08 | Lucent Technologies Inc. | Method for integrated congestion control in networks |
US8296695B1 (en) * | 2010-06-11 | 2012-10-23 | Altera Corporation | Method and apparatus for performing fast incremental resynthesis |
JP2015170860A (ja) * | 2014-03-04 | 2015-09-28 | 富士通株式会社 | パケット処理システム及びパケット処理方法 |
CN110611644A (zh) * | 2018-06-15 | 2019-12-24 | 视联动力信息技术股份有限公司 | 一种数据的传输方法和装置 |
CN112104667A (zh) * | 2020-11-09 | 2020-12-18 | 湖南戎腾网络科技有限公司 | 一种流量控制方法、装置及系统 |
CN116389366A (zh) * | 2023-03-30 | 2023-07-04 | 西安电子科技大学 | 一种基于fpga的低资源消耗的流量控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117978749A (zh) | 2024-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4275122B2 (ja) | 遅延変動を減少する送信装置及び関連方法 | |
CN110557655B (zh) | 一种视频画面显示方法、装置、电子设备及存储介质 | |
CN110445722B (zh) | 拥塞控制方法、装置、设备及存储介质 | |
CN113992967B (zh) | 一种投屏数据传输方法、装置、电子设备及存储介质 | |
EP2775673A1 (en) | Content reproduction information estimating device, method and program | |
CN110312150B (zh) | 一种视频帧传输方法、系统及服务器 | |
EP4161013A1 (en) | Video data processing method and apparatus, and electronic device | |
CN108924485B (zh) | 客户端实时视频流中断处理方法及系统、监控系统 | |
CN111417029A (zh) | 视频码率的调整方法、系统、终端及存储介质 | |
CN109862400B (zh) | 一种流媒体传输方法、装置及其系统 | |
CN113364698B (zh) | 带宽估计方法、系统、电子设备与存储介质 | |
CN117978749B (zh) | 一种基于fpga实现数据源流控的方法及系统 | |
CN116233083B (zh) | 一种数字媒体信息高效传输方法 | |
CN115604052B (zh) | 车辆通讯交互方法、系统及电子设备 | |
KR101341668B1 (ko) | 데이터 통신 링크를 통한 데이터 흐름 제어 | |
CN112351049B (zh) | 数据传输方法、装置、设备及存储介质 | |
CN112929228B (zh) | 带宽测试方法及用户设备、存储装置 | |
CN115473875A (zh) | 视频帧的处理方法、电子设备及存储介质 | |
CN113543208A (zh) | 无线传输控制方法及无线通信系统、计算机存储介质 | |
TW202022627A (zh) | 通用序列匯流排裝置及其操作方法 | |
JPH05260090A (ja) | 映像転送方式 | |
CN109413485B (zh) | 数据缓存方法及装置 | |
JP2013168814A (ja) | メディアプレイヤパラメタ推定装置及び方法及びプログラム | |
CN117896548A (zh) | 数据帧的传输方法、装置、电子设备和可读存储介质 | |
CN117279041A (zh) | 数据发送、数据接收方法、设备、介质及程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |