账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
直接内存访问之基础、结构、与应用(4)
 

【作者: David Katz,Rick Gentile】2007年09月12日 星期三

浏览人次:【5780】

在上一篇文章中,已讨论过针对指令以及数据存储器要如何在快取与DMA机构之选择上做出最佳的决定。在这次的讨论里面,将要继续先前尚未讨论完的部分,也就是先进DMA的特点如何能够使数据的搬移更具有效率。将会专注在如何使内存中的数据传输优化,不论是正在处理指令或是数据存储器。接着会针对多媒体应用领域中的一些实际使用情况做综合性的讨论。


先进DMA控制器的特点

想要在多媒体系统中有效率的使用DMA,就必须要有足够的DMA信道,能够完整的支持处理器的所有周边,同时还需要有一对以上的内存DMA(MemDMA)串流。这一点非常的重要,因为传送进来的未经处理媒体串流一定会送到外部内存中(透过高速周边),而在此同时,核心处理所需要的数据区块将会在外部内存以及L1内存之间来回的搬移。此外, DMA引擎能够在周边与外部内存之间做直接数据传输,而不会像L1内存一样需要「中途停留」(stopover),对于特别强调数值方面的算法则可以减少额外的数据传送。


在开发阶段中,程序设计师常常会犯的一个共通错误使得除错的程序变得更为复杂。周边以及其相对应的DMA信道,通常都会具有可以切换的错误中断。在开发阶段中,这个中断应该要经常性的被维持在启用的状态。这样子的作法可以节省掉数个小时的除错时间。一般错误中断的用途都是用以指出程序中某些撰写错误的部分(这是比较容易修正的状况),或者是某个周边发生了超下限/ 超上限(这是较为复杂的状况)的问题。在多数的情况下,程序设计师在计划起步阶段进行架构的设定时,前述这些类型的状况只有到稍后开始加入应用装置的处理组件才会出现。


其他重要的DMA特点还包括了能将DMA信道的优先权等级化,以符合目前周边作业需求的能力,以及为了配合这些优先位准而设定相关连DMA中断的功能。这些功能将有助于确保数据缓冲区不会因为其他周边的DMA运作而产生溢出的状况,同时也可以提供程序设计师额外的自由度,能够以每个DMA信道上的数据交换情况为基础,对整个系统进行优化。


在DMA与快取之间做选择时的系统准则

在应用装置中的数据流如果越复杂,在开始进行计划案的架构布局时就需要花更多的时间。在架构一组系统时,最基本的挑战就在于决定哪个数据缓冲区在搬移时要使用DMA信道,哪个则应该要透过快取来进行存取,还有哪个要使用处理器的读写来做存取。我们接着来看看三种最为常用的系统设定,以便找出对于不同的系统等级而言,哪种方法才是最好的。


系统性能的调节

对于设计工程师而言,当数据速率以及性能的需求增加时,在其设计的配置中是否具备有「系统性能调节」控制就变得相当的重要。举例来说,可以对DMA控制器进行优化,使其在每个频率周期中传输一组数据字符。当有多个传输采相同的方向进行时(例如:全部都从内部存储器流往外部内存时),这通常是最具效率的控制器操作方法,因为这可以避免在DMA总线上产生空闲时间。


但是在某些会牵涉到多个双向视讯以及音频串流的情况下,为了要避免单一组串流将总线完全占满,「方向控制」就有其必要性。举例来说,假如DMA控制器总是把DMA总线授予任何一个已经准备好要传输一组数据字符的周边使用,那么在使用外部DRAM的时候,总体的处理能力将会随之降级。有些情况是几乎在每一个周期间,数据的传输都会发生方向的切换,那么与外部内存总线上的回转时间相互关连的潜在因素就会使得总处理能力明显的下降。所以,具备有信道可编程突发量大小(channel-programmable burst size)的DMA控制器与只有固定传输大小的控制器相较之下,前者将会有较高的性能。因为每个DMA信道都可以将一组周边与内部或外部内存相互链接,因此对于提出总线紧急需求的周边能够自动提供服务也是相当重要的。


对于多媒体应用领域而言,要将整个视讯框架储存起来,芯片内建的内存大多是不敷使用的。因此,系统通常都必须要仰赖L3 DRAM,以便支持对于较大缓冲区相对较快速的存取动作。在设计有效率的媒体框架时,处理器与外接内存的链接会是一个主要的影响因素,这是因为若想要确保数据的总处理能力达到优化的状态,那么对于外部内存的存取方式就必须要善加思考与规划才行。


对于内存的性能来说,使用DMA以及/ 或是快取都会有所帮助,这是因为他们可以在同方向上进行大型的数据区块传输。DMA传输通常会将大型的数据缓冲区从某个位置搬到另一个位置上,而高速缓存线填充(cache-line fill)则会使用同方向的区块传输方式,将一整组的连续内存位置从组件移出或是移入。


除了使用DMA或是快取之外,还有许多种高位准的步骤可以确保数据流在任何的系统中都能够平顺的通过内存。其中两种关键性的步骤就是将同类的传输群组化(grouping like transfers),以及使用优先等级与仲裁系统。


将同类传输群组化,以便使内存总线的回转最小化。

当外部内存的存取都是以同方向进行时(例如:连续读取或是连续写入),将是最具有效率的状态。举例来说,在存取芯片外的同步内存时,伴随着16次写入的16次读取,总是会比个别进行的16次读写程序更快完成。这是因为每一次伴随着读取的写入会导致潜在的问题。外部内存的随机存取会产生出较高的总线回转机率。这项衍生出来的潜在问题会使得可用带宽减少一半。因此,善加利用控制特定方向之传输数量的能力是相当重要的。这点可以藉由自动化或是手动安排数据搬移来加以达成。


DMA信道可以根据其优先等级来将存取动作贮存起来,在Blackfin处理器上是藉由其信道数目来作为表示。具有较高优先等级的信道会被优先用来作为DMA总线的存取。基于这样的理由,因此请记得总是将具有较高优先等级的DMA信道指派给具有最高数据速率或是会产生最少潜在问题的周边。


根据这样的结果,内存DMA串流在优先等级上总是会低于周边DMA的运作。这是因为在使用内存DMA的情况下,没有任何的外部组件能够予以延缓或是索取数据。由于内存DMA信道只要在信道被启动就会提出存取DMA总线的要求,因此有效率的使用任何未被周边DMA所使用之时槽(time slot)的方法将会被应用在MemDMA的传输上。在默认状态下,如果有超过一组的MemDMA串流被启动而且也已经就绪的话,那么只有获得最高优先等级的MemDMA串流能够取得使用许可。


在对每个DMA总线上的资源使用进行优化时,必须要将这个方向控制的特点视为很重要的考虑。将相同方向的传输群组化在一起,这个方法可以用来对DMA总线上之传输方向的频率进行管理。这是一个相当方便,可以执行第一阶段优化的方法,而且不需要实时的处理器介入。更重要的是,不需要手动的将突发量安排至DMA串流当中。


在采用了方向控制的特点之后,DMA控制器会对DMA或是内存总线,与前一传输具有相同的读取写入方向者中的数据传输优先授权,直到方向控制的计数器逾时,或是直到其交流停止,或是其自行改变方向。当方向计数器变为零的时候,DMA控制器将会改变其偏好值,变成反方向的数据流。


在这个情况下,方向的反转不会浪费掉总线周期,不同于任何实体总线的回转会使得时间有所延迟。这种类型的交流控制所代表的意义乃是为了改善其运用(效率),而对于延迟的增加所做的权衡。较高的流量逾时值可能会使得每个需求在等待授权的时间延长,但是他们却能够很明显的改善一个十分拥塞的系统,到达带宽的最大值,通常可以达到90 %以上。


以下是一个将这些概念放入的范例:


范例1

首先,先设定一组内存DMA从L1到L3内存,使用16位的传输,而要搬移1024组16位的字符将会占用大约1100系统频率(SCLK)周期。


接着开始从一组不同的外部内存插槽传输至视讯埠(PPI)。在PPI中利用16位的unpacking,持续的将8位数据送入一组NTSC视讯编码器中。由于PPI会以27MHz的速率送出一组8位的量,因此PPI传输所需要的DMA总线带宽大约是13.5 M transfers / second。


当量测同时有PPI传输以及相同的1024字符MemDMA传输时,其完成所需时间需要3倍之多。


为什么会如此?这是因为PPI DMA运作的优先等级比MemDMA信道的处理还要高的缘故。每当PPI准备就绪,要进行下一次的取样时,总线就会反转传输方向。这大约相当于在外部内存接口以及不同的内部DMA总线中所消耗掉的周期数。当启用方向控制功能时,性能将会有明显的增加,这是因为较少的总线回转。


根据经验,在适量的系统运作下,最好能够将同方向的连续传输最大化。然而对于负担最大的系统流而言,最好是可以选择位于范围中间的数值,以便确保不会有任何一组周边会因为存取外部内存而发生被锁定的情况。当系统中使用了至少两组的高带宽周边(像是PPIs)时,这点就特别的重要。


除了使用方向控制以外,在MDMA串流之间进行的传输也可以随着应用装置的需要将总线改成轮循式(round-robin)。使用这种类型的仲裁时,第一组DMA处理程序将可以取得存取DMA总线的授权,但是只有一定数量的周期,接着则是第二组DMA处理程序,然后又会回到第一组DMA。信道将会以这种形式改变,直到所有的数据都已经传输完毕为止。这项能力在双核心处理器上最为有用(举例来说,当两个核心处理器都具有正在等待数据串流传输的作业时)。如果没有这种轮循式特点,第一组的DMA传输将会发生,而第二组DMA处理程序则会受到延缓,直至第一组的作业完成。轮循式的优先处理有助于确保传输串流可以一个接一个的紧接完成。


当然,这种类型的排程可以手动方式来完成,藉由将要送至L3内存的数据予以缓冲至芯片内建内存。处理器核心能够存取芯片内建的缓冲区,相较于对芯片外的缓冲区进行同样的存取,这样的方式将能够以较低的延迟来执行先期处理功能。这点所带来的直接影响就是系统效能的增加。此外,将这些数据予以缓冲至芯片内建的内存当中,将可以使周边DMA在存取这些数据时更加的有效率。举例来说,在作业中透过视讯埠来将一组视讯框架传输至L3内存当中,这将会使其他的周边被锁定而无法存取其所需要的数据,此乃因为视讯传输属于高优先等级的处理程序。然而,藉由递增方式将视讯线从视讯埠传输至L1或是L2内存,再启始低优先等级的的MemDMA串流将这些数据安静的传输至L3内存,而这也将可以让系统的周边存取其所需要的数据。


在系统资源之间的优先等级以及仲裁系统

另一个重要的考虑,则是可以调整处理器次系统要如何彼此相互搭配的优先等级及仲裁系统。举例来说,在Blackfin处理器当中,如果有关于L3内存的数据交换同时间发生的话,默认状态下核心的优先等级是高于DMA存取的。这个意思就是假如在DMA控制器对L3发出读取需求的同时,核心也要读取L3的话,那么核心将会赢得授权,亦即其读取动作会优先完成。


而在实时系统研究中可能造成问题的情况。当在存取像是L3内存之类的共享资源时,如果处理器拥有高于DMA控制器的优先等级,这也会导致同时想要尝试存取相同内存的DMA信道被锁定住。假设处理器正在执行一项紧密的回路作业,该作业是要从外部的内存撷取数据。DMA的运作将会遭到延缓,一直到处理器的回路作业完成为止。然而并非只有内嵌的读取回路才会造成问题。有些作业像是高速缓存线填充或是来自于L3内存的非线性程序代码执行也可能会发生问题,这是因为他们都会产生一连串不可中断的存取作业。


另一个值得注意的议题,就是在处理器核心以及DMA控制器之间的优先等级系统。利用此设定方式可以让DMA的运作总是显示出「迫切」的状态,而当DMA与处理器核心同时发出需求时,DMA将会因此而赢得授权。


在计划开始进行的早期阶段,总是会基于许多的理由而诱使整个设计去仰赖核心进行存取(而非DMA)。第一个理由就是认为这种存取数据的方法是模仿典型的标准系统。第二个原因则是开发者不愿意深入研究DMA功能与性能的内部运作。然而,藉由核心与DMA仲裁的弹性,使用内存DMA控制器可以将数据从内部存储器移出以及移入,这点将会在计划进行的早期阶段,就对于后续的整体发展拥有更多的掌控性。


DMA在多媒体系统中的一些现实考虑

使用DMA控制器清除数据

针对从摄影机流入系统的数据,DMA控制器可以被用来当作大量数据的过滤器。 假设为了某些型态的处理需要,正在运作的视讯串流被送入了内存当中。当数据不需要为了显示之用而被传送回去时,那么这些数据也没有需要以空白数据的型态传输至内存内的缓冲区。


处理器的视讯埠通常会与视讯译码器或是CMOS传感器直接链接,并且持续的接收取样。也就是说,外部组件会持续的按时将数据以及空白信息传送进来。DMA控制器可以被设定为只将运作中的视讯传送至内存当中。使用这种类型的功能,可以同时节省内存空间以及总线的带宽。在使用NTSC视讯串流的情况下,这种类型的空白数据会占用掉超过20%以上的总输入视讯带宽。在内存方面的节省只能算是最小的好处,因为额外的内存通常是可以采用外接的SDRAM形式来取得,而且只会有少许的系统成本差异。更为重要的是在整体处理期间所能够节省下来的带宽;在系统中原本一般会使用在移入空白数据的时间,可以被重新安排给其他的作业之用,举例来说,可以用来将经过压缩的数据传送出去或是将参考数据从后期框架中移入。


双重缓冲

先前已经讨论过可以利用双重缓冲的方式,来确保现有的数据不会被新的数据覆写,直到准备好要将其覆盖过去为止。对于视讯显示缓冲的管理,恰可以作为这种架构的最佳范例。通常,系统中的来源视讯与最终的显示之间如果存在有不同的速率时,那么在既有的内容以及新的视讯框架之间就必须要有一个平滑的转换机制。这个机制可以藉由双重缓冲的安排来加以完成。将一组缓冲区指向现有的视讯框架上,这将能够让数据以特定的更新速率传送到显示上面。第二组缓冲区则以最新的输出框架填满。而当第二个缓冲区被填满时,DMA中断就会发出信号,表示可以将新的框架输出至显示上面。在此同时,第一组缓冲区会开始将经过处理,作为显示之用的的视讯填入,而第二组缓冲区则会输出目前的显示框架。这两组缓冲区会持续的以乒乓球的型态来回切换。


必须要注意的是,可以使用多组缓冲区,而非只能够使用两组,这样的目的是为了替同步化作业提供更大的余裕,而且也能够降低中断的频率,以及其所衍生的潜在影响。


2D DMA的考虑

在前次的讨论中,曾经提到过一个特点,二维DMA(2D DMA)的能力具有多项系统等级的优点。简短的重新检视一下这项特点,以便讨论其在音频与视讯应用领域中,该如何扮演其角色。


当数据被传输通过像是I2S之类的数字链接时,它可能会包含有数个信道。举例来说,这些信道全部被多任务传输至一组要传送至同一串行埠上的数据线中。在这种情况下,2D DMA可以被用来将数据去交错(de-interleave),使得每个信道在内存当中都能够以线性方式排定。参照(图一)中所示对于这种安排的图形叙述,其中从左边与右边信道的取样会以解多任务传输(de-multiplexed)的方式传送至两组个别独立的区块。这种自动化的数据安排方式,对于采用区块处理程序的系统而言是具有极高价值的。



《图一 2D DMA引擎被用来将(a) I2S的立体数据去交错,并且分别传送至(b)左边与右边的个别缓冲区当中。》 - BigPic:719x531
《图一 2D DMA引擎被用来将(a) I2S的立体数据去交错,并且分别传送至(b)左边与右边的个别缓冲区当中。》 - BigPic:719x531

对于视讯传输而言,2D DMA提供了多项系统等级的优点。对于刚开始接触的设计者,二维DMA可以将来往于外部内存之间的巨区块(macroblock)传输予以简化,让数据巧妙的转化为实际传输的一部份。这将可以消除往往会与非连续性数据在传输时所伴随而生的间接效应。它也可以藉由选择性的传输,让系统将数据带宽最小化,也就是说只有将输入影像中所要保留的区域进行传输,非而整张影像。


另一个范例则是,2D DMA允许数据以序列的方式存入内存当中,这样在进行处理时将会更加的平顺。举例来说,如(图二)中所示,RGB数据能够以交错式的RGB888格式从CCD传感器中进入到处理器的L2内存当中,但是若使用2D DMA的话,这些数据就可以分别以R、G、与B平面的型态被传输至L3内存当中。针对视讯以及影像数据的交错/去交错色彩空间分量,可以减少在处理之前额外的数据搬移。



《图二 利用2D DMA将数据去交错。》 - BigPic:806x698
《图二 利用2D DMA将数据去交错。》 - BigPic:806x698

音频与视讯串流的同步化

在多媒体系统当中,串流内容通常会包含有音频与视讯的元素。由于数据的速率会依据这些串流的运行而定,所以DMA信道就必须被当作是音频编译码器以及视讯编码器之间的链接接口。从观赏者的角度来看,确保串流的同步化是相当重要的,因为这样的协调性左右感受到的质量。


有许多的方法可以维持同步化。最常被使用的技术就是针对每组音频与视频缓冲区设定一整组的DMA描述符列表,并且让处理器去管理这些列表。


相对于一个视讯框架的丢失,音频串流中的一个瞬间异常会更加的引人注意,因此音频缓冲区通常会被设定为是主要(master)串流。也就是说,让音频缓冲区能够以持续的方式运转是比较重要的。藉由使音频串流得以持续不间断,处理器才能够在视讯框架显示上进行任何必要的调整。从DMA缓冲区的角度来看,有一整组针对每个音频与视频缓冲区的描述符被建立出来。每份描述符列表都会被设定由一对指针(pointers)来加以控制,一个指针是用以填满缓冲区,另一个指针则是将缓冲区清空。


每份描述符列表都需要加以维护,以确保读取与写入指针不会发生「 交叉(crossed)」的情况。也就是说,处理器不应该去更新一组正处于数据移出程序中的缓冲区。同样的,DMA控制器也不应该对处理器正在填入数据的缓冲区进行送入数据的动作。


针对音频与视讯的同步化而言,应该要保有一组整体的系统时间。每一组经过译码的缓冲区都可以利用相对应的时间卷标(time tag)建立在内存当中。假如音频串流是主要串流的话,那么写入缓冲区就会呈现完全循环的状态。假如有视讯框架必须被删除掉的话,用以清空缓冲区的DMA指针就会被重新编程,以便与最接近目前音频缓冲区之时间戳的时间配合。(图三)所示为这种维持音频/视讯同步化方法的



《图三 音频/视讯同步化的概念图表》 - BigPic:899x622
《图三 音频/视讯同步化的概念图表》 - BigPic:899x622

利用DMA控制器达到节省电源的效果

在一组具有电源管理能力设计的处理器上,DMA控制器可以提供极具价值的工具,藉此降低系统中的整体电源损耗。


当处理器没有在缓冲区上执行作业时,它就可以被转换成闲置状态。而当处理器处于这种闲置状态时,时钟可以关闭掉,而有些时候连电压也可以降低;这两者都能够降低处理器的电源耗损。


假设有一组音频译码系统。处理器会对经过编码的内容执行译码的功能。经过译码的缓冲区会在内存中累积,而一但缓冲区达到了高水位(high-water mark),处理器就会进入休眠模式。在休眠模式下,DMA控制器(已经自处理器核心退耦)会从缓冲区将数据取出,并且传送至音频编译码器上。DMA控制器必需要持续的运作,以确保良好的音频质量。「低水位」可以藉由将DMA控制器进行重新编程来完成,这样一来,当某些数量的数据取样已经传输完成之后,DMA控制器就会产生一组中断。这个中断可以将其编程为「唤醒(wake-up event)」事件,它将可以让处理器脱离休眠模式。而处理器又可以重新将缓冲区填满,这么一来,当DMA控制器再度绕回到缓冲区的起始点时,就又可以取得新的数据了。


假如这个流程持续的运行,所能获得的净效应就是处理器的运行周期(也就是处理器处于运作状态的时间)将会大幅的降低。


DMA队列管理员的实现

个复杂的系统设计中会包含有惊人数量,以并联方式运行的DMA通道。而当要利用描述符对DMA通道进行编程时,所需要用到的描述符数量将会更加的可观。在这些情况下,最好的方法就是实现某些形式的DMA伫列管理员。这类型管理员的范例可以参考如下网址的文件:http://www.analog.com/Uplo​​adedFiles/Associated_Docs/497894170437445_systemservices_man_Rev21.pdf


DMA管理员最适合用来管理在同时间进行传输的排程。其编程介面被设定成承接新的描述符,而这也代表了新的工作单元。


总而言之,DMA控制器是任何多媒体系统中不可或缺的一部份,而且很重要的是要能够去了解其复杂性,以便对应用装置做完整的最佳化处理。然而,DMA控制器也绝对不是系统中的唯一角色;其他的系统资源,像是记忆体以及处理器核心必须要藉由DMA控制器来加以仲裁,并且在它们之间实现完善的平衡状态,而这些都需要对于资料是如何在系统内进行搬移有着基础的认识与了解才能达成。


相关文章
出囗管制风险下的石墨替代技术新视野
用Arduino 打造机器人:循迹、弹钢琴、下棋都行!
树莓派推出AI摄影机、新款显示器
智慧充电桩百花齐放
充电站布局多元商业模式
comments powered by Disqus
相关讨论
  相关新闻
» Nordic上市nRF Cloud设备管理服务 大幅扩展其云端服务
» 是德、新思和Ansys共同开发支援台积电N6RF+制程节点射频设计迁移流程
» 美光32Gb伺服器DRAM通过验证并出货 满足生成式AI应用要求
» Cadence结合生成式AI技术 开创多物理场模拟应用新时代
» AMD公布2024年第一季财报 成长动能来自AI加速器出货增长


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK85E9VO0MESTACUK2
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw