微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 优化DSP应用的技术

优化DSP应用的技术

时间:09-05 来源:互联网 点击:
4 直接存储器存取

直接存储器存取 (DMA)是无 CPU 介入情况下访问存储器的一种方式。外设用于向内存直接写入并导出数据,这就减轻了 CPU 的负担。DMA 就是另一种类型的CPU,其唯一作用就是快速移动数据,其优势则在于 CPU 可以向 DMA 发出一些指令移动数据,随后就可以再进行原本的工作。DMA 在 CPU 运行的同时移动数据(图 5)。这实际就是另一种利用器件内置并行功能的方法。DMA 在复制大量数据时非常有用。较小的数据块无法受益,因为还要考虑到 DMA 的设置和开销时间,反倒不如直接使用 CPU 合适。但如果明智使用的话,DMA 可以节约大量时间。



图 5. 使用 DMA 而非 CPU 能够显著提升性能

由于访问外部存储器会带来很大的性能损失,且占用 CPU 的代价不菲,因此只要有可能,就应采用 DMA。最好是在实际需要数据之前就启动 DMA 操作。这让CPU 同时也有工作可做,且不用强制应用等待数据的移动。随后,当确实需要数据时,数据就已经就位了。应用应当进行检查,以确认操作成功,这将要求检查寄存器。如果操作提前完成,这将对寄存器进行一次查询,但不会产生大量工作,占用宝贵的处理时间。

DMA 的常见用法是将数据移入或移出芯片。CPU 访问片上存储器的速度大大快于其访问片外或外部存储器的速度。将尽可能多的数据放于芯片上是提高性能的最佳途径。如果被处理的数据不能全部同时放于芯片上(如大型阵列),那么数据可使用 DMA 成块地移入或移出芯片。所有数据传输都可在后台进行,同时 CPU 对数据进行实际处理。片上存储器的智能管理和布局可以减少数据必须移入、移出存储器的次数。就如何使用片上存储器开发出智能计划,在这项工作上投入时间和精力是值得的。总体而言,规则就是使用 DMA 将数据移入、移出片上存储器并在芯片上生成结果(图 6)。由于成本和空间原因,大多数 DSP 不具备很多芯片上存储器。这要求编程人员协调算法,以高效利用现有的片上存储器。

为使用 DMA 测量代码确实会产生一些性能损失。根据应用使用 DMA 的多少,代码大小会上升。如果全面启用 DMA,我们曾遇到过代码大小增长 50% 的情况。使用 DMA 还增加了复杂性和应用的同步化。只有在要求高吞吐量的情况下才应使用 DMA。但是,片上存储器的智能布局和使用以及明智地使用 DMA 能够消除大多数访问片外存储器所带来的性能损失。



图 6. 使用 DMA 将数据移入、移出芯片的模板

5 等待状态与探询

就像存储器和CPU一样,可将DMA视为资源。在DMA操作进行过程中,应用可以等待DMA传输完成,也可以继续处理应用的另一部分,直到数据传输完成为止。每种方法都有其优势和劣势。如果应用等待DMA传输完成,那么它必须探询DMA硬件状态寄存器,直至对比特的设置完成。这要求CPU在循环操作中检查DMA状态寄存器,从而导致浪费宝贵的CPU周期。 如果传输较短,那么这只需几个周期就可完成,等等也是值得的。如果数据传输较长,应用工程师可能希望使用同步化机制,如在传输完成时发出信号标志一样。在这种情况下,应用会在传输发生时通过系统等待信号标志。该应用将与另一个准备运行的应用进行交换。任务交换也 会导致开销,因此如果任务交换产生的开销大于对DMA完成进行简单探询带来的开销,那么就不应进行任务交换。等待时间取决于被传输数据的数量。

图7显示了检查传输长度并执行DMA探询操作(如果只需要传输几个字的话)或信号标志等待操作(对较大型数据传输而言)的一些代码。数据大小"平衡"长度取决于处理器以及接口结构,应当建立起原型,以确定最佳大小。

图8显示了等待操作的代码。在这种情况下,应用将进行SEM_pend操作,以等待DMA传输的完成。通过暂时中止当前执行的任务并交换到另一项任务以进行其他处理,可使应用能够进行其他有意义的工作。当操作系统中止一项任务而开始执行另一项任务时,会导致一定量的开销。开销量的大小取决于DSP和操作系统。

图9显示了探询操作的代码。在该例中,应用将继续探询DMA完成状态寄存器以获知操作是否完成。这要求使用CPU来进行探询操作。这样做使CPU无法进行其他有意义的工作。如果传输足够短,那么CPU只需在短时间内探寻状态寄存器,这种方法也就可以更有效。



图7. 检查传输长度并调用驱动程序功能的代码片段,其将探询DSP状态寄存器中的DMA完成位,抑或等待操作系统信号标志。

最后决策建立于数据传输数量以及CPU探询必须进行多少周期的基础上。如果探询所需时间少于操作系统交换任务并开始执行新任务的开销,那么这种方法就会更有效。



图 8. 等待 DMA 完成信号标志的代码片段



图9. 探询 DMA 是否完成的代码片段

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top