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

PCIE应用层数据接收过程中的流控系统及方法

文献发布时间:2023-06-19 12:05:39


PCIE应用层数据接收过程中的流控系统及方法

技术领域

本发明属于计算机技术领域,具体涉及一种PCIE应用层数据接收过程中的流控系统及方法。

背景技术

随着现代社会科技的发展,PCIE(peripheral component interconnectexpress)总线作为一种高性能I/O总线广泛应用于计算机系统中,目前几乎所有商业级和工业级的计算机生产商都在其生产的计算机系统中提供了PCIE总线接口。PCIE总线标准将取代原来的PCI和AGP总线,成为新一代计算机系统的标准总线接口。PCIE总线使用高速差分信号,并采用了端到端双向传输方式,即接收和发送分别占用一对(或多对)差分对,这样的传输方式大大提高了传输速率。

Host与PCIE设备之间,或者PCIE设备与设备之间,数据传输都是以Packet形式进行的。事务层根据上层(即应用层)请求的类型、目的地址和其它相关属性,把这些请求打包,产生TLP,也就是Transaction Layer Packet。然后这些TLP往下,经历数据链路层,物理层,最终到达目标设备。

PCIE事物层与Host进行高速数据交互时,当请求方根据最大读请求长度发出读请求TLP包,Host以数量不等的CPLD包回应,CPLD包数据载荷最大为Max Payload Size。由于PCIE的传输有延时现象,可能由多个CPLD包对应一个TLP包,所以返回的CPLD包有乱序现象。为了解决乱序现象,引入了TAG和排序缓冲区;在发TLP包时,对发出的各个TLP包标注顺序的TAG,在接收CPLD包时,根据附带的TAG标识在排序缓冲区进行排序,从而解决CPLD包乱序现象。然而排序过程中,如果Host和PCIE_IP中的压包量过大,则容易导致数据流溢出排序缓冲区,进而造成数据丢失的问题。

发明内容

为了解决现有技术中存在的问题,本发明提出了一种PCIE应用层数据接收过程中的流控系统及方法,以防止在排序过程中数据流溢出,进而导致数据丢失的风险。

为解决上述技术问题,本发明采用以下的技术方案:

本发明提出一种PCIE应用层数据接收过程中的流控系统,该系统包括PCIE设备和主机,所述PCIE设备包括PCIE IP核、读请求发送模块、数据接收模块、排序缓冲区、数据读取模块和流控模块;所述PCIE IP核通过PCIE接口与主机进行高速数据交互;

所述读请求发送模块,按照TAG号取值范围0~k循环发送TLP包,且每完成发送一个TLP包则向所述流控模块标记一次写完成指针1,并将发送的每个TAG号以及对应的TLP包经由PCIE IP核发送到主机;

所述数据接收模块,将接收到的TLP包的数据根据TAG、Length、Byte Count发送到排序缓冲区,当接收到的Length和Byte Count相等时,表明该TAG号对应的TLP数据包收集完毕,并向所述流控模块标记一次写完成指针2;

所述数据读取模块,从所述排序缓冲区按TAG号顺序和长度读取排序完成的TLP数据,每次读取量为一个TAG号对应的TLP数据,且每完成读取一个TAG号则向所述流控模块标记一次读完成指针;

所述流控模块,用于指示当前TAG号的数据是否可以读取,并向数据读取模块指示本TAG号内数据长度;同时基于读请求发送模块、数据接收模块以及数据读取模块反馈的写完成指针1、写完成指针2和读完成指针完成对PCIE IP核和主机内压数据包数量的计算,完成流量控制。

进一步地,所述流控模块通过比较写完成指针2和读完成指针来实现对压包的控制,预设n为压包的最大限定量,当(写完成指针2-读完成指针)>=(k+1-n)时,即:剩余空间不小于压包的最大限定量时,通知读请求发送模块停止发送TLP包;当(写完成指针2-读完成指针)<(k+1-n)时,即:剩余空间小于压包的最大限定量时,通知读请求发送模块启动发送TLP包。

进一步地,所述流控模块接收数据接收模块反馈的写完成指针2,所述写完成指针2为某TAG号的TLP包接收完成标识,所述流控模块根据该TAG号的TLP包接收完成标识实现对数据读取模块的读控制。

进一步地,所述流控模块对数据读取模块的读控制,包括:

当所述数据接收模块接收到某TAG号的TLP包后,则向流控模块写入该TAG号的TLP包接收完成标识,然后流控模块按照已接收的TAG和Length数据来控制数据读取模块进行顺序读取,即使得数据读取模块只会读取已接收到的TAG号对应的TLP包。

进一步地,预设TLP包的Read_Request_Size为m,则排序缓冲区对每个TAG号的存储空间大小为m,数量至少为k+1个,则排序缓冲区的空间大小至少为(k+1)m。

进一步地,所述排序缓冲区内剩余的存储空间应大于等于PCIE IP核和主机内缓存的TLP数据包n,即满足下述不等式:

(k+1)*m-(写完成指针2-读完成指针)*m>=n*m,其中“*”表示相乘。

进一步地,所述排序缓冲区的存储空间已存有的数据不得大于(k+1-n)个TAG号对应的TLP数据包,具体运算过程如下:

将不等式:(k+1)*m-(写完成指针2-读完成指针)*m>=n*m的两端分别消除m得到不等式:(k+1)-(写完成指针2-读完成指针)>=n;

对不等式:(k+1)-(写完成指针2-读完成指针)>=n进行移项处理进一步得到不等式:(写完成指针2-读完成指针)<=(k+1-n),其中,(写完成指针2-读完成指针)表示排序缓冲区的存储空间已存有的数据范围。

进一步地,所述PCIE IP核、主机和排序缓冲区充当为一个“FIFO”,FIFO表示先入先出队列,并由所述流控模块根据读请求发送模块反馈的写完成指针1和数据读取模块反馈的读完成指针来实现对FIFO内压数据包数量的控制。

本发明还提出一种PCIE应用层数据接收过程中的流控方法,应用于上述的PCIE应用层数据接收过程中的流控系统,包含以下步骤:

由读请求发送模块按照TAG号取值范围0~k循环发送TLP包,且每完成发送一个TLP包则向所述流控模块标记一次写完成指针1,并将发送的每个TAG号以及对应的TLP包经由PCIE IP核发送到主机以写入对应的数据;

由数据接收模块接收到主机返回的TLP数据包并根据TAG、Length、Byte Count发送到排序缓冲区,当接收到的Length和Byte Count相等时,表明该TAG号对应的TLP数据包收集完毕,并向所述流控模块标记一次写完成指针2;

由数据读取模块从所述排序缓冲区按TAG号顺序和长度读取排序完成的TLP数据,每次读取量为一个TAG号对应的TLP数据,且每完成读取一个TAG号则向所述流控模块标记一次读完成指针;

由流控模块指示当前TAG号的数据是否可以读取,并向数据读取模块指示本TAG号内数据长度;同时基于读请求发送模块、数据接收模块以及数据读取模块反馈的写完成指针1、写完成指针2和读完成指针完成对PCIE IP核和主机内压数据包数量的计算,完成流量控制。

进一步地,该方法还包括:

所述流控模块通过比较写完成指针2和读完成指针来实现对压包的控制,预设n为压包的最大限定量,当(写完成指针2-读完成指针)>=(k+1-n)时,即:剩余空间不小于压包的最大限定量时,通知读请求发送模块停止发送TLP包;当(写完成指针2-读完成指针)<(k+1-n)时,即:剩余空间小于压包的最大限定量时,通知读请求发送模块启动发送TLP包。

与现有技术相比,本发明具有以下优点:

本发明由发送端连续发送读请求,接收端根据排序情况,实现对发送端的反馈,通过控制发送端的发包动作,来实现排序过程中的流控,防止排序过程中的数据流溢出;同时本发明将PCIE IP核、主机和排序缓冲区当成一个“FIFO”,由流控模块根据读请求发送模块反馈的写完成指针1和数据读取模块反馈的读完成指针来实现对“FIFO”内压数据包数量的控制,进一步保证数据流不丢失。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例的PCIE应用层数据接收过程中的流控系统的结构框图;

图2是本发明实施例的PCIE应用层数据接收过程中的流控方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本实施例提出一种PCIE应用层数据接收过程中的流控系统,该系统包括PCIE设备和主机,所述PCIE设备包括PCIE IP核、读请求发送模块、数据接收模块、排序缓冲区、数据读取模块和流控模块;所述PCIE IP核通过PCIE接口与主机进行高速数据交互。

所述读请求发送模块,按照TAG号取值范围0~k循环发送TLP包,且每完成发送一个TLP包则向所述流控模块标记一次写完成指针1,并将发送的每个TAG号以及对应的TLP包经由PCIE IP核发送到主机。

所述数据接收模块,将接收到的TLP包的数据根据TAG、Length、Byte Count发送到排序缓冲区,当接收到的Length和Byte Count相等时,表明该TAG号对应的TLP数据包收集完毕,并向所述流控模块标记一次写完成指针2。

所述数据读取模块,从所述排序缓冲区按TAG号顺序和长度读取排序完成的TLP数据,每次读取量为一个TAG号对应的TLP数据,且每完成读取一个TAG号则向所述流控模块标记一次读完成指针。

所述流控模块,用于指示当前TAG号的数据是否可以读取,并向数据读取模块指示本TAG号内数据长度;同时基于读请求发送模块、数据接收模块以及数据读取模块反馈的写完成指针1、写完成指针2和读完成指针完成对PCIE IP核和主机内压数据包数量的计算,完成流量控制。

需要说明的是,本实施例对排序缓冲区的操作有两个指针:写完成指针2和读完成指针,且两个指针是相互追逐的过程。

在实际应用中,读请求发送模块将TAG号以及对应的TLP包经由PCIE IP核发送到主机,主机对TLP包进行写入数据,待写入完成后将以CPLD包的形式返回给PCIE设备,并由数据接收模块进行接收。

进一步的,所述流控模块通过比较写完成指针2和读完成指针来实现对压包的控制,预设n为压包的最大限定量,当(写完成指针2-读完成指针)>=(k+1-n)时,即:剩余空间不小于压包的最大限定量时,通知读请求发送模块停止发送TLP包;当(写完成指针2-读完成指针)<(k+1-n)时,即:剩余空间小于压包的最大限定量时,通知读请求发送模块启动发送TLP包。本发明通过控制读请求发送模块的发包动作,来实现排序过程中的流控。

所述流控模块接收数据接收模块反馈的写完成指针2,所述写完成指针2为某TAG号的TLP包接收完成标识,所述流控模块根据该TAG号的TLP包接收完成标识实现对数据读取模块的读控制。

具体的,当数据接收模块接收到某TAG号的TLP包后,则向流控模块写入该TAG号的TLP包接收完成标识(即写完成指针2),然后流控模块即可按照已接收的TAG和Length数据来控制数据读取模块进行顺序读取。可以简单理解为,在流控模块的读控制下,使得数据读取模块只会读取已接收到的TAG号对应的TLP包,减少一些不必要的无效读操作过程,提升读取效率。

根据本发明的具体实施例,预设TLP包的Read_Request_Size为m,则排序缓冲区对每个TAG号的存储空间大小为m,数量至少为k+1个,则排序缓冲区的空间大小至少为(k+1)m。

进一步的,所述排序缓冲区内剩余的存储空间应大于等于PCIE IP核和主机内缓存的TLP数据包n,即满足下述不等式:

(k+1)*m-(写完成指针2-读完成指针)*m>=n*m,其中“*”表示相乘。

可以理解的是,为了不丢失数据,需满足:排序缓冲区内剩余的存储空间应大于PCIE IP核和主机内缓存的TLP数据包;换言之,排序缓冲区内的剩余容量要大于还没收回的TLP数据包;这样,一旦某个TAG号对应的TLP数据包没收完整,排序缓冲区可以预留充足的剩余空间以满足将所有数据收集过来,实现在极端情况下完成数据排序而不丢失数据的目的。

进一步的,排序缓冲区的存储空间已存有的数据不得大于(k+1-n)个TAG号对应的TLP数据包,具体运算过程如下:

将不等式:(k+1)*m-(写完成指针2-读完成指针)*m>=n*m的两端分别消除m得到不等式:(k+1)-(写完成指针2-读完成指针)>=n;

对不等式:(k+1)-(写完成指针2-读完成指针)>=n进行移项处理进一步得到不等式:(写完成指针2-读完成指针)<=(k+1-n),其中,(写完成指针2-读完成指针)表示排序缓冲区的存储空间已存有的数据范围。

举一个具体应用,预设k+1=16;Read_Request_Size m=512B;

PCIE IP核和主机内压包的最大限定量n=8;

则将上述参数值代入上述不等式中,得到:

(写完成指针2-读完成指针)*512B<=16*512B-8*512B;

由上式进一步计算得出:(写完成指针2-读完成指针)*512B<=8*512B;

由上式进一步计算得出:(写完成指针2-读完成指针)<=8;

进而根据式:(写完成指针2-读完成指针)<=8可以推出:排序缓冲区的存储空间存有的数据不得大于8个TAG号对应的TLP数据包。

本发明可以将PCIE IP核、主机和排序缓冲区充当为一个“FIFO”,FIFO表示先入先出队列,并由所述流控模块根据读请求发送模块反馈的写完成指针1和数据读取模块反馈的读完成指针来实现对FIFO内压数据包数量的控制,进一步保证数据流不丢失。

如图2所示,本实施例还提出一种PCIE应用层数据接收过程中的流控方法,应用于上述的PCIE应用层数据接收过程中的流控系统,该方法包含以下步骤:

步骤S101,由读请求发送模块按照TAG号取值范围0~k循环发送TLP包,且每完成发送一个TLP包则向所述流控模块标记一次写完成指针1,并将发送的每个TAG号以及对应的TLP包经由PCIE IP核发送到主机以写入对应的数据;

步骤S102,由数据接收模块接收到主机返回的TLP数据包并根据TAG、Length、ByteCount发送到排序缓冲区,当接收到的Length和Byte Count相等时,表明该TAG号对应的TLP数据包收集完毕,并向所述流控模块标记一次写完成指针2;

步骤S103,由数据读取模块从所述排序缓冲区按TAG号顺序和长度读取排序完成的TLP数据,每次读取量为一个TAG号对应的TLP数据,且每完成读取一个TAG号则向所述流控模块标记一次读完成指针;

步骤S104,由流控模块指示当前TAG号的数据是否可以读取,并向数据读取模块指示本TAG号内数据长度;同时基于读请求发送模块、数据接收模块以及数据读取模块反馈的写完成指针1、写完成指针2和读完成指针完成对PCIE IP核和主机内压数据包数量的计算,完成流量控制。

进一步的,该方法还包括:

所述流控模块通过比较写完成指针2和读完成指针来实现对压包的控制,预设n为压包的最大限定量,当(写完成指针2-读完成指针)>=(k+1-n)时,即:剩余空间不小于压包的最大限定量时,通知读请求发送模块停止发送TLP包;当(写完成指针2-读完成指针)<(k+1-n)时,即:剩余空间小于压包的最大限定量时,通知读请求发送模块启动发送TLP包。

本发明由发送端连续发送读请求,接收端根据排序情况,实现对发送端的反馈,通过控制发送端的发包动作,来实现排序过程中的流控,防止排序过程中的数据流溢出;同时本发明将PCIE IP核、主机和排序缓冲区当成一个“FIFO”,由流控模块根据读请求发送模块反馈的写完成指针1和数据读取模块反馈的读完成指针来实现对“FIFO”内压数据包数量的控制,进一步保证数据流不丢失。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。

最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

相关技术
  • PCIE应用层数据接收过程中的流控系统及方法
  • PCIE应用层数据接收过程中的流控系统及方法
技术分类

06120113162290