PCIe传输和DMA传输有什么区别吗?

发布时间:
2023-08-24 12:38
阅读量:
14

本人做PCIE3年,给你简单科普一下。

首先DMA其实就是AXI master,用于帮助CPU干活的,为什么说PCIE传输也能包CPU干活呢?

因为PCIE控制器有内部DMA,也就iDMA。PCIE大概分层如下图:

PCIE架构图

为什么需要iDMA呢?

因为crossber上挂载的DMAchannel数目有限,SOC规模又大,不可能将所有数据传输都交给外部的DMA,并且如果PCIE自带DMA,能更好的利用CPU与外部DMA的零碎时间,提高整个总线的利用效率。

PCIE怎么知道需要怎么搬哪里数据?搬到哪里呢?

类似与普通DMA,需要cpu配置,source地址,target地址,当然,这个source地址或者target都有可能处于PCIE域,这就需要借助架构图中的translater完成pcie域到cpu域的地址转化。也就是inbound和outboud都要转化,不然就会出现对端设备或者我们不认识这个地址,从而导致数据丢失。

PCIE使用iDMA时:

PCIE使用iDMA时,如果将EP侧CPU域数据发送到RC侧CPU域,首先需要在master产生一个假的MEM读请求,将数据读到DMA buffer,然后BYPASS axi slave发起一个MEM写,将数据发送到对端。

如果将RC侧数据读取到EP侧,流程类似,首先BYPASS axi slave发起mem读请求,将读取到的CPLs转化成RC侧的MEM写。通过axi master写出去就行了。

特别的是,iDMA通常支持链表型DMA,可以对多端不连续的地址空间进行读写,但是需要一段axi master可以访问的内存,存储DMA配置,然后通过axi master督导pcie配置空间。

这时PCIE就像有了自我意识一般,自己去完成数据传输,虽然这个意识也是CPU给它的。

PCIE不使用iDMA时:

此时通过axi slave发起读写事务,当然这个读写事务可以是cpu控制,也可以是外部DMA控制,区别于地址空间分配时,那个master可以访问PCIE axi slave口。

当然最终肯定取决于软件的规划。

此时PCIE完全就是普通的高速外设,起到EP和RC的cpu沟通的桥梁,没有半点自我意识。

END