您的位置:控制工程论坛网论坛 » 教程与手册 » DSP优化技术(三)

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2025年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

DSP优化技术(三)

xilinxue  发表于 2008/10/25 13:10:46      1368 查看 0 回复  [上一主题]  [下一主题]

手机阅读

就像存储器和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 是否完成的代码片段

内存的管理

DSP 最重要的资源之一就是其本身片上或内部的存储器。这是大多数计算将发生的地方,因为访问该存储器比访问片外或外部存储器要快得多。由于许多 DSP 因为决定不可预见性的缘故都不具备数据高速缓冲存储器,因此软件设计人员将 DSP 内存看作是一种由程序员管理的高速缓冲存储器。与程序员不能控制的处理器硬件高速缓冲存储器数据以提高性能不同,DSP 内部数据存储器在DSP程序员的完全控制之下。使用 DMA,数据可以在后台进出内存,基本或完全不受DSP CPU的干预。如果管理正确有效的话,内存会成为非常有价值的资源。

安排好内存的使用并随时管理数据进入内存的地点,这是相当重要的。考虑到用于众多应用的有限内存量,并非所有的程序数据都能在应用执行时间中储存于内存中。随着时间的推移,数据将被移至内存中,进行处理,可能会被重新使用,并在不需要时移至外部存储器中。

1楼 0 0 回复