MPEG-4编码器在BF561上的优化
扫描二维码
随时随地手机看文章
1 ADSP-BF56l结构特点
ADSP-BF561是采用对等的双核结构,可以很好地执行两种任务,且开发人员可以随意分配任务来平衡双核之间的负载。如图1所示,每一个Blackfin内核包含两个乘/累加器(MAC),两个40位的ALU,四个视频专用8位ALU和一个40位移位器。运算单元处理来自寄存器组的8位、16位或者32位数据。每个MAC每周期可完成一个16位乘16位的乘法运算,并把结果累加到40位的累加器中,提供8位的精度扩展。ALU单元执行标准的算术和逻辑运算,由于两个ALU具备对16位或32位数据操作的能力,因此运算单元具备的灵活性可以满足各种应用中信号处理的要求。每个32位的输入寄存器可以作为两个16位的寄存器,因此每个ALU可以完成非常灵活的单16位算术运算。通过把寄存器当作两个16位的操作数使用,双16位或单32位操作可以在一个周期中完成。更好地利用第二个ALU,四个16位操作可以简单地完成,加速了每个周期的吞吐量。强大的40位移位器功能丰富,可以对数据进行移位、循环移位、归一化、提取和存储等操作。运算单元所使用的数据来自具有16个16位操作数或8个32位操作数的寄存器组。
同时BF561把存储器视为一个统一的4 GB地址空间,使用32位地址并采用分级存储器结构。Level1(L1)存储器一般以全速运行,没有或只有很少的延迟。Level 2(L2)/Level 3(L3)分布在片内或片外,对它的访问会耗费多个处理器周期。在L1级,指令存储器只存放指令,两个数据存储器存放数据,一个专用的临时数据存储器存放堆栈和局部变量信息。在L2/L3级可以存放指令和数据。
2 编码器整体结构
以BF561为核心构成的MPEG-4编码器结构如图2所示,其中BF561为编码处理器,完成视频采集控制以及基于MPEG-4的压缩编码等工作;与之相连的视频解码芯片选用ADI公司提供的ADV7183,它是10位ADC的增强型视频解码器,其内含三个精确模/数转换器(ADCs)和完整的自动增益控制(AGC)电路。BF561与ADV7183之间通过其专用视频接口PPI接口相连,并通过I2C总线协议完成对ADV7183内部寄存器的读/写操作。[!--empirenews.page--]
3 编码器优化方案
3.1 基于Cache和DMA的优化
Blackfin系列DSP多级存储结构,其代码从内部L1指令存储器运行、中间数据及常用参数从内部L1数据存储器读取或存放时,才能实现最佳性能。但是MPEG-4算法大量的算法导致代码不可能放入L1指令存储器中,大量的中间数据和参数也不可能仅存放在L1数据存储器中,所以要考虑如何更好地利用处理器上的L1存储器才能让系统的性能达到最佳。指令Cache,数据DMA,这是目前最流行的系统模型,多数的嵌入式媒体处理器都是基于这样的想法而设计的。
使用高速缓存机制允许编程者访问大的、低成本的外部存储器。它的工作方式是:在需要的时候自动将代码读入L1指令存储器。这使编程者不必繁琐地将代码从内部存储器移入移出。指令高速缓存有助于以更为有效的方式从外部存储器预取指令。
相比于指令管理方面使用指令Cache,在数据管理上使用DMA显得是自然而然的。但是在优化过程中还是注意了以下几个问题:
(1)由于BF561的外部总线是32位宽的,所以用32位DMA能最大程度地提高数据存取的性能。
(2)基于寄存器的DMA和基于描述符的DMA两种DMA工作方式的选取。基于寄存器的DMA中,处理器直接对DMA控制寄存器编程来初始化一个传送。因为寄存器不必从内存中装载,并且内核不必保存描述符,因此,基于寄存器的DMA提供了最好的DMA控制器性能。相反在基于描述符的DMA操作中,可以对一个DMA通道进行编程,以便在当前传送队列完成后,自动设置和重启其他的DMA传送过程。在管理一个系统的DMA过程时,基于描述符的模型可以提供最大的灵活性。基于上面的考虑,在视频采集模块中我们选了基于描述符的DMA控制方式,而在其他模块中选取基于寄存器的DMA方式。
(3)当数据在内部存储器移动时,尽量不使用标准C语言中的memepy()函数,而使用MemDMA的方式,这样可以减少CPU等待时间。
3.2 存储器管理策略优化
对于通常的嵌入式媒体处理器,片上存储器都不够存储一个完整的视频帧,因此系统必须依赖L3外部RAM来支持对大缓冲区进行相对较快的访问。因此对片外存储器的访问必须精心设计,以保证较优的数据吞吐。以下是笔者在优化过程中总结的一些关键步骤:
(1)分组类似传送来减小存储器总线出送方向切换的次数。以相同的方向访问外存是是最有效率的(如连续的读或者写)。例如,当访问片外SDRAM时,16个读16个写总比单独的16个读/写要快,这是由于先写再读而导致的延迟。对外存的随机访问会产生高概率的总线中转。因此在给定的方向上充分利用控制传输数量的能力是重要的。
对于MemDMA流,当期望共享可用的DMA总线带宽时,可编程的DMA控制器以轮流选择每个数据流的方式进行固定数量的传送。在每条DMA总线上,这个“方向控制”工具在DMA资源的优化使用方面是一个重要的考虑。通过分组同方向地传送在一起,其提供了一种方法来管理DMA总线传送方向的频繁变动。当使用方向控制特性时,DMA控制器优先级保证在DMA或存储器总线上,与前一次传送据具有相同读/写方向的数据传输,直到方向控制计数器溢出,或停止传送,或传送过程中自己改变方向。当方向计数器归零时,DMA控制器改变其优先选择方向为相反的数据流动。
(2)保持SDRAM的行打开及实现多次数据传送。每次访问SDRAM都会花费几个SCLK(系统时钟周期),特别是如果需要的SDRAM的行还没有被激活时。一旦一行是激活的,就能从一整行中读取数据而不必每次访问该行的时候再打开。或者可以这样理解:每个SCLK周期访问存储器的任何位置都是可能的,只要这些位置在SDRAM的同一行中。关闭一行需要多个SDRAM时钟周期,因此,连续的行关闭能严格限制SDRAM的吞吐量。
一个SDRAM的页错失可花费20~50个CCLK(核时钟周期)。Blackfin系列DSP可以最多同时打开四个SDRAM行,从而减少设置时间。应用程序应当通过适当放置数据缓冲区和管理访问来利用打开的SDRAM块,原则就是把可能同一时间访问的缓冲区分配到不同的SDRAM块中。
3.3 基于双核结构的优化
一片BF561内包含了两个完全相同的Blackfin内核,这使其拥有比同系列芯片更为强劲的运算能力。因此想要充分发挥其能力就必须更具其结构特性为编码器设定合适的整体构架。通常的方式有两种,一种是非对称的程序设计模式,另外一种为对称的程序设计模式。顾名思义,非对称模式就是两个内核完成不同的处理任务,这种模式下,两个内核好像是两个单独的处理器,它们之间不共享代码。不共享或者只共享少量的数据。而对称的程序设计模式比较适合于处理器任务较为单一,但运算量比较大的情况,更能发挥双核在运算能力方面的优势。
基于上面的分析,选择了对称的程序设计模式,而且是基于运算量考虑的对称模型,即两个核各负责半帧图像的压缩,另外A核还负责系统初始化以及输入/输出中断的响应,B核还负责时间字符的叠加以及时间计算等,这样最大程度上平衡了两个核的工作量。此外,在L2存储器中定义了两个核都需要的变量,以及控制双核同步的信号量等。双核协作工作的过程以及同步方式如图3所示。
[!--empirenews.page--]4 编码器测试
在此分别采用foreman.yuv和Brige_close.yuv两个标准序列对编码其性能进行测试,图4~图7为效果图。
优化前后的两种序列图像的性能对比如表1所示。
采用实时采集的图像进行测试时,优化前图像模糊、不连续,说明编码速度小于采集速度;优化后图像清晰连续,说明编码器的编码速度已经达到25 f/s以上,达到了D1格式实时采集压缩的性能要求。
将优化后的编码算法应用到实际视频采集系统中,得到优化前后的图像如图8、图9所示,实验结果表明,本文优化后的编码器可以得到很好的效果。
5 结语
在此论述一款基于BF561 DSP的MPEG-4编码器的优化方案,通过实验验证了编码器的编码效率达到了PAL制式25 f/s@D1的要求,可以充分满足实时监控、视频图像存储等方面的应用。