一、 引言
随着计算机的广泛使用,对输出的VGA信号进行实时监控、存储及传输的应用需求越来越迫切。本文基于Ti公司的TMS320DM355处理器(简称DM355)、AD公司的AD9883芯片,结合FPGA技术,提出了一种支持分辨率较高、性能优良的视频信号采集和接口电路方案。
该系统对计算机输出的XGA(1024x768)信号进行实时采集、编码、传输,同时利用ADV7123芯片将VGA信号还原,在本地的显示器进行输出,主要应用于视频会议,视频教学系统中。由于VGA信号的采集涉及到AD9883[1] [2]芯片和FPGA中信号时序的转换,及DM355的视频处理前端(VPFE:Video Processing Front End)驱动的修改,比较复杂,本文将对此作重点阐述。
二、 系统整体设计
1. 方案选择
本文采用TI公司的达芬奇系列芯片TMS320DM355来实现,这一方案的优点在于:
1)DM355内部集成了ARM926EJ-S内核、协处理器(MJCP)、视频处理子系统及多种外设。ARM中移植嵌入式linux后可构成一个良好的基于网络的嵌入式产品开发平台,能方便的实现Web服务器的构建和功能的扩展。协处理器(MJCP)可实现对多媒体数据的编解码。
2)DM355是一款低功耗的芯片,待机功耗仅为1mW,其电池的使用寿命是当今业界相当的便携式产品的2倍。
3)DM355是TI公司的一款中低档芯片,在满足性能要求的同时,其价格与同类芯片相比也很有优势。因此,广泛应用于数码相机,IP摄像机,数码相片,医学成像及视频监控系统中。
DM355的视频处理子系统包括视频处理前端(VPFE)和视频处理后端(VPBE:Video Processing Back End),视频处理前端[3]用于接收外部传感器或视频译码器等输入的图像信息,由CCD控制器、硬件图像信号处理器、自动曝光/聚焦模块H3A和寄存器组成,支持的视频输入格式有如下三种:
1) RAW格式。
2) BT.656格式。
3) YUV格式。
其中,RAW格式对于每个像素点只存储RGB三原色中某一种颜色的值,在进行色彩还原时因插值运算会导致莫尔纹效应;BT.656格式支持的视频分辨率太低,因此,本系统的DM355处理器的视频处理前端采用YUV格式进行视频采集,须将VGA信号通过硬件电路转换为YUV信号格式。
2. 系统总体设计
图1所示为VGA视频采集系统框图。
图1 VGA视频采集系统框图
1)VGA输入模块。将RGB模拟信号及行同步信号(Hsync)、场同步信号(Vsync)输入给A/D转换模块。由于该模块由模拟电路组成,易产生噪声,因此布线时接口器件应尽量靠近A/D转换芯片。
2)A/D转换模块。首先根据行、场同步信号确定采样的行频和场频,接着由行频和内部寄存器确定像素同步时钟,然后通过配置AD9883芯片内部的锁相环(PLL)产生同步时钟。该模块可将输入的VGA模拟信号转换为8bit×3路的数字视频信号,并通过一系列寄存器调整图像的采样效果。
3) FPGA转换控制模块。一方面FPGA通过I2C总线向AD9883的寄存器写入控制信息;另一方面将输入的RGB信号转换为DM355支持的YUV信号格式,将视频信号送给DM355的视频采集前端。
4)D/A输出显示模块。该模块采用ADV7123芯片将8bit×3路RGB数字信号还原为模拟信号,并结合行、场同步信号构成VGA信号,供本地计算机显示输出。
三、 系统硬件设计
1.VGA接口
VGA是一种D型接口,可传输VGA,SVGA,XGA,SXGA等图像格式。VGA接口共有15条线,分为3组:一是RGB三色模拟信号输入线;二是RGB三色地线,接地处理;三是时序信号线,分别是行同步信号线(Horizon Synchronizing,HS)和场同步信号线(Vertical Synchronizing,VS),这两条线控制了VGA的显示时序。
显示器采用逐行扫描的方式进行扫描,阴极射线枪发出的电子束打在涂有荧光粉的屏幕上,产生RGB三基色,由此合成一个彩色图像。VGA显示可分为行扫描和场扫描,从屏幕左上方开始扫描,从左到右,由上至下。每行扫描结束时,用行同步信号进行行同步;当整个屏幕的所有行扫描结束后,用场同步信号进行场同步,如图2所示。在扫描过程中,CRT对电子束进行消隐控制,在消隐过程中不发送电子束。在每行结束后,电子枪回扫的过程进行行消隐;在每场结束后,电子枪回扫的过程进行场消隐,整个屏幕变黑,光栅在这段内重新回到屏幕的左上角,开始下一帧图像的扫描。
图2 VGA扫描时序
2. A/D转换模块
本系统的A/D转换器采用AD9883,该芯片专门用于采集模拟R,G,B信号,将其数字化显示或作为中间转换器件使用。该芯片具有采样精度为8bit×3路通道,最高采样率为140MSPS/s,300MB的模拟带宽,支持最高分辨率为SXGA(1280x1024),刷新率为75Hz的视频信号。基于AD9883的电路可为高清电视提供良好的接口,或作为高性能视频设备的前端扫描转换器,它的内部结构如图3所示,主要包括A/D转换电路、时钟产生电路、同步信号产生电路、I2C总线接口四个部分。
图3 AD9883的内部结构图
AD9883内部的寄存器通过I2C总线完全可编程,芯片按照寄存器设定的模式进行工作。如AD9883支持多种VGA格式,但不能自动检测实现自适应,需要通过I2C接口进行寄存器配置,指定芯片采集的视频格式。
经AD9883转换后,数字视频信号输出的时序如图4所示。在数据输出时钟DATACK的下降沿对应信号的采样及量化,量化的数据在时钟上升沿稳定的输出;接口电路可在DATACK的上升沿准确地锁存图像数据,从而实现数字化图像的采集。值得注意的是,AD9883有一个数据输出通道,在输出数据有效之前必须清空通道,从而导致每行输出有效数据之前将输出4组无效的数据,可通过行同步信号HSOUT避免输出这些无效数据。
图4 AD9883数据输出时序图
一、 引言
随着计算机的广泛使用,对输出的VGA信号进行实时监控、存储及传输的应用需求越来越迫切。本文基于Ti公司的TMS320DM355处理器(简称DM355)、AD公司的AD9883芯片,结合FPGA技术,提出了一种支持分辨率较高、性能优良的视频信号采集和接口电路方案。
该系统对计算机输出的XGA(1024x768)信号进行实时采集、编码、传输,同时利用ADV7123芯片将VGA信号还原,在本地的显示器进行输出,主要应用于视频会议,视频教学系统中。由于VGA信号的采集涉及到AD9883[1] [2]芯片和FPGA中信号时序的转换,及DM355的视频处理前端(VPFE:Video Processing Front End)驱动的修改,比较复杂,本文将对此作重点阐述。
二、 系统整体设计
1. 方案选择
本文采用TI公司的达芬奇系列芯片TMS320DM355来实现,这一方案的优点在于:
1)DM355内部集成了ARM926EJ-S内核、协处理器(MJCP)、视频处理子系统及多种外设。ARM中移植嵌入式linux后可构成一个良好的基于网络的嵌入式产品开发平台,能方便的实现Web服务器的构建和功能的扩展。协处理器(MJCP)可实现对多媒体数据的编解码。
2)DM355是一款低功耗的芯片,待机功耗仅为1mW,其电池的使用寿命是当今业界相当的便携式产品的2倍。
3)DM355是TI公司的一款中低档芯片,在满足性能要求的同时,其价格与同类芯片相比也很有优势。因此,广泛应用于数码相机,IP摄像机,数码相片,医学成像及视频监控系统中。
DM355的视频处理子系统包括视频处理前端(VPFE)和视频处理后端(VPBE:Video Processing Back End),视频处理前端[3]用于接收外部传感器或视频译码器等输入的图像信息,由CCD控制器、硬件图像信号处理器、自动曝光/聚焦模块H3A和寄存器组成,支持的视频输入格式有如下三种:
1) RAW格式。
2) BT.656格式。
3) YUV格式。
其中,RAW格式对于每个像素点只存储RGB三原色中某一种颜色的值,在进行色彩还原时因插值运算会导致莫尔纹效应;BT.656格式支持的视频分辨率太低,因此,本系统的DM355处理器的视频处理前端采用YUV格式进行视频采集,须将VGA信号通过硬件电路转换为YUV信号格式。
2. 系统总体设计
图1所示为VGA视频采集系统框图。
图1 VGA视频采集系统框图
1)VGA输入模块。将RGB模拟信号及行同步信号(Hsync)、场同步信号(Vsync)输入给A/D转换模块。由于该模块由模拟电路组成,易产生噪声,因此布线时接口器件应尽量靠近A/D转换芯片。
2)A/D转换模块。首先根据行、场同步信号确定采样的行频和场频,接着由行频和内部寄存器确定像素同步时钟,然后通过配置AD9883芯片内部的锁相环(PLL)产生同步时钟。该模块可将输入的VGA模拟信号转换为8bit×3路的数字视频信号,并通过一系列寄存器调整图像的采样效果。
3) FPGA转换控制模块。一方面FPGA通过I2C总线向AD9883的寄存器写入控制信息;另一方面将输入的RGB信号转换为DM355支持的YUV信号格式,将视频信号送给DM355的视频采集前端。
4)D/A输出显示模块。该模块采用ADV7123芯片将8bit×3路RGB数字信号还原为模拟信号,并结合行、场同步信号构成VGA信号,供本地计算机显示输出。
三、 系统硬件设计
1.VGA接口
VGA是一种D型接口,可传输VGA,SVGA,XGA,SXGA等图像格式。VGA接口共有15条线,分为3组:一是RGB三色模拟信号输入线;二是RGB三色地线,接地处理;三是时序信号线,分别是行同步信号线(Horizon Synchronizing,HS)和场同步信号线(Vertical Synchronizing,VS),这两条线控制了VGA的显示时序。
显示器采用逐行扫描的方式进行扫描,阴极射线枪发出的电子束打在涂有荧光粉的屏幕上,产生RGB三基色,由此合成一个彩色图像。VGA显示可分为行扫描和场扫描,从屏幕左上方开始扫描,从左到右,由上至下。每行扫描结束时,用行同步信号进行行同步;当整个屏幕的所有行扫描结束后,用场同步信号进行场同步,如图2所示。在扫描过程中,CRT对电子束进行消隐控制,在消隐过程中不发送电子束。在每行结束后,电子枪回扫的过程进行行消隐;在每场结束后,电子枪回扫的过程进行场消隐,整个屏幕变黑,光栅在这段内重新回到屏幕的左上角,开始下一帧图像的扫描。
图2 VGA扫描时序
2. A/D转换模块
本系统的A/D转换器采用AD9883,该芯片专门用于采集模拟R,G,B信号,将其数字化显示或作为中间转换器件使用。该芯片具有采样精度为8bit×3路通道,最高采样率为140MSPS/s,300MB的模拟带宽,支持最高分辨率为SXGA(1280x1024),刷新率为75Hz的视频信号。基于AD9883的电路可为高清电视提供良好的接口,或作为高性能视频设备的前端扫描转换器,它的内部结构如图3所示,主要包括A/D转换电路、时钟产生电路、同步信号产生电路、I2C总线接口四个部分。
图3 AD9883的内部结构图
AD9883内部的寄存器通过I2C总线完全可编程,芯片按照寄存器设定的模式进行工作。如AD9883支持多种VGA格式,但不能自动检测实现自适应,需要通过I2C接口进行寄存器配置,指定芯片采集的视频格式。
经AD9883转换后,数字视频信号输出的时序如图4所示。在数据输出时钟DATACK的下降沿对应信号的采样及量化,量化的数据在时钟上升沿稳定的输出;接口电路可在DATACK的上升沿准确地锁存图像数据,从而实现数字化图像的采集。值得注意的是,AD9883有一个数据输出通道,在输出数据有效之前必须清空通道,从而导致每行输出有效数据之前将输出4组无效的数据,可通过行同步信号HSOUT避免输出这些无效数据。
图4 AD9883数据输出时序图
3.FPGA设计
本系统采用EP1C3T144C8将输入的数字化的RGB信号转换为YUV信号,送给DM355的视频采集前端。FPGA以AD9883输出的像素时钟PCLK作为全局同步时钟。
RGB和YUV是两种常用的色彩空间。RGB色彩空间是采用R,G,B三个色彩分量来表示一个像素,常见的RGB格式有RGB565、RGB555、RGB24,本文中AD9883转换输出的数据格式为RGB24,即每个像素用24位表示,RGB分量各使用8位。
YUV色彩空间是视频传输中常采用的一种方法,其特点为亮度信号与色差信号分离。Y表示亮度信息,U表示蓝色色差(即蓝色信号与亮度信号的差值),V表示红色色差(即红色信号与亮度信号的差值)。常见的YUV格式有YUV 4:4:4,YUV4:2:2,YUV4:2:0,本系统中DM355的视频处理前端接收的采集信号格式为YUV4:2:2。该格式为每个像素保留Y分量,而UV分量在水平方向上每两个像素采样一次,在图像数据流中,YUV分量排列如下:Y0 U0 Y1 V0 Y2 U1 Y3 V1 Y4 U2 Y5 V2 … …
图5所示为FPGA进行色彩转换的工作框图,该模块将输入的8bit×3路RGB信号转换为16bit的YUV信号。在YUV 16Bit的工作模式下,在一个时钟周期内,高八位用于间隔传递U分量或V分量,低8位用于传输Y分量。
图5 FPGA芯片色彩转换框图
除色彩空间的转换外,FPGA模块将像素同步时钟及行、场同步信号送给A /D转换模块及DM355处理器,方便其他模块进行信号同步操作。
4.D/A输出显示设计
本设计采用ADV7123作为视频转换芯片,将数字视频信号转换为VGA模拟信号,供本地计算机显示输出。ADV7123具有三路高速、10位输入的视频DA转换器,具有330Mhz的最大采样速度,与多种高精度的显示系统兼容,可充分满足本系统的转换需求。当RGB三通道的输入比特数少于10位时,可将高位用于数据比特传输,低位接地处理。ADV7123芯片产生三路模拟输出后,结合FPGA传来的行、场同步信号完成视频的显示。
四、 系统软件设计
1. FPGA软件设计
FPGA[4]模块的软件设计主要实现以下3方面的功能:
1)I2C接口配置
在上一小节中提到,AD9883芯片内部的寄存器通过I2C总线完全可编程,本小节将讲述FPGA通过I2C接口对这些寄存器的具体配置。通过这些具体参数的配置,可实现对AD9883视频采集格式、视频转换效果等的控制。
AD9883内部共25个寄存器,其中00H和14H为只读寄存器,15~18H为测试用寄存器,01H~13H为功能寄存器。FPGA芯片对主要功能寄存器的配置如表1所示:
表1 AD9883寄存器配置
功能
|
寄存器
|
配置值
|
锁相环分频控制
|
01H
|
F0H
|
时钟产生器控制
|
03H
|
70H
|
04H
|
80H
|
|
箝位控制
|
05H
|
09H
|
增益和偏置控制
|
08H
|
90H
|
09H
|
90H
|
|
0aH
|
90H
|
|
0bH
|
80H
|
|
0cH
|
80H
|
|
0dH
|
80H
|
2)RGB与YUV的转换
本系统中的FPGA模块的另一功能是将RGB信号转换为YUV信号,二者转换的公式为(RGB取值范围均为0-255):
(式 1)
由于FPGA芯片进行浮点运算时,运算步骤繁琐并且硬件资源消耗较大,故将式1中的参数均乘以256后取整,转换如下:
(式2)
经过运算后,得到式2中的Y’,U’,V’分量后,分别取数据的高八位即为Y,U,V分量的实际值。
3)VPFE接口时序的实现
由于AD9883芯片输出的同步信号与DM355要求的输入同步信号格式不匹配,因此需要将同步信号进行转换。AD9883芯片输出的同步信号周期包括行消隐前肩、行消隐后肩、同步信号和图像数据四个部分,而实际传输给DM355的视频处理前端的信号仅包括同步信号和图像数据两个部分,因此需要对信号周期进行转换,如图6所示。
图6 VGA行、场同步时序示意图
2.DM355软件设计
1)视频处理前端驱动的修改
为了采集转换后的YUV信号,本文对DM355的视频处理前端的驱动进行了修改,配置视频采集设备的工作模式为YUV输入模式。主要修改的驱动文件为dm355_vpfe.c,部分代码解析如下:
static vpfe_obj vpfe_device_ycbcr = {
……
.vwin = {0,0,1024,768},//VPFE_WIN_VGA,
.bounds = {0,0,1024,768},//VPFE_WIN_VGA,
//设置采集的YUV信号的分辨率
.pixelaspect = VPFE_PIXELASPECT_NTSC,
.pixelfmt =V4L2_PIX_FMT_UYVY,
.field = V4L2_FIELD_NONE,
//设置V4L2的工作模式为逐行扫描格式
……
.capture_device = TVP5146,
.ccdc_params_ycbcr = {
.pix_fmt = CCDC_PIXFMT_YCBCR_16BIT,
//采用16位数据总线传输YUV信号
……
.bt656_enable = FALSE,
//不采用BT.656采集模式
.pix_order = CCDC_PIXORDER_CBYCRY,
.buf_type = CCDC_BUFTYPE_FLD_SEPARATED
//该设置相对于CCDC_BUFTYPE_FLD_INTERLEAVED而言,设置buffer为独立的
},
.tvp5146_params = {
.mode = TVP5146_MODE_AUTO,
.amuxmode = TVP5146_AMUX_COMPOSITE,
.enablebt656sync = FALSE,
//不采用BT.656同步模式
.data_width = TVP5146_WIDTH_16BIT
//数据总线宽度为16bit
},
.irqlock = SPIN_LOCK_UNLOCKED
};
2)视频信号采集程序设计
在DM355的应用程序设计中,视音频数据的采集、编码、输出分别通过Capture Thread,Video Thread, Writer Thread独立线程来实现。其中,视频采集线程的主要作用是对采集设备进行初始化,开辟缓冲区,以帧为单位往其中写入数据,为Video Thread做准备。
视频采集程序通过调用V4L2[5](Video For Linux 2)来实现,V4L2是Linux中提供的关于视频设备的内核驱动,它为针对视频设备的应用程序变成提供一系列的接口函数,如VIDIOC_REQBUFS,分配内存;VIDIOC_QUERYBUF,将VIDIOC_REQBUFS中分配的数据缓存转换成物理地址;VIDIOC_QUERYCAP,查询采集设备功能;VIDIOC_S_FMT,设置当前驱动的视频捕获格式;VIDIOC_STREAMON,开始视频采集等。
图7采集设备初始化流程图
图7为视频采集线程对采集设备进行初始化的流程图。在Linux中,视频采集设备的设备文件名为/dev/video0,可通过函数open(“/dev/video0”, O_RDWR | O_NONBLOCK, 0)来打开视频设备。打开设备文件后,利用ioctl函数,设置不同的V4L2参数,来调用底层的V4L2驱动程序,获取视频采集设备的参数,根据实际应用需求设置视频格式,同时为采集设备分配帧缓冲区, 并将该缓冲区映射到用户空间。这样,当缓冲区中存储了一帧视频数据后,VIDIOC_DQBUF就把数据从缓冲区中读取出来,VIDIOC_DQBUF把数据放入视频数据缓存队列继续下一帧的采集。当接收到结束采集命令时,通过ioctl函数发送VIDIOC_STREAMOFF命令,停止视频采集。
五、系统测试和结束语
本系统对VGA信号采集成功后,利用MPEG4算法进行编码,并利用开源的JRTP库实现网络传输功能,客户端可实时观看和存储接收到的码流。在进行VGA信号采集编码的同时,可利用ADV7123芯片将VGA信号还原,在本地的显示器进行输出。经过实验测试,本系统具有较好的实时性,解码后的图像主观质量也很好。
本文提出的基于TMS320DM355处理器,采用AD9883和ADV7123转换芯片,结合FPGA技术的VGA信号采集方案,能够对XGA信号进行实时采集。该系统可广泛应用于雷达、天气预报、航空航天、通信等领域的图像数据实时记录。
【参考文献】
[1] Analog Devices.AD9883A/AD9883A Data sheet[EB/OL].2007. http://www.analog.com/static /imported- files/data_sheets/ AD9883A.pdf.
[2] 胡建民,郭太良,林志贤。 AD9883 在平板显示视频接口中的应用[J]。现代电子技术, 2007(2):25-27.
[3] Texas Instruments Incorporated. TMS320DM35x digital media system-on-chip video processing front end (VPFE) RG spruf71a[EB/OL]。[2009-08-10]。 http://focus.ti.com/lit/ug /spruf71a/spruf71a.pdf 。
[4] 朱文伟,许忠仁,基于FPGA 的V GA 图像控制器的设计与实现[J ] 。 贵州大学学报:自然科学版,2009 ,30 (2) :109- 111.
[5] SCHIMEK Michael H,DIRKS Bill,VERKUIL Hans,et al. Video for Linux Two API specification [EB/OL]。 [2009-10-20].http://www.soezblog.com/plate/web/bookmarkmsg.jsp?UI =cherng64&CI =368&p =1&BI=199102.