DMA基本原理、结构与应用(下)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直接存储器存取—基本原理、结构与应用(下)

在上一期中,我们讨论了分别基于寄存器和描述符的DMA模式。在本文中,我们将在系统层面上探讨应用中关于数据移动的各种选项所应做出的某些重要的决策问题,以及某些先进的DMA功能特性如何协助数据在多媒体系统中有效地移动。首先让我们重新回顾一下DMA模式,以便以之说明另外一两条关于何时选择其中一种模式而非另一种模式的指导原则。

对于规模相同、连续、单向的数据传输来说,自动缓冲方案是最合理的。DMA配置寄存器只要设置一次,就可以自动地在传输结束的时候重新载入。如果采用多维寻址,则可以设置多重缓冲,在每次缓冲结束时可以单独设置各次中断的触发。

到一个音频编码解码器的传输就是这种类型事务。你所选取的子缓冲区的数量应该与你需要执行的处理的类型相一致。对于连续传输来说,只要确保能让每个缓冲器的最大处理间隔小于取空一个缓冲器所花费的时间即可。

如果在给定通道上的传输在方向和尺寸上都将是可变的,描述符模式就是最佳的选择。试考虑在内部和外部的存储间发生的一系列小规模的传输,如果数据块的尺寸发生改变,或者如果你希望以一种非连续的方式来在缓冲器中处理数据,则可以为此建立描述符。

高速缓存 vs DMA

我们接下来将考察系统数据转移的某些情形,在这些情形中,我们需要在高速缓存和DMA之间做出选择。为此,我们首先需要考察一项在应用内部存在的各种数据移动类型。

通过片上外设来将数据转移到系统内或者将其移到系统外是一种最容易说明问题的情况,因此我们以这些数据的转移为起点开始讨论。许多外设可以在使用内核存取还是用DMA通道来转移数据之间做出选择。一般来说,如果可以做出选择的话,你应该使用DMA通道。DMA控制器之所以成为最佳选择,是因为数据往往要么来得太慢,要么来得太快,处理器无法高效地对其进行实时处理。

当我们采用慢速的串行器件(如SPI端口或者UART)时,数据的传输速率远低于处理器内核运行的速度。内核对这些类型的外设的访问必然涉及对一个映射存储器的寄存器的某些位的轮询(polling)。即使当外设的工作速度与处理器时钟相比较很低的话(这意味着访问的频率将会降低),轮询也是一种浪费。在某些情况下,外设有能力发出中断,指示内核传输已经发生。不过,在这里,每次增量数据传输完成后都会遇到为中断提供服务的开销问题,包括前后条件(context)切换的时间。

另一方面,使用DMA控制器来执行传输,使得系统可以精密地控制在发出中断前所完成的传输的次数。而且,这种中断可以在每个数据“块”的末尾发生,而不仅仅是在每个字节或者字之后。

在吞吐率分布的另一端,更为高速(例如以10~100MHz)的并行外设可能无法选择内核传输的方式。原因为:首先,以这种方式进行设定时,处理器会频繁地访问外设;其次,与高速外设相关的处理几乎总是对数据块进行的。无论是在一个信号处理应用中通过FFT完成,还是在图像处理系统中进行二维卷积(convolution),处理器在送往缓冲器的最后一个数据采样一到达时就开始其操作。这里,用于指示一个数据块传输结束的中断可以出现在数百次甚至上千次传输中。

无论外设进行何种类型的传输,DMA通道都应该带有多个缓冲器,以便让处理器能在数据填充入下一个缓冲器时访问当前的缓冲器。如果系统更为复杂,则有可能需要实现多个同步进行的数据块传输。例如,除了可以访问当前的数据块并采集下一个数据块,还可能有必要将最后一个处理过的数据块发出,以备未来之需。类似的,要处理当前的帧的话,也有可能需要参考数据块。各种各样不同类型的应用都确实存在这一情形,包括大多数类型的视频压缩应用。(关于高速缓存与DMA之间的选择指南内容,祥见《电子工程专辑》网站)

DMA控制器特性

为了在多媒体系统中有效地运用DMA,就必须有足够多的DMA通道,有一对以上的存储器DMA(MemDMA)流充分地支持处理器的外设集。这是一个重要的问题,因为必然存在如下的情况:在未经处理的媒体流进入外部存储器(通过高速外设)的同时,数据块在外部存储器和L1存储器之间来回传输,以供内核处理。而且,DMA引擎允许在外设和外部存储器间进行直接数据传输,而不要求数据在L1存储器中“暂驻”,这可以在那些数值计算密集的算法执行中避免额外的数据传递。

程序开发者常犯的一个错误会使得开发过程中的调试问题变得复杂化。外设及其相应的DMA通道往往会提供一个可选的错误中断,在开发中该中断应该始终处于使能状态,这样可以节省数小时的调试时间。错误中断一般是用于指示编制的程序中出现了某些错误(容易解决),或者外设下溢/溢出(情况更为复杂)。很多情况下,当编程者在项目开始的时候用数据流来建立框架(framework)时,这些类型的问题只会在后来运行中,当应用处理器件被加上的时候才出现。

其他重要的DMA特性包括对DMA通道设定优先级,以满足当前外设任务要求,以及对相应的DMA中断进行配置以便与这些优先级水平相匹配的能力。这些功能有助于确保数据的缓冲区不会由于DMA活跃在其他的外设上而出现溢出,它们为程序开发者提供了额外的自由度,能根据每个DMA通道的数据往来情况对整个系统进行优化。

系统性能的修调

随着数据率和性能要求的提高,设计者能否具有对“系统性能修调”等控制选项进行操作的权限,也将变得十分关键。例如,DMA控制可以针对在每个时钟周期上传送一个数据字这一需求进行优化。当同一方向上有多个传输在进行时(例如,都从存储器出发,发往外部存储),这往往就是对控制器进行操控的最有效率的方法,因为它可以防止DMA总线出现闲置。

但是,在需要进行多路双向视频和音频流传输的情况下,“方向控制”就成为必不可少的措施,其目的是防止一条数据流完全占用整条总线。例如,如果DMA控制器始终将DMA总线的使用权交给任何一个准备好传输一个数据字的外设,则使用外部DRAM时总的吞吐率将出现下降。在数据传输几乎每个周期都变换方向的情况下,与外部存储总线花费的转向时间相应的延迟将会显著地降低吞吐率。

于是,可以让通道来编程设定突发量大小(burst size)的DMA控制器将具有超出那些传输大小固定的控制器的性能。因为每个DMA通道可以将外设与内部或者外部存储相连接,所以为可能会发出紧急占用总线请求的外设自动服务的能力也是非常重要的。

对于多媒体应用来说,片上的存储器几乎总是不足以存下整个视频帧数据。因此系统往往必须依靠L3 DRAM 来支持相对较快的、对大缓冲区的访问。处理器与片外存储器的接口在涉及高效的媒体框架方面是一个主要的因素,因为对外部存储的存取模式必须经过深思熟虑,以便能保证最佳的数据吞吐能力。

相关文档
最新文档