高速多通道DMA控制器设计方案
QooIC.com 新闻出处:电子市场 | 发布时间:2011/4/14 15:15:49
1 背景介绍
高性能微处理器的发展趋势之一是在系统中整合越来越多的I/O 设备,例如在Motorola公司的MX1微处理器中,就集成了SP I、UART、I2C、USB Device 、Smartcard I/F、Bluetooth Accelerator、E IM、LCDC、GP IO 和PWM等I/O 设备。但是, I/O设备的增加也带来了一系列的问题,由于I/O设备一般都与速度较慢的物理移动、网络连接和通信相关,因而速度很慢,如何实现低速I/O设备和高速存储器之间的数据交换,是高性能处理器系统设计中所要解决的一个重要问题。
I/O操作可采用三种技术,分别是编程式I/O、中断驱动式I/O和直接存储器存取(DMA) 。表1是三种技术的对比示意图。

编程式I/O是最简单的I/O传输方式[ 1 ] 。CPU周期性的检查数据源设备的状态,看源设备是否已经准备好进行读操作,如果源设备已经准备好,就将数据从源设备中读取。然后CPU检查数据传输目的设备的状态,看目的设备是否准备好接收数据,如果是则将数据写入到目的设备中。在编程式I/O中, CPU完全被用于控制数据传输,这样就无法进行其他的运算或者控制操作,浪费了大量CPU时间。例如对于Motorola的嵌入式处理器M - CORE, load和store指令分别需要两个周期,再加上更新数据计数器所需要的一个时钟周期,那么传输一个字所需要的时间为5个周期。另一种数据传输的方法是中断式I/O。当使用这种方法的时候,如果某个设备已经处于准备好的状态,它就采用中断的方式通知CPU, CPU接收该中断后就暂停其他操作,转而进行中断处理,例如数据的读取和写入操作。这种方法仍然需要CPU控制数据的传输。
直接存储器存取(DMA)允许数据在处理器内部进行传输,而不需要CPU进行干涉。当采用DMA的方式进行数据传输的时候,主要包括三个步骤:第一是对DMA控制器中的控制寄存器进行设置,包括设置数据传输的源地址、目的地址以及要传输的数据块的大小;第二是DMA控制器申请并获得总线的控制权,然后DMA控制器从源地址读取数据并将其暂存,然后在下一个时钟周期将数据写入到目的地址;第三是对下一个要传输的数据重复进行操作,直到数据块传输完毕。由此可见,当采用DMA方式进行数据传输的时候,如果总线宽度是32bit,那么传输一个字只需要两个时钟周期。
本文在传统的DMA传输方式上进行改进,提出并实现了一种高速的多通道DMA控制器HDMAC,该控制器具有以下的特点:数据传输速率高,最快每周期可以传输一个数据单元;包括12个传输通道,可以实现内部存储空间、外部存储空间以及I/O器件之间的多个方向的数据传输,并且通道的优先级可以配置;对于每个特定的数据块传输,传输地址的生成方式以及数据传输的宽度可以配置;支持通道传输的链接操作,当一个传输通道完成数据传输后,可以直接触发其他通道的数据传输,不需要CPU重新进行设置。
2 HDMAC的功能:
HDMAC主要包括两种传输功能:外部端口传输和I/O器件传输。每种传输都有自己对应的传输通道,通道之间还可以进行链接操作。
2.11 外部端口传输
外部端口传输,主要用于外部地址空间和内部地址空间的传输、外部存储空间内的传输以及内部存储空间内的传输。外部地址空间可以包括:外部存储器件、其他处理器的内存。内部地址空间是指处理器的内存。
外部端口传输使用通道0~3,每个通道对应一个发送TCB ( TCB:传输控制寄存器组,包括四个32位的寄存器,用于设置传输时所要用到的地址、地址增量、控制等信息)和一个接收TCB,分别用于对发送操作和接收操作进行控制,在使用某一个通道进行传输之前,这两个TCB都要进行设置。
外部端口传输的启动有两种模式:一是自动模式,即当发送TCB和接收TCB都已经设置完毕后,DMAC就开始申请总线,当获得总线的使用权后, HDMAC就开始发出读写控制信号和地址信号,控制进行传输;二是硬件握手模式,即当发送TCB和接收TCB都设置完毕后, HDMAC就会检测外部接口信号的状态,每检测到一次外部接口信号的跳变,就触发一个数据单元的传输。
2.12 I/O器件传输
I/O器件传输,包括两种情况:一是I/O器件接收,是指对于某些I/O设备,当它们被写入数据后,就会产生传输请求,DMAC开始申请总线,根据TCB的设置情况,将被写入的数据传输到内存或者外存中;二是I/O器件发送,是指对于某些I/O设备,当它们中的数据被读出后,就会产生传输请求, DMAC开始申请总线,根据TCB的设置请求,将内存或外存的数据传送到该I/O设备中。
I/O器件接收方式使用通道8~11,这些通道只包括一个接收TCB,该TCB指定了数据要传输的目的地址和传输中要使用到的控制信息, I/O器件发送方式使用通道4~7,这些通道只包括一个发送TCB,用于指定数据的源地址和传输中要使用到的控制信息。
2.13 HDMAC的通道优先级
如果在同一个周期出现了多个DMA 通道的传输请求,就要对这些传输请求进行排序,选择优先级最高的通道进行传输。各个通道的优先级按照由高到低的顺序排列如表2所示。

用于外部端口传输的通道可以单独设置高或低两种优先级。进行优先级的判断时,先按照组进行判断,分为I/O器件接收、I/O器件发送和外部端口传输三组; 然后在组内,按照优先级的设置进行判断,对于外部端口传输,如果有多个高优先级,在各个表2 HDMAC的通道优先级设置。
2.14 HDMAC的链接操作
链接操作是指,在一个通道传输完成后, HDMAC会根据该通道TCB中对于链接操作的规定,通过和内部存储空间相连的接口,从链接指针所指向的内存位置读出一个长度是四字的内容,并把该内容装载到链接操作目的通道的TCB中,从而自动完成TCB的设置工作,开始新的传输。
2.15 保证HDMAC高速传输的途径
首先, HDMAC支持内外部存储器空间之间的数据通信,它是DMA传输最常使用的通信机制。在这种传输方式下,内部数据空间的传输和外部数据空间的传输可以同时进行,互不干扰,从而可以充分利用内部总线和外部总线的带宽。
第二, HDMAC允许不同优先级通道之间可以迅速实现切换。首先,高优先级的通道传输可以中断低优先级的通道传输,这对于缓冲能力有限的I/O器件来说尤为重要。第二,当高优先级的传输不能及时得到响应的时候,就可以进行低优先级通道的传输,避免出现DMA控制器长期处于空闲状态的情况。
3 HDMAC的结构与实现
HDMAC控制器通过两个接口分别和两条总线相连,一条总线是用于同外部存储空间(包括外部I/O器件和外部存储空间)交换数据,一条总线用于同内部存储空间交换数据(包括内存和可寻址的内部寄存器) 。
内部存储空间存和外部存储空间之间的数据传输经过DMA控制器,内存内部或者外存内部的数据传输不经过DMA控制器。数据可以在外部存储空间内传输,也可以在内外存储空间之间进行传输,也可以在内部存储空间之间传输。HDMAC包括以下几个部分:寄存器组单元,内部暂存队列,传输控制引擎。
3.11 寄存器组单元
寄存器组单元包括DMA寄存器组和控制电路。控制电路包括三个部分,一部分用来控制处理器核和传输引擎对寄存器组的访问;一部分用来根据出错状态和传输完成状态生成中断请求信号;一部分用来根据各个通道的情况,向传输引擎中的通道选择单元发出传输发起请求信号。
HDMAC寄存器组分为全局寄存器和通道寄存器TCB两种。全局寄存器包括控制寄存器和状态寄存器,其中全局控制寄存器用于暂停或恢复某个通道的传输;状态寄存器为只读寄存器,用于表示某个通道当前的状态。TCB寄存器用来指明包括地址、传输单元的个数、地址增量以及传输的控制信息。
3.12 内部暂存队列
DMA内部,每一个通道都有一个内部的F IFO,用于暂存穿过DMA控制器的数据,包括由内存向外存传输的数据和外存向内存传输的数据。当数据由源端口读入到某个通道的内部F IFO中后,这些数据会申请目的端口传输引擎将其写到目的地址中。
3.13 传输控制引擎
传输引擎分为两种:内存传输引擎和外存传输引擎,分别控制内部存储空间接口和外部存储空间接口的操作。由于处理器核可以通过内部存储空间接口访问DMA内部的寄存器,所以内部存储空间接口应该包括主接口和从接口两个部分,而对于外部存储空间接口,仅包含主接口。每个传输引擎都包括通道选择单元和传输控制单元两个部分。在HDMAC的控制下,数据在同一个存储空间内部传输和内外部存储空间之间进行传输的分别如图1左和右所示。

3.14 HDMAC的实现
我们实现了HDMAC的可综合Verilog代码,并对其进行了仿真、验证。在SM IC的0. 18微米的工艺下,使用Synop sys公司的Design - Comp iler工具对其综合,综合结果表明该控制器的工作频率高于100MHz,满足了高性能处理器高速I/O传输的需要[ 3 ] 。
4 小结
本文提出并实现了一种高速多通道的DMA控制器,该控制器在传统DMA控制器的基础上进行了改进,最快可以每周期进行一次数据传输。综合结果表明,该控制器可以满足高性能处理器I/O传输的需要。