基于ARM与FPGA的LCD控制器设计
随着显示屏技术的不断发展,真彩液晶显示屏以其高分辨率、高对比度及高清晰度等优势逐渐在嵌入式显示系统中占据重要地位。目前,基于嵌入式平台的LCD显控技术的实现主要有两种方式:ARM内嵌LCD控制器和独立的控制器件。但是这两种实现方式都存在着不足之处,内嵌控制器的使用可能增大处理器的负担和限制显示帧率,而外部控制器件不仅成本高,而且专用性比较强,很难适应不同类型的液晶屏。
据此存在的问题,这里提出一种基于ARM与FPGA的LCD控制器设计方案,该设计方案一方面能够通过操作LINUX OS下的Framebuffer设备提高显存的写入速率及减轻处理器的负担,另一方面用FPGA来实现LCD控制器的设计,开发周期短、功耗低,同时具有灵活的移植性,可应用于不同中小尺寸的液晶显示屏。
1 系统组成及工作原理
系统主要有微控制器、FPGA(LCD控制器)、存储单元以及外设接口组成,系统组成框图如图1所示。
系统的工作流程:在FPGA内部的时序发生电路所产生的时序控制信号作用下,LCD控制器通过Framebuffer接口从微控制器读出显示所需的数据存入显示缓存SRAM中。同时LCD显示屏从显存SRAM中读取显示数据,并通过数据格式转换电路直接将数据信息实时显示。
2 系统硬件设计
2.1 LCD控制器
LCD控制器是基于FPGA实现的。本方案采用Altera公司的Cvclone(飓风)系列EPlC6Q240。FPGA具有高速的数据传输I/O接口,可实现高速的显存读取速率,大大提高LCD显示的帧率。而同时FPGA是可编程逻辑器件,可实现复杂的逻辑运算及提供复杂的控制时序。LCD显示屏采用LQ035Q3DG01型的TFT-LCD液晶显示屏,分辨率为320×240,图像信号为RGB格式。
由于SRAM有较高的读写速度,该设计方案的显示缓存采用1片IS61LV51216AL型SRAM,其容量为512 KB,读写速度为10ns左右。而显示一帧图像的大小为125 KB(320x240x2/l024),FPGA对显存的读写速度约为200 ns,因此满足系统要求。图2为LCD控制器电路连接图。
2.2 ARM9微控制器
该系统设计的主控单元采用ATMEL公司的AT9lRM9200(简称9200)作为MCU,该处理器是基于ARM920T内核,工作主频为180 MHz。性能可达到200 MI/s,系统采用开源的LINUX OS。但是ARM9作为系统的控制终端,需要完成信息采集、处理以及与外部通信等多项工作,而LCD控制器如果也要从内存中读出数据显示,这就会造成处理器负担,从而降低显示缓存读入数据的速率,影响LCD的实时显示。因此这里提出一种基于LINUX 0S下的Framebuffer接口的应用方法,大大提升显存读入数据的速率,从而提升整个显示系统的实时性。图3为AT91RM9200接口电路连接。
3 系统软件设计
系统的软件设计主要分为基于FPGA的LCD控制器设计与LINUX OS下Framebuffer驱动程序设计2部分。
3.1 LCD控制器设计
3.1.1 LCD控制器组成
该设计方案的LCD控制器主要由缓存读写、MCU接口及LCD时序控制等模块组成,具体组成如图4所示。
3.1.2 LCD控制器设计原理
由TFT-LCD液晶屏显示原理可知,显示所需的主要控制信号有像素时钟信号、行/场同步信号以及使能信号。该方案的显示屏分辨率为320x240,要求设计液晶显示屏的刷新频率为60 Hz,即场同步信号(VSYNC)为60Hz,刷新一屏所需时间为1/60 s,而一场则由240个行同步信号组成,那么一个行同步信号的周期为1/(60x240)s,即可得行同步信号(HSYNC)为15 kHz。同理可得像素时钟信号(CK)为5MHz。
采用FPGA内置的锁相环IP模块(PLL)将FPGA 50 MHz时钟信号F_CLK 10分频为5 MHz的像素时钟信号。应用状态机方法,用Verilog硬件描述语言设计时序控制模块,它为LCD提供满足时序要求的控制信号VSYNC、HSYNC以及ENAB。设计完成后在QuatuslI环境下完成时序仿真,得到的仿真结果满足时序要求,仿真图如图5所示。
SRAM为显存模块,由图2可知LCD控制器与微控制器之间的数据传输是在ARM的时钟控制下读入,而同时LCD屏显则是在像素时钟信号CK的控制下从SRAM中读取数据。针对该异时钟域之间数据的传输问题本方案采用FPGA设计实现异步FIFO来完成。
3.2 Framebuffer驱动设计
Framebuffer是Linux内核中的一种驱动程序接口,该接口将显示设备映射为帧缓冲区。平台使用Linux2.6.25内核。在Linux2.6内核当中,通常采用分层的驱动设计框架。对设备进行分层和分类管理,驱动底层为总线驱动,上层为具体设备驱动。在Framebuffer驱动程序中,其软件设计流程为:首先需要针对该具体的设备和硬件连接注册总线类型及申请系统总线资源;其次,将具体设备驱动程序注册进入总线链表,Linux内核根据设备驱动程序中提供的探测函数检测总线设备
- 采用灵活的汽车FPGA 提高片上系统级集成和降低物料成本(04-28)
- 从LCD电极读数的单片机接口技术(01-15)
- 嵌入式Linux下彩色LCD驱动的设计与实现(03-09)
- 基于FPGA的液晶显示控制器设计(02-17)
- LCD部分专业术语解释(03-06)
- 点阵LCD的驱动显控原理(上册)(03-20)