0 引言
视频采集压缩系统在科学研究、工业生产、通信等众多领域有着广泛的应用。用于视频采集压缩系统的硬件设计和压缩算法也在不断推陈出新。目前广泛使用的硬件结构一种是基于专门为视频算法设计的芯片,比如TI的DM642,达芬奇等DSP芯片; 另外一种采用通用的DSP芯片,例如TI的TMS320C6416等。专用的DSP芯片集成了专门针对视频信号的接口,硬件结构较为简单。对于通用的DSP 芯片,则需要设计视频信号进入 DSP 芯片的通路,对视频信号进行预处理以后再利用DSP对信号进行压缩运算。
在“实验卫星视频压缩系统”项目中,需要设计一套高可靠性,高效率的视频压缩系统。在科学实验卫星上,许多科学现象需要视频记录。如果视频信息不经压缩,信息量将非常大, 视频压缩是必须的。如果采用专用的DSP,目前市场上的 DSP 达不到航天应用的要求。在我们的应用中,核心DSP采用的是TI的TMS320C6416;视频解码器采用的是Analog Devices公司的ADV7181B;视频预处理模块采用Xilinx公司XC2v1000的FPGA实现。这些器件都有较高的可靠性,可以适应复杂的外部环境。
1 系统的硬件构架
1.1 视频解码器ADV7181B
本系统使用的是ADV7181B芯片。它可以自动检测模拟电视信号,包括所有的 NSTC,PAL和SECAM 信号,并将检测到的模拟信号按4:2:2采样转换成为16位或8位的CCIR601/CCIR656数字视频数据。同时芯片也提供行同步信号、场同步信号的输出,这样可以根据需要选择是否使用这些信号,提高了芯片应用的灵活性。
ADV7181B具有六路模拟视频输入,可以接收不同的模拟视频输入,包括 CVBS、S-Video、YPrPb 输入以及它们的组合。芯片前端具有三个9位的模数转换单元( ADC ),它们的作用是把模拟的视频信号数字化,以便于在接下来的标准视频单元中进行进一步的处理。通过配置寄存器可以实现模数转换单元对六路输入模拟视频的选择。
在标准视频单元中可以对视频的各个参数进行设置,如亮度、对比度、饱和度等。这些设置都是通过对寄存器的读写来实现的。通过这些参数的设置可以把芯片灵活应用于各种场合,并且可以根据需求达到不同的视频采集效果。
对ADV7181B的读写控制是通过I2C总线来控制的。I2C总线是一种只采用两根数据线的串行总线协议。总线的两根数据线是SCLK和 SDA,分别用来传送时钟和数据。ADV7181B在I2C总线中的地址可以通过芯片的ALSB管脚来配置。在设计中,FPGA中的I2C模块是作为主设备来对ADV1781B进行配置;而ADV7181B作为从设备接收I2C总线传来的数据,实现芯片的初始化、寄存器的配置等一系列操作。
1.2 Xilinx XC2V1000 FPGA
XC2V1000是属于Xilinx公司Virtex-II 系列的一款FPGA,具有高性能、高速度和低功耗的特点, 能够为电信、无线电、网络、视频和数字信号处理领域的应用提供完整的解决方案。XC2V1000主要具有以下特点:
100万个系统门;
40×32个可配置逻辑单元(5120个slice);
40个18×18 bits乘法器,1个工作时钟内即可完成乘法运算;
720Kbits RAM,可灵活配置(单口、双口、有使能或无使能等);
8个DCM(Digital Clock Manager)模块;
456个用户I/O。
1.3 系统硬件构架
对于FPGA+DSP结构的视频处理系统,一般由三个模块组成, 如下图1中所示:
图1 系统硬件构架
视频信号转换模块(视频解码器ADV7181B):模块实现的功能是把由摄像头输入的模拟视频转换成为 BT.656标准的视频数据流。在本系统中,摄像头输出PAL制的模拟视频,通过CVBS接口输入到ADV7181B中。
视频信号采集模块( FPGA+SRAM):模块中加入SRAM 是为了提高系统的灵活性, 既可以在FPGA中通过FIFO来实现缓存,也可以通过对SRAM的读写来实现缓存,并且为BT.656视频数据的预处理提供硬件支持。
视频信号处理模块(TMS320C6416):TMS320C6416是TI公司推出的高性能定点数字信号处理器,最高时钟频率可以达到1GHz,具有支持常见视频压缩算法的运算能力。
2 视频信号采集模块设计
视频解码器输出的BT.656格式的视频并不直接输入到DSP中进行处理,而是需要先在FPGA中进行预处理。FPGA中主要有三个接口: 与视频解码器的接口,与DSP的接口以及与SRAM的接口。
与视频解码器的接口分为:数据接收部分和控制部分。数据接收部分的数据宽度为8位,D0到D7; 控制部分即I2C模块,接口为SCLK和SDA。FPGA与DSP的64位EMIF相连, 并向DSP输出中断信号。SRAM采用两片Cypress公司的CY7C1049B,它是512k× 8bit的SRAM。SRAM的19位地址信号、8位的数据信号和其他的控制信号由FPGA提供。
2.1 ADV7181B的控制模块
FPGA是通过I2C模块进行ADV7181B的初始化、寄存器的读写等操作。在初始化时,FPGA发出开始信号,接下来按照从最高位到最低位的顺序输出ADV7181B的地址(7位,当ALSB管脚接地时, 地址为0x40),最后加上读写位(R/W bit)。如果ADV7181B接收到信号,会将SDA拉低作为回应。FPGA收到回应后再输出从地址(Subaddress)。ADV7181B有249个从地址以便于读写内部各个寄存器,这样接下来就可以对由从地址开始的地址段进行读写了。ADV7181B的读写时序如图2中所示。
图2 ADV7181B的I2C控制时序
在图2中的数据部分,是将储存在FPGA中的寄存器配置列表写到ADV7181B中。通过对寄存器配置列表的修改,可以实现对ADV7181B的各个参数进行设置。
2.2 视频信号的预处理
ADV7181B输入到FPGA中的信号是BT.656格式数据流。 BT.656全称叫ITU-R BT.656, 是一个数字视频流的传输格式。它定义了在不同器件间传输4:2:2的YCbCr信号的接口,有效视频分辨率可以是720×486 (对525/60视频系统)或者720×576(对625/50视频系统)。BT.656的串行接口可以是8位或者是10位,在本系统中使用8位来传输YCbCr信号。
BT.656数据视频流中的每一行有效像素由两个时间参考代码标识。SAV(Start of Active Video)表示有效视频开始,EAV(End of Active Video)表示有效视频结束。它们的长度都是四个字节,以FF,00,00开头,在第四个字节中含有这行视频像素的其他信息,如场信号、垂直同步信号、水平同步信号等。对于有效视频数据,BT.656按照一定的顺序逐个传输,先传输第一个像素的Cb,Y,Cr,然后传输第二个像素的Y,接下来是第三个像素的Cb,Y,Cr,以此类推。BT.656视频数据流的组成如下图所示。