CN115729870A - 一种基于fpga的高效pcie dma数据传输方法 - Google Patents
一种基于fpga的高效pcie dma数据传输方法 Download PDFInfo
- Publication number
- CN115729870A CN115729870A CN202211464861.6A CN202211464861A CN115729870A CN 115729870 A CN115729870 A CN 115729870A CN 202211464861 A CN202211464861 A CN 202211464861A CN 115729870 A CN115729870 A CN 115729870A
- Authority
- CN
- China
- Prior art keywords
- dma
- data
- host
- fpga
- kernel
- 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.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Bus Control (AREA)
Abstract
本发明公开了一种基于FPGA的高效PCIE DMA数据传输方法,其包括主机向内核发出申请创建DMA读文件句柄的指令,主机通过DMA读文件句柄访问FPGA相对应的内核;内核接收指令并创建DMA读文件句柄,同时申请创建环形缓存空间以及DMA描述符链表;FPGA DMA读链表控制器接收并处理内核创建的环形缓存对应的描述符链表信息;根据描述符链表信息读取用户数据并将其上传到环形缓存空间;主机软件根据创建的读文件句柄,向内核发起一次读数据操作;内核收到主机软件读命令,获取主机软件的读取长度信息,然后判断环形缓存状态;若环形缓存数据满足主机读需求,则主机复制数据,完成用户数据到主机的数据传输。本发明能够大大提高传输带宽,实现高效率数据传输。
Description
技术领域
本发明涉及数据传输技术领域,特别是一种基于FPGA的高效PCIE DMA数据传输方法。
背景技术
FPGA普遍应用于通信、电力、导航、航空航天、交通等领域,随着科技地不断进步与发展,人们对高速信号传输的要求也越来越高。PCIE是一种高速串行总线标准,采用高速串行点对点双通道高带宽传输,具有系统总线吞吐量高、I/O数量少和物理尺寸小等优势,因此广泛应用于高速信号传输。
PCIE通常用于板卡间的高速、大带宽数据传输,涉及硬件、逻辑(FPGA)、软件等方面。主机软件主要完成系统驱动FILE的操作(主要是OPEN、READ、WRITE),这个依赖于驱动的开发。对于逻辑开发,FPGA芯片提供方有支持PCIE的物理层IP,一般提供两类IP:一类只有纯物理层、链路层和事务层,把复杂的PCIE协议转换为各类传输包,工程师可以完全自主定义DMA的设计,比如在DMA上传时,可以定义DMA读的源地址和物理地址以及传输长度等常规DMA设计;另一类IP提供方直接把DMA都定义好,主机驱动和软件也提供了参考设计,用户只需参考设计例程来完成自己的设计。PCIE的常用高速传输的控制传输流程如图1所示,主要涉及DMA传输的几个环节:1)用户数据为需要传输的数据;2)DMA控制:控制DMA,把用户数据上传到内核;3)PCIE为PCIE总线;4)内核:配置DMA,并且能接收DMA的数据;5)主机:即主控获取有效数据。通常一次DMA操作流程为:主机对内核发起一次DMA取数据;内核配置DMA,并启动一次搬数据;FPGA逻辑DMA控制器收到配置且启动命令后,开始搬运数据,把用户数据搬运到主机的目的地址。这类DMA操作是比较成熟的DMA传输方法,对于逻辑设计来说,只需等待DMA控制器的配置命令后,启动命令并开始搬运数据即可,相对来说比较简单。但这类传输方法的PCIE传输链路比较长,传输控制环节过于冗余,相互制约,传输效率低。
发明内容
鉴于此,本发明提供一种基于FPGA的高效PCIE DMA数据传输方法,可大大提高传输带宽,实现高效率数据传输。
本发明公开了一种基于FPGA的高效PCIE DMA数据传输方法,其包括创建DMA阶段和主机读取数据阶段;
所述创建DMA阶段包括以下步骤:
步骤1:主机向内核发出申请创建DMA读文件句柄的指令,主机通过DMA读文件句柄访问FPGA相对应的内核;
步骤2:内核接收指令并创建DMA读文件句柄,同时申请创建环形缓存空间以及DMA描述符链表;
步骤3:FPGA DMA读链表控制器接收并处理内核创建的环形缓存对应的描述符链表信息,完成FPGA DMA读数据控制器初始化;
步骤4:FPGA DMA读数据控制器启动,根据描述符链表信息读取用户数据并将其上传到环形缓存空间;
所述主机读取数据阶段包括以下步骤:
步骤5:主机软件根据创建的读文件句柄,向内核发起一次读数据操作;
步骤6:内核收到主机软件读命令,获取主机软件的读取长度信息,然后判断环形缓存状态;若环形缓存数据满足主机读需求,则主机复制数据,完成用户数据到主机的数据传输。
进一步地,所述步骤2包括:
步骤21:内核创建DMA描述符链表,底层FPGA DMA控制器主要根据DMA描述符信息工作;
步骤22:内核配置DMA描述符链表的基本参数并在内核中创建环形缓存;其中,所述基本参数包括DMA传输完成状态、DMA传输源地址、DMA传输目的地址、DMA传输长度;
步骤23:内核返回主机程序已创建的读文件句柄。
进一步地,所述步骤3包括:
步骤31:内核启动FPGA DMA读程序;
步骤32:FPGA DMA读链表控制器获取主机发起的读命令以及DMA描述符链表参数;
步骤33:FPGA DMA读数据控制器接收并处理环形缓存对应的链表信息;
步骤34:待整个数据传输链路配置完成后,FPGA DMA控制器则一直根据DMA链表信息将用户数据搬运到环形缓存空间。
进一步地,所述步骤4包括:
步骤41:FPGA DMA用户控制逻辑判断环形缓存是否已经存满,如果存满则停止读取用户数据;否则,重复执行步骤41;
步骤42:FPGA DMA读数据控制器根据当前DMA链表信息,把用户数据搬运到内核目的地址,该目的地址为内核申请的环形缓存空间地址;
步骤43:FPGA DMA读数据控制器在搬运完一帧数据后,设置该DMA描述符的DMA传输完成状态,并提取下一包的DMA描述符链表信息;其中,一帧数据对应一个DMA描述符;
步骤44:若主机不发起停止读数据工作命令,则整个FPGA逻辑程序重复执行步骤41至步骤43。
进一步地,在所述步骤5中,读取数据长度需要满足以下参数关系:
DMA描述符链表的DMA长度是内存页大小的整数倍时,传输效率最高;主机发起读操作长度必须是DMA链表长度的整数倍。
进一步地,所述步骤6还包括:
若环形缓存数据不满足主机读需求,则主机软件开始等待。
进一步地,在所述步骤6之后,还包括:
内核每复制完一帧DMA数据到主机目的地址时,需要把复制数据的长度信息传递至FPGA DMA用户控制逻辑,以便于FPGA DMA用户逻辑控制器获取环形缓存剩余空间大小。
进一步地,若主机需要再次读取数据,仅需重复步骤5至步骤6。
由于采用了上述技术方案,本发明具有如下的优点:本发明能够大大提高传输带宽,实现高效率数据传输。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为现有技术的DMA传输链路示意图;
图2为现有技术的DMA传输时间示意图;
图3为本发明实施例的PCIE传输结构图;
图4为现有技术的DMA常规读流程示意图;
图5为本发明实施例的各环节完全前后承接独立传输流程示意图。
具体实施方式
结合附图和实施例对本发明作进一步说明,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
现有技术中主机对内核发起一次DMA取数据;内核收到读操作后配置DMA,然后启动一次搬数据;FPGA逻辑DMA控制器收到配置且启动命令后,开始搬运数据,把用户数据搬运到主机的目的地址。设主机输出读操作到内核的时间为T1,内核完成DMA配置的时间为T2,设FPGA收到DMA控制器搬运操作并访问用户数据的时间为T3,从内核搬移数据到主机目的地址的时间为T4。则要完成一次完整的用户数据搬移,所需时间T=T1+T2+T3+T4。如图2所示。
本发明所要解决的技术问题就是从传输链路上和控制流程上提高传输速率,即一种各环节完全前后承接独立的传输方案,让前一个环节完全只受后一个环节的影响。也就是在传数时,只要DMA控制不处于忙状态,用户数据就一直上传;只要内核能收数据,DMA控制环节就一直搬移数据;内核就等着主机来复制数据。整个流程所需时间受实际环境影响,假设搬移内核里的数据到主机目的地址的时间设置为Ts1,用户数据到内核的时间为Ts2,则搬移数据所需时间取决于这两个时间中最大的那个。很明显该解决办法大大减少了传输消耗的时间。
现有技术中DMA长队读流程图如图3所示,DMA描述符链表包含有DMA传输的一些基本信息:
1)DMA传输数据流结束符;
2)DMA传输完成状态;
3)停止DMA传输;
4)DMA传输源地址;
5)DMA传输目的地址;
6)DMA传输长度。
根据上面的DMA读流程和DMA描述符基本说明信息,为了让传输时间最小,就必须让整个DMA读控制不需要每次都受主机配置的DMA描述符控制,独立自主往上搬移数据。
本发明针对数据传输路径的等待时间较长,传输效率受限问题提出了各环节完全前后承接独立的方案,采用环形缓存进行中转,前一个环节一直往环形缓存中传数据,主机端直接复制数据,该方案无等待时间,各环节相互独立,主机读取用户数据所需时间只取决于用户数据到环形缓存传输时间与环形缓存到主机端传输时间中最大的那个时间。
本方案是基于FPGA+PC主机模式设计的,其中FPGA可以是搭载在各类采集卡或者传输设备上的,FPGA端用作PCIE的EP端,主机作为RC,其结构图如图4所示。
参见图5,本发明提供了一种基于FPGA的高效PCIE DMA数据传输方法的实施例,其包括创建DMA阶段和主机读取数据阶段;
创建DMA阶段包括以下步骤:
步骤1:主机向内核发出申请创建DMA读文件句柄的指令,主机通过DMA读文件句柄访问FPGA相对应的内核;
步骤2:内核接收指令并创建DMA读文件句柄,同时申请创建环形缓存空间以及DMA描述符链表;
步骤3:FPGA DMA读链表控制器接收并处理内核创建的环形缓存对应的描述符链表信息,完成FPGA DMA读数据控制器初始化;
步骤4:FPGA DMA读数据控制器启动,根据描述符链表信息读取用户数据并将其上传到环形缓存空间;
主机读取数据阶段包括以下步骤:
步骤5:主机软件根据创建的读文件句柄,向内核发起一次读数据操作;
步骤6:内核收到主机软件读命令,获取主机软件的读取长度信息,然后判断环形缓存状态;若环形缓存数据满足主机读需求,则主机复制数据,完成用户数据到主机的数据传输。
本实施例中,步骤2包括:
步骤21:内核创建DMA描述符链表,底层FPGA DMA控制器主要根据DMA描述符信息工作;
步骤22:内核配置DMA描述符链表的基本参数并在内核中创建环形缓存;其中,基本参数包括DMA传输完成状态、DMA传输源地址、DMA传输目的地址、DMA传输长度;
步骤23:内核返回主机程序已创建的读文件句柄。
本实施例中,步骤3包括:
步骤31:内核启动FPGA DMA读程序;
步骤32:FPGA DMA读链表控制器获取主机发起的读命令以及DMA描述符链表参数;
步骤33:FPGA DMA读数据控制器接收并处理环形缓存对应的链表信息;
步骤34:待整个数据传输链路配置完成后,FPGA DMA控制器则一直根据DMA链表信息将用户数据搬运到环形缓存空间。
本实施例中,步骤4包括:
步骤41:FPGA DMA用户控制逻辑判断环形缓存是否已经存满,如果存满则停止读取用户数据;否则,重复执行步骤41;
步骤42:FPGA DMA读数据控制器根据当前DMA链表信息,把用户数据搬运到内核目的地址,该目的地址为内核申请的环形缓存空间地址;
步骤43:FPGA DMA读数据控制器在搬运完一帧数据后,设置该DMA描述符的DMA传输完成状态,并提取下一包的DMA描述符链表信息;其中,一帧数据对应一个DMA描述符;
步骤44:若主机不发起停止读数据工作命令,则整个FPGA逻辑程序重复执行步骤41至步骤43。
本实施例中,在步骤5中,读取数据长度需要满足以下参数关系:
DMA描述符链表的DMA长度是内存页大小的整数倍时,传输效率最高;主机发起读操作长度必须是DMA链表长度的整数倍。
本实施例中,步骤6还包括:
若环形缓存数据不满足主机读需求,则主机软件开始等待。
本实施例中,在步骤6之后,还包括:
内核每复制完一帧DMA数据到主机目的地址时,需要把复制数据的长度信息传递至FPGA DMA用户控制逻辑,以便于FPGA DMA用户逻辑控制器获取环形缓存剩余空间大小。
本实施例中,若主机需要再次读取数据,仅需重复步骤5至步骤6。
本实施例中,主机发起一次读操作和每个环形缓存的大小,应该是整数倍关系。为使传输效率达到最高,在实际测试当中,一般在主机一次读数据大小是环形缓存大小的32倍左右,并且每个环形缓存大小在8KB时,带宽利用率基本达到最高。当然实际的传输带宽受主机性能和PCIE的LANE数以及GEN协议的影响。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (8)
1.一种基于FPGA的高效PCIE DMA数据传输方法,其特征在于,包括创建DMA阶段和主机读取数据阶段;
所述创建DMA阶段包括以下步骤:
步骤1:主机向内核发出申请创建DMA读文件句柄的指令,主机通过DMA读文件句柄访问FPGA相对应的内核;
步骤2:内核接收指令并创建DMA读文件句柄,同时申请创建环形缓存空间以及DMA描述符链表;
步骤3:FPGA DMA读链表控制器接收并处理内核创建的环形缓存对应的描述符链表信息,完成FPGA DMA读数据控制器初始化;
步骤4:FPGA DMA读数据控制器启动,根据描述符链表信息读取用户数据并将其上传到环形缓存空间;
所述主机读取数据阶段包括以下步骤:
步骤5:主机软件根据创建的读文件句柄,向内核发起一次读数据操作;
步骤6:内核收到主机软件读命令,获取主机软件的读取长度信息,然后判断环形缓存状态;若环形缓存数据满足主机读需求,则主机复制数据,完成用户数据到主机的数据传输。
2.根据权利要求1所述的方法,其特征在于,所述步骤2包括:
步骤21:内核创建DMA描述符链表,底层FPGA DMA控制器主要根据DMA描述符信息工作;
步骤22:内核配置DMA描述符链表的基本参数并在内核中创建环形缓存;其中,所述基本参数包括DMA传输完成状态、DMA传输源地址、DMA传输目的地址、DMA传输长度;
步骤23:内核返回主机程序已创建的读文件句柄。
3.根据权利要求1所述的方法,其特征在于,所述步骤3包括:
步骤31:内核启动FPGA DMA读程序;
步骤32:FPGA DMA读链表控制器获取主机发起的读命令以及DMA描述符链表参数;
步骤33:FPGA DMA读数据控制器接收并处理环形缓存对应的链表信息;
步骤34:待整个数据传输链路配置完成后,FPGA DMA控制器则一直根据DMA链表信息将用户数据搬运到环形缓存空间。
4.根据权利要求1所述的方法,其特征在于,所述步骤4包括:
步骤41:FPGA DMA用户控制逻辑判断环形缓存是否已经存满,如果存满则停止读取用户数据;否则,重复执行步骤41;
步骤42:FPGA DMA读数据控制器根据当前DMA链表信息,把用户数据搬运到内核目的地址,该目的地址为内核申请的环形缓存空间地址;
步骤43:FPGA DMA读数据控制器在搬运完一帧数据后,设置该DMA描述符的DMA传输完成状态,并提取下一包的DMA描述符链表信息;其中,一帧数据对应一个DMA描述符;
步骤44:若主机不发起停止读数据工作命令,则整个FPGA逻辑程序重复执行步骤41至步骤43。
5.根据权利要求1所述的方法,其特征在于,在所述步骤5中,读取数据长度需要满足以下参数关系:
DMA描述符链表的DMA长度是内存页大小的整数倍时,传输效率最高;主机发起读操作长度必须是DMA链表长度的整数倍。
6.根据权利要求1所述的方法,其特征在于,所述步骤6还包括:
若环形缓存数据不满足主机读需求,则主机软件开始等待。
7.根据权利要求1所述的方法,其特征在于,在所述步骤6之后,还包括:
内核每复制完一帧DMA数据到主机目的地址时,需要把复制数据的长度信息传递至FPGA DMA用户控制逻辑,以便于FPGA DMA用户逻辑控制器获取环形缓存剩余空间大小。
8.根据权利要求1所述的方法,其特征在于,若主机需要再次读取数据,仅需重复步骤5至步骤6。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211464861.6A CN115729870A (zh) | 2022-11-22 | 2022-11-22 | 一种基于fpga的高效pcie dma数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211464861.6A CN115729870A (zh) | 2022-11-22 | 2022-11-22 | 一种基于fpga的高效pcie dma数据传输方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115729870A true CN115729870A (zh) | 2023-03-03 |
Family
ID=85297195
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211464861.6A Pending CN115729870A (zh) | 2022-11-22 | 2022-11-22 | 一种基于fpga的高效pcie dma数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729870A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115905039A (zh) * | 2022-11-16 | 2023-04-04 | 逸超医疗科技(北京)有限公司 | 一种基于PCIe接口高速获取超声数据的方法 |
CN116225998A (zh) * | 2023-05-10 | 2023-06-06 | 国仪量子(合肥)技术有限公司 | Dma数据传输系统 |
CN118363901A (zh) * | 2024-06-18 | 2024-07-19 | 北京象帝先计算技术有限公司 | PCIe设备、电子组件及电子设备 |
-
2022
- 2022-11-22 CN CN202211464861.6A patent/CN115729870A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115905039A (zh) * | 2022-11-16 | 2023-04-04 | 逸超医疗科技(北京)有限公司 | 一种基于PCIe接口高速获取超声数据的方法 |
CN116225998A (zh) * | 2023-05-10 | 2023-06-06 | 国仪量子(合肥)技术有限公司 | Dma数据传输系统 |
CN118363901A (zh) * | 2024-06-18 | 2024-07-19 | 北京象帝先计算技术有限公司 | PCIe设备、电子组件及电子设备 |
CN118363901B (zh) * | 2024-06-18 | 2024-10-18 | 北京象帝先计算技术有限公司 | PCIe设备、电子组件及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115729870A (zh) | 一种基于fpga的高效pcie dma数据传输方法 | |
US10324873B2 (en) | Hardware accelerated communications over a chip-to-chip interface | |
EP1750401B1 (en) | USB 1.1 over a high speed link | |
CN101317364A (zh) | 一种实现业务板和主控板通信的装置和方法 | |
KR20000053380A (ko) | 다양한 기능 모듈 접속용 포트 매니저 제어기 | |
KR20110113351A (ko) | 네트워크 효율성을 고려한 SoC 기반 시스템 네트워크에서의 인터페이스 장치의 통신방법 및 그에 의해 통신하는 인터페이스 장치 | |
KR102420530B1 (ko) | 대체 프로토콜 선택 | |
JPH02227765A (ja) | デジタル・コンピユータのデータ転送装置 | |
CN108170617B (zh) | 一种i3c设备及通信方法 | |
CN106951379A (zh) | 一种基于axi协议的高性能ddr控制器及数据传输方法 | |
CN108650136A (zh) | 一种实现Powerlink工业实时以太网通讯的主/从站卡的设计方法 | |
CN101162448A (zh) | 一种usb高速数据隧道的硬件传输方法 | |
CN102387184B (zh) | 切换装置和可在切换装置中操作的方法 | |
US8745296B2 (en) | Serial storage protocol compatible frame conversion, at least in part being compatible with SATA and one packet being compatible with PCIe protocol | |
TWI416337B (zh) | 資料傳輸系統以及資料傳輸方法 | |
KR20180116717A (ko) | 직렬 시스템 버스 인터페이스 및 직접메모리액세스 컨트롤러를 갖는 전자 시스템 및 그 동작 방법 | |
WO2024103948A1 (zh) | 一种数据传输方法以及装置 | |
WO2020177252A1 (zh) | 基于pcie协议的dma控制器及dma数据传输方法 | |
CN101232522B (zh) | 一种网卡驱动方法 | |
CN106980587A (zh) | 一种通用输入输出时序处理器及时序输入输出控制方法 | |
CN116225992A (zh) | 一种支持虚拟化仿真设备的NVMe验证平台及方法 | |
CN108833241A (zh) | 一种实现Powerlink工业实时以太网通讯的主/从站卡的设计方法 | |
CN108494652A (zh) | 一种EtherCAT高速以太网协议转换融合方法 | |
US6889265B2 (en) | Apparatus and method to allow and synchronize schedule changes in a USB enhanced host controller | |
JP2003050788A (ja) | 高レベル・データ・リンク・コントローラから多数個のディジタル信号プロセッサ・コアに信号を分配するための装置と方法 |
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 |