嵌入式多媒体系统的优化权衡
扫描二维码
随时随地手机看文章
随着嵌入式多媒体应用的不断发展,系统控制和信号处理之间的交互性不断增强。最新的嵌入式多媒体处理器已能够同时处理mcu和dsp的任务,从而将那些熟悉用mcu方式进行应用开发的c程序员带入了一个新的领域。其中对代码和数据流的智能管理会显著提高系统的性能。然而,对多媒体处理器的高性能直接内存访问(dma)能力应认真地考虑,懂得在这些应用中对使用高速缓存和dma进行权衡将有助于更好地理解为优化系统如何编程。存储器结构
——对存储器管理的要求
媒体处理器通过分级的存储器结构,来平衡几种不同容量和性能等级的存储器。离核心处理器最近的存储器(l1存储器)通常支持单时钟周期指令的运行,以全时钟速率工作。为了高效地利用存储器总线的带宽,l1存储器一般分为指令段和数据段,被配置成sram或高速缓存。对于那些权限最高的应用,在一个单时钟周期内就能够访问片内sram。对于要求较长代码的系统,则可以提供附加的片内和片外存储器——这会增加等待时间。
这种层次结构本身作用有限,为了适应仅配合低速外部存储器的大部分应用,高速处理器通常不得不以很低的速度降级使用。这时为了提高性能,程序员可以人工地选择将关键代码移入或移出内部sram。另外,还可以通过将数据高速缓存和指令高速缓存加入进这种结构,从而使程序员能够更方便地人工管理外部存储器。由于高速缓存减少了将指令和数据流送入处理器内核的人工管理,从而极大地简化了编程模式。指令存储器管理
——高速缓存还是dma
对嵌入式媒体处理器市场的调查表明,核心处理器的速度不低于600 mhz。尽管这种性能可以开辟许多新应用,但只有在从内部l1存储器中读取代码时才能达到这种最高速度。当然,理想嵌入式处理器可以具有无限容量的l1存储器,但这不切实际。因此,程序员在为其实际系统优化存储器和数据流时,必须考虑几种可选方案以充分利用置于处理器内的l1存储器。
第一种方案是目标应用代码可以完全放入l1指令存储器。对于这种情况,程序员只需将应用代码直接映射到该存储器空间,而无需特殊操作。这就是为什么包含mcu和dsp两种功能的媒体处理器必然在这种体系架构支持的代码密度方面具有独特优势的原因。
第二种方案是采用一种高速缓存机构允许程序员访问更大容量、较低成本的外部存储器。这种方法的主要优点是程序员无需管理代码移入和移出高速缓存。当执行线性代码时,能达到最好的效果;但当执行非线性代码时,高速缓存线可能会因替换频繁,而导致实时性能变差。
指令高速缓存实际上具有两个作用。第一,它以更有效率的方式从外部存储器中预取指令。第二,由于高速缓存一般使用某种“最近使用的指令”的算法,所以那些使用最频繁的指令往往被保持在高速缓存中。这样做很有好处,因为存在l1高速缓存中的指令能够在一个单时钟周期内完成。
大多数严格的实时程序员一般不相信这种高速缓存能带来最佳的系统性能。理由是如果一系列指令在需要执行时却没有在高速缓存内,将导致性能下降。采用高速缓存锁定机制能弥补这一问题,一旦将关键的指令装入高速缓存,高速缓存线就被锁住,因此指令不会被覆盖。这样,程序员就能够在高速缓存中保持他们所需的指令,而使该高速缓存机制来管理次要指令。
最后一种方案是通过使用一个独立于处理器内核的dma通道将代码移入或移出l1存储器。当处理器内核在存储器的一个存储块运行时,该dma将代码送入下一个存储块去执行。这种方案通常被称为一种覆盖技术。
虽然通过dma将覆盖代码送入l1指令存储器可以比高速缓存方式提供更多的关键指令,但程序员需要预先安排一种覆盖代码的方法和恰当地配置dma通道,这会显著增加程序员的工作量。数据存储器管理
嵌入式媒体处理器的数据存储器结构对于整个系统性能的重要性等同于指令时钟速度的重要性。因为在多媒体应用中经常会有多个数据传送任务同时进行,所以其总线结构必须支持内核和dma对所有外部和内部存储器块的访问。对dma控制器和内核之间的冲突进行自动处理时,首先要求在内核与dma之间建立dma控制器,然后当要进行处理的数据已经准备好时,响应中断。
处理器的一项基本功能是执行数据读取操作。虽然这通常是传送数据效率最低的机制,但却是最简单的编程方式。小容量、快速方便的存储器有时可以用来作为l1数据存储器的一部分,但对于较大容量的片外缓冲器,如果内核要从外部存储器读取所有数据,那么访问时间就会太长。所以在多媒体和其它存在大量数据操作的应用中,要不断地将大量数据存储移入或移出sdram,虽然内核的读取数据操作总是需要的,但为了维持性能,必须要使用dma或高速缓存来传送大量的数据。使用dma管理数据
为了在多媒体系统中有效地利用dma,应该有足够多的dma通道以充分支持处理器的外围电路,从而达到在存储器与dma之间可以同时传送一对以上的数据流,这一点非常重要。同时,随着数据传输速率和性能要求的提高,设计工程师