文献标识码: A
文章编号: 0258-7998(2014)06-0010-04
随着科学技术的高速发展,在视频显示终端的原始图像上额外叠加一些文字信息或图形界面,向用户提供更多的附加信息已不再是什么难事,通过屏显示系统OSD(On Screen Display)就能够实现这种功能。近年来,OSD的设计受到越来越多的关注[1],OSD系统已然成为用户与显示终端之间交互的桥梁。
OSD系统通常采用专用芯片实现[2-4],这类方案或是以专用芯片内部微控制器作为核心,或是以外部单片机作为控制核心。由于OSD技术对同步时序的要求非常严格,所以用微控制器控制时序的可靠性较差[5]。随着视频显示技术的飞速发展,市场对电路集成度和视频数据处理速度的要求越来越高(同步时序要求更严格),采用专用芯片的实现方案越来越难以满足要求。很多厂商早已开始将OSD功能集成到一块包含其他功能模块的芯片上(即片上系统SoC(System on Chip)),国外一些厂商推出了采用FPGA实现OSD功能且具有知识产权的IP核,但其硬件实现技术一般处于封锁状态;国内也有采用FPGA实现OSD功能的研究[5-8],但仍处于探索阶段。因此,研究OSD功能的FPGA实现方案具有深远意义。
据此,本文提出一种基于SoPC的OSD控制器实现方案。该方案应用了一种OSD界面自定义布局方法和一种改进型二步索引算法[7],以软硬件协同的方式着重实现在源视频图像上叠加一个可自定义布局风格的OSD界面,整体上可实现自定义OSD功能。
1 OSD控制器的总体设计
本OSD控制器使用自定义OSD界面布局方法。首先基于像素扫描坐标在OSD界面内划分出字符显示区,将剩下的区域作为背景区,并基于OSD界面内一起止坐标可调的矩形区域(如图1中的矩形区域5)将背景区分为9个矩形区域,对不同区域选择输出所配置颜色的像素数据,并直接与源视频像素数据进行透明度混合运算输出,以此实现图像的叠加,同时省去OSD帧缓存的存储资源消耗。
基于以上方法的OSD控制器系统总体结构如图2所示。输入视频信号首先经过视频输入接口(图2虚线框内部分)提取出源视频信号中的像素扫描坐标及RGB像素数据;OSD区域识别模块基于像素扫描坐标判断当前所在位置,并发出相应标识信息,在整个数据处理过程中,软核系统通过写OSD配置寄存器组及字型码存储器读写接口,实现对OSD电路运行状态的实时控制;像素数据选择输出模块基于标识信息选择输出相应颜色的像素数据至后级;alpha混合运算处理模块完成OSD界面像素数据与从源视频信号中提取出的RGB像素数据的透明度混合运算处理;处理后视频信号输出至显示接口。
2 OSD控制器硬件平台的实现
根据实际情况,选择以Xilinx公司XC7K325T-2FFG900为核心芯片的Kintex7 FPGA开发板作为OSD控制设计的硬件平台,采用内嵌MicroBlaze软核的系统作为上位机。该开发板配有一定数量的I/O和各种数据接口,另外通过USB电缆将PC与Kintex7连接起来就能进行编程调试,使用方便可靠。图3所示为基于该硬件平台的OSD控制器系统框图。
2.1 SDI接口与HDMI接口模块
输入视频信号是数据格式为YUV的 20 bit串行数字接口SDI(Serial Digital Interface)信号,该模块首先将YUV444转换为YUV422,再转换为30 bit的RGB(各分量占10 bit)像素数据并将其作为整个处理过程的数据格式,从时序信号中提取出视频像素扫描坐标(X_scan,Y_scan)。为节省视频图像帧缓存资源,采用了高清晰度多媒体接口HDMI(High Definition Multimedia Interface)将处理得到的数据输出显示。
2.2 软核系统模块
通过Xilinx 公司ISE(Integrated Software Environment)内嵌的XPS(Xilinx Platform Studio)软件可以搭建以MicroBlaze软核处理器为控制核心的、具有AXI总线架构的软核系统,本设计中选择添加了axi_gpio接口组件和IIC_MAIN接口组件IP,另外自定义OSD配置寄存器组件layer、chars和字型码存储器读写接口index组件。
其中,axi_gpio接口组件与外部按键和LED相连,以实现对按键的检测及相关状态的显示;IIC_MAIN接口组件则作为软核对内部SDI信号接口模块的视频配置通道;自定义组件chars和layers分别为与字符显示属性和OSD界面属性相关的配置寄存器组;自定义组件index用于暂存软核写入的待显示字符索引号信息,并作为访问字型码存储器的接口,产生相应的访问地址。图4所示为本软核系统中各组件及其地址分配情况。
2.3 OSD配置寄存器组
组件chars和layers作为OSD配置寄存器组,每个组件最多包含32个32 bit的寄存器,这些寄存器位的含义可根据需要进行自定义。
对于chars组件,定义为32个字符串或进度条显示区的配置寄存器,其含义如表1所示。
本设计OSD界面的进度条显示区和字符显示区是分时复用的,且字符串所代表的含义也会有不同类别(如主、子菜单项和设置项等),因此采用D31~D29编码来体现这些差异。
组件layer中包含了与OSD界面属性配置相关的寄存器,如起点坐标(X_osd,Y_osd)、长L_osd、宽W_osd、布局坐标、各区域颜色和透明度等参数配置寄存器,共23个。
2.4 a_blending模块
本模块是整个OSD控制器的数据处理中心,依次完成图2所示的OSD区域识别、像素数据选择输出和alpha混合运算处理等过程。在区域识别模块检测到当前像素扫描坐标处于字符显示区时,该模块发出读字型码请求以获取相应点阵编码信息,在背景区则直接输出相应标识信号。后级模块根据点阵编码信息、区域标识信息及相关配置信息选择输出相应像素数据,最后完成与源视频像素数据的alpha混合运算处理。将alpha混合算法中的浮点数转换为两个2的幂次数的除法,便于硬件通过移位实现乘除运算,通过软件对幂次数的设置实现对透明度的实时控制。
3 OSD控制器的软件设计
基于OSD控制器的软件平台,在Xilinx的SDK(Software Development Kit)开发环境中编写控制、显示等应用程序,主要实现系统的初始化、按键控制、OSD界面设计、字符显示控制等功能。
系统在复位后对视频输入接口电路进行初始化,之后进入按键控制子程序,按键将引导系统进入OSD界面设计模式或者OSD工作模式,各模式将根据后续按键情况调用OSD界面设计子程序和字符显示控制子程序。主程序流程图如图5所示。
4 系统调试与运行结果
4.1 实验效果
如图6所示为1 280×720分辨率的源视频图像上叠加的两种720×360分辨率的自定义OSD界面(截图),界面显示状态可由软核(上位机)实时控制。
图6(上)中的布局坐标将OSD界面平均分成9个区域,各区域颜色、透明度均不同,界面下栏MENU1~12为12个主菜单字符串显示区;左栏SON1~SON6为6个子菜单字符串显示区;右上部分区域定义了6个设置菜单字符串项SET1~SET6及一个进度条显示区;最上方定义了一个当前选中设置项信息提示字符串显示区。这些字符串/进度条显示区的位置、颜色等属性均为实时可调的,在数量上也可根据需要增减。而图6(下)是对布局坐标及所产生的9个区域颜色、透明度参数进行了一定调整后形成的另一种界面。
4.2 资源消耗统计与分析
本OSD控制器模块所占用片内存储资源主要消耗在字型码存储器、索引号存储器的实现以及软核系统平台对实现字符串显示而进行的程序指令存储和数据存储。
对于软核系统平台在OSD控制器实现方面的资源消耗,自定义组件index、chars及layers各占4 KB,共计12 KB;axi_bram_ctrl_0组件用于存储实现OSD控制器模块字符串显示的程序数据,共用了64-16=48 KB。综上所述,OSD控制器模块最多消耗存储资源为2.1 KB+1 KB+12 KB+48 KB=63.1 KB。
在具体实现硬件电路时,多余的资源消耗将会被优化,因此OSD控制器模块实际消耗的存储资源将小于63.1 BK。图7所示为添加OSD控制器模块前后系统生成的片内RAM资源消耗报告表。由图可知OSD控制器模块消耗12个RAM36E1/FIFO36E1s,即12×(36/8)=54 KB。
而对于采用OSD界面帧缓存的设计方案,即使实现720×360的4色图像界面显示,至少也要消耗存储资源2×720×360/8/1 024=63.281 25 KB,这还不包括系统在其他方面的资源消耗。若要实现更多色彩图像的显示,则存储资源消耗将会成倍地增加。
OSD作为人机交互的桥梁,是视频处理模块的重要组成部分,而当前市场对视频处理模块电路集成度和数据处理速度要求越来越高。本文提出了一种基于SoPC的OSD控制器设计方案,其中应用了一种自定义界面布局方法和一种改进型二步索引算法,节省了系统的存储资源开销。另外对透明度混叠算法进行了取整变换,使之便于FPGA硬件实现及软件控制。总体上该方案以软硬协调的方式实现OSD控制器功能。实验结果表明,该控制器极大地节约了资源,并且在实现OSD功能时也有很好的灵活性。
参考文献
[1] 修晓琴,杨秀芝,郑明魁.基于FPGA内嵌软核的机顶盒OSD设计[J].电视技术,2013,37(13):70-72.
[2] 王艳艳,郅晨.基于TMS320DM6446的OSD显示技术的研究与实现[J].中国新通信(技术版),2008(3):45-50.
[3] 雷永锋.基于OSD选单的KVM系统设计[J].电视技术,2008,32(1):50-52.
[4] 王瑞胡.基于OSD技术的数字电视机顶盒汉字显示解决方案[J].电子设计应用,2003,9(1):102-105.
[5] 黄燕群,李利品,王爽英.基于FPGA的OSD设计[J].液晶与显示,2010,25(3):429-433.
[6] 罗韬,姚素英,史再峰,等.视频芯片中的OSD核的设计及FPGA的实现[J].吉林大学学报(工学版),2008,38(6):1452-1457.
[7] 刘科,张生才,史在锋,等.基于改进型二步索引算法OSD电路的FPGA实现[J].电子测量技术,2007,30(7):94-96.
[8] 杜升平,曹剑中,田雁,等.FPGA在OSD中的应用[J].科学技术与工程,2006,6(14):2065-2067.
[9] Zhang Sheng,Zhang Hao,CHEN B,et al.On-screen-display(OSD) and SPI interface on CMOS image sensor for automobile application[C].Computational Intelligence,Communication Systems and Networks(CICSYN),2013 Fifth International Conference on,IEEE,2013:405-408.