张宏彬 纪勇
(扬州工业职业技术学院,江苏扬州225127)
目前在各种基于Nios处理器或者M icroBlaze处理器的嵌入式系统中,经常采用LCD液晶屏作为终端显示器件,这主要因为LCD液晶屏所具有工作电压低、功耗小、寿命长、易集成等特性。在各种类型的液晶屏中,抗抖动、色彩饱和度高、还原能力强、对比度突出的TFT类型的液晶屏,更是获得了广泛的应用。在本文中,提出了一种在基于Nios处理器的嵌入式系统中,能够正常使用TFT-LCD类型液晶屏的控制组件的设计方法,并在某GPS数据采集系统中得到了实际应用。该组件具有AVALON总线的主从接口,能够与Nios处理器进行信息交互,并依照规定的时序关系输出正确的控制信号及像素颜色数据,进而点亮液晶屏以显示文本与图形。
该控制组件具备两个特点:一是组件内各模块采用有限状态机实现,以提高实时性能;二是采用参数化的设计方法,能够适用各种型号的液晶屏,提高设计的通用型。
整个LCD显示系统的结构如图1所示:
图1 LCD显示系统结构图
上图中LCD显示驱动电路是一个被动系统,仅有驱动电路是不能实现LCD显示的,还需要有相应的控制器提供两组信号,一是扫描时序信号,二是像素点的颜色分量值。处理器通过对LCD控制器的操作实现了对LCD显示扫描时序的设置和显示数据的写入,从而完成对LCD的显示操作。
LCD控制组件的设计思路是:在Nios嵌入式系统的SDRAM中开辟一段存储空间,用来存放屏幕图像的数据,这段存取空间即为帧缓存。通过恰当的硬件逻辑设计建立帧缓存与液晶屏幕像素之间一一对应的关系,并配合时序信号,将帧缓存中的数据实时地输送给LCD屏,最后完成显示刷新。本设计中为LCD控制器设计了一对基于Avalon总线规范的主从端口接口,通过该接口来实现LCD控制器与外部Avalon总线模块的连接,继而实现Nios处理器对于LCD控制器的控制。其中,从端口接口完成LCD控制器中相关寄存器的存取;主端口接口完成从帧缓存中读取数据的逻辑控制。帧缓存读控制逻辑根据帧缓存地址生成逻辑所产生的地址发起Avalon总线的读操作,从帧缓存中将该数据读取到输出缓冲(FIFO存储器)。与此同时,时序信号生成模块产生与像素数据同步的相关显示点的横,纵坐标,像素输出控制逻辑再根据坐标值LCD驱动电路输出相应的RGB颜色数据。此外LCD时序信号生成模块也输出必要的场同步信号与行同步信号。LCD控制器的总体结构图如下:
图2 控制器总体结构框图
为了实现LCD屏幕的正常显示,LCD驱动电路需要接收四组信号,分别是:IDATA(像素数据信号)、IDCLK(时钟信号)、IHS(行同步信号)、IVS(场同步信号)。这四组信号必须按照驱动芯片手册提供的规范时序进行驱动,其中行同步和场同步信号用来标记屏幕上一行和一帧图像的开始和结束的时间,屏幕扫描线从上到下,从左到右依次扫描。在这个过程中,只需要将帧缓存中的图像像素数据依次输出,就可以实现屏幕图像的显示。上述行同步信号与场同步信号由LCD时序信号生成模块产生,同时该模块生成坐标数据提供给输出控制模块。
在一个标准行周期内对时序信号的要求如下:一个低电平脉冲由IHS信号线输入到LCD,标志着一行数据结束和下一行数据显示的开始,其时间间隔计为THP。数据信号Data signal从第THE个IDCLK周期开始显示有效,直到第(THE+THD)个IDCLK周期,在THD这段时间间隔内,一行中每个像素点的RGB数据按照像素时钟IDCLK的频率依次输出,驱动像素数据信号线,这样就完成了一行图象的显示。最后,在进行下一行图象显示之前,还需要重新关闭像素数据信号,时间间隔被定义为THF个时钟周期。对于场周期内信号的时序要求与行周期类似。
本设计中使用的液晶屏为TD036THEA1,屏内驱动电路相关时序参数如下表:
表1 时序参数表
为了提高本设计的通用性,在对时序信号生成模块进行代码设计的时候,采取参数化的设计方法。这样在使用其他型号TFT类型液晶屏的时候,只需在SOPC Builder开发环境中调用该控制组件时,修改以上相应参数就可以完成对控制器的复用,不需要修改源代码,因而降低了控制器组件的移植难度。
为了提高控制信号的实时性,采用有限状态机生成相应的时序信号。对于行同步生成状态机Hstate,有HCYC、HBACK、HDISPLAY、HFRONT四个状态,分别对应TH、THE、THD、THF这四段时间间隔。行状态机的状态转移图分别如图3所示。
图3 行状态机状态转移图
该状态机总共包含两个输出信号,其中IHS表示行同步时序信号,DATA为数据输出有效信号,表示当前状态为LCD显示状态。
状态机的工作流程如下:复位后,状态机进入行同步状态HCYC。该状态下,行同步信号IHS处于无效状态。当HCount计数值到达1时,状态机进入HBACK状态,从进入该状态一直到下一行数据开始显示期间,IHS信号一直保持有效。当HCount计数值到达151时,状态机进入行数据显示有效HDISPLAY状态,表示此时可以将像素数据显示到LCD屏幕上。当HCount计数到1111时,状态机进入HFRONT状态,该状态表示一行图象已经显示完成。当HCount计数满1170时,状态机返回到HCYC状态,同时HCount复位为1,开始下一行数据的显示。至于场状态机的状态转移关系与行状态机类似。
为了实现Nios II处理器对帧缓存读操作的控制,依照Avalon总线规范,在帧缓存读模块外部设计了一个Avalon主端口接口。在Avalon总线规范中,Avalon主端口可以主动发起数据传输,并且这个传输过程不需要处理器干预。由于图像是一帧一帧输出到LCD屏上的,而且显示刷新的过程是无限循环的,所以必须反复执行帧缓存读操作,因此,选择以流水线读传输模式对主端口进行设计
分析帧缓存读模块的工作流程可以发现:该模块只存在两个状态:空闲状态和读状态。具体过程为:当读模块处于显示有效的时序周期时,就进入帧缓存读状态,当显示有效的时序周期结束,模块随即进入空闲状态。同样使用一个master_state状态机来表示模块状态。该状态机有idle和read两个状态。在read状态,每次需要传输的数据个数在LENGTH_COUNT寄存器中设置,主端口根据读信号m_read,地址信号m_address发起流水线读传输,每读一个帧缓存地址单元并获取其相应数据后,地址自增1,LENGTH_COUNT寄存器值自减1。当LENGTH_COUNT的值减为0时,表示一次帧缓存读传输已经结束。状态机进入idle状态。此时将帧缓存中的图像数据保存到输出缓冲FIFO中。该FIFO具体是通过使用Quartus II软件自带的Mega Wizard管理器生成一个的异步FIFO来实现,容量为1K。
将该LCD控制组件在基于Nios处理器的GPS数据接收系统中进行应用。在Nios IDE环境中采用C语言对串口传输过来的卫星数据进行解码、提取、转换,并调用图形接口函数来绘制点、直线、矩形、字符等。最终设计的硬件电路下载到FPGA开发板的配置芯片中,运行软件后,在LCD液晶屏中显示出正确的图像。具体LCD显示效果如图4所示:
实践证明,该LCD控制器具备Avalon总线接口,易于与其他标准IP核构成以Nios为核心的片上系统,同时提高了处理器的运行效率。采用IP核参数化设计,提高了控制组件的通用性和复用性。
图4 LCD显示效果图
[1] 盛磊,徐科军,陈智渊.数字在屏幕显示控制核的设计与FPGA实现[J].上海交通大学学报,2006,40(5):762—766.
[2] 潘松,黄继业.SOPC技术实用教程[M].北京:清华大学出版社,2005.
[3] 侯长宏,袁慧梅.基于SOPC的NiosⅡ与液晶模块接口及程序设计[J].液晶与显示,2008,23(6):307-310.