CN113485951A - 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 - Google Patents
一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 Download PDFInfo
- Publication number
- CN113485951A CN113485951A CN202110876348.7A CN202110876348A CN113485951A CN 113485951 A CN113485951 A CN 113485951A CN 202110876348 A CN202110876348 A CN 202110876348A CN 113485951 A CN113485951 A CN 113485951A
- Authority
- CN
- China
- Prior art keywords
- tlp
- dma read
- address
- request
- packet
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种基于FPGA的DMA读操作实现方法、FPGA设备以及通信系统,所述方法包括:执行DMA读操作时,根据DMA读操作的有效起始地址、有效结束地址、主机配置的DMA读操作基地址以及预设地址对齐方式生成DMA读请求发送给主机,所述DMA读请求包括至少一个TLP请求包;接收主机返回的至少一个TLP完成包,根据预设排序处理位宽对各个TLP完成包进行排序处理,并删除TLP完成包中冗余的数据。本发明对于随机地址的内存,可以根据不同的接口位宽,采用不同的地址对齐方式进行数据的读取,简便了对数据的排序处理,而且在排序处理后,再进行冗余数据的删除和有效数据的重新排列,最终得到完整的有效数据;大大降低了任意内存地址数据读取的开发难度,工程结构清晰。
Description
技术领域
本发明涉及计算机技术领域,具体的说,涉及了一种基于FPGA的DMA读操作实现方法、FPGA设备以及通信系统。
背景技术
随着异构加速日益广泛的应用,基于FPGA的加速卡的发展也日益迅速,FPGA加速卡通过PCIE接口与服务器主机连接,采用DMA的方式将需要加速的数据搬移到FPGA加速卡,处理完成后又通过DMA的方式将数据搬移到内存,在数据交互的过程中,CPU很少参与,减少了CPU的占用,提高了数据传输的效率。然而不同的应用环境、不同传输的数据和不同的内存地址需求,影响着DMA的实现难度。
由于当TLP完成包跨越RCB边界时,TLP完成包将会被拆分,且以RCB边界进行拆分,此时极易出现接收到的TLP完成包1不是排序处理位宽的整数倍,此时就需要和TLP完成包2的负载数据拼接成一个排序处理位宽才能进行排序处理,开发实现难度大。
为了解决以上存在的问题,人们一直在寻求一种理想的技术解决方案。
发明内容
本发明的目的是针对现有技术的不足,从而提供了一种基于FPGA的DMA读操作实现方法、FPGA设备以及通信系统,降低了任意内存地址数据读取的开发难度,工程结构清晰。
为了实现上述目的,本发明所采用的技术方案是:一种基于FPGA的DMA读操作实现方法,包括以下步骤:
预先根据主机配置的PCIE事务层接口位宽设定排序处理位宽和地址对齐方式,其中,排序处理位宽与所述PCIE事务层接口位宽一致,地址对齐方式为N字节对齐方式, N为所述PCIE事务层接口位宽对应的字节数;
执行DMA读操作时,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界;
接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理,并根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据。
基于上述,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求的具体步骤如下:
根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
基于上述,根据所述排序处理位宽对各个TLP完成包进行排序处理,具体为:
根据每个TLP完成包的起始地址和结束地址计算所述TLP完成包的数据长度,判断所述数据长度是否为排序处理位宽的整数倍,若为整数倍,则进行排序处理;否则,等待其他TLP完成包进行数据拼接,以使所述数据长度为排序处理位宽的整数倍时再进行排序处理。
本发明第二方面提供一种FPGA设备,包括:参数配置模块、数据传输模块、PCIE内核以及虚拟功能模块,所述数据传输模块包括发送单元、接收单元、排序单元以及删除单元;
所述参数配置模块,预先根据主机配置的PCIE事务层接口位宽设定排序处理位宽和地址对齐方式,其中,排序处理位宽与所述PCIE事务层接口位宽一致,地址对齐方式为N字节对齐方式, N为所述PCIE事务层接口位宽对应的字节数;
所述虚拟功能模块,用于根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
所述发送模块,用于将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界;
所述排序单元,用于接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理;
所述删除单元,用于根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据。
基于上述,所述虚拟功能模块根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求的具体步骤如下:
根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
本发明第三方面提供一种基于PCIE的通信系统,包括:包括如权利要求6至9任一所述的FPGA设备和主机;所述主机,用于接收FPGA设备发送的TLP请求包并进行处理,以形成对应的TLP完成包并返回给FPGA设备。
本发明相对现有技术具有突出的实质性特点和显著的进步,具体的说,在执行DMA读操作时,根据DMA读操作的有效起始地址、有效结束地址、主机配置的DMA读操作基地址以及预设地址对齐方式生成DMA读请求发送给主机,所述DMA读请求包括至少一个TLP请求包;接收主机返回的至少一个TLP完成包,根据预设排序处理位宽对各个TLP完成包进行排序处理,并删除TLP完成包中冗余的数据;
显然,本发明对于随机地址的内存,可以根据不同的接口位宽,采用不同的地址对齐方式进行数据的读取,简便了对数据的排序处理,而且在排序处理后,再进行冗余数据的删除和有效数据的重新排列,最终得到完整的有效数据;大大降低了任意内存地址数据读取的开发难度,工程结构清晰。
附图说明
图1是本发明的DMA读操作的流程示意图。
图2是本发明实施例2的DMA读操作的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为方便本领域普通技术人员和公众理解方案,本发明给出RCB的含义。
RCB(Read Completion Boundary),该参数含义是接收端在向发送端返回读响应数据时,多个TLP包的大小必须是RCB的倍数,即必须对齐到RCB地址边界上。
这个参数不容易理解,下面通过具体例子来感受一下。
例如:如果从起始地址00010028h读取100h(256)Byte,假如RCB为64 Byte,返回数据最有可能如下:
a) 先返回一个24 Byte长度的CplD包,即TLP完成包,之所以先返回24字节长度的包,是因为首地址10028h不是RCB值即64B的整倍数,为了对齐地址,需要先返回一个24B的包,这样地址就对齐到了10040h。对应地,地址递增情况是:10028h + 18h = 10040h;
b) 再返回一个64 Byte长度的CplD包。对应地,地址递增情况是:
10040h + 40h = 10080h;
c) 再返回一个64 Byte长度的CplD包。对应地,地址递增情况是:
10080h + 40h = 100C0h;
d) 再返回一个64 Byte长度的CplD包。对应地,地址递增情况是:
100C0h + 40h = 10100h;
e) 再返回一个40 Byte长度的CplD包。对应地,地址递增情况是:
10100h + 28h = 10128h;
这里为什么会出现10028h这样没有对齐到64B的倍数的地址,原因是读请求的大小在MRRS限定的范围内是随意的,可以不是64B的倍数,另外,虽然主机发送一个读请求TLP,但返回可能有多个CqlD,即多个TLP完成包。
实施例1
如图1所示,本实施例提供一种基于FPGA的DMA读操作实现方法,包括以下步骤:
S101,预先设定排序处理位宽与主机配置的PCIE事务层接口位宽一致,并设定地址对齐方式为N字节对齐方式,其中,N为所述PCIE事务层接口位宽对应的字节数;
具体的,由于PCIE速率的不同,PCIE事务层接口有64bit、128bit、256bit和512bit四种位宽模式,那么在进行DMA读操作时,根据事务层接口位宽的不同可以设定地址对齐方式为8Byte对齐、16Byte对齐、32Byte对齐或64Byte对齐。
S102,执行DMA读操作时,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
具体的,执行DMA读操作时,根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
S103,将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界。
作为一种可实施方式,最大读请求长度为512 Byte,Payload的大小根据实际需求设定为256 Byte、128 Byte、64 Byte中的任意一种。
S104,接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理,并根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据;
具体的,根据所述排序处理位宽对各个TLP完成包进行排序处理包括以下步骤:
根据每个TLP完成包的起始地址和结束地址计算所述TLP完成包的数据长度,判断所述数据长度是否为排序处理位宽的整数倍,若为整数倍,则进行排序处理;否则,等待其他TLP完成包进行数据拼接,以使所述数据长度为排序处理位宽的整数倍时再进行排序处理。
本发明在进行数据读取时,对于随机地址的内存,可以根据不同的接口位宽,采用不同的地址对齐方式进行数据的读取,简便了对数据的排序处理,而且在排序处理后,再进行冗余数据的删除和有效数据的重新排列,最终得到完整的有效数据;大大降低了任意内存地址数据读取的开发难度,工程结构清晰。
实施例2
本实施例以1个DMA读请求的数据传输过程为例,提供一种基于FPGA的DMA读操作实现方法,该方法包括:
假设主机此次需要发送给FPGA的数据为208Byte,其中起始地址为A0(0f46h),结束地址为A1(1016h),PCIE事务层接口位宽为128bit(即16Byte), PCIE链路协商的RCB参数为64Byte,最大读请求MRRS为256Byte;
S201,主机配置的PCIE事务层接口位宽为128bit,根据事务层接口位宽设定地址对齐方式为16Byte对齐;设定排序处理位宽与主机配置的PCIE事务层接口位宽一致,为128bit;
S202,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求;
首先判断出起始地址A0不是16Byte对齐,则记录下本次DMA读操作的有效数据起始位置A0,并基于所述有效起始地址进行地址补位,使得所述DMA读请求的起始地址为16Byte对齐,即为A2(0f40h);
再判断出结束地址A1不是16Byte对齐,则记录下本次DMA读操作的有效数据起始位置A1,并基于所述有效结束地址进行地址补位,使得所述DMA读请求的结束地址为16Byte对齐,即为A3(1020h);
由于DMA读请求跨越4K边界,则以4K边界将DMA读请求拆分为两个读请求包TLP1和读请求包TLP2,其中读请求包TLP1的请求数据长度为地址A2到4K边界,即为192Byte;读请求包TLP2的请求数据长度为地址4K边界+1到A3,即为32Byte;
S203,将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;
具体的,由于读请求包TLP1的TLP完成包跨越了RCB边界,导致读请求包TLP1的TLP完成包将会被拆分成TLP完成包1和TLP完成包2,且TLP完成包1的结束地址为RCB参数的整数倍;
S104,接收主机通过PCIE内核高速传输的TLP完成包1、TLP完成包1和TLP完成包3,根据所述排序处理位宽对各个TLP完成包进行排序处理,并根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据;
具体的,由于TLP完成包1的结束地址为RCB参数的整数倍 ,故TLP完成包1的负载数据长度为64Byte,为16Btye倍数,和排序处理的位宽一致 ,因此不用和TLP完成包2的数据进行拼接, 即可进行排序处理。相对而言本方法巧妙的减少了数据的拼接操作,降低了开发实现难度。
实施例3
本实施例以2个DMA读请求的数据传输过程为例,提供一种将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包的方法,具体包括:
S3031,确定所述FPGA生成的DMA读请求个数,若DMA读请求个数为N个,其中,N≥2,则按照预设的轮询规则轮询N个DMA读请求中的TLP请求包;
所述预设的轮询规则为:当前轮询过程中,分别先后收集每个DMA读请求中的一个TLP请求包,直至N个DMA读请求均被收集一个TLP请求包;间隔预设时间后,进行下一次轮询;
S3032,根据收集先后顺序为各个TLP请求包分配排序标签,并通过PCIE内核将携带有排序标签的TLP请求包高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包,每个所述TLP完成包均携带有请求者标识信息和排序标签;
其中在根据收集先后顺序为各个TLP请求包分配排序标签时,排序标签是依次连续递增的。
由于TLP完成包不能跨越RCB边界,因此可能出现一个TLP请求包对应多个TLP完成包的情况,例如读请求包TLP1的TLP完成包将会被拆分成TLP完成包1和TLP完成包2,则这2个TLP完成包具有相同的排序标签。
根据各TLP完成包携带的请求者标识信息和排序标签将各个TLP完成包依次返回至对应的请求者。
每个请求者根据DMA读操作的有效起始地址和/或有效结束地址删除自己获得的所有TLP完成包中,首个TLP完成包和/或最后一个TLP完成包中冗余的数据,从而得到有效读取数据。
本实施例在读取DMA读请求中的请求包时,采用同步方式进行读取,可以同时处理多个FPGA设备的DMA读请求,因此可以解决多个FPGA设备等待时间过长的问题,可以实现负载均衡。并且通过对TLP请求包统一分配排序标签,在PCIE设备收到主机返回的TLP完成包,可以根据TLP完成包携带的排序标签对TLP完成包进行重新排序,实现对返回的TLP完成包出现乱序现象的管理。
实施例4
本实施例提供一种FPGA设备,包括:参数配置模块、数据传输模块、PCIE内核以及至少一个虚拟功能模块,所述数据传输模块包括发送单元、接收单元、排序单元以及删除单元;
所述参数配置模块,预先根据主机配置的PCIE事务层接口位宽设定排序处理位宽和地址对齐方式,其中,排序处理位宽与所述PCIE事务层接口位宽一致,地址对齐方式为N字节对齐方式, N为所述PCIE事务层接口位宽对应的字节数;
所述虚拟功能模块,用于根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
所述发送模块,用于将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界;
所述排序单元,用于接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理;
所述删除单元,用于根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据。
在具体实施时,所述虚拟功能模块根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求的具体步骤如下:
根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
在具体实施时,所述排序单元根据所述排序处理位宽对各个TLP完成包进行排序处理,具体为:
根据每个TLP完成包的起始地址和结束地址计算所述TLP完成包的数据长度,判断所述数据长度是否为排序处理位宽的整数倍,若为整数倍,则进行排序处理;否则,等待其他TLP完成包进行数据拼接,以使所述数据长度为排序处理位宽的整数倍时再进行排序处理。
由于所述FPGA中有可能存在大于1个的虚拟功能模块,从而生成不止一个DMA读请求,因此所述发送模块在将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理形成对应的TLP完成包时,
首先确定所述FPGA生成的DMA读请求个数,若DMA读请求个数为N个,其中,N≥2,则按照预设的轮询规则轮询N个DMA读请求中的TLP请求包;
所述预设的轮询规则为:当前轮询过程中,分别先后收集每个DMA读请求中的一个TLP请求包,直至N个DMA读请求均被收集一个TLP请求包;间隔预设时间后,进行下一次轮询;
根据收集先后顺序为各个TLP请求包分配排序标签,并通过PCIE内核将携带有排序标签的TLP请求包高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包,每个所述TLP完成包均携带有请求者标识信息和排序标签。
实施例5
本实施例提供一种基于PCIE的通信系统,包括:包括实施例4所述的FPGA设备和主机;所述主机,用于接收FPGA设备发送的TLP请求包并进行处理,以形成对应的TLP完成包并返回给FPGA设备。
具体地,在实际应用中,主机安装有多个虚拟机,FPGA设备中的多个虚拟功能模块一一分配给对应的虚拟机。
根据本发明实施例,所述主机接收到TLP请求包时,对TLP请求包进行处理,以形成对应的TLP完成包,且所述TLP完成包的载荷数据量不超过预设Payload值,所述Payload为所述PCIE设备与所述主机共同协商制定的一个TLP请求包或TLP完成包所允许封装数据的最大长度。
本发明的方法在任意内存地址下,根据不同的PCIE事务层接口位宽,采用不同地址对齐的方式进行数据的冗余读取,简便了对数据的排序处理,而且在排序处理后,再进行冗余数据的删除和有效数据的重新排列,最终得到完整的有效数据;大大降低了任意内存地址数据读取的开发难度,工程结构清晰。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。
Claims (10)
1.一种基于FPGA的DMA读操作实现方法,其特征在于,包括以下步骤:
预先根据主机配置的PCIE事务层接口位宽设定排序处理位宽和地址对齐方式,其中,排序处理位宽与所述PCIE事务层接口位宽一致,地址对齐方式为N字节对齐方式, N为所述PCIE事务层接口位宽对应的字节数;
执行DMA读操作时,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界;
接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理,并根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据。
2.根据权利要求1所述的基于FPGA的DMA读操作实现方法,其特征在于,根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求的具体步骤如下:
根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
3.根据权利要求1所述的基于FPGA的DMA读操作实现方法,其特征在于,根据所述排序处理位宽对各个TLP完成包进行排序处理,具体为:
根据每个TLP完成包的起始地址和结束地址计算所述TLP完成包的数据长度,判断所述数据长度是否为排序处理位宽的整数倍,若为整数倍,则进行排序处理;否则,等待其他TLP完成包进行数据拼接,以使所述数据长度为排序处理位宽的整数倍时再进行排序处理。
4.根据权利要求1所述的基于FPGA的DMA读操作实现方法,其特征在于:在将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理形成对应的TLP完成包时,
首先确定所述FPGA生成的DMA读请求个数,若DMA读请求个数为N个,其中,N≥2,则按照预设的轮询规则轮询N个DMA读请求中的TLP请求包;
所述预设的轮询规则为:当前轮询过程中,分别先后收集每个DMA读请求中的一个TLP请求包,直至N个DMA读请求均被收集一个TLP请求包;间隔预设时间后,进行下一次轮询;
根据收集先后顺序为各个TLP请求包分配排序标签,并通过PCIE内核将携带有排序标签的TLP请求包高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包,每个所述TLP完成包均携带有请求者标识信息和排序标签;
根据各TLP完成包携带的请求者标识信息和排序标签将各个TLP完成包依次返回至对应的请求者。
5.根据权利要求4所述的基于FPGA的DMA读操作实现方法,其特征在于:在根据收集先后顺序为各个TLP请求包分配排序标签时,排序标签是依次连续递增的。
6.一种FPGA设备,其特征在于,包括:参数配置模块、数据传输模块、PCIE内核以及虚拟功能模块,所述数据传输模块包括发送单元、接收单元、排序单元以及删除单元;
所述参数配置模块,预先根据主机配置的PCIE事务层接口位宽设定排序处理位宽和地址对齐方式,其中,排序处理位宽与所述PCIE事务层接口位宽一致,地址对齐方式为N字节对齐方式, N为所述PCIE事务层接口位宽对应的字节数;
所述虚拟功能模块,用于根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求,所述DMA读请求包括至少一个TLP请求包,其中,首个TLP请求包的起始地址和最后一个TLP请求包的结束地址均满足N字节对齐,且每个所述TLP请求包的大小均不会跨越4KB边界;
所述发送模块,用于将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包;每个所述TLP完成包所传递数据量不大于预设Payload值且所传递数据的地址范围不会跨越RCB边界;
所述排序单元,用于接收主机通过PCIE内核高速传输的至少一个TLP完成包,根据所述排序处理位宽对各个TLP完成包进行排序处理;
所述删除单元,用于根据DMA读操作的有效起始地址和/或有效结束地址删除首个TLP完成包和/或最后一个TLP完成包中冗余的数据。
7.根据权利要求6所述的FPGA设备,其特征在于,所述虚拟功能模块根据DMA读操作的有效起始地址、有效结束地址以及主机配置的DMA读操作基地址生成DMA读请求的具体步骤如下:
根据主机配置的DMA读操作基地址判断DMA读操作的有效起始地址和/或有效结束地址是否满足N字节对齐;
在所述有效起始地址和/或所述有效结束地址不满足N字节对齐时,记录所述有效起始地址和/或所述有效结束地址,并基于所述有效起始地址和/或所述有效结束地址进行地址补位,以使所述DMA读请求的起始地址和结束地址均满足N字节对齐;
判断所述DMA读请求的长度是否大于最大读请求长度,若大于,则根据最大读请求长度将所述DMA读请求拆分为多个TLP请求包,且每个TLP请求包均不会跨越4KB边界;若小于,则判断所述DMA读请求是否跨4KB边界,若跨4K边界,则将所述读请求拆分成2个TLP请求包,否则将所述读请求作为一个TLP请求包。
8.根据权利要求6所述的FPGA设备,其特征在于,所述排序单元根据所述排序处理位宽对各个TLP完成包进行排序处理,具体为:
根据每个TLP完成包的起始地址和结束地址计算所述TLP完成包的数据长度,判断所述数据长度是否为排序处理位宽的整数倍,若为整数倍,则进行排序处理;否则,等待其他TLP完成包进行数据拼接,以使所述数据长度为排序处理位宽的整数倍时再进行排序处理。
9.根据权利要求6所述的FPGA设备,其特征在于,所述发送模块在将所述DMA读请求通过PCIE内核高速传输给主机,以供主机分别对接收到的TLP请求包进行处理形成对应的TLP完成包时,
首先确定所述FPGA生成的DMA读请求个数,若DMA读请求个数为N个,其中,N≥2,则按照预设的轮询规则轮询N个DMA读请求中的TLP请求包;
所述预设的轮询规则为:当前轮询过程中,分别先后收集每个DMA读请求中的一个TLP请求包,直至N个DMA读请求均被收集一个TLP请求包;间隔预设时间后,进行下一次轮询;
根据收集先后顺序为各个TLP请求包分配排序标签,并通过PCIE内核将携带有排序标签的TLP请求包高速传输给主机,以供主机分别对接收到的TLP请求包进行处理,形成对应的TLP完成包,每个所述TLP完成包均携带有请求者标识信息和排序标签;
根据各TLP完成包携带的请求者标识信息和排序标签将各个TLP完成包依次返回至对应的请求者。
10.一种基于PCIE的通信系统,其特征在于,包括:包括如权利要求6至9任一所述的FPGA设备和主机;所述主机,用于接收FPGA设备发送的TLP请求包并进行处理,以形成对应的TLP完成包并返回给FPGA设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110876348.7A CN113485951B (zh) | 2021-07-31 | 2021-07-31 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110876348.7A CN113485951B (zh) | 2021-07-31 | 2021-07-31 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113485951A true CN113485951A (zh) | 2021-10-08 |
CN113485951B CN113485951B (zh) | 2022-02-11 |
Family
ID=77944997
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110876348.7A Active CN113485951B (zh) | 2021-07-31 | 2021-07-31 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113485951B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114879584A (zh) * | 2022-07-05 | 2022-08-09 | 成都智明达电子股份有限公司 | 一种基于fpga的dma控制器边界对齐方法及其电路 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101243421A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 在处理器与外部设备之间传送指令和数据的系统和方法 |
US20140280344A1 (en) * | 2013-03-15 | 2014-09-18 | Pico Computing, Inc. | Inexact Search Acceleration |
CN109726806A (zh) * | 2017-10-30 | 2019-05-07 | 上海寒武纪信息科技有限公司 | 信息处理方法及终端设备 |
CN110688333A (zh) * | 2019-09-29 | 2020-01-14 | 郑州信大捷安信息技术股份有限公司 | 一种基于pcie的dma数据传输系统及方法 |
CN111240813A (zh) * | 2018-11-29 | 2020-06-05 | 杭州嘉楠耘智信息科技有限公司 | 一种dma调度方法、装置和计算机可读存储介质 |
CN112328519A (zh) * | 2020-09-30 | 2021-02-05 | 郑州信大捷安信息技术股份有限公司 | 一种pcie设备、基于sr-iov的数据包有序传输方法和系统 |
-
2021
- 2021-07-31 CN CN202110876348.7A patent/CN113485951B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101243421A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 在处理器与外部设备之间传送指令和数据的系统和方法 |
US20140280344A1 (en) * | 2013-03-15 | 2014-09-18 | Pico Computing, Inc. | Inexact Search Acceleration |
CN109726806A (zh) * | 2017-10-30 | 2019-05-07 | 上海寒武纪信息科技有限公司 | 信息处理方法及终端设备 |
CN111240813A (zh) * | 2018-11-29 | 2020-06-05 | 杭州嘉楠耘智信息科技有限公司 | 一种dma调度方法、装置和计算机可读存储介质 |
CN110688333A (zh) * | 2019-09-29 | 2020-01-14 | 郑州信大捷安信息技术股份有限公司 | 一种基于pcie的dma数据传输系统及方法 |
CN112328519A (zh) * | 2020-09-30 | 2021-02-05 | 郑州信大捷安信息技术股份有限公司 | 一种pcie设备、基于sr-iov的数据包有序传输方法和系统 |
Non-Patent Citations (3)
Title |
---|
LE DU 等: "Research on XDMA High-Speed Data Transmission Architecture Based on PCIe", 《2020 IEEE 6TH INTERNATIONAL CONFERENCE ON COMPUTER AND COMMUNICATIONS (ICCC)》 * |
姚明超 等: "基于FPGA的PCIExpress总线的DMA数据传输设计", 《电子技术与软件工程》 * |
张彪 等: "基于PCIE接口的高速数据传输系统设计", 《电子测量技术》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114879584A (zh) * | 2022-07-05 | 2022-08-09 | 成都智明达电子股份有限公司 | 一种基于fpga的dma控制器边界对齐方法及其电路 |
CN114879584B (zh) * | 2022-07-05 | 2022-10-28 | 成都智明达电子股份有限公司 | 一种基于fpga的dma控制器边界对齐方法及其电路 |
Also Published As
Publication number | Publication date |
---|---|
CN113485951B (zh) | 2022-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112836453B (zh) | Sas控制器帧缓冲区结构设计方法 | |
CN111274252A (zh) | 一种区块链的数据上链方法、装置、存储介质和服务器 | |
CN113485951B (zh) | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 | |
WO2023061177A1 (zh) | 基于列式数据扫描的多数据发送和接收方法、装置和设备 | |
CN115357535A (zh) | 一种虚拟串口设计方法及装置 | |
CN103365810A (zh) | 在c.a.n.总线上减少闪速存储装置编程时间的方法和设备 | |
CN113177015B (zh) | 基于帧头的串口通讯方法和串口芯片 | |
CN114490467A (zh) | 一种多核网络处理器的报文处理dma系统及方法 | |
US7822040B2 (en) | Method for increasing network transmission efficiency by increasing a data updating rate of a memory | |
WO2023061180A1 (zh) | 基于多频率的数据发送和接收方法、装置和设备 | |
CN113691466A (zh) | 一种数据的传输方法、智能网卡、计算设备及存储介质 | |
CN112422485B (zh) | 一种传输控制协议的通信方法及装置 | |
US8041902B2 (en) | Direct memory move of multiple buffers between logical partitions | |
WO2023051319A1 (zh) | 基于多数据对齐的数据发送和接收方法、装置和设备 | |
CN110659143B (zh) | 一种容器间的通讯方法、装置及电子设备 | |
EP3631640B1 (en) | Communication between field programmable gate arrays | |
CN116136790A (zh) | 任务处理方法和装置 | |
CN109241362B (zh) | 区块生成方法、装置、设备及存储介质 | |
CN105045745A (zh) | 一种FCoE读写处理系统、处理方法及交换ID分配方法 | |
US11689605B2 (en) | In-network compute assistance | |
CN113157610B (zh) | 数据保存方法及装置、存储介质、电子装置 | |
CN114928377B (zh) | 降低usb数据透传带宽的输出传输方法、装置及设备 | |
CN115987513B (zh) | 分布式数据库分片加密、解密方法、装置、设备及介质 | |
CN116226027B (zh) | 数据传输系统、方法、装置、通信设备及存储介质 | |
CN113609041A (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 |