PCIe-DMA

在pcie中,RC或EP可以将大块数据的传输交给DMA控制器,使cpu能够空闲出来执行其他的任务。DMA可以分别配置1-8个读写的通道,能同时执行读写的事务。

DMA支持全双工,并且可以和非DMA的数据并行处理。传输完成或出现错误,DMA可以选择中断本地执行DMA操作的CPU或者向目标CPU发送中断MWr(IMWr)。可以使用本地DBI或通过PCIe进行配置。

在链表模式下,DMA从本地内存中构建的DMA元素列表中获取每个传输块,和传输控制信息

DMA支持“原生控制器操作(无需AXI桥)”,也可以与AXI桥一起使用DMA,在这种情况下,DMA位于本机PCIe控制器和AXI桥模块之间。

DMA体系结构

DMA读写

DMA写入和读取通道是独立运行的,以最大限度提高PCIe链路上DMA读写数据的性能。配置有多个读取通道的DMA时,会是哦也能够加权轮询(WRR)仲裁方案来选择要服务的下一个通道,有多个通道同样适用。

image-20230714172042325

DMA读写传输

DMA将多个大小小于或等于最大读取请求大小Max_Read_Request_Size和最大负载大小Max_Payload_SizeMRd请求 DMA控制器可以生成MRd请求,用于从源内存读取数据。这些MRd请求通常包含读取操作的相关信息,例如读取的起始地址、读取的数据大小等。通过生成MRd请求,DMA控制器可以独立地读取数据,而无需CPU的直接干预。一旦DMA完成读取操作,它可以将读取的数据传输给目标设备或通过DMA传输到远程链路对端。 MRd请求在DMA操作中起到关键的作用,它允许DMA控制器以高效且独立的方式访问内存数据 注入到出站请求路径中,以供远程链路对端使用。DMA将读取的响应转换为写入请求,并发送到本地应用程序。当DMA的数据传输完成时,CPU会收到通知。在读取传输中,SAR表示远程内存地址,DAR表示本地内存地址。

DMA需要两个RAM,分为内部和外部的RAM。配置参数CX_RAM_AT_TOP_IF的值指示RAM是外部还是内部

  • CX_RAM_AT_TOP_IF = 1时,RAM是外部RAM。
  • CX_RAM_AT_TOP_IF = 0时,RAM是内部RAM。

RAM可以是双端口或单端口,具有单周期访问延迟。控制器支持特定类型的RAM,并且RAM无需初始化。在使用特定的电源管理设置时,RAM可以被关闭以节省功耗。(RAM待补充

每个通道都有一组特定的寄存器,称为通道上下文寄存器。DMA在传输过程中会更新这些寄存器。您可以通过本地CPU直接使用DBI或通过PCIe链路,远程编程通道的上下文信息和其他DMA控制寄存器。一些寄存器实现在高速宽接口的上下文RAM中。如果在PCIe控制器外部实现了RAM,那么必须通过外部RAM接口将该RAM连接到系统中。

中断和错误处理

中断可以本地或者远程传递给CPU,对于远程中断可以使用已发布的内存写(IMWr)。每个通道有两个地址用于完成和中止,注意在配置MSI时要使用相同的MSI地址,使用单个数据寄存器来标识中断类型,并且在IMWr的TLP头中将RO位设置为0,以确保数据包的正确传递顺序。