图像的编/解码系统有两种基本的实现方法,一种是基于微机实现,图像处理系统通过PCI总线以插卡形式集成在微机系统中,数据通过PCI总线或卡上所带的接口进行交换和传输;另一种脱离了微机而独立运行,利用微处理器芯片对图像进行编/解码处理来实现。这种脱机的图像处理系统由于体积小和灵活简便而受到广泛关注。微处理器芯片可以采用专用图像编/解码芯片。虽然这些芯片集成了图像处理算法,简化了系统的设计,但是由于新的图像压缩算法的不断出现以及对图像进出各种灵活控制的要求,使这些专用芯片在一些场合并不适用。而高速的通用微处理器如DSP芯片则正好能满足这样的需求,具有很好的灵活性和适应性,本文从硬件设计方面考虑,介绍一个基于DSP芯片TMS320C6000的脱机视频图像解码系统。
1 系统主要模块的设计
本系统是针对不高于64kbit/s的码流实现的脱离计算机而独立运行的解码器。本解码器采用RS-232总线接收信号。数据接收到解码器之后进行解码算法处理,然后由D/A器件转换为模拟视频信号输出到显示器上显示。此种设计具有很大的灵活性,并且利于调试分析。由于解码器采用RS-232接收信号,可以方便地通过计算机串口进行模拟调试。对于其它特定传输方式的解码,只需对数据的接收模块稍做改动即可。此外,如果需要显示到电视或其它显示设备,需修改系统最末端的器件及显示频率等,但不需改动系统核心的设计及软件。
1.1 数据接收模块
因RS-232信号的电平标准与DSP的电平不兼容,采用RS-232总线接收的数据需要进行电平转换。电平转换器件采用MAX232或其升级器件。
另外,DSP芯片带有两个McBSP(多通道缓冲串口),每个McBSP可支持128通道的多通道操作,功能强大并且速度很快。因为RS-232信号是异步信号,而McBSP为同步串口,接收起来有一定困难,所以需要外加接收器件UART。UART(通用异步接收/发送器件)采用TI的TL16C550C或TL16C750,它接收RS-232数据,并可同时将数据存入自身所带的FIFO中。UART接收的数据可通过以下方式搬移:当FIFO中数据超过一定时时向DSP发出中断,同时触发DSP内的DMA控制器,对UART的数据进行搬移。如果以后数据源为同步信号,例如PCM、T1、E1信号,则可以从McBSP直接接收,以进一步简化外围电路的设计。
1.2 电源模块
DSP的电源采用两种电压供电,内核电压为1.8V,I/O电压为3.3V。并且DSP对这两个电压有上电顺序的要求,要求内核电源(CVdd)先于I/O电源(DVdd)上电。考虑到DSP的功耗问题,采用TI公司的两片电源模块TPS56100对DSP分别供电。
另外,为了保证C6000芯片在电源低于要求的电平时会产生失控状态,在系统中加入了电源监控电路。该电路能确保DSP在系统加电过程中及电源电压低于一定门限值时始终处于复位状态。电源监控电路采用TI公司的TPS3305[2],同时它还可接一手工复位开关以便人工控制。
1.3 显示模块
显示模块的任务是将DSP处理后产生的原始图像显示到显示器上。由于一般显示器都是模拟输入,所以在显示模块中包含一个D/A转换器件,将图像的RGB数据转换为模拟信号输出到显示器。由于显示器刷新频率较高,解码后的一帧图像要刷新几次进行显示,所以图像的显示需要严格的行同步和同步。为了将存储器的数据搬移到D/A,需要以稳定的频率将存储器数据送往D/A,在这里采用了FIFO来实现此功能。在这个模块中,会有总线的共享情况,也就是说DSP既要频繁地解码后的图像数据写到存储器以供帧的重排,同时又要将显示的帧从存储器搬到FIFO。所以DSP以及存储器都要满足速度的要求。
当然,显示模块也可以采用双端口存储器设计,它有两套独立的地址总线和数据总线,一边由DSP操作而另一边由FPGA等器件控制将数据搬到D/A,两种操作没有总线的冲突问题,所以其带宽可以达到很高。但是,这带来了诸如价格昂贵、复杂度高等问题,使其实用性大大降低。结合诸种因素,本文不考虑这种设计。
2 系统运行机制的设计
2.1 系统运行机制
DSP系统运行机制表示如图1所示。
UART为接收RS-232数据的器件,ROM用于存储解码以及控制程序,SRAM用于存储DSP高速运算过程中所需的一些临时数据和常数表,SDRAM为解码后图像数据提供缓冲区,FIFO为数据输出到D/A的缓冲器件,D/A用于将图像的RGB数字信号转换为模拟信号输出到显示器。对FIFO等器件的控制以及产生视频的行/场同步信号可采用可编程逻辑器件PLD来实现。
系统基本流程为:系统通过UART接收码流,由定时器定时(按照码流的播放速度设定进行定时,如30帧/秒)触发DSP对接收的数据进行解码,解码后的数据输出到SDRAM缓存,然后在PLD的触发下将数据送入FIFO,再由可编程逻辑器件ALTERA公司的PLD(EPM7128SLC84-10)以一定频率控制FIFO把数据输出到D/A,转换成模拟信号输出。
2.2 有关码流的考虑
视频的编码一般是把图像的帧分为三种:初始帧1,可直接对此帧编码;前向预测帧P,对它编码时需要参考I帧的信息;双向预测帧B,对它编码时要同时参考前后两帧的信号,即I帧(或P帧)和P帧的信息。这样的话,解码时要先得到I帧和P帧的数据才能对B帧解码,也就是说编码后的码流应该是先传I、P帖,再传B帧,而不是按照I、B、P帧顺序传输。这就牵涉到了帧重排的问题,即在P帧解码后不能立即显示,要等到后面的B帧显示后才能显示,解码后的帧要重新排列一下。
码流中从一个I帧到下一个I帧称为一个帧组。由此可见,各帧组的解码是相互独立的。在解码端,分一个个的帧组进行解码。在解码每个帧组时,由于P、B帧的关系,需要存储前帧或前两帧的数据。
接收缓冲区设置在DSP的片内数据存储器,由UART接收数据流,并以中断方式触发DMA进行数据搬移,定时器触发DSP处理的周期为显示一个帧组所需的时间。设每个帧组包括9帧数据(IBBPBBPBB,一般的处理不太可能会超过9帧),其平均数据量大小为2400字节。DSP的内部数据存储器大小为64K字节。开辟缓冲区为5个帧组的大小,共约12K字节。而若以30帧/秒的速度来算的话,9帧需0.3秒,即定时器以0.3秒的周期触发DSP进行处理。
系统运行开始时,UART开始接收码流。这时开始接收的数据不一定是一个帧组的头部,即一个帧组的大小不一定包含一个完整的帧组,所以开始的一段残余数据应舍弃。每当定时器触发DSP时,DSP就检测缓冲区中数据,如果数据含有一个完整的帧组,则进行解码,否则返回。这样就实现了对码流的控制。
可以看出,DSP的解码速率度肯定要大于数据的接收速度,否则会导致帧的大量丢失。
2.3 有关RAM存储器的考虑
RAM存储器用于存储帧重排所需数据和程序运行时数据。
考虑真彩色的情况,RGB三种基本色都要占用一个字节,一个象素就占用了三个字节。而显示时一次读一个象素,DSP的总线32位(4个字节宽度),所以从速度上考虑(以一个双字对齐时读4个字节只需一个时钟周期,速度最快),采用一个角素点用四个字节,第四个字节保留。
若每帧图像大小为352×288真彩色,每帧大小为352×288×4=396K字节。由于帧重排至少需要3帧的缓存,所以SDRAM大小至少为三个帧组的大小,即396k×3=1188K字节,也就是9.28M位,故采用16M位的SDRAM。
考虑到一些常数表以及程序执行时临时数据的存放,DSP的内部数据RAM会不够大,又外接了一个小容量的高速SRAM。
2.4 有关速度的考虑
(1)接收数据时,采用了16C550C器件。它的接收速度可以达到230kbps,而更新的UART器件速度可高达1Mbps,完全可以满足64kbit/s甚至更高的码流,并可容纳更快的码流,以备升级。
(2)DSP处理时,对B帧的处理需要前后两帧数据的预测。数据操作最为频繁,要读其它两帧的数据,又要写此帧的解码后数据,所以在处理一帧的时间内就要有3帧的数据。而按照30帧/秒的码流速率计算,352×288真彩色(需要3个字节表示一个象素)的图像需要的带宽为(352×3×3)/(1/30)=26.1MHz。若显示刷新速率为75Hz的话,处理一帧的时间内又要刷新75/30=2.5次。这里在刷新时可以按32位读数据,如前所述每32位表示一个象素,则往FIFO送数据另需要带宽为(352×288×2.5)/(1/30)=7.25MHz。两者相加则可得到需要的总带宽为(26.1+7.25)=33.35MHz。现在的SDRAM都可以满足,但为了协调DSP的高速处理,SDRAM的速度在100MHz左右就可以满足需要了。
3 硬件实现方案
整个系统由硬件和软件两部分构成。其中软件代码是比较庞大的。所以为了保证软件能够在硬件平台上正常运行,硬件的实现方案分为以下两个阶段来进行:
(1)利用TI公司提供的DSP的评估板EVM(Evaluation Module),加上自行设计的显示模块电路及外围接口,构成实验阶段的硬件平台。EVM是TI公司为方便用户调试程序而设计的电路板,其中含有DSP芯片以及许多周边设备,在此板上可以完成很多功能,且有扩展插槽以供功能扩展。对于此解码器,只需插入一个较简单的外围设备如显示和数据输入模块即可。这个阶段,EVM可以确保硬件的可靠性,而显示模块电路又非常容易调试。所以在此阶段,可以着重对软件进行调试,使其能够正确无误地在硬件平台上运行。
(2)在软件调试无误的基础上,设计出如本文所述的独立的硬件开发平台。在软件正确的前提下,对硬件进行调蔗,最终完成解码器系统的设计。
对于这个方案,已经经过仔细验证。
4 小结与展望
本文所设计的视频解码系统能够满足视频解码的要求,并且可作为一种通用的视频解码器,为解码算法提供了硬件平台。由于它能独立于计算机单独运行,并且价格较为便宜,有较大的灵活性和实用性,在此基础上稍做修改又可服务于其它特定的编解码算法,因此具有很艰好的应用前景和使用价值。但此解码器在数据流的输入方式以及流的分析方面还有待进一步改进。
图像的编/解码系统有两种基本的实现方法,一种是基于微机实现,图像处理系统通过PCI总线以插卡形式集成在微机系统中,数据通过PCI总线或卡上所带的接口进行交换和传输;另一种脱离了微机而独立运行,利用微处理器芯片对图像进行编/解码处理来实现。这种脱机的图像处理系统由于体积小和灵活简便而受到广泛关注。微处理器芯片可以采用专用图像编/解码芯片。虽然这些芯片集成了图像处理算法,简化了系统的设计,但是由于新的图像压缩算法的不断出现以及对图像进出各种灵活控制的要求,使这些专用芯片在一些场合并不适用。而高速的通用微处理器如DSP芯片则正好能满足这样的需求,具有很好的灵活性和适应性,本文从硬件设计方面考虑,介绍一个基于DSP芯片TMS320C6000的脱机视频图像解码系统。
1 系统主要模块的设计
本系统是针对不高于64kbit/s的码流实现的脱离计算机而独立运行的解码器。本解码器采用RS-232总线接收信号。数据接收到解码器之后进行解码算法处理,然后由D/A器件转换为模拟视频信号输出到显示器上显示。此种设计具有很大的灵活性,并且利于调试分析。由于解码器采用RS-232接收信号,可以方便地通过计算机串口进行模拟调试。对于其它特定传输方式的解码,只需对数据的接收模块稍做改动即可。此外,如果需要显示到电视或其它显示设备,需修改系统最末端的器件及显示频率等,但不需改动系统核心的设计及软件。
1.1 数据接收模块
因RS-232信号的电平标准与DSP的电平不兼容,采用RS-232总线接收的数据需要进行电平转换。电平转换器件采用MAX232或其升级器件。
另外,DSP芯片带有两个McBSP(多通道缓冲串口),每个McBSP可支持128通道的多通道操作,功能强大并且速度很快。因为RS-232信号是异步信号,而McBSP为同步串口,接收起来有一定困难,所以需要外加接收器件UART。UART(通用异步接收/发送器件)采用TI的TL16C550C或TL16C750,它接收RS-232数据,并可同时将数据存入自身所带的FIFO中。UART接收的数据可通过以下方式搬移:当FIFO中数据超过一定时时向DSP发出中断,同时触发DSP内的DMA控制器,对UART的数据进行搬移。如果以后数据源为同步信号,例如PCM、T1、E1信号,则可以从McBSP直接接收,以进一步简化外围电路的设计。
1.2 电源模块
DSP的电源采用两种电压供电,内核电压为1.8V,I/O电压为3.3V。并且DSP对这两个电压有上电顺序的要求,要求内核电源(CVdd)先于I/O电源(DVdd)上电。考虑到DSP的功耗问题,采用TI公司的两片电源模块TPS56100对DSP分别供电。
另外,为了保证C6000芯片在电源低于要求的电平时会产生失控状态,在系统中加入了电源监控电路。该电路能确保DSP在系统加电过程中及电源电压低于一定门限值时始终处于复位状态。电源监控电路采用TI公司的TPS3305[2],同时它还可接一手工复位开关以便人工控制。
1.3 显示模块
显示模块的任务是将DSP处理后产生的原始图像显示到显示器上。由于一般显示器都是模拟输入,所以在显示模块中包含一个D/A转换器件,将图像的RGB数据转换为模拟信号输出到显示器。由于显示器刷新频率较高,解码后的一帧图像要刷新几次进行显示,所以图像的显示需要严格的行同步和同步。为了将存储器的数据搬移到D/A,需要以稳定的频率将存储器数据送往D/A,在这里采用了FIFO来实现此功能。在这个模块中,会有总线的共享情况,也就是说DSP既要频繁地解码后的图像数据写到存储器以供帧的重排,同时又要将显示的帧从存储器搬到FIFO。所以DSP以及存储器都要满足速度的要求。
当然,显示模块也可以采用双端口存储器设计,它有两套独立的地址总线和数据总线,一边由DSP操作而另一边由FPGA等器件控制将数据搬到D/A,两种操作没有总线的冲突问题,所以其带宽可以达到很高。但是,这带来了诸如价格昂贵、复杂度高等问题,使其实用性大大降低。结合诸种因素,本文不考虑这种设计。
2 系统运行机制的设计
2.1 系统运行机制
DSP系统运行机制表示如图1所示。
UART为接收RS-232数据的器件,ROM用于存储解码以及控制程序,SRAM用于存储DSP高速运算过程中所需的一些临时数据和常数表,SDRAM为解码后图像数据提供缓冲区,FIFO为数据输出到D/A的缓冲器件,D/A用于将图像的RGB数字信号转换为模拟信号输出到显示器。对FIFO等器件的控制以及产生视频的行/场同步信号可采用可编程逻辑器件PLD来实现。
系统基本流程为:系统通过UART接收码流,由定时器定时(按照码流的播放速度设定进行定时,如30帧/秒)触发DSP对接收的数据进行解码,解码后的数据输出到SDRAM缓存,然后在PLD的触发下将数据送入FIFO,再由可编程逻辑器件ALTERA公司的PLD(EPM7128SLC84-10)以一定频率控制FIFO把数据输出到D/A,转换成模拟信号输出。
2.2 有关码流的考虑
视频的编码一般是把图像的帧分为三种:初始帧1,可直接对此帧编码;前向预测帧P,对它编码时需要参考I帧的信息;双向预测帧B,对它编码时要同时参考前后两帧的信号,即I帧(或P帧)和P帧的信息。这样的话,解码时要先得到I帧和P帧的数据才能对B帧解码,也就是说编码后的码流应该是先传I、P帖,再传B帧,而不是按照I、B、P帧顺序传输。这就牵涉到了帧重排的问题,即在P帧解码后不能立即显示,要等到后面的B帧显示后才能显示,解码后的帧要重新排列一下。
码流中从一个I帧到下一个I帧称为一个帧组。由此可见,各帧组的解码是相互独立的。在解码端,分一个个的帧组进行解码。在解码每个帧组时,由于P、B帧的关系,需要存储前帧或前两帧的数据。
接收缓冲区设置在DSP的片内数据存储器,由UART接收数据流,并以中断方式触发DMA进行数据搬移,定时器触发DSP处理的周期为显示一个帧组所需的时间。设每个帧组包括9帧数据(IBBPBBPBB,一般的处理不太可能会超过9帧),其平均数据量大小为2400字节。DSP的内部数据存储器大小为64K字节。开辟缓冲区为5个帧组的大小,共约12K字节。而若以30帧/秒的速度来算的话,9帧需0.3秒,即定时器以0.3秒的周期触发DSP进行处理。
系统运行开始时,UART开始接收码流。这时开始接收的数据不一定是一个帧组的头部,即一个帧组的大小不一定包含一个完整的帧组,所以开始的一段残余数据应舍弃。每当定时器触发DSP时,DSP就检测缓冲区中数据,如果数据含有一个完整的帧组,则进行解码,否则返回。这样就实现了对码流的控制。
可以看出,DSP的解码速率度肯定要大于数据的接收速度,否则会导致帧的大量丢失。
2.3 有关RAM存储器的考虑
RAM存储器用于存储帧重排所需数据和程序运行时数据。
考虑真彩色的情况,RGB三种基本色都要占用一个字节,一个象素就占用了三个字节。而显示时一次读一个象素,DSP的总线32位(4个字节宽度),所以从速度上考虑(以一个双字对齐时读4个字节只需一个时钟周期,速度最快),采用一个角素点用四个字节,第四个字节保留。
若每帧图像大小为352×288真彩色,每帧大小为352×288×4=396K字节。由于帧重排至少需要3帧的缓存,所以SDRAM大小至少为三个帧组的大小,即396k×3=1188K字节,也就是9.28M位,故采用16M位的SDRAM。
考虑到一些常数表以及程序执行时临时数据的存放,DSP的内部数据RAM会不够大,又外接了一个小容量的高速SRAM。
2.4 有关速度的考虑
(1)接收数据时,采用了16C550C器件。它的接收速度可以达到230kbps,而更新的UART器件速度可高达1Mbps,完全可以满足64kbit/s甚至更高的码流,并可容纳更快的码流,以备升级。
(2)DSP处理时,对B帧的处理需要前后两帧数据的预测。数据操作最为频繁,要读其它两帧的数据,又要写此帧的解码后数据,所以在处理一帧的时间内就要有3帧的数据。而按照30帧/秒的码流速率计算,352×288真彩色(需要3个字节表示一个象素)的图像需要的带宽为(352×3×3)/(1/30)=26.1MHz。若显示刷新速率为75Hz的话,处理一帧的时间内又要刷新75/30=2.5次。这里在刷新时可以按32位读数据,如前所述每32位表示一个象素,则往FIFO送数据另需要带宽为(352×288×2.5)/(1/30)=7.25MHz。两者相加则可得到需要的总带宽为(26.1+7.25)=33.35MHz。现在的SDRAM都可以满足,但为了协调DSP的高速处理,SDRAM的速度在100MHz左右就可以满足需要了。
3 硬件实现方案
整个系统由硬件和软件两部分构成。其中软件代码是比较庞大的。所以为了保证软件能够在硬件平台上正常运行,硬件的实现方案分为以下两个阶段来进行:
(1)利用TI公司提供的DSP的评估板EVM(Evaluation Module),加上自行设计的显示模块电路及外围接口,构成实验阶段的硬件平台。EVM是TI公司为方便用户调试程序而设计的电路板,其中含有DSP芯片以及许多周边设备,在此板上可以完成很多功能,且有扩展插槽以供功能扩展。对于此解码器,只需插入一个较简单的外围设备如显示和数据输入模块即可。这个阶段,EVM可以确保硬件的可靠性,而显示模块电路又非常容易调试。所以在此阶段,可以着重对软件进行调试,使其能够正确无误地在硬件平台上运行。
(2)在软件调试无误的基础上,设计出如本文所述的独立的硬件开发平台。在软件正确的前提下,对硬件进行调蔗,最终完成解码器系统的设计。
对于这个方案,已经经过仔细验证。
4 小结与展望
本文所设计的视频解码系统能够满足视频解码的要求,并且可作为一种通用的视频解码器,为解码算法提供了硬件平台。由于它能独立于计算机单独运行,并且价格较为便宜,有较大的灵活性和实用性,在此基础上稍做修改又可服务于其它特定的编解码算法,因此具有很艰好的应用前景和使用价值。但此解码器在数据流的输入方式以及流的分析方面还有待进一步改进。
举报