用于PCIe设备的数据读取管理方法及装置转让专利

申请号 : CN201710986687.4

文献号 : CN107766270B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王克非张磊李显微王志奇陈梨詹晋川

申请人 : 深圳市风云实业有限公司

摘要 :

本发明实施例提供一种用于PCIe设备的数据读取管理方法及装置,属于I/O设备技术领域。所述用于PCIe设备的数据读取管理方法包括:接收来自一读请求通道的读请求;根据读请求从读请求标签队列中调取读请求标签,并将读请求标签保存至读请求通道所对应的读响应通道所配置的读响应标签队列中;发送PCIe请求报文,该PCIe请求报文中封装有读请求标签和读请求;接收PCIe响应报文,解析出PCIe响应报文所包含的响应数据和读响应标签;以及当读响应标签与读请求标签相对应时,将响应数据写入匹配读响应标签队列所对应的读响应通道中。由此保障了PCIe设备多通道读取数据的严格保序,为PCIe设备的多通道数据读取管理提供了一种新的策略。

权利要求 :

1.一种用于PCIe设备的数据读取管理方法,其特征在于,PCIe设备配置有多个读请求通道和与该多个读请求通道一一对应的多个读响应通道,以及用于存储多个标签的读请求标签队列,并且多个所述读响应通道分别对应配置有多个读响应标签队列,该方法包括:接收来自一读请求通道的读请求;

根据所述读请求从所述读请求标签队列中调取读请求标签,并将所述读请求标签保存至所述读请求通道所对应的读响应通道所配置的读响应标签队列中;

发送PCIe请求报文,该PCIe请求报文中封装有所述读请求标签和所述读请求;

接收PCIe响应报文,解析出所述PCIe响应报文所包含的响应数据和读响应标签;以及当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入匹配读响应标签队列所对应的读响应通道中。

2.根据权利要求1所述的方法,其特征在于,所述当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中包括:当所述读响应标签与所述读请求标签相对应时,判断所述响应数据的数据长度是否与所述读请求所需求的请求数据长度相匹配;以及如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。

3.根据权利要求2所述的方法,其特征在于,所述如果所述响应数据的所述数据长度与所述请求数据长度相匹配则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中包括:如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则判断所述响应数据的数据大小是否小于所述读响应通道的剩余存储容量;以及当所述响应数据的数据大小是否小于所述剩余存储容量时,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。

4.根据权利要求1所述的方法,其特征在于,在所述将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中之后还包括:将所述读响应标签从所述匹配读响应标签队列中清除;以及

将所述读响应标签保存回所述读请求标签队列。

5.根据权利要求1所述的方法,其特征在于,在所述接收来自一读请求通道的读请求之前,该方法还包括:统计所述多个读响应通道中的一者或多者下所保存的所述读请求标签的数量;

根据所统计的所述读请求标签的所述数量仲裁出所述对应于所述一读请求通道的所述读请求。

6.一种用于PCIe设备的数据读取管理装置,其特征在于,PCIe设备配置有多个读请求通道和与该多个读请求通道一一对应的多个读响应通道,以及用于存储多个标签的读请求标签队列,并且多个所述读响应通道分别对应配置有多个读响应标签队列,该装置包括:通道读请求接收单元,用于接收来自一读请求通道的读请求;

标签配置单元,用于根据所述读请求从所述读请求标签队列中调取读请求标签,并将所述读请求标签保存至所述读请求通道所对应的读响应通道所配置的读响应标签队列中;

请求报文发送单元,用于发送PCIe请求报文,该PCIe请求报文中封装有所述读请求标签和所述读请求;

响应报文处理单元,用于接收PCIe响应报文,解析出所述PCIe响应报文所包含的响应数据和读响应标签;

读取管理单元,用于当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入匹配读响应标签队列所对应的读响应通道中。

7.根据权利要求6所述的装置,其特征在于,所述读取管理单元包括:数据长度匹配组件,用于当所述读响应标签与所述读请求标签相对应时,判断所述响应数据的数据长度是否与所述读请求所需求的请求数据长度相匹配;以及长度写数据组件,用于如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。

8.根据权利要求7所述的装置,其特征在于,所述读取管理单元还包括:数据容量匹配组件,用于如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则判断所述响应数据的数据大小是否小于所述读响应通道的剩余存储容量;以及容量写数据组件,用于当所述响应数据的数据大小是否小于所述剩余存储容量时,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。

9.根据权利要求6所述的装置,其特征在于,该装置还包括:

标签清除单元,用于将所述读响应标签从所述匹配读响应标签队列中清除;

标签写回单元,用于将所述读响应标签保存回所述读请求标签队列。

10.根据权利要求6所述的装置,其特征在于,该装置还包括:标签计数器,用于统计所述多个读响应通道中的一者或多者下所保存的所述读请求标签的数量;

读请求仲裁器,用于根据所统计的所述读请求标签的所述数量仲裁出所述对应于一读请求通道的所述读请求。

说明书 :

用于PCIe设备的数据读取管理方法及装置

技术领域

[0001] 本发明涉及I/O设备技术领域,具体地涉及一种用于PCIe设备的数据读取管理方法及装置。

背景技术

[0002] PCI Express(PCIe)是目前应用最为广泛的I/O总线标准,它可提供点到点的串行差分信号链路的互连设备,且具有高性能、高带宽、双单工等特点。因此,取代了早期并行PCI总线,从而满足了发展迅速的微处理器及存储器对速率和带宽的要求。
[0003] 如图1所示,其示出了PCIe总线协议体系结构,其包含核心层、事务层、物理层、数据链路层和物理层。在数据读取的过程中,数据报文首先在发射方设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达核心层。更具体地,事务层接收来自PCIe设备核心层的数据,并将其封装为TLP(Transaction Layer Packet,事务层数据包)后,发向数据链路层;此外事务层还可以从数据链路层中接收数据报文,然后转发至PCIe设备的核心层。数据链路层保证来自发送端事务层的报文可以可靠、完整地发送到接收端的数据链路层,来自事务层的报文在通过数据链路层时,将被添加序列号前缀和CRC(循环冗余校验)后缀,而数据链路层使用ACK/NAK协议来保证报文的可靠传递。
[0004] PCIe总线在数据读取上采用基于报文的数据传输架构,将请求报文和响应报文分离并各自独立的传输,从而提高了总线带宽的利用率,但同时也增加了PCIe设备数据处理的复杂性。在DMA(Direct Memory Access,直接内存存取)的读事务中,PCIe会将其封装为内存读请求和读响应两种报文,由于请求和响应各自独立传输,需要用tag(标签)来标识他们之间的对应关系,tag是一个数字编号,PCIe允许发出多个内存读请求报文,所有发出去的读请求报文tag不允许重复,主机Host收到读请求后会提取相应的tag,并在返回DMA数据时会将该tag添加到读响应报文中,而PCIe设备会在收到一个读请求的所有数据后该读请求的tag才可以被再次使用。
[0005] 本申请发明人在实现本发明的过程中发现:主机Host访存可能是乱序的,因此读响应并不是按照读请求的顺序返回的;但是,PCIe设备又需要顺序处理数据,故需要DMA控制器对tag和数据进行匹配和重排序。在一种情况下,如果PCIe设备有多个DMA读请求通道,那么多个通道之间的读请求又是交叉的,但是PCIe设备又要求返回的数据对每个通道都要保序,情况将更为复杂,影响了PCIe设备的数据读取效率和成功率。

发明内容

[0006] 本发明实施例的目的是提供一种用于PCIe设备的数据读取管理方法及装置,用以至少解决现有技术中PCIe设备在读取数据时因要求每对请求、响应通道的读取都要实现保序而导致PCIe设备的数据读取效率和成功率较低的技术问题。
[0007] 为了实现上述目的,本发明实施例提供一种用于PCIe设备的数据读取管理方法,PCIe设备配置有多个读请求通道和与该多个读请求通道一一对应的多个读响应通道,以及用于存储多个标签的读请求标签队列,并且多个所述读响应通道分别对应配置有多个读响应标签队列,该方法包括:接收来自一读请求通道的读请求;根据所述读请求从所述读请求标签队列中调取读请求标签,并将所述读请求标签保存至所述读请求通道所对应的读响应通道所配置的读响应标签队列中;发送PCIe请求报文,该PCIe请求报文中封装有所述读请求标签和所述读请求;接收PCIe响应报文,解析出所述PCIe响应报文所包含的响应数据和读响应标签;以及当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0008] 可选的,所述当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中包括:当所述读响应标签与所述读请求标签相对应时,判断所述响应数据的数据长度是否与所述读请求所需求的请求数据长度相匹配;以及如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0009] 可选的,所述如果所述响应数据的所述数据长度与所述请求数据长度相匹配则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中包括:如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则判断所述响应数据的数据大小是否小于所述读响应通道的剩余存储容量;以及当所述响应数据的数据大小是否小于所述剩余存储容量时,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0010] 可选的,在所述将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中之后还包括:将所述读响应标签从所述匹配读响应标签队列中清除;以及将所述读响应标签保存回所述读请求标签队列。
[0011] 可选的,在所述接收来自一读请求通道的读请求之前,该方法还包括:统计所述多个读响应通道中的一者或多者下所保存的所述读请求标签的数量;根据所统计的所述读请求标签的所述数量仲裁出所述对应于所述一读请求通道的所述读请求。
[0012] 本发明实施例另一方面提供一种用于PCIe设备的数据读取管理装置,PCIe设备配置有多个读请求通道和与该多个读请求通道一一对应的多个读响应通道,以及用于存储多个标签的读请求标签队列,并且多个所述读响应通道分别对应配置有多个读响应标签队列,该装置包括:通道读请求接收单元,用于接收来自一读请求通道的读请求;标签配置单元,用于根据所述读请求从所述读请求标签队列中调取读请求标签,并将所述读请求标签保存至所述读请求通道所对应的读响应通道所配置的读响应标签队列中;请求报文发送单元,用于发送PCIe请求报文,该PCIe请求报文中封装有所述读请求标签和所述读请求;响应报文处理单元,用于接收PCIe响应报文,解析出所述PCIe响应报文所包含的响应数据和读响应标签;读取管理单元,用于当所述读响应标签与所述读请求标签相对应时,将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0013] 可选的,所述读取管理单元包括:数据长度匹配组件,用于当所述读响应标签与所述读请求标签相对应时,判断所述响应数据的数据长度是否与所述读请求所需求的请求数据长度相匹配;以及长度写数据组件,用于如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0014] 可选的,所述读取管理单元还包括:数据容量匹配组件,用于如果所述响应数据的所述数据长度与所述请求数据长度相匹配,则判断所述响应数据的数据大小是否小于所述读响应通道的剩余存储容量;以及容量写数据组件,用于当所述响应数据的数据大小是否小于所述剩余存储容量时,则将所述响应数据写入所述匹配读响应标签队列所对应的读响应通道中。
[0015] 可选的,该装置还包括:标签清除单元,用于将所述读响应标签从所述匹配读响应标签队列中清除;标签写回单元,用于将所述读响应标签保存回所述读请求标签队列。
[0016] 可选的,该装置还包括:标签计数器,用于统计所述多个读响应通道中的一者或多者下所保存的所述读请求标签的数量;读请求仲裁器,用于根据所统计的所述读请求标签的所述数量仲裁出所述对应于一读请求通道的所述读请求。
[0017] 通过上述技术方案,借助存储有多个标签的读请求标签队列,以及针对多个读响应通道所分别对应配置的多个读响应标签队列,每发出一次PCIe请求报文就调取一次读请求标签,并将该读请求标签备份存储在对应通道的读响应标签队列,使得在接收到乱序的PCIe响应报文时,能够借助于该所保存的读请求标签与PCIe响应报文中的响应标签进行匹配,以将该PCIe响应报文中的响应数据写到对应的响应通道中。为PCIe设备的多通道数据读取管理提供了一种新的策略,由此保障了PCIe设备多通道读取数据的严格保序,并提高了PCIe设备的数据读取的效率和成功率。
[0018] 本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

[0019] 附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:
[0020] 图1是PCIe总线协议体系的结构示意图;
[0021] 图2是本发明一实施例的用于PCIe设备的数据读取管理装置的工作原理示意图;
[0022] 图3是本发一实施例的用于PCIe设备的数据读取管理装置应用总tag计数器和私有tag计数器执行数据读取的原理流程示意图;
[0023] 图4是图3中的由DMA读请求处理模块所执行工作的原理流程示意图;
[0024] 图5是图3中的由DMA读响应处理模块所执行工作的原理流程示意图。

具体实施方式

[0025] 以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。
[0026] 参见图2示出的是本发明一实施例的用于PCIe设备的数据读取管理装置的工作原理示意图,PCIe设备配置有多个读请求通道和与该多个读请求通道一一对应的多个读响应通道,例如如图1所示的DMA(Direct Memory Access,直接内存存取)读请求通道1和对应的DMA读响应通道1,DMA读请求通道2和对应的DMA读响应通道2等。在读数据的过程中的一般要求是这样的:不同读响应通道中所写入的数据一般只能是对应于它的读请求通道所发出的读请求所请求的响应数据,不允许发生乱序;举例而言,DMA读请求通道1所发出的读请求所请求的数据要写入DMA读响应通道1,而不能是写入DMA读响应通道2、3等其他响应通道。
[0027] 有鉴于此,本发明实施例中的数据读取管理装置10具有DMA读请求处理模块101和DMA读响应处理模块102,DMA读请求处理模块101具体包括通道读请求接收单元1011、标签配置单元1012和请求报文发送单元1013,而在DMA读响应处理模块102中包含有读取管理单元1021和响应报文处理单元1021。更具体地,通道读请求接收单元1011可用于从接收由各个读请求通道中所发出的读请求,请求报文发送单元1013用于根据读请求和读请求tag(标签)等信息计算PCIe报文头并封装成PCIe报文发送给PCIe接口,使得PCIe接口可以将该报文按照PCIe协议规范发送出去;DMA读响应处理模块102中的响应报文处理单元1021可用于从PCIe接口中获得PCIe读响应报文进行缓冲,以及读取管理单元1022可以将响应报文中所具有的响应数据写到相对应的DMA读响应通道中;数据读取管理装置10还包括与DMA读请求处理模块101和DMA读响应处理模块102相关联的DMA读请求tag队列、DMA读响应tag队列,如图2所示的数据读取管理装置10可以只维护一个DMA读请求tag队列,并且所有的PCIe读请求tag字段都要从该队列中读取;所以如果该队列为空,则表明队列中的tag已经用完了,就应当停止接收通道读请求了。并且如图2所示,数据读取管理装置10中的每个通道对应设置有一个DMA读响应tag队列,以及DMA读响应tag队列可以保存相应通道已经发出但还未返回响应的DMA读请求tag。更具体地,关于数据读取的管理过程可以是:通道读请求接收单元1011接收来自一读请求通道的读请求,依托标签配置单元1012与DMA读请求tag队列和DMA读响应tag队列的交互来根据读请求从DMA读请求标签队列中调取读请求tag,并将读请求tag保存至该读请求通道所对应的读响应通道所配置的读响应标签队列中,例如如果是来自于通道1的读请求,就将所调取的读请求tag备份至通道1所对应的DMA读响应tag队列中,并且请求报文发送单元1013还可以将读请求标签和读请求封装成PCIe请求报文,并发送该PCIe请求报文至PCIe接口;然后响应报文处理单元1021从PCIe接口中获取PCIe读响应报文,并从中解析出PCIe响应报文所包含的响应数据和读响应标签,之后由读取管理单元
1022将该读响应标签与DMA读响应tag队列中所保存的各个读请求标签进行匹配,当读响应标签与其中一个读请求标签相对应时,将响应数据写入匹配读响应标签队列所对应的读响应通道中;例如,当对应通道1中所保存的DMA读请求标签与所接收到的读响应标签相对应时就可以将与该读响应标签封装在一起的响应数据写入DMA读响应通道1。通过本发明实施例,实现了将来自DMA读请求通道的DMA请求所需求的响应数据写入该DMA读请求通道所对应的DMA读响应通道中,保障了多通道PCIe设备在数据读取过程中读请求通道和读响应通道的严格保序。
[0028] 更优选地,在读取管理单元1022中还包含有数据长度匹配组件和长度写数据组件(未示出),在DMA读请求处理模块101中还包含有请求数据长度解析单元(未示出);更具体地,请求数据长度解析单元可以针对所获得到的读请求并解析出关于该读请求所需求的请求长度,并将其进行缓存;在DMA读响应处理模块102接收到PCIe读响应报文时,数据长度匹配组件用于若该PCIe读响应报文中的响应tag的匹配成功,则继续利用所缓存的该请求长度与该响应数据的数据长度进行匹配,以及长度写数据组件用于当该匹配结果为通过时才将响应数据写入响应tag对应的读响应通道中。由此,更加保障了多通道PCIe设备在数据读取过程中读请求通道和读响应通道的严格保序,保障了数据读取的精确度和效率。
[0029] 更优选地,在读取管理单元1022中还包含有数据容量匹配组件和容量写数据组件(未示出);更具体地,数据容量匹配组件可以是在响应数据的数据长度与请求数据长度相匹配时,判断响应数据的数据大小是否小于读响应通道的剩余存储容量;并当读响应通道的剩余存储容量确定能够容纳该响应数据时,才将响应数据写入所对应的读响应通道中。由此,避免了当读响应通道中的容量不够还继续往该通道中写数据的情况,保障了数据读取的可靠性。
[0030] 更优选地,在DMA读响应处理模块102中还设置有标签清除单元和标签写回单元(未示出),其中标签清除单元可以用于将读请求所对应的响应数据写入读响应通道中之后,可以将与该响应数据原本封装在一个PCIe响应报文中的读响应tag从DMA读响应tag队列中消除,标签写回单元可用于将该待消除的tag写回至DMA读请求tag队列中。由此,实现了DMA读请求tag队列中的tag的在执行报文请求和执行报文响应的过程中的循环使用。
[0031] 作为本发明实施例的进一步的公开和优化,可以借助于tag计数器来实现对数据读取过程中对装置10中的标签的管理,例如可以是利用一个总tag计数器来维护所有读响应通道中的读请求tag的数量之和,并可以通过为每一个读响应通道分别配置一个私有tag计数器并且该私有tag计数器可以是维护该通道内部的读请求tag数量,其中各私有tag计数器所维护的tag数量应当满足以下的关系:
[0032]
[0033] 其中N为装置110中所有tag的总和,以及通道i的私有tag数量为Ki。
[0034] 关于该总tag计数器和该私有tag计数器的更具体的维护方法可以是:每发出一个DMA读请求之后,对应于读请求的通道的私有tag计数器加1;并且当一个读响应tag对应的数据完全返回给DMA读响应通道之后,该通道私有tag计数器减1,总tag计数器减1。
[0035] 以下将参考图3所示的数据读取管理装置应用该总tag计数器和私有tag计数器的数据读取的工作原理流程示意图展开进行说明:
[0036] 步骤201:初始化总tag计数器和每个DMA读通道的私有tag计数器为0;
[0037] 步骤202:如果在某个DMA通道存在DMA读请求,并且此时总计数器的tag数量或者该通道的私有tag数量小于规定值时,就向DMA读请求仲裁器发出仲裁请求;
[0038] 步骤203:DMA读请求仲裁器以轮询或优先级仲裁的方式从多个DMA读请求通道中仲裁出一个读请求,并将该仲裁出的读请求发送给DMA读请求处理模块;
[0039] 步骤204:从DMA读请求tag队列读出对应于该通道的一个tag,结合DMA读请求构造PCIe读报文并将其发送给PCIe接口,并将该tag需要返回的数据长度记录在数组L[tag]中;
[0040] 步骤205:将该tag写入相应通道的DMA读响应tag队列,更新私有和总tag计数器,例如都加1;
[0041] 步骤206:Host主机乱序返回数据到PCIe接口,将主机返回的数据缓存到缓存器中,缓存器可以按照tag索引访问并据此进行tag匹配;
[0042] 步骤207:当该tag返回的数据长度等于L[tag]时,将rsp_done[tag]置1;
[0043] 步骤208:如果DMA读响应tag队列非空,并且队列头tag对应的rsp_done[tag]为1,并且对应通道的读响应队列有足够空间接收数据,向DMA读响应仲裁器发出仲裁请求;
[0044] 步骤209:DMA读响应仲裁器从多个DMA通道中仲裁出一个,将数据返回给该通道;
[0045] 步骤210:将对应的rsp_done[tag]清0,L[tag]清0,释放读响应缓存器中的缓存,将tag写回到DMA读请求tag队列,更新私有和总tag计数器,例如都减去1。
[0046] 进一步地,可以循环执行步骤202-步骤210来完成数据读取工作。
[0047] 关于图3所示的工作流程更具体的细节,将在下文中结合图4和图5进行展开描述。参见图4示出的是DMA读请求处理模块所执行工作的原理流程示意图,其包含有读请求仲裁器和DMA读请求状态机,以及被配置成与之关联作用的n个读请求队列rqt_fifo[0]~rqt_fifo[n-1]、一个DMA读请求tag队列和n个DMA读响应tag队列等。在初始化状态下时,DMA读tag队列为满状态,假设其深度为N,则读tag队列(fifo)中存储的tag编号为0~N-1,n个DMA读响应tag队列为空,DMA读请求长度缓存器全部为空,以及读请求长度缓存器被设置成可以用tag索引来访问。其具体的工作过程可以是:DMA读请求模块的入口处有n个读请求rqt队列,用于存放每个通道的DMA读请求,n个rqt_fifo的空(empty)信号送到仲裁器,当空信号非0并且从由维护各通道tag数量的tag计数器处获知对应通道的rqt_has_tag也有效时,向仲裁器发出仲裁请求,仲裁器在PCIe接口信号准备信号(PCIe_ready)有效时,从所有的仲裁请求中选择一个输出rqt_hit和i到DMA读请求状态机进行处理,其中rqt_hit表示当前仲裁输出的结果为有效,以及i是仲裁出的通道编号。更具体地,rqt_has_tag[0]~rqt_has_tag[n-1]信号可以用于标识n个通道是否存在有空闲的tag的通道,并以此来判断用其来发送DMA请求,相应地每个通道i有一个私有tag计数器(rqt_private_tag[i]),所有通道共享一个总tag计数器(rqt_total_tag),rqt_has_tag[i]按照如下如下方式产生:
[0048] rqt_has_tag[i]=(rqt_private_tag[i]
[0049] 其中rqt_private_tag_max[i]为每个通道的私有tag最大值,可以根据需要进行配置,由此可以实现不同通道之间工作的公平性,使得各个通道都能够被充分利用,并且保障通道的工作不会超负荷。
[0050] 但要满足如下条件:
[0051] 0
[0052] DMA读请求状态机收到读请求仲裁器的结果后,首先从对应通道i的rqt队列中读出一个DMA读请求,同时从读请求tag队列中读出一个读请求标签(rqt_tag),利用这些信息构造PCIe读请求报文,通过PCIe接口发送出去,同时将rqt_tag写入i所对应的DMA读响应tag队列中,将请求数据的长度写入DMA读请求长度缓存器中,按照如下方式更新仲裁器的优先级rqt_priority和tag计数器:
[0053] rqt_priority=rqt_priority+1;
[0054] rqt_private_tag[i]=rqt_private_tag[i]+1;
[0055] rqt_total_tag=rqt_total_tag+1;
[0056] 由此使得在处理完一个DMA读请求后,能够继续按照上述方式重复处理下一个请求。
[0057] 主机Host收到PCIe读请求报文后,会通过访存接口从存储器中读取数据并打包成PCIe读响应报文返回给PCIe设备,PCIe读响应报文的返回可能是乱序的,所以DMA读响应模块需要对这些响应报文进行重排序,以使得每个通道内数据的返回顺序与该通道的读请求顺序保持一致,以及对于通道间的数据返回顺序没有要求。
[0058] 参见图5示出的是DMA读响应模块所执行工作的原理流程示意图,为了对数据重新排序,DMA读响应处理模块首先将PCIe读响应报文保存在一个PCIe读响应缓存器中,读响应缓存器是由N个数据块构成的缓冲区,DMA读响应处理模块以读响应报文中的tag为索引将数据写入对应的数据块,当一个tag的所有读响应都返回后,将这个数据块的rsp_done[tag]信号标记为有效。
[0059] 当通道的读响应tag队列非空时会输出读响应标签(rsp_tag),如果该rsp_tag对应的rsp_done[tag]信号为有效时,并且该通道的读响应队列有足够空间接收数据时,就向读响应仲裁器发出请求,读响应仲裁器从所有的请求中选择一个通道j,将读响应缓存器中的数据写入通道j的读响应队列rsp_fifo[j],并释放对应的读响应缓存,将rsp_done[j]信号清0,从通道j的DMA读响应tag队列中读出读响应标签rsp_tag并将其写入读请求tag队列,更新仲裁器优先级rsp_priority和tag计数器:
[0060] rsp_priority=rsp_priority+1;
[0061] rqt_private_tag[i]=rqt_private_tag[i]-1;
[0062] rqt_total_tag=rqt_total_tag-1;
[0063] 由此使得在处理完一个DMA读请求后,能够继续按照上述方式重复处理下一个请求。
[0064] 以上结合附图详细描述了本发明实施例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。
[0065] 另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。
[0066] 本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0067] 此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。