基于DMA控制器的SoC系统设计
引言
DMA(Direct Memory Access,直接存储器存取)是一种快速传送数据的机制。DMA控制器能够有效替代微处理器的加载/存储指令,显著提高系统的并行能力。DMA是在存储器与输入/输出设备间直接传送数据,是一种完全由硬件完成输入/输出操作的方式。数据传递可以从外设到内存,从内存到外设。但DMA控制器的引入也引进了影响系统响应速度的因素。本文讲述以包含单个AHB master接口的DMA控制器为基础的SoC系统架构蓝本,分析存在的不足之处,并引入一种以新型DMA控制器为基础的SoC系统架构的设计,解决提出的问题。
1 对异步事件响应速度
系统实时性是指能在限定时间内完成任务,并对外部异步事件作出及时响应。限定时间根据应用的要求不同而变化。实时系统的实时性与使用的软硬件平台有关。嵌入式系统的中断服务响应时间是指从某一个中断源发出中断服务请求,到处理器响应这个中断源的中断服务请求,并开始执行这个中断源的中断服务程序所用的这一段时间。嵌入式操作系统中的进程调度是靠中断实现的,处理器对系统中或系统外发生的异步事件的响应速度是决定系统响应速度的关键因素。中断响应时间是一个非常重要的指标。特别是在实时计算机系统中,中断响应时间是整个计算机系统的一个关键性指标。影响中断服务响应的因素有很多,如中断源本身相对于其他中断源的优先级设置。在内核不适合或不可能使用中断技术期间,不能进行中断响应。因此这段时间也相当于一段中断响应延时,DMA操作就是其中一个因素。因为DMA传输也相当于一种中断,只不过它向处理器申请的是总线控制权,而不是处理器本身。在DMA传输期间,由于处理器要把总线控制权让给DMA而失去总线控制权,尽管处理器可以做些不使用总线的工作,但肯定不会马上响应来自总线的外部中断请求,因此会造成较大的中断延时。
2 包含DMA的SoC系统架构
2.1 DMA结构介绍
一般而言,DMA控制器的功能与结构是由系统结构决定的。但是作为IP而言,DMA控制器又要有其一般性。DMA是指外部设备直接对计算机存储器进行读写操作的I/O方式。这种方式下数据的读写无需处理器执行指令,也不经过处理器内部寄存器,而是利用系统的数据总线,由外设直接对存储器写入或读出,从而达到极高的传输效率。DMA技术的重要性在于,利用它进行数据存取时不需要处理器进行干预,可提高系统执行应用程序的效率。利用DMA传送数据的另一个好处是数据直接在源地址和目的地址之间传送,不需要中间媒介。在大部分基于AMBA总线的SoC:系统中,当需要进行DMA操作时,DMA控制器先向处理器发出占用总线的请求,当总线请求成功后,处理器将总线使用权交给DMA控制器,可以进行数据传输,当此次DMA传输完成后DMA控制器释放总线控制权。
AMBA是ARM公司提出的用于微处理器片上通信的先进的总线结构。一种典型的AMBA总线由AHB和APB总线分段构成。总线上的设备可以分为能够主动读写的主设备(master)与只能接收来自master请求的从设备(slave)。针对DMA控制器的研究引出了新的SoC架构,如使用分布式Fly-by DMA结构,为数据吞吐量大的模块预设专用通道等。从功耗的角度看,当系统中存在较多master模块时,总线仲裁器的负担加重,而仲裁器正是AMBA总线功耗的主要来源。
2.2 包含AHB主从接口DMA控制器的SoC系统架构
为了缓解在同一系统中需要同时实现大批量的数据传输,提出如图1所示的基于AMBA总线的SoC系统架构。从图中可以看出,系统处理器的数据接口与指令接口都是作为AHB的master挂接在AHB总线上。主存通过slave接口挂接在AHB总线上,而DMA控制器同时包含master与slave接口,挂接在AHB总线上。slave接口用来对DMA控制器内部寄存器进行配置,master用来向AHB申请AHB总线控制权,并进行DMA传输。
在图1中Memory是通过AHB的slave接口挂在AHB总线上。DMA控制器包含的2个接口,slave接口完成DMA内部寄存器的配置后,master接口可申请AHB总线使用权,当获得许可后,开始占用AHB总线,实现DMA数据传输。如此使处理器从外设间的大批量数据传输解放出来,直接由DMA来完成,提高了数据传输放率。但也因此而产生了一个问题:当DMA占用AHB总线时处理器不能通过AHB接口去实现取指及读写数据。虽然在现在大部分处理器内部或外部配备了容量较大的高速缓存(Cache),当DMA控制器占用内存时,处理器仍可利用Cache中的程序和数据继续运行;但Cache是利用程序的局部性原理,当处理器执行的操作有良好的局部性时,在DMA占用AHB总线期间可以利用Cache里的指令和数据继续运行,但若此时有设备产生中断
- Linux嵌入式系统开发平台选型探讨(11-09)
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- VXWORKS内核分析(11-11)
- Linux内核解读入门(11-09)
- linux文件系统基础(02-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)