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

【作者: ADI】2007年08月20日 星期一

浏览人次:【5649】

在本系列的第二个部份中,已分别探讨了以缓存器为基础和以描述符为基础的不同DMA模式。现在接着要来探讨的是关于在应用中数据搬移选择的一些重要系统决定。但首先来重新检视一下DMA的模式,以便在面临要选用何种模式时,能够有更多的指引方向。


为了使容量相同的数据维持连续以及单向的移转,使用自动缓冲的架构是最为恰当的。对DMA设定缓存器做一次设定,而移转结束时会被自动重新读取。假如可以使用多维寻址(multi-dimensional addressing)的话,那么就能够设定多重缓冲,而个别独立的中断也就可以被设定为在每个缓冲区的结尾进行触发。


移转至音频编/译码器是这类型处理的完美候选人。在选择次缓冲区数量时应该要和所需执行之处理程序类型相符。对于连续性的移转,只要确定使每个缓冲区的最大处理时间低于其用以搜集一个缓冲区所花的时间即可。


假如在特定信道上的移转大小或是方向会有所改变,那么描述符模式才是最佳的选择。想象以下的情况:在内部与外部内存之间有一系列的小型移转。如果区块的大小改变,或是想要以非连续性型态的方式游走于一个缓冲区,描述符可以针对这个目的来进行设定。


我们将很快地对一些系统数据搬移情况该选择使用快取或是DMA来做些探讨,但是在这之前,必须先看看存在于应用领域中数据搬移的类型。


因为透过内建的周边来将数据从系统中移转进来或是移转出去是最易于展示的方法,所以就从这个部分开始。许多的周边在进行数据搬移时,都具有选择使用核心存取或是DMA信道的特性。当可以选择时,应该使用DMA信道。DMA控制器是最佳的选择,这是因为通常数据不是进来的太慢就是太快,以致于处理器无法有效率的对其进行实时处理。以下就是一些例子:


当使用像是串行周边接口(SPI)埠或是通用异步收发器(UART)之类的慢速串联组件时,数据将会以远低于处理器核心运作的速率来进行移转。核心在对这类型周边进行存取时,通常会轮询内存映像缓存器(memory-mapped register)中某些位。即使周边运作的速度比处理器频率还低(这同时也意味着存取动作发生的频率较低),这个轮询动作仍然是颇为浪费的。在某些状况下,周边具有发出中断信号的能力,藉以通知核心移转已经开始进行。然而,处理这样一个中断的成本─包含了内容切换(context switches)的时间,是会随着每次的数据迁移而发生的。


另一方面,使用DMA控制器来执行移转,可以对在中断发生前所产生的移转数量进行微控制。此外,该中断也会在每个数据”区块”的结尾产生,而非仅只是在每个字节或是字符之后产生。


在数据流量范围的另一端,较高速的并联周边(比如说以10 – 100 MHz运作)可能不具有核心移转的选项。这有两个原因:第一个原因是,当使用这种方式设定时,处理器会持续的对周边进行存取。第二个原因则是,与高速周边相关连的处理程序大多会在数据区块上完成。无论是在信号处理应用之快速傅利叶转换(FFT)或是在图像处理系统的二维回旋,一旦该缓冲区最后一笔数据取样送达后,处理器就可以开始工作。其中,发出区块移转结束信号的中断会分散在上百或是上千个移转。


不论周边移转的类型为何,DMA信道应该要被设定有多重的缓冲区,这样处理器在存取目前的缓冲区时,下一组缓冲区才会处于被充填的状态。假如是更加复杂的系统,那么就会牵涉到同时的多重区块移转。举例来说,除了存取现有的区块并搜集下一个区块之外,可能也有需要将前一组经过处理的区块传送出去,以作为未来之用。与其类似的则是参考数据区块也需要处理现有的框架。对于各种不同的应用领域─包括大多数的视频压缩类型在内,这点相当的重要。


范例1中所示为使用双重缓冲,以音频为基础的的简单范例。


范例1

范例1中所示为使用双重缓冲,以音频为基础的的简单范例。


有几种方法可以将音频数据送入处理器核心。举例来说,在前景执行的程序可以轮询串行端口看有无新的数据,不过这类型的移转在嵌入式媒体处理器(embedded media processor)中并不常见,因为这样会造成核心的无效率使用。


取而代之的是,将处理器链接至音频编 / 译码器时,通常会使用DMA引擎从编 / 译码器的链结(类似串行端口)移转数据至处理器中可以使用的内存。这个数据的移转会在背景中执行,不会受到核心的干预。唯一的开销就是一旦数据缓冲已经收到或是传出时,需要设定DMA的处理程序以及中断的处理。如同(图1a)中所示,核心对in1缓冲区进行处理并且将结果储存至out1 缓冲区,而此时DMA引擎正在把in0填满并且将数据从out0中传送出去。(图1b)所描绘的是一旦DMA引擎完成双重缓冲的左半边之后,它就会开始将数据迁移进入in1当中,以及从out1当中将数据迁移出来,而核心则会进行将数据从in0转出以及转入out0的处理程序。这样的设定有时候会被称做「 乒乓缓冲」( ping-pong buffering),因为核心会在双重缓冲区的左半边与右半边轮流交换。


请注意到,在实时系统中,串行端口DMA(或是另一组受到音频采样率所约束的周边DMA)对时序预算(timing budget)具有支配性的地位。基于这个原因,区块处理的算法在进行优化时,必须要使其运行时间少于或等于DMA在从双重缓冲区的一半转入或转出数据时所花费的时间。



《图一 针对串流处理的双重缓冲架构》 - BigPic:779x346
《图一 针对串流处理的双重缓冲架构》 - BigPic:779x346

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

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


针对串流处理的双重缓冲架构

指令快取,数据DMA


这可能是最为常用的系统模型,因为媒体处理器通常都会以这个使用方式的轮廓来作为其架构。将程序代码予以快取可以减轻对于复杂指令流的管理负担,但前提是应用必须能够负担得起这样的奢侈。当系统没有硬实时性的限制时,这个方式可以运作的很完善,因为快取失误(cache miss)不会对于紧密结合之事件的时序造成严重的破坏(举例来说,视讯的更新或是音频 / 视讯的同步)。同时,当处理器的性能远远的超越了处理上的需求时,将指令予以快取往往是个可以采用的安全方法,这是因为快取失误不太会导致瓶颈的产生。虽然考虑一个在现实上能否使用的”特大”(oversized)处理器似乎显得不太寻常,但是考虑是一组能够对压缩的视讯与音频进行译码的可携式媒体播放器的情况。当其处于纯音频模式时,性能上的需求只不过是在进行视讯播放时所需要的一小部分而已。


对于大部分的多媒体应用而言,透过DMA来管理数据是最自然的选择,这是因为它们大多会牵涉到压缩与未压缩之视讯、图形、以及音频等大型缓冲的处理。除了在某些情况如数据为准静态(quasi-static)(例如:固定显示在屏幕上的一个图形图标)之外,将这些缓冲区进行快取是没有意义的,这是因为数据会快速而且持续的改变。再者,如同先前所讨论的,在同一时间内通常都会有多重的数据缓冲区在芯片的四周进行搬移─像是将调整的未经处理区块、经过局部调整而需暂时储存的区段、以及经过完全处理要送往外部显示或是储存装置的区段等。DMA是管理缓冲区的理想工具,因为DMA允许核心在这些缓冲区上运行,而不需要担心如何去对这些缓冲区进行搬移。


指令快取,数据DMA/快取

这个方法与刚才所讨论的相似,除了在这种情况下有部分的L1数据存储器被分割做为快取,而剩下的部分则作为DMA存取之用的SRAM。对于在处理牵涉到许多静态系数或是对照表(lookup table)的算法则而言,这个架构非常的有用。举例来说,将正弦/余弦表储存在数据快取中可以提高FFTs的快速运算能力。或者,也可以将量化表(quantization tables)予以快取,这样将可以促进JPEG的编码与译码能力。


请记得这个方法牵涉到一个在本质方面的权衡。虽然应用可以获得以单周期来存取常用的常数以及窗体,可是同时也会牺牲掉等量的L1数据SRAM,因而也会对单周期存取数据可用的缓冲区大小造成限制。想要对这个权衡进行评估,试着改变在Statistical Profiler(在许多的开发工具组中都有提供)之中的架构(数据DMA /快取 vs. 只有DMA),以便判定在每个环境下有多少百分比的时间是花在程序代码区块上,这会是一个很有用的方法。


指令DMA,数据DMA

在这个架构里面,数据与程序代码彼此之间的依赖性如此紧密的交缠,以致于开发者必须对指令与数据区段何时要透过芯片来搬移进行手动的排程。在如此的硬实时系统当中,确定性是必要的,因此快取并不适用于此。


虽然这个方法需要较多的规划,但是所换取到的好处就是具有确定性的系统,其中程序代码总是会在数据需要其执行之前就能够准备好,而且不会有数据会因为缓冲溢出而遗失。由于DMA的处理程序可以彼此链接而不需要核心的介入,因此一个新的处理程序之启始就足以保证前一个程序已经完成,而数据或是程序代码的搬移是否发生也会被予以确认。这是想要将数据以及指令区块同步化最有效率的方法。


基于另一种原因,指令/数据DMA的组合也很值得注意。当一般直接存取快取无法使用时,该组合提供了一种很方便的方法,可以在仿真与除错阶段时就先在系统中测试程序代码以及数据流。因此程序设计师可以在系统设定中进行调整,或是将「易出故障点」( trouble spots)强调出来。


有个需要将指令与数据都使用DMA处理之系统的范例,那就是视讯编码/译码器。当然,视讯以及其相关的音频需要是确定性的,以便用户获得满意的体验。假如DMA在每次完成缓冲区移转之后就对核心发出中断信号的话,这将会对系统带来很明显的潜在问题,因为相对于其他的事件,中断具有较优先完成的特性。在一个中断服务例行程序的启始与结尾处所发生的环境切换,会消耗数个核心处理器的周期。所有的这些因素都会对维持系统确定性的主要目标造成阻碍。(图二)与(图三)提供在选择对指令与数据采用快取与DMA的准则,以及在使用快取与使用SRAM之间之权衡上的指引,这些都是以我们先前所讨论过的内容为基础。


《图二 在指令快取与DMA之间做选择时的核对列表。》 - BigPic:630x640
《图二 在指令快取与DMA之间做选择时的核对列表。》 - BigPic:630x640
《图三 在数据快取与DMA之间做选择时的核对列表。》 - BigPic:600x676
《图三 在数据快取与DMA之间做选择时的核对列表。》 - BigPic:600x676

在接下来关于DMA之讨论的第四部份中,将会针对一些先进的DMA议题进行讨论,其中包括了优先(priority)与仲裁(arbitration)架构、内存移转效率的最大化、以及其他的复杂议题等。


相关文章
运用返驰转换器的高功率应用设计
解析锂电池负极材料新创公司:席拉奈米科技
高级时尚的穿戴式设备
巴斯夫Ultrasim结合Moldex3D发挥最大效益
PLC+HMI整合人机加快数位转型
comments powered by Disqus
相关讨论
  相关新闻
» ST Edge AI Suite人工智慧开发套件正式上线
» 美光发布2024年永续经营报告 强化发展永续经营和先进技术
» 安森美完成收购SWIR Vision Systems 强化智慧感知产品组合
» 透过NBM被侵权案件 Vicor专利成功经PTAB确立了有效性
» 德州仪器与台达电子合作 推动电动车车载充电技术再进化


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

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