摘要:介绍一款基于SOPC的TFT—LCD触控屏控制器IP核的设计与实现。采用Verilog HDL作控制器的模块设计,并用ModelSim仿真测试,验证其正确性;利用嵌入式SOPC开发工具,在开发板上完成触控屏显示驱动及其控制模块的系统设计,给出系统硬、软件设计,实现TFT—LCD触控屏彩条显示。这款触控屏控制器IP核具备较强的通用性和兼容性,具有一定的使用范围和应用价值。
关键词:SOPC;控制器;IP核;触控屏;NiosⅡ
可编程片上系统(SOPC)是一种特殊的嵌入式系统,它设计方式灵活,具备软硬件在系统可编程功能。SOPC在设计上以集成电路IP核为基础,而自行开发的SOPC IP核,根据实际硬件资源和功能任务需求来定制显示控制功能,可以增强系统可靠性和设计灵活性,降低了成本。目前针对LCD显示屏设计的控制器IP核文章较多,但对于TFT-LCD触控屏设计的控制器IP核文章较少,而且这类文章中很少见对控制器各个模块进行仿真验证内容。
文中提出一种针对TFT-LCD触控屏控制器IP核的设计方法。该控制器具有Avalon总线接口,与其他标准IP核一起构成以NiosⅡ为核心的片上系统。针对本设计中触控屏帧缓存读操作的特点,选择以Avalon主端口接口的形式对模块进行开发,大大提高了处理器运行效率,同时实现了触控屏控制器IP核的参数化设计,提高了控制器对于不同LCD屏的可复用性,最后通过对输出缓冲FIFO的使用,解决了数据读出时钟与像素时钟不同步问题。
1 触控屏控制器总体结构
在SDRAM中开辟一段储仔空间,用来存放屏幕图像数据,称之为帧缓存。通过设计适当的硬件逻辑来建立帧缓存与屏幕图像像素之间的一一对应关系,并配合触控屏显示所必需的行、场时序信号,将帧缓存中的数据不断地输送给触控屏,完成最终的显示刷新,其总体结构如图1所示。
触控屏控制器刷新周期开始时,主端口模块根据帧缓存地址生成逻辑所产生的地址,完成主端口的读操作,实现帧缓存中数据读取,并将该数据输送给输出缓冲模块。同时,时序信号生成模块依据触控屏的时序规范生成行、场同步信号,以及与像素同步的相关显示点的横、纵坐标。触控屏控制器数据显示模块不断从缓存中读取屏幕显示数据。
2 触控屏控制器模块设计
2.1 Avalon-MM Slave接口模块
本模块挂载在Avalon总线上作为从设备使用,用来对所有的用户逻辑进行配置和控制,核心功能是寄存器操作,包括读、写以及一些特殊指示与状态信号的产生与转换。通过从端口得到的数据分别赋值给相应的寄存器,寄存器分为:FIFO地址寄存器、坐标寄存器、一帧数据长度奇存器。本模块是最后在触控屏上实现图形显示功能的接口电路。
2.2 Avalon-MM Master接口模块
LCD控制器的本功能是产生LCD时序信号,将帧缓存中的图像信息进行有序输出。由于图形是一帧一帧地输出到触控屏上,而且显示刷新过程是无限循环的,所以必须反复执行帧缓存读操作,因此本设计对上述读操作进行了硬件加速。可以不断地从FIFO读取图像数据,并且在行、场和触控屏显示有效时间段读取图像数据,其它时间不读图像数据,这样减少了Avalon总线的使用,有利于图像显示并减少了总线负担分析读帧缓存的操作可以发现,该过程总是按照一定的顺序,将存储器中的数据读出来进行显示输出,规律性非常强。
本模块主要完成地址及操作时序的产生、像素数据缓存写操作控制、数据宽度的变换等功能。
2.3 触控屏时序产生模块
本文的触控屏引出信号线有5根:像素数据信号、触控屏时钟信号、行同步信号、场同步信号、使能信号。为了实现触控屏的正常显示,必须对以上信号按照规范的时序进行驱动,其中,行、场同步信号分别用来标记屏幕上一行和一帧图像的显示时间,屏幕扫描线从上到下、从左到右依次扫描。在这个过程中,只需将帧缓存中的图像像素数据依次输出,就可以实现屏幕图像显示。
2.4 FIFO帧缓存模块
DDR控制器随着系统时钟不断往FIFO写数据,当一帧数据写满时就不再进行写状态,而等待LCD控制器进行读状态,颜色处理器从FIFO中获取数据,每次从FIFO中读取32 bit数据并不断送给LCD。
颜色处理器将每一个字节作为一个像素数据,并将一个字节的像素数据转换为3个字节的RGB数据。颜色处理器从同步FIFO缓冲器中读取数据,当同步FIFO缓冲器写和读相互不冲突时,同步FIFO缓冲器产生读请求,让Avalon主端口向Avalon总线发起读传输,从总线上获取的数据将写入同步FIFO缓冲器,颜色处理器从FIFO中读取像素值,并且传给LCD显示模块。
3 Modelsim仿真与测试
1)Avalon从端口仿真与测试
由图2可知,从端口一位地址对应一位数据。当写信号有效时,将数据写入相应的寄存器;当读信号有效时,对应寄存器地址将数据输出。通过从端口数据写入来控制LCD模块,控制LCD读取图像的首地址和读取数据的长度。
2)Avalon主端口仿真与测试
Avalon模块的作用是响应Avalon主端口的读请求,并将FIFO中的相应数据输出给Avalon主端口。通过读信号和相应地址主端口,不断地从FIFO中读取图像数据,并按照LCD时序将图像数据输送给LCD。图3为Avalon主端口从显存中读取数据时的仿真波形图。
3)LCD图像显示模块测试
LCD显示模块是将从FIFO中读出的图像数据在触控屏上显示出来。从图4可以看出,当DEN有效时,将像素数据分为R、G、B传送给LCD,HCount和VCount为行计数器和场计数器,随着LCD时钟将各个像素点传送给触控屏。
4 基于SOPC触控屏系统硬件设计
基于SOPC触控屏系统硬件设计如图5所示,其中,SDRAM控制器实现处理器和SDRAM之间的数据存取,包括SDRAM存储程序和字符、图形以及颜色等数据:JTAG UART实现PC和开发板通信,主要用于调试,从键盘输入相应数据,然后通过NiosⅡ软件调试处理器,将数据通过LCD接口传输到触控屏上显示出来。
开发板采用大连宇华公司的H3C40-V6开发板。板上的FPGA芯片为EP3C40F484C6,触控屏为4.3英寸彩色数字TFT—LCD触控屏,分辨率800×484,可以显示文字、彩图等。板上自带触控屏显示驱动器。
根据所用到的外设和器件特性,在SOPC Builder中建立系统所要添加的外设模块,主要包括:NiosⅡ、SDRAM控制器、JTAG UART、时钟桥、三态桥、锁相环和PIO等。设定好各个参数,再添加LCD控制器,将LCD控制器的Avalon主端口接口连接到SDRAM上。
创建的包含NiosⅡ系统的QuartusⅡ顶层模块,如图6所示。
5 基于SOPC触控屏系统软件设计
根据硬件设计编写软件测试程序,以验证LCD触控屏显示。首先往显存中写入预定的数据来初始化显存,然后通过编程将相应的参数写入LCD的各个控制寄存器,最后使能LCD控制器,以观察显示屏的显示输出是否正确。
本设计采用C语言编程,让触控屏显示彩条。在NiosⅡIDE软件平台上,创建C/C++工程,配置工程的系统属性,然后编译及运行程序。在编译成功后,自动下载到硬件平台上开始运行程序,这时在触控屏上观察到效果如图7所示,图中彩条颜色从上至下分别为红、浅绿、蓝、绿、粉、红、紫、白、蓝。
6 结论
采用自定义添加触控屏接口控制模块来定制用户逻辑外设。使用硬件描述语言建立控制器模块并进行仿真测试;采用参数化组件设计,使其具有较强的通用性和兼容性。该控制器IP核设计有效利用FPGA资源,节约成本,增强系统可靠性和设计灵活性,并且可移植性强。