1引言
通过彩色液晶显示器(LCD)取景是数码相机优于传统相机的重要特性之一,它解决了使用取景框取景带来的各种不便,而且可以在拍摄现场用液晶显示器回放刚拍的相片来查看拍摄效果[1],从而决定是否留下这张照片,这样能使摄影者更好地控制照片的质量。所以用液晶显示器进行取景和回放是数码相机两大必不可少的功能。同时液晶显示器还用来显示菜单,提供良好的人机交互界面。目前市场上出售的数码相机使用的液晶显示器都是彩色TFT液晶显示器,这种液晶显示器解决了一般液晶显示器中相邻像素串扰的现象[2],所以可用来显示真正的活动图像。
数码相机专用集成电路芯片中的液晶显示控制电路主要实现的功能是向液晶显示模块(LCM)和数模转换器提供所有必需的控制时序信号,同时接受来自系统的YCbCr格式的图像数据,然后进行色空间 变换将图像转化成RGB格式,接着按照一定的顺序以每个像素一种颜色的方式向片外DAC输出图像数据。
2系统结构与设计要求
图1给出了我们设计的数码相机系统芯片中有关LCD显示部分的示意图。根据设计数码相机专用集成电路芯片的系统要求,液晶显示控制电路可用来控制多种规格的液晶显示模块,从6万多像素到20多万像素。此电路有两种工作模式:取景模式和回放模式,分别显示动态和静态图像。同时电路要具有多种扫描方式 ——上下左右的组合共有四种。因此此电路必须具备高度的灵活性,可由系统对其工作状态进行编程控制。
3电路设计
根据设计要求,我们先确定电路的总体框架,然后设计各个模块并用Verilog HDL语言描述实现,最后进行RTL级的仿真。图2是整个电路的功能框图。
整个液晶显示控制电路由四个模块组成,分别是寄存器文件、有限状态机、数据处理器和脉冲发生器。该电路的信号线主要和三个电路相关,一是和MCU接口电路相关,包括MCU_AB(地址总线)、MCU_DB(数据总线)、MCU_nWR(写使能)、MCU_nRD(读使能)和MCU_nCS(MCU操作选中信号);二是和液晶显示模块及数模转换器相关,包括从脉冲发生器输出的控制整个图像显示的时序信号和红、绿、蓝三原色数据以及PSAVE、BLANK和D_CLK三个控制DAC转换的信号;三是和数码相机专用集成电路芯片中的其他子模块相连,包括DMA_Req1、DMA_Req2、DMA_Ack1、DMA_Ack2四个DMA操作的交互信号和16位的YCbCr数据信号。SYSRST和SYSCLK分别是系统复位和时钟信号。以下分别对各个模块的设计进行分析。
3.1 寄存器文件模块
寄存器文件模块主要由两部分组成:MCU接口和寄存器阵列。通过MCU接口系统可以对寄存器阵列进行读写操作,从而使液晶显示控制电路具有灵活多变的特点,可以控制多种规格的液晶显示模块,在多种模式下工作,可以输出多种扫描方式的控制信号,可以将图像显示在显示器的任一区域,同时还具有软件复位功能。整个寄存器阵列由 30个8位寄存器组成,分为三大类:模式寄存器、状态寄存器和波形参数寄存器。模式寄存器的低7 位有效,如图3所示。
第0位为状态/复位位,它输出给MCU,并接液晶显示控制电路中其他模块的触发器的复位端。在系统复位和显示结束时该位为1,表示空闲并使接口处于复位状态。若系统把该位置为0,则电路的复位状态被解除并处于工作状态。第1、2 位用来决定显示时的扫描方式,其中V_DIR表示帧扫描方式,此位置1表示从上到下扫描,置0表示从下到上扫描;H_DIR表示行扫描方式,置1和置0分别表示从左到右和从右到左扫描,两位组合共有四种扫描方式。RSA、RSB和RSC三位用来表示使用哪种规格的液晶显示模块,它们的组合及对应的显示器分辨率如表1所示。MODE位用来表示工作模式,1表示工作在取景模式下,0表示工作在回放模式下。
状态寄存器包括行数寄存器、列数寄存器、起始行寄存器、终止行寄存器、起始列寄存器、终止列寄存器以及奇偶数行的颜色顺序寄存器。行数寄存器和列数寄存器设置显示一帧图像所需的垂直时钟脉冲数和扫描一行图像所需的水平时钟脉冲数,对于不同规格和品牌的液晶显示器这两个寄存器参数是不同的。起始行寄存器、终止行寄存器、起始列寄存器和终止列寄存器设置显示图像的范围,如图4所示,这样实现了可以将图像显示在显示器任意区域的设计要求。由于TFT彩色液晶显示器每个像素只显示三原色中的一种颜色,它是和相邻像素一起显示彩色效果的,所以奇偶数行的颜色顺序是不同的。为了保证在某一像素点上给出正确的原色数据信号,在一定的扫描方式下,起始行寄存器和起始列寄存器必须与奇偶数行的颜色顺序寄存器相一致。例如,使用280×220型号的液晶显示器,在V_DIR=0(从上到下扫描)和H_DIR=1 (从左到右扫描)时奇数行的颜色顺序是RGB,偶数行颜色顺序为GBR,所以在设置起始行寄存器和起始列寄存器时一定要保证这样的颜色顺序,才能正确显示。
脉冲参数寄存器设置了各驱动脉冲波形的时间参数,若干个寄存器对应于一相驱动脉冲。当有限状态机模块中的行计数器和列计数器的状态与某些脉冲参数寄存器的设置相同时,相应的输出脉冲发生翻转。对于不同规格和品牌的液晶显示器这些参数是不同的,即使对于同一产品,在不同扫描模式下它们也是不同的。
3.2 有限状态机模块
有限状态机由两个16位的行列计数器组成,状态变量为模式寄存器的状态/复位位。在工作模式下,两个计数器循环计数。当行计数器状态与起始行寄存器相同时,行有效信号变高,表示该帧图像的显示开始,此时数据处理器模块开始工作。在系统复位或行计数器状态与终止行寄存器相同时,行计数器被复位。在行有效信号变高后,当列计数器状态与起始列寄存器相同时,像素有效信号变高,表示该行的有效显示开始,此时数据处理器开始输出每个像素的颜色数据。在系统复位或列计数器状态与终止列寄存器相同时,列计数器被复位。
3.3 数据处理器模块
数据处理器模块如图5所示。它由三部分组成:DMA接口及其数据缓冲器、色空间反变换电路和溢出处理电路。根据系统设计要求,由电荷耦合器件(CCD)图像传感器采样得到的原始图像经过像素处理器模块的内插和色空间变换后,成为了YCbCr格式的图像,根据JPEG标准,从RGB到 YCbCr的色空间变换遵循公式[3](1)。
Y=0299R+0587G+0.114B
Cb=_0.169R-0.331G+0.5B (1)
Cr=0.5R-0.4186F-0.0814B
同时为了存储方便,将变换得到的Y信号减去了128,这样三种信号的值均在-128到+127之间,从而都可以用8位的带符号数表示。在存储YCbCr 信号时像素处理器模块将相邻像素的色度信号取均值然后进行复用,这样节省了存储空间。所以在图像存储器中相邻两个像素的亮度信号组合成一个16位的数据存放在一个存储单元里,而复用的色度信号则存放在下一个地址的单元里[3] 。当要用液晶显示器进行图像显示时,先通过连续两次DMA的读操作获得两个像素的亮度信号和色度信号,分别放入16位的数据缓冲器1和2,然后在读取新的两个相邻像素的YCbCr信号并把它们放入数据缓冲器3和4的同时开始处理缓冲器1和2中的数据,于是通过两对数据缓冲器的作用实现了一个简单的流水线操作。在色空间反变换中要实现将YCbCr信号转换成液晶显示所需要的RGB信号,根据公式(1)并进行简化我们可以得到相应的反变换的公式(2)。
(2)
根据反变换系数的范围,我们将所有的系数值乘上64,然后将乘积的整数部分用一个8位的带符号数表示。在色空间反变换中我们设计了一个9× 8的Booth乘法器,用来实现色度信号和变换系数的带符号乘法运算。为了保证反变换的正确,在运算过程中要进行符号扩展,所以变换所得的RGB信号是12位的带符号数,而最终输出到数模转换器的数据是8位无符号数,因此还要进行溢出处理,将所有的计算结果都限定在0~255范围内。同时由于液晶显示器的公共电极的电位是交流电位,即相邻两行的公共电极的电位是反相的,所以相邻两行的图像数据应该分别以原码和反码输出。
3.4 脉冲发生器模块
脉冲发生器根据有限状态机中行列计数器的状态和波形参数寄存器内的参数,产生各驱动波形,这些驱动波形用于驱动液晶显示模块本身及其外接的模拟前端电路。
4 Verilog语言实现和FPGA硬件验证
在确定了整体以及各功能模块的结构设计之后,就可以用Verilog HDL语言对设计进行RTL建模,然后用Synopsys 公司的VCS对设计进行仿真并调试。通过RTL级的仿真后,我们对此电路进行了FPGA的硬件验证,使用的芯片是Xilinx公司的VirtexE1000-BG560,系统时钟为54MHz。无论是单独测试还是作为整个数码相机专用芯片的一部分,液晶显示控制电路都能成功实现两种工作模式下的设计要求,性能良好。
5结束语
通过FPGA验证后,液晶显示控制电路用TSMC 0.25mm SAGETM工艺实现,后端流程如图6所示,其中的Design Compiler,Prime Time和Formality是Synopsys公司的产品;Silicon Ensembler和Virtuso是Cadence公司的产品。图像采样接口的电路规模为15000门左右,芯片面积为0.49mm×0.8mm。