DW_axi_dmac控制器(概述)
??????? DW_axi_dmac遵循AMBA2.0标准和AMBA AXI协议2.0标准。DW_axi_dmac逻辑的外部信号主要包括:
- AHB信号(我的理解:主要是作为从设备接口部分,供AHB总线上的其他主设备来访问自身控制寄存器)
- 主设备接口信号(我的理解:DMA作为AHB总线主设备,访问内存和其他AHB总线上的从设备)
- 硬件握手信号(我的理解:带外信号部分,用于和QSPI的DMA接口逻辑进行流控)
- 中断信号
- 调试信号
- 时钟和复位信号
?基本特征
- 独立的核心、从设备接口和主设备接口时钟,即分为三个时钟域。
- 从设备接口时钟关闭:当调试接口信号slvif_busy无效为低时,表示从设备接口处于空闲状态,CPU可以关闭从设备接口时钟;在访问从设备接口之前,CPU可以重新启动时钟。
- DMA接口逻辑关闭时(例如QSPI),主设备接口时钟可以独立关闭。
- 可以配置8个通道,每个通道是一个源和目的对。
- 每个通道只能单方向的数据传输。
- 支持两个主设备接口:两个主设备接口可以在多层结构上实现;因为允许外围接口(例如内存或QSPI)在不同的AXI上进行互连,因此可以提高总线带宽;不同的AMBA层次结构允许采用不同的ACLK时钟。
- 数据传输有四种:内存到内存,内存到QSPI,QSPI到内存,QSPI到QSPI。
- 主设备接口遵循AMBA 3 AXI和AMBA 4 AXI标准。
- 从设备接口用于对DMA控制器进行编程,即控制寄存器访问,遵循AHB标准:该逻辑仅仅支持AHB从设备接口;AHB从设备接口仅仅支持SINGLE传输。
- AXI主设备的数据总线最大宽度为512位,可编程配置。
- AXI主设备接口的大小端模式可以静态配置或者动态配置,可编程配置。
- 也可以通过信号(dmac_endian_format_mstif_m)动态配置大小端模式。
- 针对主设备接口上链接访问,可以通过编程独立控制大小端模式。
- 编程可选择ID寄存器。
- 通道锁支持。主设备总线接口在不同的传输层级上使用内部通道仲裁的锁机制。
- DMAC状态输出:空闲/忙标记位
- DMA占有功能
- 在DMA传输层,有专门的输出信号管脚用于标记最后写传输。
- DMA传输具有分层:DMA传输分为transaction, block和完整的DMA传输三个层次。
通道缓冲
- ?每个通道有一个FIFO缓冲
- ?FIFO缓冲长度可以编程配置
- 为了满足FIFO宽度,数据可以自动被打包/解包处理。
通道控制
- ?对每个通道进行传输类型编程:内存到内存,内存到QSPI,QSPI到内存,QSPI到QSPI。
- 支持单个或多个DMA操作。
- 每个通道可以对DMA操作的长度进行编程。
- 每个通道可以对最大AMBA突发传输长度进行编程。
- 通道关闭不会造成数据丢失。
- 支持通道挂起和恢复。
- 通道优先级可编程。
- 针对不同传输层级,主设备总线接口可以使用内部通道仲裁器的锁机制。
- 可编程多块传输,通过链接目录,连续地址,自动加载和影子寄存器等方式。
- 链接目录可动态扩展(我理解,链接目录是DMA描述链表)
- 多块传输类型的源地址/目的地址,可独立配置。
- 每个通道的源地址/目的地址都有一个多状态机。
- 数据访问和LLI访问具有各自独立状态机。
- 每个DMA块可以对控制信号进行编程,例如缓存和保护。
- 可编程传输块长度。
- 错误状态寄存器,用于调试。
流控
在DMA传输层次上,可编程实现流控:
- 如果块传输长度在DMA初始化之前就已知,DMA控制就在DMA块传输层次上进行流控;
- 如果如果块传输长度在DMA初始化QSPI之前还是未知的,对于未定义的DMA块传输,源或目的来进行流控。
握手接口
- ?对于非内存类外设(这里说的好像是QSPI),可编程软硬件握手接口。
- 最大支持16个硬件握手接口。
- 对每个握手接口独立的启用和关闭。
- 可对外设和通道的映射进行编程;在多对一的映射时,只能有一个外设被激活。
- 通过控制寄存器,软件可以控制握手模式。
中断输出
- ?支持混合和独立中断输出。
- 中断触发源包括:DMA传输完成、块传输完成、单个或多个操作完成、出错、通道挂起或者关闭。
- 支持中断使能和屏蔽。
总线接口
- 主设备接口遵循AMBA 3 AXI和AMBA 4 AXI协议;从设备接口遵循AHB、AXI4-Lite和APB 3协议。
- 主设备接口的数据总线宽度最大512位,可配置。
- 主设备接口上允许存在未完成的操作。
- 对主设备接口上每个通道进行未完成操作数量限制。
- AXI传输宽度可配置。
- 针对同一个主设备接口上不同的通道,允许乱序操作。一个专用通道的操作通常初始化为顺序操作。
- 主设备接口支持递增和固定地址数据传输。
- 源地址和目的地址必须和传输宽度对齐。
- 从设备接口数据宽度为32/64位,编程可配。
- 从设备接口传输的宽度必须和数据宽度一样。
|