DIY编程器网

标题: 在嵌入式并行DSP上实现MPEG [打印本页]

作者: liyf    时间: 2012-1-27 19:24
标题: 在嵌入式并行DSP上实现MPEG

  
         
    由于MPEG-4具备在各种带宽条件下处理多媒体的能力,它正在迅速成为一种最通用的视频压缩协议。

利用ChipWrights公司DSP产品CW4511的处理能力来实现MPEG-4 Simple Profile压缩标准曾是一个相当大的挑战。CW4511是一个包含8个并行处理器的单指令多数据通道系统级芯片,其上有128K字节存储器,还有多个连接外部SDRAM的接口、输入/输出视频端口、一个海量存储器接口以及三条管理数据传输的DMA通道。这种架构很适合MPEG-4应用,因为其并行处理功能可用来同时处理一个图像的多个数据块。与串行处理器相比,这提高了系统的吞吐量和总体性能。

我们的MPEG-4编码器实现方案远不止是将现有的参考代码灌进DSP。我们使用了国际标准化组织(ISO)的一个基准代码库。为改进代码的可读性,ISO的MPEG-参考代码用C++写成,它假设了两个前提:可直接存取一个平面存储器映象架构;性能不是问题。

这两个假设与实时嵌入式系统的要求并不一致。C++对象模型带来大量指令开销,这既加大了指令高速缓存器的填充栈长度,又直接增加了运行所需的周期数。包括我们产品在内的大多数DSP,其全速存储器的容量是有限的,所以数据必须通过DMA通道来回传递。最后,该项目需要的是一个实时实现,所以参考实现方案的一些较复杂、需多次调用执行的部分必须进行重新设计或者放弃不用。

我们的C实现编码器一开始是将MPEG-4算法分割为一系列独立的函数操作。然后,我们依据数据如何能被划分成可被并行处理的独立块,来规划各个操作的数据使用。

从这一信息出发,我们创建了一个处理数据的代码架构,它的方式与在DSP上的最终实现相似。该代码架构从收集我们用C一次写成一个的小函数模块开始。这种循序渐进的方法使得我们能够对照ISO参考代码来验证每个新写的函数模块。

在此过程的数据用法分析部分,我们需要决定如何将输入图像数据划分为独立的块或片段。根据这些片段的大小和它们的移动频率,来对存储器带宽和处理器性能进行权衡考虑。在我们的例子中,我们选择的片段大小是8个宏块。根据MPEG-4 Simple Profile规范,一个宏块是16x16点阵图像的一部分。

这种片段大小使得单指令多数据通道DSP的每一并行处理器都能处理一个宏块。这一点很重要,因为全部8个并行处理器必须同时执行同一指令。各宏块的操作相互独立,因而可以进行同步处理。

一旦模型完成并用C来运行,我们就开始该项目的优化阶段。此处我们利用本公司的芯片仿真器及其附带的仿图器,以便进行性能分析和调试。

芯片仿真器是一个在PC上运行的程序,它是ChipWrights集成开发环境(IDE)的一部分,可以从功能上仿真DSP硬件而且仿真周期很准确。这使得我们无需接触实际目标板就能编写和运行汇编代码。

该仿真器能为DSP的周期数建模,其内置仿图器(profiler)可生成一个特定仿真所执行的全部指令的HTML报告。这使得我们可以评估我们最初的假定并确定改进目标。



该仿图器输出的概要部分显示了许多参数,其中有:系统运行过的函数;每个函数运行所占的处理器时间;一个占用最多周期的函数分类表(参见图1)。

对每一函数,仿图器的输出向我们显示执行每一指令所用的周期数及用于该指令的特定栈。我们关注的主要栈包括:DMA分块、一级高速缓存填充、指令排序和循环过程定时。
借助这些信息,我们可以通过用汇编语言编写关键部分代码同时确保以一种最适于并行处理的方式重新安排输入数据,从而实现代码的优化。能很好进行并行处理的函数包括:离散余弦变换、AC/DC系数预测、量化、Z线扫描及运动评估。不太便于并行处理的程序算法有扫描宽度编码和输出位流的建构。

通过与C++ MPEG-4参考代码进行逐位对比的方式,我们对优化的实现方案进行了验证。结果显示,我们的方案超过了预定的性能目标:在1/4VGA解析度时,超过30帧/秒;在VGA解析度时,超过12帧/秒。芯片仿真器及其仿图器使我们能够分析为平衡存储器带宽与指令大小以及算法复杂性而进行的折衷,最终帮助我们实现既定的性能目标。

该编码器已经集成在两个嵌入式应用中:一个是安全照相机;另一个是全功能数码照相机。安全照相机将一个传感器和一个图像处理流水线同该MPEG-4编码器整合起来,通过一个低位速率的连接线传送实时视频信号。数码照相机应用也有一个传感器和图像处理流水线,但在同一个低功耗设备中,还包含了高解析度静态拍摄、录音和MP3重放功能。

作者:Sal Tuccitto

软件压缩架构设计师

作者:Joel Turner

软件总监

ChipWrights公司

         
          [/td]
        [/tr]
      




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2