基于SoPC的视频跟踪系统中OSD功能的实现
OSD(On Screen Display)是指将系统的参数和状态信息在屏幕上显示出来,在电视机、录像机等家电产品中这种技术早已广泛应用。视频跟踪系统要求进行数字、符号、跟踪窗的实时显示,即具有OSD功能,包括无视频输入指示、锁定指示、跟踪状态和性能指示、显示脱靶量数据及其他操作参数等。
OSD的实现方法基本上有三种:使用专用OSD器件;选用支持OSD功能的处理器;采用PLD。在实时性要求较高的视频跟踪系统中,需要使用大规模FPGA进行并行图像处理,并且在FPGA中实现SoPC设计,同时应能减小系统的体积和成本。如果只选用专用OSD器件或带有OSD功能的处理器反而会增加系统硬件设计的复杂度,降低系统的可靠性。因此,有必要采用与SoPC系统相结合的OSD实现方案。
1 视频跟踪系统
基于SoPC技术的视频跟踪系统框图如图1所示。系统采用Altera公司的Stratix 系列FPGA及Nios Ⅱ软核处理器实现SoPC设计,将图像处理、目标识别与跟踪等协处理单元挂在Nios Ⅱ处理器上,并通过SPI、I2C等IP-Core实现对操纵杆、视频编解码器等设备的控制。系统支持PAL-D(576i25)标准输入输出。
2 OSD实现方案
2.1 SoPC系统的配置结构
在SoPC系统中,实现OSD功能要与如图2所示的SoPC系统的配置结构相结合,系统采用Altera公司的MAX-II器件作为配置控制器,在系统启动(boot)时负责将FPGA的配置数据从外部Flash Memory传送到Stratix中。这里将OSD字符/图形库以只读数据的形式存放在外部CFI-Flash中,CFI-Flash同时装有FPGA的配置数据和软件程序,配置结束后MAX-Ⅱ需要将连接CFI-Flash的全部总线置为‘Z’,这样Nios Ⅱ处理器才能够获得CFI-Flash的总线使用权,以读取程序和OSD数据。
2.2 OSD实现结构
OSD实现框图如图3所示。这里采用了FPGA中的一个M-RAM作为OSD缓存,其中每位与视频中的一个像素映射。因PAL-D复合视频信号为隔行扫描,因此,OSD缓存中的数据按奇/偶场方式存放,每场占用720×288/8=25 920B,M-RAM大小为64KB,可实现全视场范围的单色OSD映射。OSD缓存被定义为双口方式,输出与视频数据流同步。
OSD缓存的数据位宽可定义为2n(n=0,1,…),但应该注意:数据位宽选得越大,NiosⅡ处理器的访问速度就越快,而OSD的水平方向定位也越复杂;数据位宽选得越小,水平方向定位越精确,但访问速度也会越慢,且实时性差。因此,进行折衷处理,选择lpm_width=8。
M-RAM的读地址要根据行、场同步信号生成,图像原始分辨率为864×625,则水平计数器Cnt_Hor和垂直计数器Cnt_Ver为10bit宽,Cnt_Hor的异步清零端接脉冲化后的行同步信号HSYNC,Cnt_Ver的异步清零端接脉冲化后的场同步信号VSYNC。在有效图像分辨率为720×576范围内,使能地址计数器Cnt_Rd_Addr、Cnt_Rd_Addr的计数时钟为像素时钟的8分频,即每8个像素时钟读取一个数据,Cnt_Rd_Addr的异步清零端接脉冲化后的场同步信号VSYNC。
OSD缓存读地址生成逻辑如图4所示。图中,1.6875MHz时钟脉冲化后接74165的STLD(并行数据加载信号),每隔8个像素时钟载入一个字节的OSD数据并串行输出。图5为最简单的OSD合成逻辑,图中,bit→piexl的映射逻辑用一个8位并-串转换器74165实现,使用两个8bit的Mux2_1,如果ctrl_bit等于‘0’,则YCbCr输出原图像数据;如果ctrl_bit等于‘1’,则Y输出0xEB,CbCr输出0x10。
2.3 OSD API
OSD API的实现包括:创建API硬件接口;建立字符/图形库;OSD显示驱动函数(包括字节重构、字符显示、图形显示、消隐等)。
API硬件接口可以通过SoPCBuilder建立,包括16位地址OSD_ADDR、8位数据OSD_DATA、写使能OSD_WEN和OSD缓存的异步清零信号OSD_ACLR。由于M-RAM不能设置初始数据,因此上电后首先将OSD_ACLR置位,然后对OSD缓存初始化后,再将OSD_ACLR置零,以免开机时系统出现花屏现象。
字符/图形库可以通过字模提取软件得到,并定义到unsigned char const型数组中。打开Nios Ⅱ IDE中的System Library Properties窗口,将read-only data memory(.rodata)项设为ext_flash,即将OSD库放在外部的CFI-Flash中。
OSD数据写入缓存时要注意两个关键问题,一是垂直方向上的隔行处理,即按照奇偶场规则写入缓存;二是水平方向上的字节拆分与重构,因为OSD缓存是整字节(8bit)访问的,为了实现字符/图形的像素级定位,该操作是必要的。例如,为了在位置3开始叠加如图6所示的11个bit‘1’,需要补5个bit的‘0’,并将重构后的“0x3f、0xf8”写入OSD缓存,该操作由软件完成。
- 单片DSP处理器功能系统的SOPC技术设计(01-12)
- 基于DSP和SOPC数字信号发生器的设计(01-05)
- 基于Linux的SoPC应用系统设计(04-23)
- 基于DSP的实时数据处理系统浅析(02-28)
- 基于LXI总线的1553B通讯模块设计与开发(11-24)
- 双MicroBlaze软核处理器的SOPC系统设计(01-27)