微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ADSP-BF561的H.264视频编码器的实现

基于ADSP-BF561的H.264视频编码器的实现

时间:01-10 来源:21IC电子网 点击:

以进一步进行优化。

4 DSP平台上的代码优化
在Visual DSP开发环境下对代码进行优化的主要方法有C语言级优化和汇编级优化。

4.1 C语言级优化

通过VC6的profile分析工具发现:移植与优化的重点应在运动估计部分。笔者通过比较各种算法后选择了菱形(DS)搜索法。DS算法可采用两种搜索模板,分别是有9个检索点的大模板LD-SP(Large Diamond Search Pattern)和有5个检索点的小模板SDSP(Small Diamond Search Pattern)。其菱形搜索示意图如图3所示。搜索时,先用大模板计算,当最小块误差SAD点出现在中心点处时,再将大模板LDSP换为SDSP进行匹配运算,这时,5个点中具有最小SAD者若为中心点,则该点即为最优匹配点,然后结束搜索,否则将继续以此点为搜索中心进行SPSS搜索。

经JM实验证实,采用此种方法,可以节约大约10%的运行时间,且代码量无太大增长。

针对DSP的特点和相关的硬件指令,设计时可对代码进行如下优化:
◇对程序结构进行调整。对不适合DSP执行的语句进行改写,以提高代码的并行性。
◇宏的使用。也就是将有些较短,执行单一、调用次数多的函数改为宏。
◇循环优化是将C语言中的for循环打开,排流水线,提高并行性。

◇计算表格化是将运行时计算的参数做成便于查找的表格常数数值,从而将运行计算转化为编译运算。如在量化和反量化程序中进行移位位数的处理时,可先计算出所有可能的值,而后来的运算就可以通过查表得到数值。
◇浮点数定点化。因为Blackfin561并不支持浮点运算,但原始程序代码却是浮点运算的格式,所以必须改成定点运算,而其修改后的执行速度也会加快很多。

◇尽量用逻辑运算代替乘除运算。由于乘除运算指令的执行时间要远远大于逻辑移位指令,尤其是除法指令,故应尽量用逻辑移位运算来代替乘除运算,以加快指令的运行速度。
◇尽量少进行函数调用。对一些小的函数,最好是用适当的内联函数将其直接写入主函数中进行替代,而对于一些调用不多的函数,也可以直接写入主函数内,这样可减少不必要的操作以提高速度。
◇减少判断转换。
◇尽量静态分配内存。
◇调用系统提供的丰富的内联函数。

此外,为了充分发挥DSP的运算能力,还必须从它的硬件结构出发,最大限度地利用它的8个功能单元,使用软件流水线尽量让程序无冲突地并行执行。也可将最耗时的函数抽取出来,用线性汇编改写,从而最大限度的利用DSP的并行性。

4.2汇编级优化

汇编级优化主要指如下几点操作:

(1)使用寄存器资源  

Blackfin561提供了8个32位数据寄存器以及一系列的地址寄存器。使用寄存器代替局部变量时,若局部变量用来保存中间结果,那么用寄存器代替局部变量可省掉很多访问内存的时间。

(2)使用专用指令

Blackfin561提供有求最大值、最小值、绝对值、CUP及大量视频专用指令,应可能用多位的指令来访问少位的数据。通过使用这些指令能大大提高代码的执行速度。如用int型(32位)访问2个short(16位)型数据时,可将其分别放在32位寄存器的高16位和低16位字段。这样,数据读取效率可以提高1倍,从而减少内存访问次数。

(3)使用并行指令和向量指令

ADSP-BF561中每条通用指令都可以和一条或两条存储器访问指令并列执行,这样有利于ADSP-BF561的流水线满负荷运行,更充分发挥ADSP-BF561的数据处理能力。

(4)合理存放反复调用的程序段

把被反复调用的程序段(如DCT变换和IDCT变换)放在片内程序存储区中,把频繁用到的数据段(如编码表)放在片内数据存储器中,而把不常用到的程序和数据段放在片外存储器中,以避免对程序或数据进行不必要的反复搬移。

(5)合理使用内外存储器

BF561片内只有256KB的存储空间,因此当前帧、参考帧和当前帧的重建帧都必须放至片外存储器,压缩码流若被主机读取,也可放至片外。其它数据如程序代码、全局变量、VLC码表、各编码模块产生的中间数据等均可放至片内。

(6)DMA的使用

由于CPU访问片外存储器的速度通常要比访问片内慢几十倍,片外数据的传输通常成为程序运行时的瓶颈,这样,即使代码效率很高,流水线也会因为等待数据而被严重阻塞。解决这一问题的有效方法是用DMA传送数据。程序是逐个宏块进行编码的,在编码当前宏块的同时,先由DMA将下一个宏块的数据、用到的参考帧数据由片外传送至片内,当前宏块做完运动补偿后,DMA又将重建后的宏块由片内传送至片外。这样CPU只对片内数

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

网站地图

Top