掌桥专利:专业的专利平台
掌桥专利
首页

一种基于FPGA的实时传输协议栈及其硬件实现方法

文献发布时间:2023-06-19 19:30:30


一种基于FPGA的实时传输协议栈及其硬件实现方法

技术领域

本发明属于网络通信技术领域,涉及一种基于FPGA的实时传输协议栈及其硬件实现方法,可用于实时将视频数据上传到网络上。

背景技术

随着网络设备的飞速发展和以太网的日益普及,在网络上传输的数据不再是简单的图片和文字,而是向视频和音频数据等过渡。由于受网络带宽和储存空间的限制,一些图像采集设备难以做到采集到大量的数据后,再以视频数据的形式向网络上传输。而实时传输协议(Real-time Transport Protocol,PRT)可以做到数据边上传,同时在接收端边显示,不用像往常一样需要先将整个视频数据缓存起来再播放;且它还能够保证信号源带宽与当前网络状况相匹配,同时利用它也能够在一对一,一对多,甚至多对多的网络环境中实现数据的实时传输。

目前现有的大部分实时传输数据发送系统多采用以ARM为核心的嵌入式系统,内部网络通信协议多采用软件编程。这样做在传输视频数据时会有以下缺点:(1)视频数据量较大,且一般传输时间较长,在传输过程中会严重占用核心控制器资源,影响其他任务的调度执行。(2)若采用额外附加专用以太网芯片的方案又会增加成本,使系统整体复杂度上升。(3)采用的软件协议栈多为串行执行,执行效率较低。

针对目前存在的一些基于FPGA设计的实时传输硬件协议栈的情况如下:(1)有些协议只是实现了网络层和协议层的协议数据收发功能,对于动态匹配MAC地址和IP地址和建立ARP缓存表的功能并没有实现,或者查表延时较大;(2)早期设计的硬件协议栈多用于百兆以太网,输入输出位宽相对固定且较小,内部处理数据需要较长的时钟,难以发挥FPGA并行处理的优势;

发明内容

本发明的目的是针对上述问题和不足,提供了一种基于FPGA的实时传输协议栈的硬件实现方法。

本发明的技术方案如下:

一种基于FPGA的实时传输协议栈,包括:

RTP层控制模块,配置相关寄存器参数,并控制从属于RTP层的各个子模块的数据传输和信息交互;

RTP会话信息表模块,核心功能是维持一个RTP会话信息表,用于存储RTP会话中各个成员的参数信息,供RTP数据发送模块和RTCP数据发送模块生成数据包,RTP数据接收模块和RTCP数据接收模块解析数据包使用;

RTP数据发送缓存模块,用于缓存上层网络/用户协议传输来的数据包;

RTP数据发送模块,用于将RTP数据发送缓存模块中输出的数据打包成RTP包格式并发送给UDP/IP层网络仲裁模块;

RTP数据接收缓存模块,用于存储已经解析完成的RTP包中的数据;

RTP数据接收模块,用于将从UDP/IP层网络仲裁模块发来的数据包进行解包,提取出上层网络/用户数据;

RTCP数据发送模块,用于UDP/IP层网络仲裁模块发送RTCP包,该包包含用于控制RTP通信质量的协议和相关参数;

RTCP数据接收模块,用于UDP/IP层网络仲裁模块接收RTCP包,并解包出控制协议和相关参数;

UDP/IP层网络仲裁模块,配置相关寄存器参数,用于处理当多个RTP层数据发送模块同时请求使用网络发送数据时,决定哪个数据源优先发送数据;或者用于将UDP/IP数据接收模块解析出的数据包发往对应RTP数据接收模块和RTP数据接收模块;

UDP/IP数据发送模块,用于将RTP数据发送模块和RTCP数据发送模块中输出的数据包,根据IPv4打包成相应的UDP/IP包格式并发送给ARP层协议;

UDP/IP数据接收模块,用于将从ARP层得到的UDP/IP包进行解包,根据解出的包类型、IP地址和端口号,分别提取出相应的RTP或RTCP数据包,并发给UDP/IP层网络仲裁模块;

ARP层控制模块,用于控制从属于ARP层的各个子模块的数据传输和信息交互。同时校验MAC层协议解包出的MAC帧类型,判断是传输给UDP/IP数据接收模块,还是发往ARP包接收模块;

ARP数据发送模块,用于发送ARP数据包到MAC层数据发送模块;

ARP数据发送缓存模块,用于在ARP数据发送模块查询ARP表时缓存数据包;

ARP数据接收模块,用于从MAC层数据接收模块接收ARP数据包;

MAC层数据发送模块,用于将上层协议传输的数据包打包成MAC帧格并根据MAC层控制器的输入带宽进行相应的位宽转换;

MAC层数据接收模块,根据MAC层控制器的输出带宽进行相应的位宽转换,用于将MAC帧解包校验,校验无误后并将数据传输给上层协议模块。

所述RTP数据发送缓存模块和所述RTP数据接收缓存模块,包含一个异步时钟FIFO,用于处理用户端数据发送时钟与协议栈内部时钟不同步导致数据错位的问题;一个位宽调节模块,用于处理用户端输入数据位宽与FIFO输入位宽不同的问题。

所述ARP会话信息存储模块包括一个RTP发送成员表、一个RTP普通成员表、一个X位伪随机数生成模块和一个Y位绝对时间计时器模块。RTP发送成员表和RTP普通成员表用于记录会话成员数和相关参数,用于调节发包速度和频率,当接收到RTP或RTCP包中的数据后,相关成员的参数会进行更新,X位伪随机数生成模块用于生成发送者的SSRC身份标识,该标识全局唯一,Y位绝对时间计时器模块用于生成时间戳,用于数据同步。

所述UDP/IP层网络仲裁模块包含一个网络成员表,用于存放网络IP地址、网络端口号以及相应的发送优先级。

所述ARP层控制模块包含一个ARP缓存表,用于存储MAC地址和与其对应的IP地址。

所述RTP会话信息表和ARP缓存表包含一个X位的寄存器和一个Y位的生存时间计数器,寄存器充当表载体存储数据表项,当表项中的数据被更新或使用时,计数器清零并重新计数;当超过生存时间时,表项中的数据未被更新或使用,则将这条表项从表中删除。

所述RTP数据发送缓存模块中的数据缓存部分、RTP数据接收缓存模块、ARP数据发送缓存模块由普通的异步FIFO构成,包括一条写入时钟信号线、一条读出时钟信号线、一条写使能信号线、一条读使能信号线、一组写入数据线、一组读出数据线、一条FIFO全空标志信号线、一条FIFO全满标志信号线、一组数据个数计数线以及一个复位信号线。

所述一种基于FPGA的实时传输协议栈的硬件实现方法步骤如下:

1.建立RTP会话:

(1.1)首先由外部模块输入本机的MAC地址,IP地址和IP端口号,启动RTP层控制模块并转到步骤(1.2);

(1.2)RTP层控制模块调用RTP会话信息表模块,首先生成本机的网络通信所需要的一系列参数,若生成成功则转到(1.3),否则转到(1.1);

(1.3)由外部模块输入目的IP地址和目的端口号,并将其存入到RTP会话信息表模块和UDP/IP网络仲裁模块,配置相应的优先级,结束流程;

2.生成RTCP数据包:

(2.1)检测到本机生成了一个有效的RTP会话;

(2.2)RTP会话信息表模块会开始查询RTP会话表中的参数,输出本机当前状态,并计算当前的RTCP传输间隔;

(2.3)计数器模块根据时间间隔开始计数,当传输时间间隔计数计满时,会根据RTP会话表中的成员类型和相关参数发出一个对应的RTCP复合包;

3.发送数据帧:

(3.1)RTP层控制模块接收到上层网络/用户协议启动信号;

(3.2)RTP发送模块收到启动信号,将接收到的数据打包成RTP包格式,先发送数据包头,若未收到阻塞信号,则将数据从RTP数据缓存模块发出;

(3.3)UDP/IP层网络仲裁模块根据相应的优先级,依次将RTP数据包发给对应的网络地址和端口,并向其他上层端口发送阻塞信号;

(3.4)UDP/IP数据发送模块根据IP协议规则和UDP协议规则,将接收到的数据包封装成UDPIP数据包并发送给ARP层控制模块;

(3.5)ARP层控制模块检测ARP表缓存中是否有与目的IP地址相匹配的MAC地址,有则转到步骤(3.8),否则转到步骤(3.7);

(3.6)ARP数发送模块发送ARP请求包,并等待应答包,若在规定时间内接受到应答包则转到步骤(3.8),否则结束流程;

(3.7)MAC层数据发送模块将上层协议传来的数据包封装成MAC帧,添加帧头,并根据下层MAC控制器调节好输出位宽,最后发送MAC帧。

(3.8)本次数据发送超时,复位所述ARP层相关模块,结束流程。

4.接收数据帧:

(4.1)等待MAC控制器的数据有效信号;

(4.2)将接收到的MAC帧数据进行解包,提取出目的地址,源地址和帧类型,若目的地址与本地地址相匹配则发送到ARP层控制模块,否则丢弃该数据包,结束流程;

(4.3)ARP层控制模块根据解析出的帧类型,若协议类型为ARP类型则转到步骤(4.4),若为IP类型则转到步骤(4.5);

(4.4)ARP接收模块根据协议规定进行解包,若解出为请求包,则ARP数据发送模块发出ARP应答包,否则将有效地址信息提取出来并存储到ARP表缓存中,结束流程;

(4.5)UDP/IP层接收模块根据IP协议规则和UDP协议规则,对接收到的数据包进行解包,若数据包IP地址为本地地址则转到步骤(4.6),否则丢弃数据包,结束流程;

(4.6)UDP/IP层网络仲裁模块根据相应的目的IP地址和目的端口,查找网络成员表,若找到对应成员则发送剩余的数据包,一般来说目的端口为奇数则转到步骤(4.7),偶数转到步骤(4.8),否则结束流程;

(4.7)RTCP接收模块按照相关RTCP协议进行解包,若为有效包则根据不同的协议类型获取所需数据,并将相关参数数据更新到RTP会话信息表模块,否则结束流程;

(4.8)RTP数据接收模块根据RTP规则将数据解包出来,若为有效包则根据包头参数信息更新RTP会话信息表模块,并将包中有效数据发送到RTP接收缓存模块,等待上层网格/用户协议接收;否则结束流程。

本发明与现有技术相比具有以下有益效果:

第一,以纯硬件的的方式实现了一种实时传输协议栈的开发,相较于软件协议栈,本发明的协议栈可以不依赖CPU或其他核心控制器独立运行,节约控制器资源;同时协议栈采用纯硬件编程,协议栈内每个模块或每个执行步骤的时钟都可做到精确控制,确保数据实时传输时协议栈能做到低延时,高精度和高可靠性;同时在输入输出接口增加了位宽使能接口,用于匹配多种上位用户协议和下位MAC控制器,当采用大位宽使能时可以充分发挥FPGA并行处理的优势,减少内部处理数据包需要的时钟数,降低延时;

第二,采用了一种新的缓存表的表项更新方法,采用近似于FIFO的工作方式来更新缓存表,此方法不需要单独为每个表项设置各自的生存时间,能够有效节约时钟和定时器资源,并且当作用于以数据发送为主要任务实时传输协议栈中可以有效缩短查表时间,降低传输延时;

第三,采用设置优先级的策略用于当负载多个RTP或RTCP数据发送模块时可能会产生的冲突问题,相比于传统的将数据缓存的方法,可以有效节约硬件资源。

附图说明

图1是本发明的协议栈结构图;

图2是一个发送端RTP会话建立流程图;

图3是一个RTCP包生成流程图;

图4是一个RTP数据发送流程图;

图5是一个RTP数据接收流程图。

具体实施方式

下面结合具体实施例对本发明做进一步说明。

如图1所示,本发明的协议栈包括RTP层控制模块,RTCP数据发送模块,RTCP数据接收模块,RTP会话信息表模块,RTP数据发送缓存模块,RTP数据发送模块,RTP数据接收缓存模块,RTP数据接收模块,UDP/IP网络仲裁模块,UDP/IP数据发送模块,UDP/IP数据接收模块,ARP数据发送缓存模块,ARP数据发送模块,ARP层控制模块,ARP数据发送模块,MAC层数据发送模块,MAC层数据接收模块。

所述RTP层控制模块负责与外部协议进行数据交换,启动RTP会话信息表模块,配置相关会话参数,并使能RTCP定时发送模块;

所述RTCP数据发送模块,当接收到RTP会话信息表模块中发出的使能信号后,会根据当前状态和相关参数,发送RTCP数据包,该报可以调节RTP的会话质量;所述RTCP数据接收模块通过接收RTCP包,可以记录会话成员的参数变更,调节RTP数据的发送速度。

所述RTP数据发送缓存模块和RTP数据接受缓存模块通过FIFO进行数据的缓存,同时具有接口位宽的使能功能,用于解决与上层协议接口对接的问题;

所述RTP数据发送模块可以打包上层协议数据,添加RTP包头,并根据RTP会话信息表模块提供目的地址和目的端口;所述RTP数据接收模块,可以解析RTP数据包,将有效数据发往上层网络协议或用户模块;

所述UDP/IP网络仲裁模块可以用于解决当有多个传输目的端口时,数据发送产生的冲突问题,或解决接收数据包后端口分配的问题。

所述UDP/IP数据发送模块可以封装IP包头和UDP包头,对待封装的包头信息进行校验,同时内部可以将高位宽的数据格式调节为适合网络传输的数据位宽格式;所述UDP/IP数据接收模块可以解析IP包头和UDP包头,对包头信息进行校验,解析无误后将数据包发往对应的目的地址和目的端口;

所述ARP层控制模块接收上层的数据包,将数据缓存到ARP数据缓存模块,同时查找ARP缓存表,匹配到MAC地址后,通过ARP数据发送模块将数据包发往MAC层数据发送模块,否则发送ARP数据包;

所述ARP层控制模块接收到来自MAC层数据接收模块解析好的数据帧,若解析普通IPv4数据包则发往UDP/IP数据接收模块,解析出ARP请求数据包则调用所述ARP数据发送模块进行保应答;

所述MAC层数据发送模块可用于为上层协议的数据包添加MAC帧帧头,并调节相应的输出位宽;所述MAC层数据接收模块可用于解析接收到的MAC帧帧头,判断目的地址是否为本机地址;

所述RTP数据发送缓存模块,包含一个异步时钟FIFO,用来处理用户端数据发送时钟与协议栈内部时钟不同步导致数据错位的问题;一个位宽调节模块,用来处理用户端输入数据位宽与FIFO输入位宽不同的问题;

所述RTP会话信息表模块包括一个RTP发送成员表;一个RTP普通成员表;所述UDP/IP层网络仲裁模块包含一个网络成员表,所述ARP层控制模块包含一个ARP缓存表;以上所述基本表项模块包含一个X位的寄存器和一个Y位的生存时间计数器。

以ARP缓存表为例,假设定义了最大可以存储10个表项的存储空间,每个表项的内容至少包含一个全局唯一的标识信息,如地址信息,并且初始化了一个生存时间计数器。

初始时刻,假设ARP缓存表已经存储了table1,table2,...,table10共10个表项,计数器计数值为零,则表按以下步骤执行其功能:

(1)若计数值未满则执行步骤(2),否则执行步骤(4);

(2)接收到一个表项更新信号,刷新计数器定时时间,更新表项成员总数;

(3)比较新表项的识别信息是否与table1的识别信息相同,相同则丢弃该数据包,否则将该表项插入table1的存储地址,table1存储到table2的地址,table2存储到table3的地址,依次顺延,将table10表项丢弃;

(4)删除一个最靠后的表项并刷新计数器定时时间;

所述一种硬件协议栈的初始化方法如下:

协议栈上电复位后,UDP/IP网络仲裁模块中的寄存器如表1所示和RTP会话信息表模块中的寄存器如表2所示初始值设为零,之后可由外部模块写入初始的参数并启动协议栈,令其开始工作,后续模块根据运行情况读取或更新两表中的相关参数。UDP/IP网络仲裁模块中的寄存器和RTP会话信息表模块中的寄存器控制内容在硬件协议栈工作前必须配置,数剧内容在硬件协议栈运行后会自动添加和删除,本表数据地址仅说明记录一个成员相关参数所需要的最小内存地址,根据实际需要本表数据地址可以扩充。

表1是UDP/IP网络仲裁模块中寄存器的内容格式

表2是RTP会话信息表模块中寄存器的内容格式

图2为本发明的一个发送端RTP会话建立流程图,具体实现步骤如下:

(1)等待启动信号;

(2)上位协议或用户模块写入本机MAC地址,IP地址和端口号,若与已有地址冲突,退出流程,否则进行下一步;

(3)初始化一个RTP会话表,建立一个本机数据发送成员,写入相关配置信息,调用内部伪随机计数器生成身份标识,启动生存时间计数器模块,生成一个配置完成信号;

(4)上位协议或外部模块写入目的地址和目的端口号;

(5)结束流程。

图3为本发明的一个RTCP包生成流程图,具体实施步骤如下:

(1)等待启动信号;

(2)检测到本机生成了一个有效的RTP会话;

(3)RTP会话信息表模块会开始查询RTP会话表中的参数,输出本机当前状态,并计算当前的RTCP传输间隔;

(4)当传输时间间隔计满时,会输一个计满信号并转到步骤(4),否则会检测是否终止会话,并执行步骤(5);

(5)RTCP数据发送模块根据本机状态,若为发送者则发送送者报告包和源描述包的混合报文,若为接受者则发送接受者报告包和源描述包的混合报文,用以控制通信质量,最后重新转到步骤(2);

(6)若检测到会话中止信号,RTCP数据发送模块会发送一个离开报告包和源描述包的混合报文;

(7)结束流程。

图4为本发明的一个RTP数据发送流程图,具体实施步骤如下:

(1)等待启动信号;

(2)接收到发送使能信号,生成RTP数据包并发送出去;

(3)检测网络是否冲突,一是检测是否有其他模块正在占用网络接口进行数据发送;二是检测是否有其他模块同时请求使用网络接口发送数据。若网络接口被占用或本模块优先级较低则转到步骤(2),否则转到步骤(4);

(4)将用户数据从RTP数据发送缓存模块中输出,并为该数据添加rtp_data_en和rtp_data_end信号,用于控制数据在模块内部的传输;

(5)为传输来的数据添加IPv4格式的的IP首部和UDP首部,将打包好的UDP/IP数据包发出。在本步骤中为了发挥FPGA能够并行处理数据的优势,内部采用了高位宽的数据传输格式;同时为了网络上的数据接收端能正确处理接收到的数据,内部对单字节数据的存储格式也进行了相应的高低位调整;

(6)ARP层控制模块对传输的数据包进行目的MAC地址和目的IP地址的匹配,若匹配成功转到步骤(10),否则转到步骤(7);

(7)发送ARP请求包,并将待发送的数据包暂时存入发送缓存FIFO中;

(8)设置了一个应答超时定时时间,在发送ARP请求包后,若在规定时间内接收到ARP应答包,则将与目的IP地址匹配的MAC地址发出并转到步骤(10),否则转到步骤(9);

(9)匹配失败,将发送缓存FIFO中的数据清空,结束流程;

(10)为UDP/IP数据包封装MAC帧帧头,根据MAC层控制器调节数据输出位宽,并发出数据帧;

(11)结束流程。

图5为本发明的一个RTP数据接收流程图,具体实施步骤如下:

(1)等待启动信号;

(2)接收到接收使能信号后,开始接收并解析MAC帧帧头,若解析出目的地址为本机地址或广播地址,则传输剩余帧数据。输入接口部分包含一个位宽转换模块,用以将输入的低位宽数据合并成高位宽数据后,再发给内部的其他模块;

(3)解析接收到MAC帧,检验接收到的MAC帧类型,若为ARP类型则转到步骤(4),否则转到步骤(7);

(4)若检测到ARP数据包的类型为请求包则转到步骤(6),否则转到步骤(5);

(5)按照ARP协议规定,封装出一个ARP应答包并发出;

(6)将发送方的MAC地址和IP地址存入ARP缓存表中,结束流程;

(7)按照IPv4格式对数据包进行解包,分别提取出包头信息和包数据信息,并立即将先提取出的包头信息进行校验;

(8)首先根据校验和进行IP首部校验,其次进行协议匹配操作,若为UDP协议,则最后进行IP地址匹配操作,若为本机地址则转到步骤(9),否则丢弃剩余数据并结束流程。在校验和匹配操作的同时会提取出IP数据包长度信息,IP数据包标识信息,UDP长度信息,目的IP地址和目的端口号;

(9)将剩余的数据流,即UDP数据包数据内容转往上一步提取的目的IP地址和目的端口号;

(10)若目的端口为奇数端口则视为RTCP数据包转到步骤(11),否则转到步骤(14);

(11)对接收到数据包按照RTCP数据包格式解包,提取出相应的控制信息;

(12)按控制信息更新RTP会话表中的相关成员及其参数,并按需求输出相应的控制信息,最后结束流程;

(13)对接收到数据包按照RTP数据包格式解包,提取出源标识和时间戳;

(14)向RTP会话表中登记一个新的发送成员,并更新其相关参数,将用户数据内容发送至输入缓存FIFO中,等待上层网络协议或用户模块接收;

(15)结束流程。

相关技术
  • 基于FPGA的UDP/IP硬件协议栈及实现方法
  • 基于FPGA的UDP/IP硬件协议栈及实现方法
技术分类

06120115936558