一种基于pcie的dma数据传输系统及方法

文档序号:1627953 发布日期:2020-01-14 浏览:28次 >En<

阅读说明:本技术 一种基于pcie的dma数据传输系统及方法 (PCIE (peripheral component interface express) -based DMA (direct memory Access) data transmission system and method ) 是由 吴世勇 苏庆会 王凯霖 王斌 李银龙 徐诺 刘武忠 廖正赟 彭金辉 于 2019-09-29 设计创作,主要内容包括:本发明提供一种基于PCIE的DMA数据传输系统及方法,所述系统包括:PCIE设备和主机,所述PCIE设备通过PCIE总线与所述主机进行数据交互;所述PCIE设备:包括DMA模块,所述DMA模块用于读取所述主机中的数据,和/或,将所述PCIE设备中的数据写入到所述主机中;本发明只需要向DMA模块一次性赋值待传输数据的首地址和长度,后续每经过一次TLP数据包或TLP请求包封装,则剩余的待传输数据的首地址和长度进行实时计算更新,便于后续根据当前待传输数据的首地址和长度来实时计算当前TLP数据包或TLP请求包的长度,且封装后的每一个TLP数据包或TLP请求包均不跨越4KB边界。本发明通过硬件方式实现解决TLP包跨越4KB边界时会被丢弃的问题,且传输效率高。(The invention provides a DMA data transmission system and method based on PCIE, the system includes: the system comprises PCIE equipment and a host, wherein the PCIE equipment carries out data interaction with the host through a PCIE bus; the PCIE device: the device comprises a DMA module, a data processing module and a data processing module, wherein the DMA module is used for reading data in the host and/or writing data in the PCIE equipment into the host; according to the invention, only the first address and the length of the data to be transmitted need to be assigned to the DMA module at one time, and the first address and the length of the remaining data to be transmitted are calculated and updated in real time every time the TLP data packet or the TLP request packet is subsequently encapsulated, so that the length of the current TLP data packet or the TLP request packet can be calculated in real time according to the first address and the length of the current data to be transmitted, and each encapsulated TLP data packet or TLP request packet does not cross a 4KB boundary. The invention solves the problem that the TLP packet is discarded when crossing the 4KB boundary by a hardware mode, and has high transmission efficiency.)

一种基于PCIE的DMA数据传输系统及方法

技术领域

本发明涉及计算机技术领域,具体涉及一种基于PCIE的DMA数据传输系统及方法。

背景技术

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

PCIE事物层与主机内存进行高速数据交互时(如DMA读数据或者DMA写数据),首先DMA读/写数据会被PCIE事务层封装成至少一个TLP包,如果某TLP包跨越4KB边界时,那么该TLP包就不会命中到主机内存的目标地址,则会被丢弃掉。传统的解决方法是通过软件方式来确定跨4KB边界的目标地址,并交由DMA控制器来完成操作,上述方法需要CPU多次对DMA控制器进行配置,增加了CPU的负担,同时也会造成软件处理额外开销。

发明内容

本发明针对上述问题,有必要提供一种基于PCIE的DMA数据传输系统及方法,通过硬件方式来解决TLP包跨越4KB边界时会被丢弃的问题。

本发明第一方面提出一种基于PCIE的DMA数据传输系统,所述系统包括:PCIE设备和主机,所述PCIE设备通过PCIE总线与所述主机进行数据交互;

所述PCIE设备:包括DMA模块,所述DMA模块用于读取所述主机中的数据,和/或,将所述PCIE设备中的数据写入到所述主机中;

在所述DMA模块读取所述主机中的数据时,所述DMA模块接收到所述主机反馈的待读取数据的首地址和数据量大小,并结合预定的Payload,制定TLP请求包的封装规则,使封装后的每一个TLP请求包不跨越4KB边界;

在所述DMA模块向所述主机中写入数据时,所述DMA模块接收到所述主机反馈的待写入区域的首地址,并结合待写入数据的数据量大小和预定的Payload,制定TLP数据包的封装规则,使封装后的每一个TLP数据包不跨越4KB边界。

进一步的,所述Payload为所述PCIE设备与所述主机共同协商制定的一个TLP请求包或TLP数据包所允许封装的最大长度。

进一步的,预设待读取数据的首地址为a1,待读取数据长度为b1,当首地址a1到4KB边界长度大于等于所述Payload时,则当前TLP请求包的封装长度取所述Payload与待读取数据长度b1中的最小一个;当首地址a1到4KB边界长度小于所述Payload时,则当前TLP请求包的封装长度取首地址a1到4KB边界的长度与待读取数据长度b1中的最小一个。

进一步的,当前一个TLP请求包被封装后,对后续待读取数据需要重新定义新的首地址ai和新的待读取数据长度bi,则新的首地址ai为前一个TLP请求包的首地址ai-1加上前一个TLP请求包的长度,新的待读取数据长度bi为前一个TLP请求包对应的待读取数据长度bi-1减去前一个TLP请求包的长度。

进一步的,预设待写入区域的首地址为c1,待写入数据长度为d1,当首地址c1到4KB边界长度大于等于所述Payload时,则当前TLP数据包的封装长度取所述Payload与待写入数据长度d1中的最小一个;当首地址c1到4KB边界长度小于所述Payload时,则当前TLP数据包的封装长度取首地址c1到4KB边界的长度与待写入数据长度d1中的最小一个。

进一步的,当前一个TLP数据包被封装后,对后续待写入区域需要重新定义新的首地址ci,对后续待写入数据需要重新定义新的待写入数据长度di,则新的首地址ci为前一个TLP数据包的首地址ci-1加上前一个TLP数据包的长度,新的待写入数据长度di为前一个TLP数据包对应的待写入数据长度di-1减去前一个TLP数据包的长度。

进一步的,所述4KB边界为m个,每一个4KB边界分别代表所述主机的物理地址,第n个4KB边界的物理地址长度为n*4096,且n小于等于m。

进一步的,所述PCIE设备还包括数据处理模块,所述数据处理模块用于接收所述DMA模块从所述主机读取到的数据并进行处理,待处理完成后,由所述DMA模块将处理完成的数据写入到所述主机中。

本发明第二方面还提出一种基于PCIE的DMA数据传输方法,所述方法包括:

主机将待读取数据的首地址和数据量大小反馈给DMA模块;

所述DMA模块根据待读取数据的首地址和数据量大小,并结合预定的Payload,制定TLP请求包的封装规则,使封装后的每一个TLP请求包不跨越4KB边界;

所述DMA模块根据所述TLP请求包的封装规则对TLP请求包进行封装,并将封装完成的TLP请求包发送至所述主机;

所述主机返回载有数据的TLP完成包,以完成所述DMA模块从所述主机读取数据的过程。

进一步的,所述方法还包括:

主机将待写入区域的首地址反馈给DMA模块;

所述DMA模块根据待写入区域的首地址和待写入数据量大小,并结合预定的Payload制定TLP数据包的封装规则,使封装后的每一个TLP数据包不跨越4KB边界;

所述DMA模块根据所述TLP数据包的封装规则将待写入数据封装成TLP数据包,并将封装后的TLP数据包传输至所述主机,以完成所述DMA模块向所述主机写入数据的过程。

本发明的基于PCIE的DMA数据处理系统及方法采用硬件方式解决了TLP包跨越4KB边界时会被丢弃的问题,相较于传统的软件解决方式,本发明的硬件方式无需CPU多次对DMA控制器进行配置,减轻了CPU的负担,并提升了数据传输效率,进一步节省了数据处理的成本。

附图说明

图1示出本发明一种基于PCIE的DMA数据传输系统的框图。

图2示出本发明一种TLP请求包的封装规则的原理图。

图3示出本发明一种基于PCIE的DMA数据读取方法的流程图。

图4示出本发明一种基于PCIE的DMA数据写入方法的流程图。

具体实施方式

为了使本发明能够更加清楚,下面通过具体实施方式,对本发明的技术方案做进一步的详细描述。

图1示出本发明一种基于PCIE的DMA数据传输系统的框图。

如图1所示,本发明第一方面提出一种基于PCIE的DMA数据传输系统,PCIE设备和主机,所述PCIE设备通过PCIE总线与所述主机进行数据交互;

所述PCIE设备:包括DMA模块,所述DMA模块用于读取所述主机中的数据,和/或,将所述PCIE设备中的数据写入到所述主机中;

在所述DMA模块读取所述主机中的数据时,所述DMA模块接收到所述主机反馈的待读取数据的首地址和数据量大小,并结合预定的Payload,制定TLP请求包的封装规则,使封装后的每一个TLP请求包不跨越4KB边界;

在所述DMA模块向所述主机中写入数据时,所述DMA模块接收到所述主机反馈的待写入区域的首地址,并结合待写入数据的数据量大小和预定的Payload,制定TLP数据包的封装规则,使封装后的每一个TLP数据包不跨越4KB边界。

根据本发明的实施例,所述Payload可以为所述PCIE设备与所述主机共同协商制定的一个TLP请求包或TLP数据包所允许封装的最大长度。优选的,所述Payload可以为128byte、256 byte,但不限于此。

需要说明的是,所述TLP数据包中带有数据,即在DMA模块写入数据过程中,将待写入的数据直接封装成若干个TLP数据包并传输给所述主机。TLP请求包并未带有数据,在DMA模块读取数据时,首先会根据待读取数据的首地址、数据量大小和预定的Payload来封装制定若干个TLP请求包,且每一个TLP请求包均带有预定的起始地址、载荷大小,所述主机即可根据TLP请求包的起始地址、载荷大小来进行装载数据,并将载有数据的TLP完成包回传至所述DMA模块。

进一步的,所述主机包括内存和CPU,所述内存用于存储数据以供所述DMA模块读取,和/或,接收由所述DMA模块写入的数据;所述CPU用于将所述内存中待读取数据的首地址和数据量大小预置入所述DMA模块,和/或,将所述内存中待写入区域的首地址预置入所述DMA模块。

在所述DMA模块读取所述主机中的数据时,可以预设待读取数据的首地址为a1,待读取数据长度为b1,当首地址a1到4KB边界长度大于等于所述Payload时,则当前TLP请求包的封装长度取所述Payload与待读取数据长度b1中的最小一个;当首地址a1到4KB边界长度小于所述Payload时,则当前TLP请求包的封装长度取首地址a1到4KB边界的长度与待读取数据长度b1中的最小一个。

进一步的,当前一个TLP请求包被封装后,对后续待读取数据需要重新定义新的首地址ai和新的待读取数据长度bi,则新的首地址ai为前一个TLP请求包的首地址ai-1加上前一个TLP请求包的长度,新的待读取数据长度bi为前一个TLP请求包对应的待读取数据长度bi-1减去前一个TLP请求包的长度。可以理解,待读取数据的首地址以及待读取数据长度是可以根据封装TLP请求包的进度依次更新变化,本发明只需要向DMA模块一次性赋值待读取数据的首地址和长度,后续每经过一次TLP请求包封装,则剩余的待读取数据的长度和首地址进行实时计算更新,便于后续根据当前待读取数据的长度和首地址来实时计算当前TLP请求包的长度。

在所述DMA模块向所述主机中写入数据时,可以预设待写入区域的首地址为c1,待写入数据长度为d1,当首地址c1到4KB边界长度大于等于所述Payload时,则当前TLP数据包的封装长度取所述Payload与待写入数据长度d1中的最小一个;当首地址c1到4KB边界长度小于所述Payload时,则当前TLP数据包的封装长度取首地址c1到4KB边界的长度与待写入数据长度d1中的最小一个。

进一步的,当前一个TLP数据包被封装后,对后续待写入区域需要重新定义新的首地址ci,对后续待写入数据需要重新定义新的待写入数据长度di,则新的首地址ci为前一个TLP数据包的首地址ci-1加上前一个TLP数据包的长度,新的待写入数据长度di为前一个TLP数据包对应的待写入数据长度di-1减去前一个TLP数据包的长度。可以理解,待写入区域的首地址以及待写入数据长度是可以根据写入封装TLP数据包的进度依次更新变化,本发明只需要向DMA模块一次性赋值待写入区域的首地址和待写入数据长度,后续每经过一次TLP数据包封装,则剩余的待写入数据长度和待写入区域的首地址进行实时计算更新,便于后续根据当前待写入数据长度和待写入区域的首地址来实时计算当前TLP数据包的长度。

可以理解,所述TLP请求包和TLP数据包在满足不跨越4KB边界的基础上,使每个包的数据载荷尽可能为Payload,从而实现每一个TLP请求包和每一个TLP数据包资源的最大化利用,进一步提升了数据传输效率。

根据本发明的实施例,所述4KB边界可以为m个,每一个4KB边界分别代表所述主机的物理地址,第n个4KB边界的物理地址长度为n*4096,且n小于等于m。

根据本发明的实施例,所述PCIE设备还包括数据处理模块,所述数据处理模块用于接收所述DMA模块从所述主机读取到的数据并进行处理,待处理完成后,由所述DMA模块将处理完成的数据写入到所述主机中。

具体的,所述PCIE设备可以为PCIE板卡,所述数据处理模块可以为加解密处理模块,用于对数据进行加解密处理。优选的,所述加解密处理模块可以采用DES算法、3DES算法、AES算法、国密SM4算法中任意一种算法来实现对数据的加解密处理。但不限于此。

为了进一步说明本发明的技术方案,下面根据一实施例来进行具体说明TLP请求包的封装规则。

如图2所示,本实施例中的Payload长度预定为128(byte,为便于描述后续对数据长度单位进行省略),待读取数据的首地址a1为3912,待读取数据长度为b1为480。

根据TLP请求包的封装规则,第一个TLP请求包的首地址a1为3912,待读取数据长度为b1为480,此时满足首地址a1到4KB边界的长度(184)大于等于所述Payload(128),则第一个TLP请求包的长度取所述Payload(128)与待读取数据长度b1(480)中的最小一个,即为128;第二个TLP请求包的首地址a2更新变化为3912+128=4040,待读取数据长度b2更新变化为480-128=352,此时满足首地址a2到4KB边界的长度(56)小于所述Payload(128),则第二个TLP请求包的长度取首地址a2到4KB边界的长度(56)与待读取数据长度b2(352)中的最小一个,即为56;第三个TLP请求包的首地址a3更新变化为4KB边界(4096),待读取数据长度b3更新变化为352-56=296,此时满足首地址a3(4096)到下一个4KB边界(即2*4096=8192)的长度(8192-4096=4096)大于等于所述Payload(128),则第三个TLP请求包的长度取所述Payload(128)与待读取数据长度b3(296)中的最小一个,即为128;同理,按照第三个TLP请求包计算方式即可确定出第四个TLP请求包的长度也为128;第五个TLP请求包的首地址a5更新变化为4352,待读取数据长度b5更新变化为40,此时满足首地址a5到下一个4KB边界(即2*4096=8192)的长度(8192-4352=3840)大于等于所述Payload(128),则第五个TLP请求包的长度取取所述Payload(128)与待读取数据长度b5(40)中的最小一个,即为40。

可以理解,在上述实施例中,如果没有制定TLP请求包的封装规则,则待读取数据(420)将会被封装成四个TLP请求包,第一个至第三个TLP请求包的长度均会取Payload(128),第四个TLP请求包的长度为待读取数据被前三个TLP请求包封装后所剩余的长度,即为96;其中,第二个TLP请求包将会因跨越4KB边界而被丢弃;有鉴于此,本发明通过制定TLP请求包的封装规则,能够有效避免数据在读取过程中出现丢包的现象,确保读取数据的完整性。

需要说明的是,TLP数据包的封装规则的原理与TLP请求包的封装规则的原理相似,为节省篇幅,在此不再对TLP数据包的封装规则作详细介绍。

图3示出了本发明一种基于PCIE的DMA数据读取方法的流程图。

如图3所示,本发明第二方面还提出一种基于PCIE的DMA数据传输方法,应用于上述的基于PCIE的DMA数据传输系统,所述方法包括:

S301,主机将待读取数据的首地址和数据量大小反馈给DMA模块;

S302,所述DMA模块根据待读取数据的首地址和数据量大小,并结合预定的Payload,制定TLP请求包的封装规则,使封装后的每一个TLP请求包不跨越4KB边界;

S303,所述DMA模块根据所述TLP请求包的封装规则对TLP请求包进行封装,并将封装完成的TLP请求包发送至所述主机;

S304,所述主机返回载有数据的TLP完成包,以完成所述DMA模块从所述主机读取数据的过程。

图4示出了本发明一种基于PCIE的DMA数据读取方法的流程图。

如图4所示,所述方法还包括:

S401,主机将待写入区域的首地址反馈给DMA模块;

S402,所述DMA模块根据待写入区域的首地址和待写入数据量大小,并结合预定的Payload制定TLP数据包的封装规则,使封装后的每一个TLP数据包不跨越4KB边界;

S403,所述DMA模块根据所述TLP数据包的封装规则,将待写入数据封装成TLP数据包,并将封装后的TLP数据包传输至所述主机,以完成所述DMA模块向所述主机写入数据的过程。

进一步的,所述Payload为所述PCIE设备与所述主机共同协商制定的一个TLP请求包或TLP数据包所允许封装的最大长度。

进一步的,所述TLP请求包的封装规则具体为:

预设待读取数据的首地址为a1,待读取数据长度为b1,当首地址a1到4KB边界长度大于等于所述Payload时,则当前TLP请求包的封装长度取所述Payload与待读取数据长度b1中的最小一个;当首地址a1到4KB边界长度小于所述Payload时,则当前TLP请求包的封装长度取首地址a1到4KB边界的长度与待读取数据长度b1中的最小一个。

进一步的,当前一个TLP请求包被封装后,对后续待读取数据需要重新定义新的首地址ai和新的待读取数据长度bi,则新的首地址ai为前一个TLP请求包的首地址ai-1加上前一个TLP请求包的长度,新的待读取数据长度bi为前一个TLP请求包对应的待读取数据长度bi-1减去前一个TLP请求包的长度。

进一步的,所述TLP数据包的封装规则具体为:

预设待写入区域的首地址为c1,待写入数据长度为d1,当首地址c1到4KB边界长度大于等于所述Payload时,则当前TLP数据包的封装长度取所述Payload与待写入数据长度d1中的最小一个;当首地址c1到4KB边界长度小于所述Payload时,则当前TLP数据包的封装长度取首地址c1到4KB边界的长度与待写入数据长度d1中的最小一个。

进一步的,当前一个TLP数据包被封装后,对后续待写入区域需要重新定义新的首地址ci和新的待写入数据长度di,则新的首地址ci为前一个TLP数据包的首地址ci-1加上前一个TLP数据包的长度,新的待写入数据长度di为前一个TLP数据包对应的待写入数据长度di-1减去前一个TLP数据包的长度。

进一步的,所述4KB边界为m个,每一个4KB边界分别代表所述主机的物理地址,第n个4KB边界的物理地址长度为n*4096,且n小于等于m。

本发明的基于PCIE的DMA数据处理系统及方法采用硬件方式解决了TLP包跨越4KB边界时会被丢弃的问题,相较于传统的软件解决方式,本发明的硬件方式无需CPU多次对DMA控制器进行配置,减轻了CPU的负担,并提升了数据传输效率,进一步节省了数据处理的成本。

最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,所属领域的普通技术人员在不脱离本发明技术方案的精神下,对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换,其均应涵盖在本发明请求保护的技术方案范围当中。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:并行移位寄存器的数据传输方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!