|
陈 川,余松煜,薛震民 (上海交通大学图像通信与信息处理研究所,上海,200030)
摘 要:提供了一套利用TMS320VC54x和CPLD实现图像采集与压缩编码系统的通用设计方法。阐述了压缩编码系统的设计和其中的关键技术问题,并结合图像编码算法和DSP流水线的特点进行程序优化。设计结果表明:在系统功能和结构方面,完全满足低速率数字视频通信系统的要求;在实现和应用方面,由于所选用的都是通用器件,成本低廉,对于数字视频监控领域有很高的实用价值。 关键词:数字信号处理器;CPLD;H.263压缩编码;流水线
引 言 视频图像压缩编解码一方面要将模拟视频信号转化为数字信号来传输,另一方面利用图像压缩技术减少数据量。图像编解码有两种实现方式:(1)基于微机平台,图像数据通过微机软件或利用基于微机总线的图像处理卡进行压缩编解码;(2)抛开微机平台,应用以DSP为主的微处理器对图像进行处理,构成脱机图像系统。脱机系统由于设备体积小,应用灵活简便,且不用担心需要何种兼容的操作系统和无故死机的一系列问题,受到广泛关注。DSP由于其本身的总线结构特点,特别适合于运算量巨大的数字信号处理领域,同时对于图像压缩效果的实时调节、数据速率的控制、图像数据传输和图像分辨率调整也更加灵活。为此,本文将提供一套基于通用DSP和CPLD的图像编解码系统设计方案,并阐述了具体实现。 1 系统结构设计 系统要完成的功能:CIF格式的H.263压缩编解码及在普通电话线上以33.6 kbps的速率传输,要求远端解码出的图像满屏显示,刷新速率为3帧/s左右。由于H.263编码后的每帧图像(CIF格式)平均大小为8 kbits左右,故从理论上能达到系统所要求的功能。图1给出了系统总体结构的原理框图。 系统编码端输入为摄像头信号,经过视频A/D得到视频原始YUV信号,再由CPLD进行格式转换(由720×576 4∶2∶2的图像转换成352×288 4∶2∶0的图像)后,写入SRAM中,供DSP读取进行压缩编码;在DSP中完成视频的编码和本地解码,其中编码视频流通过异步串行芯片16C550和MAX232接Modem发送到远端,本地解码视频数据送入重建帧存(图1中的SRAM模块),以供后续帧之比较。图中,C为控制信号。

远程解码端结构和编码端硬件结构类似,只需去掉编码端的视频A/D部分即可。压缩的视频流由Modem接收后在DSP中进行解码,与编码端的本地解码过程一样。实际上为了节省制板费用,编码端和解码端使用了相同的电路板。区别是作为编码板时,去掉FIFO和视频D/A部分,本地视频解码数据不作本地显示;作为解码板时,省去视频采集部分,直接从Modem接收编码码流进行解码,并经过格式转换输出到视频FIFO,再由CPLD控制读取,送往视频D/A显示。 2 系统硬件设计 2.1 视频A/D及采样设计 系统采用PHILIPS公司的视频A/D芯片Saa7113[1],它具有四路视频输入,抗混滤波,自动钳位和增益控制功能,为系统设计带来了极大的方便。Saa7113的输入时钟由24.576MHz的晶振提供。场同步信号VS、行同步信号HS和27MHz的像素时钟信号LLC都由管脚直接引出,省去了以往的时钟同步电路的设计,且芯片内部锁相环技术的集成使得可靠性大大提高,设计复杂度大大降低。在Saa7113中有控制字可以直接控制行同步有效时间,因此可以省略行延迟电路。由于本系统中只需要CIF4∶2∶0的原始视频图像,故需将720×576 4∶2∶2的图像抽样为352×288 4∶2∶0的视频图像,再写入SRAM中,此工作由Altera公司的MAX7000系列的CPLD完成。由于读、写SRAM需要精确的时序要求,故在选取SRAM的时候需要考虑DSP访问外设的速度和CPLD的延时因素,系统中DSP采用TMS320VC5416-160,每个指令周期至少为6.25 ns,考虑到DSP访问外设可插入等待周期,为更快地访问SRAM和控制系统的成本,选用速度为12 ns的SRAM比较合适;同时12ns的SRAM也足以满足CPLD用27 MHz的时钟写操作的时序要求。 2.2 视频D/A及显示设计 把CIF4∶2∶0图像通过内插组合成720×576 4∶2∶2格式的视频图像数据,再送视频D/A输出显示。视频D/A采用PHILIPS的芯片Saa7121[2]完成,通过I2C总线把Saa7121配置成Master模式。其中行场同步信号和点时钟由Saa7121提供,用于控制视频FIFO的读取和刷新,Saa7121的时钟信号由27 MHz的晶振提供。CPLD控制读取FIFO中的数据送往Saa7121输出显示。 2.3 逻辑控制设计 系统中的各种组合逻辑均由CPLD完成。此外,CPLD还负责控制对Saa7113输出的720×5764∶2∶2格式的视频信号进行格式转换以及对FIFO的读写控制。像素抽样方法见图2。以图像帧为单位,每行亮度和色度信号均取奇数点采样,列方向亮度信号隔行采,色度信号每4行采一行,这样抽样采集的信号就是图2中的CIF4∶2∶0格式的原始图像信号。

抽样电路设计框图见图3。其中,UV-ADDR-COUNTER[14..0]和Y-ADDR-COUNTRE [15..0]用于计数产生写RAM的地址信号。U-ENABLE、V-ENABLE和Y-ENABLE为各三态门的使能信号,用于控制什么时候地址总线上输出Y,U,V地址。

FIFO的读写也由CPLD控制,主要是控制对FIFO读写刷新的问题。由于DSP写FIFO(时钟由DSP产生)的速度比Saa7121读FIFO(27 MHz的时钟)的速度慢许多,DSP来不及实时编解码,读FIFO和写FIFO之间不好匹配,故系统中FIFO选用具有读写刷新独立的AL422B。写FIFO刷新由DSP控制,通过I/O口输出到CPLD,由CPLD译码控制FIFO的写刷新;读FIFO刷新由Saa7121的场同步信号直接实现。 2.4 DSP硬件设计 DSP的硬件设计须注意:不用HOLD信号须将它拉高,不用READY信号也须将它拉高,不然DSP访问外设不会成功;中断信号INIT0~INIT3中,不用的中断信号可以不接,但是接上了的中断信号,在上电时一定要是输入高电平状态,否则DSP不能正常工作,复位脚RESET也是一样;JTAG口的EMU0和EMU1要用4.7 kΩ的电阻上拉到3.3 V;CLKMD1~CLKMD3可根据需要配置成用户所需要的工作频率,这个频率只在上电期间保持,上电过程结束后,用户可以用软件的方式,将DSP的工作频率配置成想要达到的水平。 3 系统软件设计 系统采用H.263的编解码算法[3]。为了有效地利用DSP,视频图像的编、解码程序完全采用TMSC54x汇编语言编写。视频编码成标准的H.263码流,解码端可以是脱机的解码,也可以是在PC上的软解码。由于图像压缩编码算法比较复杂,所要求DSP的片内RAM大,一方面用于运行程序,另一方面用来存放临时数据和开堆栈。再加上要频繁地与外设通信,故需使用速度快和片内RAM大的DSP来完成上述工作。系统中使用了TMS320VC5416,它的片内RAM大小为128 K字,最快运算速度为160MIPS。考虑到H.263编码需要存取两帧的图像数据(一帧CIF4∶2∶0图像需要的存储空间为352×288×1.5×8 bit=148.5Byte=74.25 K字)以及使用半像素估计时还需要4×352×288×8 bit=396 KByte=198 K字的存储空间,故本系统外扩了一片64 K字的SRAM用于存放重建帧,一片256 K字的SRAM用于存放半像素估计时的图像数据。程序在DSP程序空间第2页的在片RAM中运行,堆栈和数据放在片内64 K数据空间中(为了让片外的RAM地址连续,设OVLY=0)。 值得注意的是,由于处理图像数据量大,为了充分利用DSP的处理能力,需在编程时针对DSP流水线和图像数据的特点进行必要的指令级优化。 3.1 流水线优化 C54x有一个6级深度的指令流水线,相互独立。在任何一个机器周期内,可以有1~6条不同的指令在同时工作,每条指令工作在不同的流水线上。充分利用DSP的流水线并行处理能力,可以大大地提高系统的处理能力。 在系统开发过程中,虽然C54x可以采用C语言编程,但是如果不采用适合处理器流水线的优化操作,而是让CCS自动编译用户编写的C程序,则生成的汇编代码效率较低。研究表明,如果让CCS自动编译用户C程序,则在C6xx处理器上的执行效率将降低3~5倍,如果是在C54x上执行,则效率更差。一般地说,如果DSP流水线达到4级以上,采用C代码编制的程序在DSP上运行的效率就大打折扣。优化流水线包括以下几个方面: (1)对流水线中的跳转指令,调用指令,返回指令,条件执行指令,条件调用和条件跳转指令均要仔细地考虑,最好能不用跳转、循环的地方尽量不用。用延迟跳转语句取代跳转语句,这样可以节省指令周期。详见TMS320C54x的使用说明[4]。 (2)流水线和中断。中断服务程序如果大于4条指令,就不能直接放在中断向量表中,否则,中断返回时可能执行不到第4条指令后的指令。 (3)单、双寻址存储器与流水线。利用C54x片内的双寻址存储器(DARAM)进行并行操作。C54x片内的DARAM分成若干独立的存储器块,并且允许CPU在单个周期内对它访问两次。 (4)流水线延时(流水线冲突与等待周期)。由于CPU资源有限,所以在不止一个流水线阶段访问CPU资源时会发生冲突。有些流水线冲突可以由CPU的延时操作自动消除,但是有些冲突必须由用户通过指令来消除。具体方法就是重新调整指令顺序或插入NOP指令,也可以使用不会使流水线产生冲突的指令或在访问一个寄存器之前作必要的延时。容易产生流水线冲突主要是访问MMR的指令,如更新ARx,BK,SP,T,PMST,ST0,ST1,BRC,A等的指令。 3.2 图像数据优化设计 在H.263编码中,比较耗时的环节主要是二维DCT变换和运动补偿。如果不对这二者进行优化,整个系统的计算量将大得惊人,尤其在实时多媒体处理和系统资源受限的情况下,这种要求更为迫切。本文以运动补偿算法的DSP优化实现为例说明基于图像数据的优化方法。 运动估计中通常采用块匹配方法,匹配准则采用绝对误差准则(SAD),其计算公式为
 其中:In(i,j)为第n帧中像素点(i,j)的亮度值;(x,y)为偏移量;W为搜索范围。 如果采用全搜索算法(FSS),对每一块总共需要做(2*W+1)2次SAD计算,可见计算量巨大,不具有实用价值,所以需采用快速算法。快速算法一般包括三步搜索法、对数搜索法和共轭单向搜索法等。由于三步搜索法简单,容易实现,因而应用广泛。比较常用的是三步搜索法和改进的三步搜索法。在选择搜索算法时,除了要考虑算法简单,快速,计算量小以外,还要考虑到能充分利用DSP并行处理的搜索算法。对于三步法TSS,搜索算法要计算的SAD值恒定为25次,具体的算法为(以第一步为例):

 由上可知,程序需作大量判断,即是否超出搜索范围(i,j)的判断、sad大小(sad)和位置范围(k)的判断。而对于DSP,执行判断语句花费的指令周期相当多,不利于多级流水线并行操作;并且三步法第一步步长较大,容易陷入局部最小的情况,得不到全局最优的运动矢量,故需要采用适合DSP计算的优化算法。 基于中心的三步搜索法CTSS[5],把搜索点安排在预先偏移量的中心区域,形状象菱形的三层,如图4所示。只需要计算图中固定位置的SAD值,这就省去了采用TSS算法执行判断语句的开销;并且搜索顺序从里向外,同一层中先搜索水平或垂直再搜索对角线上的点,绝大多数的搜索在里层就可以完成而不必再向外层搜索(通过对SAD值设定一个预先给定的阀值来实现)。一旦某一搜索点的SAD值小于这个阀值,就停止搜索,从而减少了搜索点,减少了计算量。可见这种搜索算法特别适合于具有并行流水线的DSP来实现。

4 系统实现与结论 按照上述系统设计结构,先从硬件和软件两方面分别对系统进行调试,再通过联调,最终完成系统的调试和功能实现。调试结果表明系统设计结构可行,比基于微机的系统结构简单、实用、操作方便、运行稳定。针对数字视频监控领域,尤其是低速率视频通信领域,脱机的视频压缩编码和传输系统目前还处于起步阶段,本文提供的基于DSP和CPLD的视频压缩编码系统方案对设计通用的视频监控系统具有很大的参考和实用价值。本系统已投入使用,运行稳定可靠,完全满足系统所需功能,取得了比较好的效果。 本文阐述了Non-PC构架的利用DSP和CPLD设计图像采集和压缩编码系统的方法和具体实现,分析了系统中要解决的关键问题,并针对DSP的流水线分析了程序优化的方法,为设计通用的图像编解码系统提供了一套行之有效的方法。
[1] Philips.SAA7113 video input processor product sp-ecification[EB/OL].http://www.semiconductors.philips.com/acrobat/datasheets/SAA7113H-1.pdf,1999-07-01. [2] Philips.SAA7121 digitalvideo encoder(ConDENC)data-sheet[EB/OL].http://www.semiconductors.philips.com/acrobat/datasheets/SAA7120-21-1.pdf,1997-06-06. [3] Draft textof recommendation H.263 version 2(“H.263+”)for decision[S].ITU Recommendation H.263,1997,9:8~12. [4] Texas Instruments.TMS320C54x DSPreference set.Volume 1:CPU and peripherals[EB/OL].http://www-s.ti.com/sc/psheets/spru131g/spru131g.pdf,2001-03-01. [5] 胡琳蓉,朱秀昌.一种适用于H.263的运动估计搜索算法[J].通信学报,2000,6(21):65~69.
|