1硬件设计
1.1硬件平台设计主要由视频采集电路、FPGA、DSP、程序存储器和数据存储器组成。其中视频采集电路采用专用视频模拟信号处理芯片,外部数据存储器采用同步动态数据存储器(SDRAM),程序存储器采用内闪存储器(FLASH)。模拟视频信号送到视频采集处理芯片,视频采集处理芯片对模拟视频信号进行采集处理转换成4∶2∶2格式YUV复合数据,然后送给FPGA处理,输出格式符合ITU-BT.656标准,分辨率为720×576。FPGA对复合YUV数据进行滤波、抽取和分离,形成Y分量、U分量和V分量数据,形成以适合数据压缩的切片(SLICE)为单位的数据存送给DSP。64XX系列DSP具有2个外部存储器接口(EMIF),FPGA接口和FLASH接口的速率低,共用EMIFB接口,SDRAM是高速接口,用EMIFA接口。系统上电后,DSP从FLASH存储器中加载程序,传送到片内存储器,视频压缩程序对FPGA送来的图像数据进行压缩编码。程序运行过程中所需要的数据一部分存储于片内存储器,另一部分存储于主板上的SDRAM中。生成的压缩码流通过DSP芯片的多通道缓冲串口(McBSP)发送出去。数据传输利用DSP的增强性直接存储器存取(EDMA)进行。图像压缩运算时需要大量的数据信息交换,利用CPU传输数据将会占用大量的CPU时间,影响CPU的运算能力。64X系列DSP具有64个EDMA通道,当CPU在前台编码时,在后台使用EDMA完成数据传送。1.2印制板叠层设计外部存储采用同步动态SDRAM存储器,存取速度在100MHz以上,信号的上升沿时间小于1ns。这个上升沿沿着一条FR-4印刷电路板内层走线传播时,其有效长度为5.6英寸,通常传输线长度大于有效长度的1/6时,电路表现为分布状态[2]。显然SDRAM的信号线长度远远大于有效长度的1/6,属分布式系统,不能采用普通的点对点布线,而需采用传输线,也就是微带线和带状线。在印制板设计中采用地平面和叠层设计;电路板采用8层印制板,叠层方案如图2所示,其中4层为地/电源层,4层为信号线层。地平面和电源平面可以为数字信号的转换提供稳定的参考电压,为电路中的DSP、FPGA和SDRAM等期间分配电源,控制信号之间的串扰,为高速信号电流提供了最小路径。采用传输线以后信号畸变小,电磁辐射小,各信号线之间串扰小。1.3外部存储器的信号完整性设计外部存储器存储速高,高速信号传输时信号会出现上冲、下冲、振铃和非单调等现象,不能再沿用低速电路设计方法,必须采用基于信号完整性分析的高速数字系统设计方法。为了防止信号反射,传输线上需要端接电阻,端接电阻有串行端接和末端端接2种方式。通常采用串行端接,串行端接可以减少电路的功耗,同时还可以减少电路的电磁辐射。DSP外部存储器信号线主要包括数据线和地址线,数据线64位,地址线22位。由于一片SDRAM的数据线是32位,所以需要2片SDRAM芯片。数据线DSP和SDRAM之间一一对应连接,一个发送器驱动一个,传输线属于单支路拓扑结构。地址线一个地址信号要同时驱动2个SDRAM接收,传输线属于双支路拓扑结构。单支路信号端接比较简单,多支路比较困难。信号线传输模型如图3所示。图3(a)是电路中数据线传输模型,采用串行端接方式。通过仿真验证,信号波形很好,过冲和振铃都很小。地址线传输模型属于双支路拓扑结构,确定合适的端接方式比较困难。用MentorGraphics软件进行仿真、测试,确定使用的传输模型。图3(b)是比较常用的传输模型,端接电阻采用单电阻;仿真时发现信号波形很差,上冲、下冲、振铃很严重。经过多次仿真,最后采用了图3(c)所示的传输模型,双支路双电阻串行端接传输模型,模型中每个支路都用了一个串行端接电阻;经过仿真测试,波形比较好。图3模型中传输线阻抗50Ω,串行端接电阻都是33Ω。图4为单支路串行端接信号仿真波形,信号在3.3~0V变化,信号宽度5ns。图4(a)是没有端接电阻的信号仿真波形,信号过冲很大,上冲达到5V,下冲到-1.5V,波形畸变很严重。图4(b)采用串形电阻端接后的信号仿真波形,可以看出信号得到明显改善,信号上冲最大到3.3V,下冲到-0.8V,波形畸变比较小。图5为双支路串行端接信号仿真波形,图5(a)采用单电阻端接,图5(b)采用双电阻端接。从图中可以看出,双电阻端接信号波形比单电阻端接信号波形明显改善。
2软件设计
2.1软件框架结构编码器采用H.264编码方式,框架结构如图6所示[3]。主要由变换编码、量化、排序和熵编码、帧内预测、环路滤波、运动估计和补偿预测等模块。2.1.1变换编码变换编码将图像时域信号转换为频率域信号,在频域中,图像信号的能量大部分集中在低频区域,这样就可能只编码和传输少数系数而不严重影响图像质量。2.1.2量化量化是针对变换后的系数进行的,量化步长越小,量化精度就越细,包含的信息越多,但所需的传输频带越高。DCT变换系数中,低频系数对视觉感应的重要性较高,因此分配的量化精度较细;高频系数对视觉感应的重要性较低,分配的量化精度较粗。2.1.3排序和熵编码经量化后,大多数非零系数集中于二维矩阵的左上角,即低频分量区,经过重排序,这些非零DCT系数就集中于一维排列数组的前部,后面跟着长串的量化为零的系数,然后进行熵编码,得到宏块的压缩编码数据。2.1.4帧内预测利用当前块周围已建立的图像值对当前块进行预测,然后对预测块和实际块的残差进行变换、量化、熵编码,从而消除空间冗余信息。2.1.5环路滤波在基于块的视频编码过程中,在编码器进行反变换量化后经常会产生“块效应”,环路滤波器可以消除或减弱快效应的影响。2.1.6图像重建由于接收端只能根据解码的I、P帧(而不是原图像)来恢复其他P帧,为了减少累计误差,要求编码端使用同样的图像进行运动估计和补偿,也就是说当对一帧图像压缩后需要马上对其解码,以便作为下一帧的参考帧,该环节包括反量化、反变换和帧存。2.1.7运动估计与补偿预测通过利用已经重建的参考帧对当前帧进行预测编码,可以对当前块与参考块的运动矢量以及相应的运动补偿残差值进行编码,有效消除视频编码中的时间冗余,降低编码码率,提高编码效率。目前的运动估计算法主要采用方块匹配算法,典型的运动估计算法有菱形搜索算法[4]、六边形搜索算法[5]和非对称十字多层六边形搜索算法[6]。通过仿真比较,3种算法的编码性能差别比较小,菱形搜索算法时间最短,这里选择菱形搜索算法为运动搜索的方法。2.1.8流量控制经过变换、量化和熵编码后,产生的比特流的速率是变化的,随着视频图像的统计特性变化,而信道的传输速率是恒定的,因此在编码比特流进入信道前需设置缓存器。当编码输出的瞬时速率过高,增大量化步长以降低编码数据速率,当然也相应增大了图像的损失,当编码器的瞬时输出速率过低,减小量化步长以提高编码数据速率。2.2软件程序优化策略图像压缩的源代码是基于PC机的,经过删减移植到DSP平台,进行一定的调整,满足DSP的语法规范,就可以初步运行。但这时编码效率很低,只能每秒压缩几帧图像,不能够实时编码,必须对程序进行优化。充分利用C64XX的特点,如软件流水和芯片特性等可以有效地提高编码效率。软件流水是一种安排循环内的指令运行方式、使循环的多次迭代能够并行执行的一种技术。C64XX具有8个并行功能单元,一个时钟周期可并行执行8条指令[7]。为了充分发挥指令并行执行功能,需要采用循环展开技术,把程序里的叠代次数较少的FOR循环体一一展开,虽然并行的指令数会有所增加,但是这样有利于合理地编排循环的软件流水,提高代码的执行效率。如果循环内有条件判断语句,将引入跳转指令,进而破坏了软件流水。因此在循环语句中不要加入复杂的条件判断语句。内联函数是指用函数本身来代替函数调用这一过程。当调用内联函数时,源代码把此函数插入到调用点,而不采用传统的跳转。将函数设定为内联函数后,可以去掉复杂的函数调用过程来提高函数的执行效率。为了降低DSP开发难度,节省软件开发时间,TI提供了专用的C64X系列DSP的图像函数库。这些函数经过TI优化后,代码效率很高,可以直接拿来使用到编码器中。如16*16的SAD计算函数,运行时间仅67个机器周期[8]。采用函数合并。在编码过程中变换、量化、排序、反变换、反量化调用非常频繁,反复的调用会在函数调用上花费大量的时间,为了提高速度,可以将变换、量化、排序、反变换和反量化等进行优化,合并成一个函数,减少不必要的函数调用。经过软件优化以后,每秒压缩达到25帧,满足实时压缩编码的要求。
3结束语
构造DSP硬件平台的关键是高速数字信号传输问题,需要进行印制板叠层设计和信号完整性设计。信号线拓扑结构为单支路时信号完整性设计比较简单,采用串行电阻端接一般都可以满足要求;多支路时设计比较困难,需要采用专用的印制板设计软件(MentorGraphics、Cadence等)进行反复的仿真、测试和调整。本文提出的双支路双电阻串行端接传输模型,仿真效果好,实际应用稳定、可靠,不足之处是端接电阻较多。程序优化是DSP视频压缩编码的一个重要环节,需要进行大量、繁琐的编程工作。本文涉及软件优化主要是程序级优化。根据DSP的硬件特点,对编码算法进行改进、优化,结合程序优化,可以进一步提高编码效率。本编码器已在多个工程项目中得到应用,性能稳定可靠。
作者:高玉平 单位:中国电子科技集团公司第五十四研究所