基于SOPC 的触控屏控制器IP核设计
扫描二维码
随时随地手机看文章
可编程片上系统(SOPC)是一种特殊的嵌入式系统,它设计方式灵活,具备软硬件在系统可编程功能。SOPC 在设计上以集成电路IP 核为基础,而自行开发的SOPC IP 核,根据实际硬件资源和功能任务需求来定制显示控制功能,可以增强系统可靠性和设计灵活性,降低了成本。目前针对LCD 显示设计的控制器IP 核文章较多[1-2],但对于TFT-LCD 触控屏设计的控制器IP 核文章较少[3],而且这类文章中很少见对控制器各个模块进行仿真验证内容。 文中提出一种针对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 从端口仿真波形图 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 LCD 显示的数据 4 基于SOPC 触控屏系统硬件设计 基于SOPC 触控屏系统硬件设计如图5 所示, 其中,SDRAM 控制器实现处理器和SDRAM 之间的数据存取,包括SDRAM 存储程序和字符、图形以及颜色等数据;JTAG UART实现PC 和开发板通信, 主要用于调试, 从键盘输入相应数据,然后通过NiosⅡ软件调试处理器,将数据通过LCD 接口传输到触控屏上显示出来[4].开发板采用大连宇华公司的H3C40-V6 开发板。板上的FPGA 芯片为EP3C40F484C6, 触控屏为4.3 英寸彩色数字TFT-LCD 触控屏,分辨率800×484,可以显示文字、彩图等。板上自带触控屏显示驱动器。 根据所用到的外设和器件特性,在SOPC Builder 中建立系统所要添加的外设模块, 主要包括:NiosⅡ、SDRAM 控制器、JTAG UART、时钟桥、三态桥、锁相环PIO 等[5-6].设定好各个参数,再添加LCD 控制器,将LCD 控制器的Avalon 主端口接口连接到SDRAM 上。 创建的包含NiosⅡ系统的QuartusⅡ顶层模块,如图6所示。 5 基于SOPC 触控屏系统软件设计 根据硬件设计编写软件测试程序,以验证LCD触控屏显示。首先往显存中写入预定的数据来初始化显存,然后通过编程将相应的参数写入LCD 的各个控制寄存器, 最后使能-LCD 控制器,以观察显示屏的显示输出是否正确。本设计采用C 语言编程,让触控屏显示彩条。在NiosⅡIDE 软件平台上, 创建C/C++ 工程, 配置工程的系统属性,然后编译及运行程序。在编译成功后,自动下载到硬件平台上开始运行程序,这时在触控屏上观察到效果如图7 所示, 图中彩条颜色从上至下分别为红、浅绿、蓝、绿、粉、红、紫、白、蓝。 6 结论 采用自定义添加触控屏接口控制模块来定制用户逻辑外设。使用硬件描述语言建立控制器模块并进行仿真测试;采用参数化组件设计,使其具有较强的通用性和兼容性。该控制器IP核设计有效利用FPGA 资源,节约成本,增强系统可靠性和设计灵活性,并且可移植性强。