[FTTVE100电视编码控制器IP开发]IP出校控制器
摘要:多媒体手持设备带有TV-out视频输出功能堪称一大亮点。TV-Out的使用简单便捷,只要把传输线一端接上手持设备的视频接口,再将另一端插入电视AV孔,与PAL或NTSC电视直接进行联机。以往要实现这项功能依靠的是外接一颗电视编码芯片,随着SoC设计的概念普及,越来越多的SoC芯片会将这个功能整合进来,所以提供一个好的电视编码控制器IP给芯片公司来设计SoC将成为主流。本文主要说明智原科技如何根据电视时序的要求设计电视编码控制器IP,以及如何在FPGA开发板上跟视频DAC测试样片做验证。
To Develop FTTVE100 TV Encoder IP
CHEN Hung-ming,WANG Zi-ling
(Faraday Technology China Corp.,Shanghai,200233 China)
Abstract:To have a TV-out feature for a portable device is a spotlight in multimedia application. TV-Out is easy for people to use, user just need to plug one side of transmission line to the portable device, and the other side to PAL or NTSC TV AV connector, then we may connect the portable device to the TV. In the past, people implement this feature by an external TV encoder IC. Along with the SoC design concept popular, more and more SoC chips integrate this feature inside the chip. So provide a TV encoder IP with good quality for chip vender to design SoC will become a mainstream. We will illustrate how Faraday Technology based on the TV timing requirement to develop the TV encoder IP, and how to verify the IP on FPGA with the Video DAC testchip.
Keywords: TV-out; TV encoder;FPGA
1引言
手持设备带有TV-out视频输出功能堪称一大亮点。TV-Out的使用简单便捷,只要把传输线一端接上手持设备的视频接口,再将另一端插入电视AV孔,与PAL或NTSC电视直接进行联机。连接好了以后,我们进入手持设备的系统设置菜单,根据电视的制式(TV-PAL、TV-NTSC及LCD)选择视频输出。很多手持设备的TV-out视频输出都是外接电视编码器芯片来完成,我们为了减少PCB板上的系统花费, 我们开发了电视编码器IP给SoC芯片开发商使用。视频输出一般是CVBS(Composite Video Broadcast Signal 复合视频广播信号)或S-video。
2以两个SoC应用为例
2.1 以一个PMP应用的SoC为例
我们将网路上下载的RMVB影像存到SD卡,先将压缩的RMVB存到DDR SDRAM, RMVB解码器将压缩文档解压缩成YCbCr422或YCbCr420再存到SDRAM,利用功能强大的LCD控制器到SDRAM读出影像后转成BT601/656像素数据流再输出到我们设计的电视编码器IP,如图1红线所表示。BT601是时钟,“vsync_i”、“hsync_i”,数据共8-bit,而BT656是时钟, 数据共8-bit. “vsync_i”以及 “hsync_i”都是同步信号,BT.656 不需要这两个信号,如果使用BT.656的话要将这两个管脚拉高。
2.2 以一个DVR应用的SoC为例
影像来源换成了从视频采集模块进来,先存到 DDR SDRAM. H.264 编码器从 SDRAM 获得资料,压缩后可以通过以太网传送,或通过U盘或者是SATA 硬盘存储。如果要当场直接看视频采集模块的画面,则 LCD 控制器直接从 SDRAM读取压缩前的数据播放,不需要解压缩。如果是要看之前某个时间的存盘数据,将存在硬盘已经压缩过的影像档读进SDRAM,然后解压缩,然后通过LCD 控制器传送到电视编码器在电视上播放。
3 电视编码器与周边模块的连接
3.1 电视编码器与LCD控制器的连接
LCD控制器与电视编码器的连接如图2所示。在AHB从端的接口有两个时钟域信号需要同步,PxClki信号在实际应用上要求在27 MHz,而AHB时钟要高于PxClki信号 (在我们的仿真环境, HCLK = 100MHz, PxClki = 27MHz)。在图2的连接,我们整合了TVE100和LCD控制器,而LCD控制器提供了PxClk.所以如果不先将LCD控制器先行启动的话,TVE100的寄存器是不能被访问的。
3.2 电视编码器与视频DAC的连接
电视编码器处理后交给10-Bit 250-MHz 单通道DAC,电视编码器提供一组节能信号给高速DAC,这个DAC的功能框图如图3所示。 DAC 是FTTVE100_S的下一级,也就是说FTTVE100_S的输出是DAC的输入,对DAC而言不管输入的数据格式为RGB 或YCbCr,DAC的功能只是单纯的将10-bit 数字信号转换成 0 - 1.305 V的模拟信号,因为有电视的信号有CVBS,Y/C 分开或者是YPbPr,所以需要3个10-bit DAC。当输出格式被配置为CVBS, DAC与通道间相互关系如下:
cvbs_DAC=>R通道=>CVBS
cvbsy_DAC=>G通道=>Y
cvbsc_DAC=>B通道=>C
当输出格式被配置为YPbPr,DAC与通道间相互关系如下:
cvbs_DAC=>R通道=>Y
cvbsy_DAC=>G通道=>Pb
cvbsc_DAC=>B通道=>Pr
也就是FTTVE100_S的输出信号为3个10-bit的数据,分别送到3个DACs,而这些10-bit的data都是经过FTTVE100_S编码过的CVBS/Y/C 或Y/Pb/Pr,其中YCbCr是数字信号而YPbPr是模拟信号。
3.3 电视编码器与总线的连接
这个IP需要一个AMBA 2.0转BT601/656协议的从端接口来控制FTTVE100_S内寄存器的读写,如果不是AMBA总线的设计会需要一个I2C转BT601/656议协议的接口。 FTTVE100_S是一个可重用的软IP核,在不同的配置模式下他会从帧缓冲区或LCD控制器的BT601/656输出来获取视频数据,再把视频数据转换成NTSC-M, NTSC-J, PAL-B, D,G, H, I, M, N等视频格式。FTTVE100_S都需要一个专用的27 MHz的时钟输入来支持所有类型的视频格式和AHB所需要的HCLK。时钟输入要求27 MHz (+/- 30 ppm)才能满足D1分辨率的带宽需求。时钟的相邻周期抖动(cycle to cycle jitter)要小于5%。占空比(duty cycle)不局限于50%。在确定我们的设计要求后我们先定出规格如下:
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 特性:
可编程接口
● 如果TVE_AHB_SLAVE被开启
● 接口完全兼容AMBA 2.0协议
● AHB总线时钟频率提升到133MHz
● 如果TVE_AHB_MASTER和TVE_AHB_SLAVE都被开启
● 接口完全兼容飞利浦I2C总线协议
TV接口
● 提供混合的、Y/C (S-Video)和YUV数字色彩分量的视频输出。
● combination N encoding NTSC-M, NTSC-J, PAL-B, D, G, H, I, M, N。
● 片上生成彩色光栅
输入数据模式
● FTTVE100_S
● BT601/656像素数据流
4TVE100_S逻辑模块介绍
TVE模块集成了一个数字视频编码器。如图4所示,把ITU-R BT656 YCbCr4:2:2的视频格式转换成Composite、S-video和YUV的数字视频输出。视频输出可以被配置兼容如下系统:NTSC-M, NTSC-J, PAL-B, D, G, H, I, M, N. 本模块需要一个27 MHz的时钟输入来处理各种视频格式转换。
4.1 视频时序生成器
所有的时序产生电路都是由一个27 MHz时钟来完成。这个时钟同时也驱动给其它绝大部分模块。在从模式中,本模块接收已经过同步过的外部信号;在主模式中,本模块输出已同步的信号。在这两种模式中,所有的信号都是在clki 的上升沿进行操作。TVE主体模块支持三种格式的视频输入:BT601从模式、BT601主模式和BT656模式。
4.1.1 BT601从模式
BT601从模式是默认的输入格式。该模式中,本模块从vsyncn_i和hsyncn_i接收时序信号。这两个信号的极性可以通过相关寄存器的配置来调整。该模式中,本模块使用外部的行同步和帧同步信号来校准模块内部时序。输入的数据信号pixel_data[7:0]在clki的上升沿取样。
图5描述的是ITU-R BT.601从模式中,视频行的时序。TVE主体模块预计在时钟的第245周期(NTSC/PAL-M系统)或者第265周期(PAL系统)接收到第一个有效的像素数据。可以通过修改寄存器vin_d[1:0]来增加时钟周期的延迟。
下面图6、7描述了ITU-R BT601.601 从模式中,视频帧的时序。vsyncn_i可以被配置成帧同步或者场同步模式。在帧同步模式中,hsyncn_i和vsyncn_i的有效沿同时出现,表明一个奇数场的开始;如果vsyncn_i的有效沿出现时hsyncn_i处于非有效区间,则表明一个偶数场的开始。如图6所示:
在场同步模式中,vsync_i的低电平期间代表奇数场,高电平代表偶数场。
4.1.2BT601主模式
在主模式中TVE断言视频时序,并通过hsyncn_o和vsync_o输出。这两个信号的极性同样也是可以配置的。
本模式下,视频时序生成器产生行同步和帧同步信号来控制外部的输入数据pixel_data[7:0]。视频数据在clki的上升沿被取样。
图8是说明ITU-R BT.601主模式的水平时序。TVE主体模块预计在clki的第245个周期(NTSC/PAL-M)或者第265个周期(PAL系统)接收到第一个有效像素数据。
图9是说明ITU-R BT.601主模式的帧时序,vsyncn_o的极性是可配置的。在垂直同步模式中,如果hsyncn_o和vsyncn_o有效沿同时到来,表明一个奇数场的开始;当vsyncn_o有效沿到来,而hsyncn_o处于非有小区间时,则表明一个偶数场的开始。
而图10说明在场模式中vsyncn_o低电平期间代表奇数场,高电平代表偶数场。
4.1.3 BT656模式
该模式中,水平和垂直时序会内嵌在输入的8位pixel_data[7:0]里面。“pixel_data”在clki的上升沿被取样。
本模式中,视频时序生成器会从“SAV”(有效视频开始)和“EAV”(有效视频结束)中提取出水平和垂直同步信号,SAV和EAV内嵌在ITU-R BT.656数字视频输入数据流pixel_data[7:0]之中。从SAV和EAV中提取的视频时序信号,TVE主体模块可以由vsyncn_o和hsyncn_o进行输出。vsyncn_o和hsyncn_o的极性都是可配置的。在本模式中,vsyncn_o和hsyncn_o主要用于调试目的。
“vsyncn_o”能够配置成垂直同步模式和场模式。在垂直同步模式中,vsyncn_o和hsyncn_o同时出现有效沿,表明一个奇数场的开始。而vsyncn_o有效沿到来时,而hsyncn_o处于非有效期间,则表明一个偶数场的开始。在场模式中,vsyncn_o的低电平代表了奇数场,而高电平代表了偶数场。
图11是说明ITU-R BT.656模式的时序结构,SAV和EAV的次序显示在后面的表1中,状态字的定义如下:
F = "0" 奇数场, F = "1" 偶数场
V = "1" 场消隐
H = "0" 在 SAV, H = "1" 在 EAV
P3 ~ P0 = 保护位
P3 = V 异或 H
P2 = F 异或 H
P1 = F 异或 V
P0 = F异或V异或H
5视频输出时序
5.1 NTFS视频输出时序
TVE主体模块支持如下格式:NTSC-M, NTSC-J和PAL-M。每秒29.97帧,每帧有525行,由两个262.5行的两个固定场组成。模拟的NTSC配合一个视频数模转换器的输出时序如下图12所示。
5.2 PAL视频输出时序
TVE主体模块支持如下格式:PAL-B, D, G, H, I, N。每秒25帧,每帧有625行,由两个312.5行的两个固定场组成。模拟的PAL配合一个视频数模转换器的输出时序如下图13所示。
6I2C接口
快速I2C接口用来控制内部的配置寄存器,这些寄存器拥有一个8位的子地址。TVE主体模块时钟作为一个从设备。关于FTTVE100_S 的I2C 协议如下:
1. I2C协议的第一个byte 为I2C地址,一定要是7-bit 地址0x15,如果系统中0x15已被其它I2C设备占用了,还可以改tve_i2c.v中的参数。
2. 针对写数据到寄存器 (0x03)
Sr->7-bit地址(0x15)->写(1"b0) -> ACK (1"b0) -> index (0x03) -> ACK(1"b0) -> 数据(0x5a) -> ACK (1"b0) -> P
3. 针对由寄存器(0x03)读数据
Sr -> 7-bit 地址(0x15) ->写(1"b0) -> ACK (1"b0) -> index (0x03) -> ACK (1"b)-> Sr -> 7-bit 地址(0x15) -> 读(1"b1) -> ACK (1"b0) ->数据(0x5a, 来自FTTVE100_S) -> NACK (1"b1) -> P
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 4. FTTVE100_S所有的寄存器都能被读取,其中部分寄存器是只开放读取。I2C 协议的仿真波形如下图14。
7对FPGA或芯片在板级的调试方法
FPGA的验证需要的是视频DAC测试芯片的整合测试。测试芯片包含了一个10 bit 150 MHz current-steering DAC, 称为FXDAC030HC0H, 这是专门为了视频应用所设计的。芯片是利用UMC 0.13μm 1.2V/3.3V 1P8M 逻辑工艺实现的。芯片的封装如下图15所示。
针对这个测试芯片,我们建议的应用电路如图16所示。
芯片针对电视输出的测试调试方法,我们的建议如下:
1. 国内的电视系统是PAL-B,所以如果客户是用一般家用电视,而不是用工业电视做显示的话,有的只有支持PAL系统的CVBS, S-video和YPbPr (有些电视只有支持HDTV YPbPr)。
假如显示器只有支持PAL系统,那就要将FTTVE100_S做适当的设定,才能有正确的输出,所以看可以在测试时将每一个寄存器读出,确定寄存器是否配置正确。
2. FTTVE100_S可以将输出设成黑屏和蓝屏,建议初步先试试这两种输出,如果成功看到黑屏和蓝屏的画面,至少可确定显示模式以及时序都没问题。
3. 上述2个阶段都成功后,设计者要有个LCD控制器或CCIR601/656 产生器的设备提供影像来源,可以量测该设备输出的CCIR601或CCIR656协议是否正确:
a. 时钟是否为27MHz
b. 协议的horizontal blanking周期, vertical blanking周期以及active周期是否正确。特别强调的是, 不准确的时序会造成FTTVE100_S的输出时序不正确,如此显示器内的电视解码器有时是无法解码的。
举个TVout模块寄存器配置用于输出一个黑屏的例子如下。分为两部分,第一部分为pre_encoder模块寄存器配置,第二部分为TVencode模块的寄存器配置。
/*pre_encoder模块寄存器配置*/
PALADIN_I2C_Read(TV_EN,&temp); //寄存器地址:0x35
PALADIN_I2C_Write(TV_EN,0x02);
PALADIN_I2C_Read(TV_EN,&temp);
PALADIN_I2C_Read(TV_CTL,&temp); //寄存器地址:0x3f
PALADIN_I2C_Write(TV_CTL,0x92);
PALADIN_I2C_Read(TV_CTL,&temp);
/*TVencoder模块寄存器配置*/
PALADIN_I2C_Write_TV(TVE_SoftReset,0x01); //寄存器地址:0x04
PALADIN_I2C_Read_TV(TVE_Revision_1,&temp); //寄存器地址:0x0f //测试IIC
PALADIN_I2C_Read_TV(TVE_Revision_2,&temp); //寄存器地址:0x10 //测试IIC
PALADIN_I2C_Read_TV(TVE_Revision_3,&temp); //寄存器地址:0x11 //测试IIC
PALADIN_I2C_Read_TV(TVE_Revision_4,&temp); //寄存器地址:0x12 //测试IIC
PALADIN_I2C_Read_TV(TVE_VideoFormat,&temp) ;//寄存器地址:0x00 //PAL-N制式
PALADIN_I2C_Write_TV(TVE_VideoFormat,0x02);
PALADIN_I2C_Read_TV(TVE_VideoFormat,&temp) ;
PALADIN_I2C_Read_TV(TVE_VideoInput,&temp); //寄存器地址:0x01 //BT656模式
PALADIN_I2C_Write_TV(TVE_VideoInput,0x02);
PALADIN_I2C_Read_TV(TVE_VideoInput,&temp);
PALADIN_I2C_Read_TV(TVE_VideoOutput,&temp) ; //寄存器地址:0x02 //0x20为输出蓝屏,0x10为输出黑屏
PALADIN_I2C_Write_TV(TVE_VideoOutput,0x10);
PALADIN_I2C_Read_TV(TVE_VideoOutput,&temp);
由上面的资料得知输出模式配置为PAL-N,这是南美洲国家巴拉圭与乌拉圭的规格,与国内采用的PAL-B差别在于有没有7.5IRE的blanking pedestal.我们建议如下(将0x00的写入值改为0x06), 并遵循以下五个原则来处理。
1. 编程的值要参照下表2。
2. DAC 是FTTVE100_S的下一级,也就是说FTTVE100_S的输出是DAC的输入,对DAC而言,不管输入的数据格式为RGB或YCbCr,DAC的功能只是单纯的将10-bit 数字信号转成 0 ~ 1.305 V的模拟信号,因为有电视的信号有CVBS, 分离Y/C 或者是YPbPr,所以需要3个10-bit DAC。
举例DAC 1=>CVBS 或者Y
DAC 2=>Y 或者 Pb
DAC 3 => C 或者Pr
也就是说FTTVE100_S的输出信号为3个10-bit的数据,分别送到3个DACs,而这些10-bit的数据都是经过FTTVE100_S编码过的CVBS/Y/C or Y/Pb/Pr,也就是说YCbCr是数字信号而YPbPr是模拟信号。电视编码器的3组DAC会分别输出CVBS, Y of S-video以及 C of S-video,要确定与电视的端子有接对,可以尝试分别将DAC输出插到电视的AV端子便可确定CVBS信号。
3. 确定所使用的DAC输出的电流值是正确的(0x3FF时约17 mA左右),然后PCB上的电路可参考下图17,建议可在DAC输出端放两个并联接地的75 Ω的电阻,若发现画面太暗或无画面,可拿掉其中一个电阻(此时表示显示器端的ADC 输入已有并联一个75 Ω电阻接地)。
当插上CVBS线后信号会衰减,这是因为CVBS线的另一端(显示器)已有75 Ω电阻并联接地,而电视编码器后端的DAC应该是并联了两个75 Ω电阻,需要捡查DAC的输出端是否如此,是的话要拿掉一个电阻。
4. Video DAC 测试可以通过color bar pattern,大部份的DAC都可通过外接一个可变电阻来调扇出,如下图18所示,通过示波器量测并调整DAC的扇出,使其sync level落在0.020 V,white level落在1.020 V。示波器上所显是的Vp-p在未接上电视前为2.2 V,但插上电视后信号的振幅会衰减是正常的。通常电视内部的电视解码器会有75 Ω电阻并联接地,因此会把我们电视编码器端的输出阻抗整个拉下来,因此会把电压给拉下来。但PCB上的阻抗匹配要在调整一下,正常情况,没插电视机时要有2.040 V的Vp-p,插上后要有1.020 V的Vp-p。
5. 测试环境如果是FPGA + DAC 子板的话,应该可量测到FPGA (FTTVE100_S) 的数字输出,先确定FTTVE100_S送给DAC 的10-bit 数字信号是否正确,若在sync区间此时应该量到0x10,如果数字输出正确的话,可能是DAC underflow的问题。
8总结
电视编码器IP的门数在20 k 左右, 在SoC设计上微乎其微, 却能够让SoC增加影像由电视输出的功能,这个IP已经在数字像框、手机、PMP与DVR
(下转第43页)
等各个应用上得到量产等级的验证, 我们发现大部分的问题还是在PCB的设计上需要做阻抗匹配, 所以我们特别强调了如何在系统上进行调试, 希望对有志开发SoC内置电视编码器的芯片设计者有所启发。
作者简介
陈宏铭,技术市场部 总监,智原科技(上海)有限公司。
汪子凌,技术市场部 技术顾问,智原科技(上海)有限公司。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
