仅对英特尔可见 — GUID: nik1410905614614
Ixiasoft
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_LASTPTR或WR_DMA_LAST_PTR寄存器的描述符写done位或者发送MSI。描述符控制器支持无序完成。因此,在所有描述完成之前可能就被设为done位。
128个描述符的状态条目存储在128个连续的dword中,这128个连续的dword由已编程到RC Read Descriptor Base和RC Write Descriptor Base 寄存器的值指定。这些值中位于偏移0x200的状态条目编程到RC Read Descriptor Base和RC Write Descriptor Base寄存器后,就立刻储存当前的描述符。状态和描述符列表必须位于根复合存储器的32-byte边界。
注: 例如,如果指定128个描述符并全部执行,则写127个到RD_DMA_LAST_PTR或WR_DMA_LAST_PTR寄存器以开启DMA。当描述符127完成时,DMA描述符控制器才写done位。要得到中间状态更新,主机软件应该把多个ID写入最后一个指针寄存器。例如,要在128个读描述符完成一半时得到中间状态更新,主机软件应该完成以下序列:
- 编程RD_DMA_LAST_PTR = 63。
- 编程RD_DMA_LAST_PTR = 127。
- 轮询用于读描述符63的状态dword。
- 轮询用于读描述符127的状态dword。