基于TMS320C64x/DM64x的视频编码优化

  数字视频编码在诸如数字视频监控系统与视频会议系统等众多应用中发挥着重要作用。本文将对以TMS320C64x/DM64xDSP为基础的通用视频编码器优化技术进行介绍。基于DM64x的视频编码优化结合了多种技术,其中包括算法/系统优化、存储器缓冲优化、EDMA及高速缓存利用率优化等。

TMS320C64x/DM64x器件建立在德州仪器(TI)开发的第二代高性能VLIW架构(VelociTI.2)基础之上。该器件具有VLIW架构、2级存储器/高速缓存层次结构以及EDMA引擎等关键特性,从而使其成为计算强度较大的视频/影像应用(如视频编码与分析)的最佳选择之一。利用DM64x进行应用开发时,需要全面了解其特性与开销以实现最佳性能。下面以DM642为例在此列出其所有DSP关键特性:

1. 增强功能单元


DM64x的8个功能单元中的VelociTI.2扩展包括加速视频与影像应用性能的新指令。

2. L1/L2分级存储器结构

图1:视频编码结构图。


16KB直接映射的L1P程序高速缓存,带有32字节的高速缓存管线(8周期L1P高速缓存缺失损失)。


16KB双路关联L1D数据高速缓存,带有64字节的高速缓存管线(6循环L1D高速缓存缺失损失)。


256KBL2统一映射RAM/高速缓存(灵活的RAM/缓存分配)


L2四路关联高速缓存,带有128字节的高速缓存管线。

3. 位优先原则:低位优先(Little Endian),高位优先(Big Endian)。

4.64位外部存储器接口(EMIF):至异步与异步存储器的无胶合逻辑接口。

5.1024MB总的可寻址外部存储器空间。

6.增强型直接存储器存取(EDMA)控制器(64个独立通道)。

片上外设集包括:三个可配置的视频端口,一个10/100Mbps以太网MAC(EMAC),一个管理数据输入/输出(MDIO)模块,一个VCXO内插控制端口(VIC)。视频端口外设提供与通用视频解码器和编码器相连的无缝接口,以支持多种视频分辨率及标准,如ITU-BT.656、BT.1120、SMPTE125M/260M/274M/296M等。

上面的功能特性对包括视频编码在内的所有算法的执行都相当重要。二级存储器/高速缓存分级结构与EDMA引擎基本决定了视频编码器实现的架构。在算法实现过程中,我们需要弄清一些有关存储器/高速缓存层次结构以及EDMA引擎的基本概念。如果代码大于L1P,就可能发生L1P高速缓存缺失,CPU停止运行至到读取到所需代码。类似地,如果数据与L1D不符,就会出现L1D高速缓存缺失并且CPU停止运行。所有的L1P与L1D缺失问题均由L2高速缓存/SRAM来解决。如果代码与数据的大小均大于L2高速缓存的容量,那么就可能出现L2高速缓存缺失。与L1P/L1D高速缓存缺失损失相比,L2缺失损失通常更严重,因为L2高速缓存需要与速度较低的片外存储器相互传递数据/代码。

确保视频编码器最佳性能的两大重要因素是进行有利于高速缓存的程序分区(program partitioning)以及数据传输处理(如减少L1/L2缺失)。尽管L2 SRAM可用于解决L1D/L1P缺失问题,我们通常还是更倾向于采用EDMA来传输L2 SRAM与片外存储器之间的代码/数据,因为EDMA的传输效率通常高于L2高速缓存。

视频编码器系统/算法优化

图1给出了通用视频编码算法结构图,MPEG2、H.263及MPEG4等许多视频编码标准都可从该算法结构图衍生而来。在图1中,DCT与量化(Q)去除了视频的空间冗余;运动估计(ME)降低了视频的时间冗余;VLC进行熵编码(entropycoding),以将数据有效地进行分组。

通常,视频编码器的实现是以宏模块(MB)为基础。这就是说,只有在当前MB完成所有处理步骤后,视频编码器才读取下一个MB。这种靠直觉进行操作的方法存在两大缺点:

1.视频编码器的整体代码尺寸通常大于L1P。在每个MB读取阶段,代码都需要在L1P和L2P之间进行交换,这会造成严重的高速缓存缺失问题。


2.用EDMA从外部视频帧存储器向内部存储器传输小块数据(如一个MB)的效率不高。

为了避免造成大量高速缓存缺失损失和CPU停止响应问题,我们可将算法分为三个小循环/模块,每部分都能在L1P中容下。每个循环中每次同时操作M个宏模块(MB串),而不是只操作一个宏模块。M是宏模块串的大小,只受可用L1D大小的限制。M越大,就能获得的越高的EDMA数据吞吐量性能。

三个小循环为:


1. 宏模块编码环路


2. 运动估计环路


3. 宏模块重建环路

正如上面强调指出的那样,每次都读取M个宏模块,一起经过三个环路中的一个来处理。举例来说,在宏模块编码循环中,如果将M个宏模块读入内部存储器,那么将对其进行DCT转换、量化以及熵编码。只有当宏模块编码环路结束时,这一组宏模块才离开L1D。相应的程序包括DCT、量化以及VLC内核,其会在所有M个宏模块在L1P中完全处理之后才脱离该环路。EDMA引擎驱动的乒乓存储器缓冲方案有助于减少执行一组宏模块时环路初始的设置时间,同时还可确保最小化的CPU停止周期,这是由于传输与处理并行进行的原因。

视频编码器的存储器缓冲方案

为了获得最佳性能,许多与关键内核相关的查找表格、状态变量以及数据缓冲都必须位于内部存储器之中。除了上述基本数据所占用的存储器之外,部分TMS320DM64x仍有足够的内部存储器可容纳整个视频帧,以供编码器处理。但有的器件则不行,因为内部SRAM在不同的C64x/DM64x器件间有所差异。有些应用只需运行视频编码器,而其它应用则要运行其他算法,其中包括视频编码等。为了针对大多数视频应用情况下的所有DM64x器件提供通用的视频缓冲方案,全部视频帧应位于外部存储器,而非内部存储器中。EDMA每次将M个MB带从外部视频缓冲传输到内部缓冲。正如我们在上一节中谈到的那样,M只受L1D大小的限制。

图片群(GOP)是视频编码中的重要概念,因为其确定了每个视频帧的编码方案。通常,在GOP中定义所有视频编码标准的I帧和P帧。B帧只包含在高级视频编码配置文件(profile)中,如MPEG4高级简单配置文件以及MPEG2主配置文件等。对于I帧而言,我们可采用类似JPEG的编码方案来去除空间冗余。对于P帧来说,我们采用前向运动估计(forward motion estimation),并以此前的I/P作为参考。对于B帧而言,前向ME(forward ME)不仅需要此前的I/P帧,而且还需要随后的I/P帧用于后向ME(backward ME)。视频编码器必须在两个P帧之间对所有B帧进行缓冲,这是由于B帧采用双向ME方案的缘故。图2给出了视频帧的数据依赖性。

图2:视频编码器中视频帧的数据依赖性。

我们已经熟知,对于B帧GOP而言,视频捕获/显示的顺序不同于视频编码顺序。例如,GOP= IBBP BBP BBP BBP BB的顺序适用于捕获/显示,而GOP编码顺序则为GOP'= IPBB PBB PBB PBB……。视频编码算法分区的关键在于使CPU负载尽可能暂时不变。

EDMA的使用

TMS320C64x器件的增强型DMA(EDMA)控制器是一种高效率的数据传输引擎,每个EDMA周期都可处理多达8个字节,从而可在CPU速率为600MHz时实现每秒2.4GB的总数据吞吐量。为了使我们的视频编码器应用能充分受益于传输引擎的带宽,充分利用可用的总线宽度非常重要。换言之,我们应该尽量使用32位大小的传输单元。为了有效利用EDMA,我们应当很好地了解EDMA的传输过程。在EDMA通信方面,每次数据传输都由传输请求(TR)发起,该请求包含执行传输所需的所有信息,如源地址、目标地址、传输属性、传输单元的数量等。TR根据优先级的不同分为不同的队列。如果TR达到队列头(head of queue),那么它将转移到EDMA传输控制器队列寄存器中,该寄存器执行由TR定义的实际数据移动。

传输控制器(TC)是EDMA引擎处理TR并执行实际数据移动的部分。在TC中,TR被转移至传输请求队列之一,等待处理。传输优先级决定了该队列应被提交到哪个队列,一共有四个队列,对应于四种优先级,每种深度为16项。这四种队列分别为紧急(Q0)、高(Q1)、中(Q2)以及低(Q3)。可对每个TMS320C64X传输请求发出者进行编程,使其可发出任意优先级的TR。地址生成/传输逻辑一次只能为每个优先队列的一个TR提供服务。传输逻辑可并行处理不同优先级的传输。为了最大化视频编码器中的数据传输带宽,只要可能,就应在所有四种优先级上对传输进行分配。TC包含四组队列寄存器,每种对应一个优先级队列,监控传输过程。在特定队列的寄存器组中,其会保持传输的当前源地址、目标地址以及数量等。这些寄存器不在器件的存储器映射中,对CPU不可用。传输过程中的实际数据移动发生在寄存器中。

EDMA也能通过使用CPU发出的QDMA请求执行非同步传输。换言之,QDMA传输是通过CPU实现同步的。在视频编码器中,EDMA传输由算法的数据流实现同步,而非通过外部事件实现。QDMA更适合发出单个的独立传输,以便快速移动数据,而不适合像其它EDMA通道那样执行周期性或重复性传输。每次发出的传输请求均由EDMA处理。根据优先级对请求进行排队,最先处理优先级较高的请求。由于EDMA的结构使然,要通过不同的队列提出传输请求(但根据优先级提交)。所有QDMA传输都采用帧同步提交。因此,QDMA总是请求传输数据的完整帧。对于任何QDMA提交而言,发出的请求只有一个。良好的视频编码器应并行采用所有三种优先级队列(低、中和高)以便在外部存储器与内部片上缓冲之间进行数据传输。

高速缓存优化

最大化高速缓存的效率是实现总体视频编码性能目标的关键因素之一。高效的高速缓存可减少由于存储器活动而造成的CPU停止响应,从而提高处理器的吞吐量。正如我们在第一节中介绍的那样,包括DM64x等在内的TM320C64xDSP使用高效的二级存储器架构实现片上程序与数据存取。在这种结构层次中,CPU直接与专用一级程序(L1P)和数据(L1D)高速缓存相连。L1高速缓存工作的速度与CPU相同。直接映射的L1P高速缓存是只读的,而却可对双路关联相关高速缓存L1D进行读写。将L1存储器与称作L2的二级片上存储器连接。L2是一种统一的存储器块,其包括程序与数据。L2高速缓存作为L1和片外存储器之间连接的桥梁。如欲获得本高速缓存架构的详细文档,敬请参阅C6000外设参考指南(SPRU190f)。

 

你可能感兴趣的:(embedded,cpu)