Arria 10 Avalon-MM DMA接口PCIe解决方案用户指南

ID 683425
日期 10/31/2016
Public
文档目录

5.11. DMA描述符控制器寄存器

DMA描述符控制器管理读和写DMA操作。描述符控制器支持读和写DMA的描述符多达128个。在嵌入式CPU上运行的主机软件根据PCI Express主存储器中描述符列表的位置和大小编程描述符内部寄存器。。DMA描述符控制器指令Read DMA将该列表复制到其内部的FIFO。当DMA描述符控制器被例化为单独的组件,就会驱动RdDmaRxData_i[159:0]WrDmaRxData_i[159:0]总线上的列表条目。当DMA描述符控制器被嵌入到Avalon-MM DMA桥,就会驱动内部管道接口( internal conduit interface)上的该信息。

Read DMA将数据从PCIe地址空间传输到Avalon-MM地址空间。它在PCIe链路上发布存储器读TLP。并将返回数据写入Avalon-MM地址空间的存储器中。源地址是PCIe地址空间数据的地址。目的地址在Avalon-MM地址空间中。

Write DMA从Avalon-MM地址空间读取数据,并写入PCIe地址空间。它在PCIe链路上发布存储器写TLP。源地址在Avalon-MM地址空间。目的地址在PCIe地址空间。

DMA描述符控制器把读和写描述符的完成状态记录在各自的状态列表中。每个列表具有128个dword条目与128个描述符相对应,描述符控制器写一个1到状态dword的done位以表示成功完成。描述符控制器还为最后的描述符发送MSI中断。接收此MSI后,主机软件可轮询done位以确定状态。在存储器中状态列表优先于描述符列表。因为每个描述符完成时,描述符控制器不会写done位或者发送MSI。它仅仅为ID储存于RD_DMA_LASTPTRWR_DMA_LAST_PTR寄存器的描述符写done位或者发送MSI。描述符控制器支持无序完成。因此,在所有描述完成之前可能就被设为done位。

128个描述符的状态条目存储在128个连续的dword中,这128个连续的dword由已编程到RC Read Descriptor BaseRC Write Descriptor Base 寄存器的值指定。这些值中位于偏移0x200的状态条目编程到RC Read Descriptor BaseRC Write Descriptor Base寄存器后,就立刻储存当前的描述符。状态和描述符列表必须位于根复合存储器的32-byte边界。
注: 例如,如果指定128个描述符并全部执行,则写127个到RD_DMA_LAST_PTRWR_DMA_LAST_PTR寄存器以开启DMA。当描述符127完成时,DMA描述符控制器才写done位。要得到中间状态更新,主机软件应该把多个ID写入最后一个指针寄存器。例如,要在128个读描述符完成一半时得到中间状态更新,主机软件应该完成以下序列:
  1. 编程RD_DMA_LAST_PTR = 63。
  2. 编程RD_DMA_LAST_PTR = 127。
  3. 轮询用于读描述符63的状态dword。
  4. 轮询用于读描述符127的状态dword。
在支持无序完成的系统中,描述符控制器会无序地完成描述符。因此,已储存描述符<n>done状态并不一定表示描述符 <n-1><n-2>也已经完成。您必须通过把每个描述符的描述符ID写入RD_DMA_LAST_PTRWR_DMA_LAST_PTR以请求每个描述符的完成状态。而许多商用系统根端口基于主机存储器通道的已优化访问权限返回无序读完成。