首页 > 范文大全 > 正文

一种基于改进型存储结构OSD芯片的设计与实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种基于改进型存储结构OSD芯片的设计与实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:本文针对中低端液晶显示系统,设计了一种基于改进型存储结构的字符型数字在屏显示(osd)发生器。采用三行三列的邻域运算生成字符边框,改进了现有字符发生器的存储结构,可以在一个时钟周期内同时读取三行字符点阵数据,产生字符边框,避免在芯片内部使用多个时钟,降低芯片设计复杂性。该设计经过FPGA验证和流片测试,工作稳定可靠,已经成功应用于便携式液晶显示DVD播放机和数码相框。

关键词:在屏显示;字符点阵;邻域运算

The Design and Implementation of OSD IC based

on improved Storage Structure

LI Yue-hui

(Jiangsu Province Key Laboratory of ASIC Design, Nantong University, Nantong 226019, China )

Abstract:The paper designed a font-based digital OSD engine with an improved storage structure based on the middle-end or low-end Liquid Crystal Display (LCD) system. The OSD adopts a 3x3 Neighborhood Operation arithmetic to generate the border and shadow of fonts. It improves the storage method of the font lattice, and three lines data of font lattice can fetch synchronously in one clock cycle to avoid using different clock in one design and to reduce the complexity of the chip. Logic functions and characteristic of the OSD engine are verified in FPGA, and the result shows that it can work stably and reliably. The OSD engine has been applied to portable DVD LCD players and Digital Photo Frame successfully.

Keywords: on screen display (OSD); character lattice; Neighborhood Operation

1引言

字符型在屏显示(On Screen Display,OSD)发生器,其原理是将OSD中显示内容以字符点阵形式固化在ROM或Flash中,在显示缓存中仅存放对应的索引号, MCU只需要指定显示内容的索引即可显示对应的OSD信息,可以在比较低速的MCU上实现。通常液晶显示器、低成本的平板电视和CRT传统电视上均使用这一类OSD,目前仍占据着市场主流地位[1]。

在字符型OSD中,字符点阵的存储方法与整个OSD发生器的架构设计方案密切相关[2]。一个好的存储方法,可以方便地实现OSD发生器的时序控制,同时还可以节省很多资源。OSD数据的输出,就是根据外部主机写入的配置信息从存储器中读取字符点阵的数据,结合行场同步控制以及位置、颜色等属性,生成字符、字符边框和字符背景等数据信号。

本文的设计基于一个字符边框发生器的邻域算法,改进了字符点阵在存储器中的存储结构,使得OSD能够在一个时钟周期内同时读取三行点阵数据,生成字符边框。OSD发生器的设计就是根据这个结构,简便地实现了OSD内部的存储器读写和OSD图文显示的时序控制,使得整个OSD的设计能够采用单个时钟的同步设计,不仅简化了设计中的时序电路控制,提高芯片的可靠性,而且大大简化了综合后的时序分析,同时降低芯片测试的复杂度,降低芯片成本。

2邻域运算原理

在屏幕上显示的字符本身每个像素点都是由对应的字符点阵数据决定的,与其周围的像素点没有任何关系,而在屏幕上显示的字符边框中每个像素点与该点周围相邻的像素点有关。字符边界生成算法就是根据该点周围的邻域的值进行邻域运算,从而判断该点是否为边界。

邻域运算是指当输出图像中每个像素是由对应的输入像素及其一个邻域内的像素共同决定时的图像运算。通常邻域是远比图像尺寸小的一规则形状[3]。本设计使用18x12的字符点阵,因此选用3x3的邻域模板,根据中心点周围的8个邻域点的数据进行计算,生成字符边界。3x3的邻域示意图如图1所示。

P(x,y)是读取到的中心点位置上的字符点阵数据,其余的表示中心点周围8个方位的点阵数据。

每一个点的值只有“0”或者“1”,字符本身的每一个像素点对应的字符点阵数据如果为“1”,那么该像素点就输出“1”;如果对应的字符点阵数据为“0”,那么该像素点就输出“0”。

当P(x,y)的值为“1”时,屏幕上也输出“1”,显示字符的本身,不是字符的边界,所以不需要作判断。当P(x,y)的值为“0”时,屏幕上该点没有输出,此时要对P(x,y)的8点邻域作计算,判断该点是否为边界。P(x,y)所对应的位置也就是当前需要判断是否为字符边界的像素点。

边界类型分为两种,环绕边框(all-direction border)和右下方边框(bottom-right border)。

环绕边框是指在字符周围8个方位都有边框,将字符包围起来,如图2(a)所示。只要这8个方位上有任意一点为“1”,边框输出就为“1”。见式(1)。

Bord1(x,y) =P(x-1,y-1)+ P(x,y-1)+ P(x+1,y-1)+ P(x-1,y)+ P(x+1,y)+ P(x-1,y+1)+ P(x,y+1)+ P(x+1,y+1)(1)

其中,Bord1(x,y)表示在P(x,y)对应位置上的环绕边框类型的边界值。

若8个方位全为“0”,则P(x,y)点不是字符的环绕边界,否则,只要这8个方位中任意一点为“1”,就可以判断该点为字符的环绕边界。

右下方边框,也称为字符的阴影,是指在字符的右下方有边框,在字符的右方、下方和右下方3个方位会产生边框。见图2 (b)所示。只要这3个方位上有任意一点为“1”,边框输出就为“1”,见式(2)。

Bord2(x,y) =P(x-1,y-1)+ P(x,y-1)+ P(x-1,y)(2)

其中,Bord2(x,y)表示在P(x,y)对应位置上的右下方边框类型的边界值。

若这3个方位全为“0”,则P(x,y)点不是右下方边界。否则,只要这3个方位中任意一点为“1”,就可以判断该点为字符的右下方边框,即字符阴影。

由字符边界生成算法可知,生成字符边界同时需要上中下三行相邻的点阵数据,每一行需要三个相邻的点阵数据,完成三行三列的邻域运算。

3常规的字符点阵存储结构

通常情况下,字符点阵数据按顺序存储在存储器ROM/RAM中,一行点阵数据(12位)作为一个存储单元,由点阵行地址构成存储器的访问地址[4]。图3表示了一个字符点阵数据的顺序存储结构,分别存放在从地址00H到11H的存储器单元中,其它字符从地址12H开始按同样顺序存储。

当在屏幕上显示一串字符的时候,首先显示每个字符的第1行,接着显示每个字符的第2行,然后显示每个字符的第3行,依此类推,直到显示每个字符的第18行,这一串字符显示结束。

当要显示字符的边框时,根据邻域算法,同时需要相邻的三行数据。

假设要在屏幕上显示一个字符的第5行,同时要判断该行是否有字符边框时,会同时用到第4、5、6行这三行点阵数据。这就要求系统在一个周期内完成三次读取操作,分别读取这个字符的第4行、第5行、第6行点阵数据。接着显示下一个字符的第5行,也同样会用到下一个字符的三行点阵数据。

由此可见,采用常规的字符点阵存储方法,在生成字符边框时,需要一个频率更高的时钟,时序控制电路比较复杂。

4改进后的字符点阵存储结构

在芯片设计过程中,为节省设计成本,缩短开发周期,都尽量采用单个时钟域的同步设计。如果采用多时钟域的设计,不仅设计的时序电路更复杂,而且芯片测试的复杂度大大增加,成本也相应增加,可靠性也会降低。基于这个思想,对字符点阵的存储方法进行了改进。

改进后的字符存储方法如图4所示,以一个字符为例,说明一下这个存储结构。把一个字符点阵的18行数据分别存储在3块相同大小的存储器中,每一块存储器存放6行点阵数据,地址都是从00H到05H。存储器0中按顺序存放着第1,4,7,10,13,16行点阵数据,存储器1中按顺序存放着第2,5,8,11,14,17行点阵数据,存储器2中按顺序存放着第3,6,9,12,15,18行点阵数据。

在屏幕上显示一个字符的第4行时,会同时用到第3、4、5行这三行点阵数据,从存储器2中读取00H单元的数据,得到第3行点阵数据,同时从存储器0和存储器1中读取01H单元的数据,分别获得第4行和第5行点阵数据,这样就实现了在一个时钟周期内读取上中下三行数据。

在屏幕上显示一个字符的第5行时,会同时用到第4、5、6行这三行点阵数据,这时只要从存储器0、1、2中同时读取01H单元的数据,分别得到第4、5、6行点阵数据,同样实现了在一个时钟周期内读取上中下三行点阵数据。

在屏幕上显示一个字符的第6行时,会同时用到第5、6、7行这三行点阵数据,从存储器1和存储器2中分别读取01H单元的数据,得到第5行和第6行点阵数据,同时从存储器0中读取02H单元的数据,获得第7行点阵数据。同样也实现了在一个时钟周期内读取上中下三行数据。

接下来的数据读取情况与上述过程类似,可以依此类推。

在这个显示过程中,3块存储器的地址变化情况如图5所示。

在T0时刻,开始读取存储器0、1的00H单元,获得字符点阵的第1行和第2行数据,而此时存储器2是无效的;

在T1时刻,开始读取存储器0、1、2的00H单元,获得字符点阵的第1行、第2行和第3行数据;

在T2时刻,开始读取存储器0的01H单元,获得字符点阵的第4行数据;

同时读取存储器1、2的00H单元,获得字符点阵的第2行和第3行数据;

在T3时刻,开始读取存储器0、1的01H单元,获得字符点阵的第4行和第5行数据;同时读取存储器2的00H单元,获得字符点阵的第3行数据;

以此类推,直到T17时刻,存储器0无效,开始读取存储器1、2的05H单元,获得字符点阵的第17行和第18行数据;

这三块存储器访问地址的生成也很简单,只要生成存储器0的地址(Mem_addr0),存储器1和存储器2的地址则可以由存储器1的地址经过延迟得到。

OSD发生器的设计根据这个改进的存储结构,简便地实现了OSD内部的存储器读写和在屏幕上的图文显示的时序控制。OSD发生器内部能自动进行存储资源的访问寻址,使得在应用过程中用户不需要考虑内部复杂的逻辑关系,大大简化了用户编程。

综上所述,采用经过改进后的字符存储方法,有效的避免了使用不同的时钟,简化了时序控制电路,为芯片的设计以及测试带来了方便。

5OSD发生器的实现

本文所实现的字符型OSD采用“字典”结构[1],内部共有五块内建存储器,分别是代码缓存RAM,属性缓存RAM,自定义字符发生器RAM,固化字符发生器ROM和颜色发生器ROM[5]。自定义字符发生器RAM存放着用户自定义的字符点阵数据,一般只需要在系统开机后通过串行总线写入一次就可以。代码缓存和属性缓存分别存放着字符代码索引和颜色索引,它们是一一对应的,由外部主机通过串行接口写入。OSD发生器根据OSD寄存器设定的位置、大小等属性产生时序控制信号,按顺序从代码缓存中读取需要显示的代码索引,自动从字符发生器(ROM/RAM)中输出点阵数据;同时根据属性缓存中的颜色索引,自动从颜色存储器ROM中读取相应的RGB颜色值,这两者结合起来并经过处理后输出OSD数据。如图6所示。

在这个结构中,字符发生器存储的是字符点阵数据,不需要存储指向下一个地址的指针,OSD发生器按照特定顺序读取数据,生成OSD图像。在应用过程中,用户只需要计算OSD窗口的起始位置,并将其写入寄存器,然后在代码缓存和属性缓存中指定要显示的字符索引和颜色索引,OSD发生器就会自动产生OSD数据。用户如果需要自定义字符,则在开机时将自定义字符点阵数据写入自定义字符发生器;如果不需要自定义字符,那就直接使用固化的字符发生器。这样一来,就大大减少了编程的工作量。

6结语

本文基于一个字符边框发生器的三行三列的邻域算法,改进了字符点阵在存储器中的存储结构。根据改进的字符点阵存储结构,把一个字符点阵的18行数据分别存储在3块相同大小的存储器中,每一块存储器存放6行点阵数据。采用这种改进的存储结构,可以方便地在一个时钟周期内同时读取三行相邻的字符点阵数据,便于产生字符边框,避免了OSD内部使用不同的时钟,简化了内部时序控制电路,降低了芯片的复杂性。

本设计采用Verilog HDL语言编写RTL代码,使用ncverilog软件进行功能仿真,使用design complier软件进行综合生成门级网表,通过了后仿真和调试,并利用FPGA进行验证。流片出来后经过验证和测试,表明本文所述的带串行接口的数字OSD发生器的设计方案及其实现具有良好的视频效果,系统兼容性高,所用的资源也较少。

本文所述的数字OSD发生器已经被集成到多款LCD视频处理控制芯片中,主要应用在便携式小屏幕液晶DVD播放器和数码相框中。

参考文献

[1] 陈金荣. 探讨结构化的平板电视OSD设计方案. 电子系统设计. 2006年1月1日.

[2] 盛磊,徐科军,陈智渊,赵明. 数字在屏显示控制核的设计与FPGA实现.上海交通大学学报. 2006.40(5):762-765

[3] K.R.Castleman著,,林学英,石定机等译. 数字图像处理. 电子工业出版社. 1998:387-422

[4] 钱怀风. OSD芯片MB90092的原理及应用. 国外电子元器件, 2005(01): 52-55

[5] Macronix International Co., Ltd. MX88L285 datasheet. www.省略/2/5.pdf

作者简介

李跃辉,硕士,毕业于复旦大学,从事集成电路设计工作,有9年企业工作经验,主持或参与多款已量产芯片的设计,研究方向:音视频消费电子、网络通信、数字集成电路设计、数模混合集成电路设计。