第8章 DMA控制器与总线桥
本章主要内容
DMA和总线桥在一个片上系统中是必不可少的。DMA可以将处理器从数据搬移任务中解放出来专注于计算任务;总线桥将高速设备和低速设备从总线上分开,从而达到节电的目的,使得高速总线的时序更加容易收敛。DMA放在总线桥中可以有效降低DMA操作的总线访问次数。本章将详细讲述DMA和总线桥的设计原理,并将给出源代码分析。
8.1 DMA和总线桥概述
DMA控制器和总线桥有很多种设计方法,本章介绍的DMA控制器和总线桥来自 http://www.opencores.org。为了便于读者理解,笔者进行了简化,由最大32个通道简化为8个通道。8个通道能满足多数常见应用。该DMA控制器和总线桥的特点如下:
(1)8个DMA通道;
(2)4个优先级;
(3)支持链表(Linked List)描述符;
(4)支持硬件握手;
(5)支持FIFO buffer;
(6)支持读写直达的总线桥操作。
其结构如图8-1所示。
图8-1 DMA控制器和总线桥的结构
WISHBONE接口0和WISHBONE接口1都包括主设备接口和从设备接口,WISHBONE接口0的从设备接口用于完成DMA和总线桥的配置寄存器操作。在一些应用中,WISHBONE接口1方面的总线可能不包括主设备,可将WISHBONE接口1的从设备接口不用。WISHBONE接口0的主设备接口和WISHBONE接口1的主设备接口则用于DMA完成数据搬运。数据可以从WISHBONE接口0方向总线的一个设备搬运到WISHBONE接口0方向总线的另外一个设备,也可以从WISHBONE接口1方向总线的一个设备搬运到WISHBONE接口0方向总线的另外一个设备,可以从WISHBONE接口0方向总线的一个设备搬运到WISHBONE接口1方向总线的另外一个设备,还可以从WISHBONE接口1方向总线的一个设备搬运到WISHBONE接口0方向总线的另外一个设备。
通道优先级是静态信息,可以随时通过寄存器进行配置;处理器通过通道0~7的寄存器控制器这些通道的工作。通道0~7的请求通过复用送给DMA引擎进行数据搬运,而当有多个请求同时发生时,通道优先级仲裁器选择当前应该首先处理器的请求。在本章的设计中,其优先级逻辑为同一优先级内部采用round-robin,0为最低优先级,7为最高优先级。