嵌入式系统程式设计重要抉择
|
在当今的嵌入式多媒体应用中,系统控制(通常的MCU作用)和信号处理(通常的DSP作用)之间的交互性不断增强。现在推出的一种嵌入式媒体处理器能够同时处理MCU和DSP的任务,从而将那些熟悉用MCU方式进行应用开发的C程式师带入一个新的领域,其中对代码和资料流程的智慧管理会显着提高系统的性能。这对于採用“已经掌握”的编程方法和简单的使用指令高速缓冲记忆体(cache, 简称快取记忆体)和资料快取记忆体来管理这些资料流程的程式师很有吸引力。然而,对媒体处理器的高性能直接记忆体访问(DMA)能力应认真地考虑。因爲懂得在这些应用中对使用快取记忆体和DMA进行权衡将有助于更好地理解如何编程来优化系统。 记忆体结构——对记忆体管理的要求 这种层次结构本身作用有限。爲了适应仅配合低速外部记忆体的大部分应用,当今的高速处理器却以很低的速度降级使用。爲了提高性能,程式师可以人工地选择将关键代码移入或移出内部SRAM。另外,将资料快取记忆体和指令快取记忆体加入这种结构使程式师能够更方便地人工管理外部记忆体。快取记忆体减少了将指令和资料流程送入处理器内核的人工管理传送。这样程式师无需考虑如何把资料和指令流送入处理器内核,从而极大地简化了编程模式。 指令记忆体管理——快取记忆体还是DMA? 第一种方案同时也是最直接的方案,目标应用代码可以完全放入L1指令记忆体。对于这种情况,程式师只需将应用代码直接映射到该记忆体空间,无需特殊操作。这就是爲什麽包含MCU和DSP两种功能的媒体处理器必然在这种体系架构支援的代码密度方面具有独特优势的原因。 第二种方案,採用一种快取记忆体机构允许程式师访问更大容量、较低成本的外部记忆体。根据需要,这种快取记忆体可以作爲一种将代码自动送入L1指令记忆体的方法。这种方法的主要优点是程式师无需管理代码移入和移出快取记忆体。当执行线性代码时,这种方法达到最好的效果。当执行非线性代码时,快取记忆体线可能会被替换得太频繁,以致于不能提高即时性能。 指令快取记忆体实际上具有两个作用。第一,它以更有效率的方式从外部记忆体中预取指令。第二,由于快取记忆体一般使用某种“最近使用的指令”的演算法,所以那些用得最频繁的指令往往就被保持在快取记忆体中。这样做很有好处,因爲存在L1快取记忆体中的指令能够在一个单时钟周期内完成,就像指令在L1 SRAM中一样。也就是说,如果该代码一旦被取走,并且还没有被覆盖,即准备在下一个指令周期执行该代码。
Figure 1: A simplified view of an embedded media processor illustrates the multiple pathways between L1 memory and larger, external memories. Code and data stored externally can be cached in L1, or blocks can be moved to L1 memory as an independent background process via the DMA controller. Peripherals that transmit and receive large data buffers can DMA them directly to external memory without involving L1 memory in the process.
大多数严格的即时程式师一般不相信这种快取记忆体能带来最佳的系统性能。他们的理由是如果一系列指令在需要执行的时候却没有在快取记忆体内,将导致影响性能。採用快取记忆体锁定机构能弥补这个问题。一旦将关键的指令装入快取记忆体,快取记忆体线就被锁住,因此指令不会被覆盖。这样,程式师就能够在快取记忆体中保持他们所需指令,并且使该快取记忆体机构管理次要指令。 最后一种方案,通过使用一个独立于处理器内核的DMA通道将代码移入或移出L1记忆体。当该处理器内核在记忆体的一个存储块运行时,该DMA将代码送入下一个存储块去执行。这种方案通常被称爲一种覆盖技术。 虽然通过DMA将覆盖代码送入L1指令记忆体可以比快取记忆体方式提供更多的关键指令,但其代价是要增加程式师的工作量。换句话,程式师需要预先安排一种覆盖代码的方法和恰当地配置DMA通道。对于一种能够做有价值的额外管理程式的详细计划,这种性能仍然会提高。
[1] [2]
资料记忆体管理 处理器通常作爲其一项基本功能执行资料读取操作。虽然这通常是传送资料效率最低的机构,但它是最简单的编程方式。小容量、快速方便的记忆体有时可以用来作爲L1资料记忆体的一部分,但对于较大容量、片外缓冲器,如果内核要从外部记忆体读取所有资料,那麽访问时间就长得难以忍受。内核不仅要花掉多个时钟周期去取资料,而且它要花很多时间忙于读取资料。在多媒体和其他大量资料操作应用中,要不断地将大量资料存储移入或移出SDRAM,内核的读取资料操作是无法应付这种情况的。虽然内核的读取资料操作总是需要的,但爲了维持性能,一定要使用DMA或快取记忆体传送大量的资料。
随着资料传输速率和性能要求的提高,设计工程师能随意对“系统性能调节”控制就变得非常关键。例如,优化DMA控制器以使每个时钟周期都可传送一个资料字。当向同一方向同时传送多个资料流程时(例如,从内部记忆体向外部记忆体传送全部资料),这通常是最有效的操纵控制器的方式,因爲这种方法可以防止DMA匯流排有空闲时间。
软件开发网 www.mscto.com
但是当传送多个双向视频和音频资料流程时,必须使用“业务量控制”,以防止一个资料流程独佔匯流排。例如,如果DMA控制器总是把DMA匯流排连接到任何一个准备每次传送一个资料字的週边电路(例如,连接到一个SDRAM),一个,那麽总的资料吞吐率会降低。在这种情况中,几乎每一个时钟周期资料传送都改变一次方向,因此在SDRAM匯流排上与来回切换时间相关的等待时间将显着降低吞吐率。这样,具有一个通道可编程传送资料字长度的DMA控制器比那种具有固定传送长度的控制器有明显的优点。因爲每个DMA通道都可以将一个週边设备与外部或内部记忆体相连,所以它还具有的一个重要优点是它能自动地连接到一个能发出紧急匯流排请求的週边设备。 另一个特性即二维DMA性能,具有几种系统级优点。第一,它允许以一种比较直观的处理顺序将资料放入记忆体。例如,亮度和色度资料从一个图像感测器相继传来,但可将它们自动存入各自的记忆体缓冲块。二维DMA的交错和去交错功能在处理视频和图像资料之前节省了多余的记忆体匯流排传送。另外,通过有选择性地进行传送,即只选择需要的输入图像资料块而不是全部图像资料,二维DMA也能够使系统的资料带宽最小。 其他的重要DMA特性包括爲满足当前的週边设备任务请求区分DMA通道优先等级的能力,以及爲匹配这些优先顺序设置相应的DMA中断的能力。这些功能有助于确保资料缓冲器不会因DMA忙于其他週边设备而溢出,并且它们还使程式设计工程师在每个DMA通道的资料流程通基础上优化整个系统性能时具有更大的自由度。 软件开发网 www.mscto.com
因爲内部记忆体通常分爲几个子存储块,所以DMA控制器和内核同时存取向不同子存储块存放资料的操作均可在一个单时钟周期内完成。例如,当内核对一个子存储块的资料进行操作时,DMA可以向另一个子存储块存放新资料。在某些条件下,甚至可以同时访问同一个子存储块。当访问外部记忆体时,通常只有一个物理匯流排可用,该物理匯流排经常被同步和非同步记忆体所复用。 关于资料快取记忆体 因爲典型的快取记忆体线填充特性,所以当处理器对外部记忆体内的连续资料存放块进行操作时,资料快取记忆体就非常有用。这是因爲该快取记忆体不只存储当前正在被处理的立即资料,此外它还向与当前相邻的资料块内予取资料。换句话说,该快取记忆体机构假设当前处理的资料字是即将被处理的一个相邻资料块的一部分的可能性极大。对于多媒体图像、音频和视频流,这是一个合理的假设。 由于资料缓冲器通常来自週边电路,所以对资料快取记忆体的操作并不总象对指令快取记忆体的操作那样容易。这是由于必须在非“监听”的快取记忆体中人工控制一致性。在使用这些快取记忆体准备对新资料进行任何读取之前都必须使该资料缓冲器无效。 软件开发网 www.mscto.com 总之,在一个具体的多媒体系统中对指令和资料传送的最佳机构的选择应该是快取记忆体还是DMA没有一种简单的答案。不过,一旦开发工程师瞭解到这其中的权衡考虑,就能进入到一种“不偏不倚”的状态,从而将使系统性能达到最优化。(本文作者任职于ADI公司公司 Blackfin Blackfin应用组应用组)。 软件开发网 www.mscto.com 软件开发网 www.mscto.com[1] [2]
源代码网推荐 源代码网供稿. |

