目前嵌入式系统正向着更高性能、更小体积、更低功耗、更廉价的方向发展。结合可编程技术与SoC(System on Chip)技术的,基于FPGA (现场可编程门阵列)的SoPC(System on Programmable Chip )系统应运而生。MicroBlaze 即为Xilinx 公司开发的软核处理器。采用“微处理器+可编程逻辑”的架构,用户可方便的在系统中加入IP 核,实现具有特定功能的,易配置、易扩展、易继承的片上系统。
而液晶显示(LCD)器由于其低电压、低功耗、易集成、轻巧便携以及显示效果好等突出优点,越来越受到人们的亲睐,进入各个领域,在人机交互中扮演着重要的角色。因此LCD 控制器作为用于系统和液晶屏的接口,已逐渐成为嵌入式系统设计中的关键部分。
本文提出一种针对TFT-LCD 的控制器IP 核设计方法。该控制器利用先进先出存储器(FIFO)缓存由处理器发出的数据,并具有片上外设总线(OPB)接口。将其与其它标准IP核一起构成以MicroBlaze为核心的片上系统。整个系统电路简洁,底层编程人员对显示屏的操作异常简单,具有较强的实用性和通用性。
1 系统结构
整个系统主要在一片FPGA 中实现。以MicroBlaze 软核处理器为系统的核心部分,各种IP 核通过相应的总线连接到MicroBlaze 。其中,自主编写的LCD 控制器IP 核通过OPB (On-Chip Peripheral Bus )总线与系统相连,其接口符合Core Connect 规范,可方便的进行数据读写和时序控制。FPGA 内部的硬件系统结构如图1 所示。
MicroBlaze 为系统的CPU;opb_mdm 的实例名为debug_module,用于系统调试;LCDctrl 即为自主编写的LCD 控制器模块;两个lmb_bram_if_cntlr 模块分别被实例化为dlmb_cntlr 和ilmb_cntlr ,用于控制片上BRAM;bram_block 是片上的BRAM 资源,通过LMB 总线与两个BRAM 控制器相连,接受CPU 的访问。

图1 FPGA 内部硬件系统结构
LCD控制器的设计
LCD 控制器主要实现两大功能:1)产生控制时序,把显示缓存内的数据输出到LCD 上显示;2)接收CPU 对显示数据的更新。由于作为显示缓存的SRAM 不能同时读写,本设计利用一个在FPGA 内部实现的FIFO(First In First Out)存储器,作为CPU 数据接收缓存。
功能模块
整个LCD控制器结构如图2所示。主要包括以下部分:

图2 LCD 控制器结构
(1)IPIC(Intellectual-property interconnect) :在外设一测的IPIF(forintellectual-property interface)接口。作为LCD控制器通过OPB总线与系统CPU通信的接口。此部分主要由EDK 提供的集成开发环境XPS(Xilinx Platform Studio)中的Create/Import User Peripheral Wizard 工具实现。
(2)CLOCK:将系统提供的时钟信号(Csys)转换为LCD控制器工作时钟(Ccore)。
(3)FIFO:缓存来自CPU的数据及地址信息。当显示空闲时,再将缓存的数据写入显示缓存。FIFO的读、写操作都受到CONTR模块的控制。
(4)CONTR:此模块是控制核心,主要有以下几个作用:1)产生提供给LCD的时钟信号DCLK、使能信号Ena、行同步信号Hsync以及帧同步信号Vsync。各控制信号通过对Ccore 计数获得。2)从显示缓存中读出数据送往LCD显示。由Hsync和Vsync决定读显示缓存的时机以及应读取哪个地址的数据。3)在LCD显示回扫期,从FIFO中读出保存的数据和地址,将数据写入到SRAM相应的地址空间。
(5)SRAM:显示缓存。
读/写显示缓存的时机
读出显示缓存内的数据送LCD 显示的过程不能被中断,否则显示画面将会受到干扰。而使用SRAM 作为显示缓存,读、写操作不能同时进行,故对显存内数据的更新必须在回扫期间进行。
对于TFT-LCD,在一个行周期内的典型信号波形如图3 所示。DCLK 为时钟信号;Hsync 为行同步信号,其周期为TH 个DCLK 周期;Data signal 为要显示的R、G、B 数据。数据从第THe 个DCLK 周期开始显示有效,直到第(THe+THD)个DCLK 周期。

图3行周期内LCD输入信号波形