1.1 课题概述 1
1.2 LCD控制器软核设计 2
2 相关技术介绍 2
2.1 LCD显示技术 2
2.2 SOPC技术 3
2.2.1基于FPGA嵌入IP硬核的SoPC系统 4
2.2.2基于FPGA嵌入IP软核的SoPC系统 4
2.3 SOPC技术的特点 5
2.4 Nios II处理器 5
2.5 Avalon总线简介 6
2.7 Quartus Ⅱ和SoPC Builder简介 7
2.7.1 Altera Quartus Ⅱ简介 8
2.7.2 SoPC Builder简介 9
3 系统实现 11
3.1 LCD控制器IP核设计 12
3.1.1设计思路 12
3.1.2 S3C2410介绍 13
3.1.3 LCD控制器的软核设计 13
3.2 LCD控制器组成 13
3.2.1 LCD控制器的相关参数、变量: 13
3.2.2像素存储与显示屏位置的映射关系: 14
3.2.3 5:6:5显示格式 15
3.3 FIFO的定制 17
3.4 LCD时序发生 19
3.5 LCD控制器的主要寄存器设置 21
3.6参数化的实现途径: 22
3.7在SOPC Builder中的Nios系统生成 23
4. 总结 26
1 概 述
1.1 课题概述
本文所要进行描述的设计是运用VHDL语言和Verilog HDL语言,通过分析LCD 控制器的硬件结构和控制时序,使用SoPC技术,把Nios CPU和LCD控制器放在同一个FPGA中。并通过对相应变量的参数化,实现有一定通用性的LCD IP核设计。目的是解决在利用Quartus Ⅱ 进行Nios系统开发时,由于内部没有可用LCD的IP,影响产品开发的问题。
1.2 LCD控制器软核设计
所要设计的LCD控制器是要求符合Avalon总线规范的。FPGA中集合了NiosⅡ CPU、DMA和LCD控制器模块,以及三态桥(连接Flash)、SDRAM控制器。LCD控制器的位置如图(1-1)所示,一端连接Avalon总线,一端连接LCD接口(LCD屏幕标准接口)。LCD控制器负责从SDRAM中提取显示数据,经处理符合LCD时序规范,送至LCD接口,实现显示图像。
图1-1系统总貌图
2 相关技术介绍
本小节主要介绍本论文中所涉及的关键理论和技术,包括LCD显示技术,SOPC技术,SOPC技术特点,Nios II处理器,Avalon总线。
2.1 LCD显示技术
在1970年,Ferguson制造了第一台具有实用性的LCD。LCD 使用液晶屏幕显示图象,液晶屏幕以电压供应的改变而改变光线的折射来产生色彩的变化LCD 显示屏一般都应用在便携电脑或多媒体放映机上。大部分桌面电脑的纯平LCD显示器就是采用了LCD 技术。
利用液晶制成的显示器称为液晶显示器,英文称 LCD(Liquid Crystal Display)。其种类可分为依驱动方式之静态驱动(Static)、单纯矩阵驱动(Simple Matrix)以及主动矩阵驱动(Active Matrix)三种。而其中,单纯矩阵型又俗称的被动式(Passive),可分为扭转向列型(Twisted Nematic,简称 TN)和超扭转式向列型(Super Twisted Nematic,简称STN)两种; 而主动矩阵型则以薄膜式晶体管型(Thin Film Transistor;TFT)为目前主流。
LCD因具有工作电压低、功耗小、显示信息量大、寿命长、易集成、方便携带和电磁辐射污染小等优点,在显示技术中异军突起,被广泛应用于手机、PDA产品、手持式仪器仪表等便携式电子产品与设备中。LCD驱动电路是液晶显示系统的重要组成部分,是一种计算机(或MCU)和液晶屏之间的接口电路,其主要功能是通过调制输出到液晶显示器件电极上的电位信号的相位、峰值、频率等参数来建立交流驱动电场。由于LCD的规格相差较大,常规的方法是针对每一种LCD开发专门的驱动电路,这样的设计浪费时间,而且复用性较差。为此,设计一种可用于多数小规模LCD驱动电路的IP核,通过复用该IP核来解决这个问题是非常必要的。
目前,国际上只有I-Shou大学的Yu-Jung Huang等人设计了可驱动不同规模LCD的驱动电路IP核,通过在系统中植入嵌入式微处理器来实现这一功能。但是,这种嵌入式微处理器使系统更复杂,而且成本更高。本文设计的可驱动不同规模LCD的驱动电路IP核是采用FPGA来实现的,能有效克服电路系统复杂和高成本这两个缺点。
2.2 SOPC技术
SoPC(System On a Program Chip,片上可编程系统)是以PLD(Programmable Logic Device,可编程逻辑器件)取代ASIC(Application Specific Integrated Circuits,专用集成电路),更加灵活、高效的SoC(System On Chip)解决方案。它最早是由美国Altera公司于2000年提出的,并同时推出了相应的开发软件Quartus Ⅱ。SoPC是基于FPGA(Field Programmable Gate Array,现场可编程门阵列)解决方案的SoC,与ASIC的SoC解决方案相比,SoPC系统及其开发技术具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能,具有更多的特色,构成SoPC的方案也有如下多种途径。
2.2.1基于FPGA嵌入IP硬核的SoPC系统
即在FPGA中预先植入嵌入式系统处理器。目前最为常用嵌入式系统大多采用了含有ARM的32位知识产权处理核的器件。但通常这种系统还须配置许多接口器件才能构成一个完整的应用系统,如除配置常规的SRAM、DRAM、Flash外,还须配置网络通信接口、USB接口、VGA接口、PS/2接口或其他专用接口等。这样会增加整个系统的体积、功耗,而降低系统的可靠性。但是如果将ARM或其他知识产权核,以硬核方式植入FPGA中,利用FPGA中的可编程逻辑资源和IP软核,直接利用FPGA中的逻辑宏单元来构成该嵌入式系统处理器的接口功能模块,就能很好的解决这些问题。这样就能使得FPGA中的硬件设计核硬件实现更与处理器的强大软件功能有机的相结合,高效的实现SoPC系统。
2.2.2基于FPGA嵌入IP软核的SoPC系统
将IP硬核直接植入FPGA的解决方案也存在许多不完美之处。例如硬核多来自第3方公司,导致FPGA器件价格相对偏高;由于硬核是预先植入的,设计者无法根据实际需要改变处理器的结构,如总线规模,接口方式,乃至指令形式,更不能将FPGA逻辑资源构成的硬件模块以指令的形式内置嵌入式系统的硬件加速模块(如DSP模块),以适应更多的电路功能要求;无法根据实际设计需求在同一FPGA中使用多个处理器核。以上诸多不利因素可利用软核嵌入式系统处理器来有效的解决。
目前最有代表性的软核嵌入式系统处理器分别是Altera的Nios和Nios Ⅱ核,及Xilinx的MicroBlaze核。特别是前者,即Nios CPU系统,将很好的解决上述不利因素。
Altera的Nios核是用户可随意配置和构建的32位/16位总线(用户可选的)指令集和数据通道的嵌入式系统32位处理器IP核,采用Avalon总线结构通信接口,带有增强的内存、调试和软件功能(C或汇编程序优化开发功能);含有First Silicon Solutions(FS2)开发的基于JTAG的片内设备(OCI)内核。此外,基于Quartus Ⅱ平台的用户可编程的Nios核含有许多可配置的接口模块核,包括:可配置高速缓存(包括片内ESB、外部SRAM或SDRAM,100MB以上单周期访问速度)模块,可配置RS232通信口、SDRAM控制器、标准以太网协议接口、DMA、定时器、协处理器等。在植入FPGA前,用户可根据设计要求,利用Quartus Ⅱ和SoPC Builder,对Nios及其外围系统进行构建,使该嵌入式系统在硬件结构、功能特点、资源占有等方面全面满足用户系统设计的要求。
2.3 SOPC技术的特点
SoPC技术主要面向单片系统级专用集成电路设计的计算机技术,与传统的专用集成电路设计技术相比,其特点有:
●设计全程,包括电路系统描述、硬件设计、仿真测试、综合、调试、系统软件设计,直至整个系统的完成,都由计算机进行。
●设计技术直接面向用户,即专用集成电路的被动使用者同时也可能是专用集成电路的主动设计者。
●系统级专用集成电路的实现有了更多的途径,即除传统的ASIC器件外,还能通过大规模FPGA等可编程器件来实现。
2.4 Nios II处理器
Nios嵌入式处理器是用户可配置的通用RISC嵌入式处理器,它是一个非常灵活和强大的处理器。Nios处理器的易用和灵活已经使它成为世界上最流行的嵌入式处理器。
嵌入式设计者SoPC Builder系统开发工具能够很容易地创建自己的处理器系统。SoPC Builder可用于集成一个或多个可配置的带有许多标准外围设备的Nios CPU,并利用自动形成的Avalon交换结构总线将这些系统连接在一起。
Nios嵌入式处理器是FPGA生产厂商Altera公司推出的软核(Soft Core)CPU,是一种面向用户的,可以灵活定制的通用RISC(精简指令集架构)嵌入式CPU。Nios以软核的方式提供给用户,并专为在Altera的FPGA上实现作了优化,用于SoPC集成,最后在FPGA上实现。
SOPC系统主要包括一个CPU、I/O终端申请、计时器、UART口及大量的通用寄存器。Nios的数据总线和地址总线由用户定义(最大为32位),也可以根据具体需求增加并行输入输出端、连接外设的接口逻辑等。
Nios Ⅱ系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS(Dhrystone Million Instructions executed Per Second)。Altera的Stratix 、Stratix GX、 Stratix Ⅱ和 Cyclone系列FPGA全面支持Nios Ⅱ处理器,以后推出的FPGA器件也将支持Nios Ⅱ。
Nios Ⅱ系列能够满足任何应用32位嵌入式微处理器的需要,用户可以将第一代Nios处理器设计移植到某种Nios Ⅱ处理器上,Altera将长期支持现有FPGA系列上的第一代Nios处理器。另外,Altera提供了一键式移植选项,可以升级至Nios Ⅱ系列。Nios Ⅱ处理器也能够在HardCopy器件中实现,Altera还为基于Nios Ⅱ处理器的系统提供ASIC的移植方式。
Nios Ⅱ处理器还具有完善的软件开发套件,包括编译器、集成开发环境(IDE)、JTAG调试器、实时操作系统(RTOS)和TCP/IP协议。设计者能够用Altera Quartus Ⅱ开发软件中的SoPC Builder系统开发工具很容易地创建专用的处理器系统,并能够根据系统的需求添加Nios Ⅱ处理器核的数量。
使用Nios II软件开发工具能够为Nios II系统构建软件,即一键式自动生成适用于系统硬件的专用C/C++运行环境。Nios II集成开发环境(IDE)提供了许多软件模板,简化了项目设置。此外,Nios II开发套件包括两个第三方实时操作系统(RTOS)——MicroC/OS-II(Micrium),Nucleus Plus(ATI/Mentor)以及供网络应用使用的TCP/IP协议。
在FPGA中使用软核处理器比硬核的优势在于,硬核实现没有灵活性,通常无法使用最新的技术。随着系统日益先进,基于标准处理器的方案会被淘汰,而基于Nios II处理器的方案是基于HDL(Hardware Description Language,硬件描述语言)源码构建的,能够修改以满足新的系统需求,避免了被淘汰的命运。将处理器实现为HDL的IP核,开发者能够完全定制CPU和外设,获得恰好满足需求的处理器。
2.5 Avalon总线简介
Avalon总线是Altera公司设计的用于SoPC中,连接片上处理器和其它IP模块的一种简单的总线协议,规定了主部件和从部件之间进行连接的端口和通信的时序。Avalon总线的主要设计目的如下:
简单性,提供一种非常易于理解的协议;
优化总线逻辑的资源使用率,将逻辑单元保存在PLD中;
同步操作,将其它的逻辑单元很好地集成到同一PLD中,同时避免复杂的时序。
Avalon交换式总线使用最少的逻辑资源来支持数据总线的复用、地址译码、等待周期的产生、外设的地址对齐(包括支持原始的和动态的总线尺寸对齐)、中断优先级的指定以及高级的交换式总线传输。
传统的总线结构中,一个中心仲裁器控制多个主设备和从设备之间的通信。这种结构会产生一个瓶颈,因为任何时候只有一个主设备能访问系统总线。Avalon总线的开关构造使用一种称之为从设备仲裁(Slave-side arbitration)的技术,允许多个主设备控制器真正地同步操作。当有多个主设备访问同一个从设备时,从设备仲裁器将决定哪个主设备获得访问权。
Avalon规范的制定是为了适应单可编程芯片系统(SoPC)上的外设的开发。这个规范给那些外设设计工程师提供了一个基本的描述——基于地址的Avalon总线上主(微处理器)从(存储器、UART、定时器外设等)设备的读/写口。这个规范还描述了各个端口在Avalon交换总线上的传输方式。根据规范,任何一个Avalon上的主设备都可以动态的连接到Avalon上的任何一个从设备上。
Avalon是一个灵活的接口,工程师可以只使用他们系统所需的数量和类型都有限的几个信号来进行数据传输。Avalon总线定义的内联线的策略使得任何一个Avalon总线上的主设备都可以与任何一个从设备沟通。Avalon总线还支持大范围的系统结构,包括单个的,多个的主设备系统,还具有在外设之间通过不同路径进行无缝的数据传输能力。
可以看到Avalon总线为用户提供了非常友好的接口,使得系统搭建中的一些细节问题得到屏蔽,大大减轻了系统搭建的工作量。
2.7 Quartus Ⅱ和SoPC Builder简介
图2-2 Quartus II软件
2.7.1 Altera Quartus Ⅱ简介
Altera的Quartus II可编程逻辑软件属于PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功 能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。Altera公司的Quartus II 设计软件提供完整的多平台设计环境,它可以轻易满足特定设计的需要。 它是单芯片可编程系统 (SOPC) 设计的综合性环境。Quartus II 软件拥有 FPGA 和 CPLD 设计的所有阶段的解决方案。
Quartus II支持多种输入法,包括原理图,Verilog HDL、VHDL、AHDL、EDIF等。Quartus II支持不同的仿真方式,包括功能仿真和时序仿真。仿真波形的激励可以是图形方式输入信号,也可以是Testbench方式文本文件(即用Tck写仿真脚本文件)。此外,其还支持第三方的仿真工具。用第一种方式进行仿真时,对输入信号加入相应激励就可以了。在局部布线后,会产生以个.SOF和.POF文件,两者都可以进行下载。
我们就利用这个平台来进行工程项目开发的。
2.7.2 SoPC Builder简介
Quartus Ⅱ软件支持 SoPC Builder 和 DSP Builder 的系统级设计流程。 系统级设计流程使工程师能够以更高水平的抽象概念快速地设计和评估单芯片可编程系统 (SoPC) 体系结构和设计。
SoPC Builder 是自动化系统开发工具,可以有效简化建立高性能 SoPC 设计的任务。 此工具能够完全在 QuartusⅡ 软件中使系统定义和 SoPC 开发的集成阶段实现自动化。 SoPC Builder 允许选择系统组件,定义和自定义系统,并在集成之前生成和验证系统。
SoPC Builder可以导入或提供到达用户自定义逻辑块的接口。 SoPC Builder 系统与用户定义逻辑配合使用时具有以下四种机制:简单的 PIO连接、系统模块内实例化、到达外部逻辑的总线接口以及发布局域 SoPC Builder 组件。
SoPC Builder 与 Quartus Ⅱ软件一起提供,它为建立 SoPC 设计提供标准化的图形环境,其中,SoPC 由 CPU、存储器接口、标准外围设备和用户自定义的外围设备等组件组成。 SoPC Builder 允许选择和自定义系统模块的各个组件和接口。 SoPC Builder 将这些组件组合起来,生成对这些组件进行实例化的单个系统模块,并自动生成必要的总线逻辑,以将这些组件连接到一起。
●SoPC Builder 库组件包括:
处理器
知识产权 (IP) 和外围设备
存储器接口
通信外设总线和接口,包括 Avalon 总线和 AMBA 高性能总线 (AHB)
数字信号处理 (DSP) 内核
软件
标题文件
一般 C 驱动器
操作系统 (OS) 内核
可以使用 SoPC Builder 构建包括 CPU、存储器接口和 I/O 外设的嵌入式微处理器系统;但是,还可以生成不包括 CPU 的数据流系统。 它允许指定具有多个主连接和从连接的总线拓扑结构。 SoPC Builder 还可以导入或提供到达用户自定义逻辑块的接口,其中,逻辑块作为自定义外设连接到系统上。
●建立系统
在 SoPC Builder 中构建系统时,可以选择用户自定义模块或模块集组件库中提供的模块。SoPC Builder 可以导入或提供到达用户自定义逻辑块的接口。 SoPC Builder 系统与用户定义逻辑配合使用时具有以下四种机制: 简单的 PIO 连接、系统模块内实例化、到达外部逻辑的总线接口以及发布局域 SoPC Builder 组件。SoPC Builder 提供用于下载的库组件(模块),包括 Excalibur 嵌入式处理器带区和 NIOS 处理器等处理器、UART、定时器、PIO、Avalon 三态桥接器、多个简单的存储器接口和 OS/RTOS 内核。 此外,还可以从一系列的 MegaCore、 OpenCore生成系统生成系统。可以在模块集中选择库组件,并在模块表中显示添加的组件。可以使用模块表或单独向导中的信息定义以下组件选项:系统组件和接口
主连接和从连接
系统地址映射
系统 IRQ 分配
共享从连接的仲裁优先级
系统时钟频率
●生成系统
SoPC Builder 中的每个工程包含系统描述文件(PTF 文件),它包含在 SoPC Builder 中输入的所有设置、选项和参数。 此外,每个模块具有相应的PTF 文件。 在生成系统期间, SoPC Builder 使用这些文件为系统生成源代码、软件组件和仿真文件。完成系统设计之后,可以使用SoPC Builder 的 System Generation 页或使用命令行生成系统。
SoPC Builder 软件自动生成所有必要逻辑,用以将处理器、外围设备、内存、总线、仲裁器、IP 内核及到达系统外逻辑和存储器的接口集成在一起,并建立将组件捆绑在一起的HDL 源代码。
SoPC Builder 还可以建立软件开发工具包 (SDK) 软件组件,例如,标题文件、一般外围设备驱动程序、自定义软件库和OS/实时操作系统(RTOS内核),以便在生成系统时提供完整的设计环境。为了仿真, SoPC Builder 建立了 Model Technology ModelSim 仿真目录,它包含 ModelSim 工程文件、所有存储器组件的仿真数据文件、提供设置信息的宏文件、别名和最初的一组总线接口波形。
它还建立仿真测试台,可以实例化系统模块、驱动时钟和复位输入,并可以实例化和连接仿真模型。还生成 Tcl 脚本,用于在Quartus Ⅱ软件中设置系统编译所需的所有文件。
3 系统实现
3.1 LCD控制器IP核设计
3.1.1设计思路
设计LCD控制器
3.1.2 S3C2410介绍
图(5-2)是三星公司生产的基于ARM9平台的S3C2410的LCD控制器的结构示意图,其功能可以驱动STN、TFT等多种型号LCD显示屏。图(5-1)是本设计仿照S3C2410,简化后的系统设计。由寄存器堆(REGBANK)、控制器专用DMA、视频FIFO、LCD控制时序发生组成。
现在简单分析S3C2410工作原理:REGBANK是控制器的寄存器堆,包含初始化信息。负责初始化DMA模块、时序发生模块以及LPC3600(时序控制逻辑单元)。
LCDCDMA,是LCD控制器的专用DMA,内置FIFO缓冲单元。相对总线频率,LCD是一个低速设备。这里FIFO的存在是必要的。
TIMEGEN,时序发生装置,负责产生LCD适应的时钟脉冲。
LPC3600,这是个时序控制逻辑电源,它何以根据控制寄存器的参数,适应多种LCD显示屏的时序,实现通用性。本设计也是在这个部分进行了简化。
3.1.3 LCD控制器的软核设计
本设计,参照S3C2410设计,进行了以下开发。
在FPGA中,定制DMA、FIFO、寄存器以及时序发生逻辑单元。简化LPC3600的功能,实现驱动特定LCD(TFT)的设计目的。
本设计的像素数据为16位,显示格式为5:6:5。
3.2 LCD控制器组成
3.2.1 LCD控制器的相关参数、变量:
分辨率:m×n (行×列)
帧同步:VSYNC 标志这一屏显示的开始,帧同步信号;
行同步:HSYNC 表示一行数据的开始,行同步信号;
像素时钟:VCLK 像素时钟信号(pixel clock signal);
系统时钟:CLK Nios系统的时钟信号;
水平变量:HOZVAL = (水平显示尺寸[n]) -1,属寄存器变量;
垂直变量:LINEVAL = (垂直显示尺寸[m]) -1,属寄存器变量。
3.2.2像素存储与显示屏位置的映射关系:
显示屏像素点分布
扫描顺序为P00~P0n,P10~P1n……Pm0~Pmn。
像素点Pmn的布局顺序
P00 | P01 | P02 | …… | P0n |
P10 | P1n | |||
P20 | P2n | |||
…… | …… | |||
Pm0 | Pmn |
3.2.3 5:6:5显示格式
图5-4 像素数据映射
Nios系统是32位系统,我们可以设置32位数据的高16位和低16位分别是两个像素点显示数据。也可以设计16位数据,每一个字为一个像素点数据。
存储器数据分布
p00 | D15 | D14 | …… | D0 |
p01 | D15 | D14 | …… | D0 |
p02 | D15 | D14 | …… | D0 |
…… | …… | …… | …… | …… |
p0n | D15 | D14 | …… | D0 |
p10 | D15 | D14 | …… | D0 |
…… | …… | …… | …… | …… |
数据存储
显示数据存储、读取及屏幕刷新频率:
数据传输
在控制器设计中有一个问题要解决,那就是DMA与Nios对SDRAM控制的问题。由于本设计采用共享SDRAM的设计,所以在DMA传送数据时,Nios是处于非工作状态,如果DMA占用总线过长,就会影响Nios CPU的正常工作。
现在就相关参数作一下计算,以作说明:
设定点时钟(VCLK)频率为20MHz,每一个字用时50ns。
设定Nios时钟(Clk)频率为100MHz,每传送一个用时10ns。
设FIFO深度为8个字,设置FIFO的半满标志位,使FIFO作流水操作,当FIFO半满时,DMA向Nios发送传送请求,传送4个字的数据。用时4×10ns=40ns。同时发送4个字数据到时序发生器。如此实现流水操作。
FIFO发送4个字用时4×50ns=200ns。
所以每向LCD显示屏发送4个字用时200ns,而DMA仅用40ns就可完成传送,剩余160ns可以释放总线,给Nios II来控制,以保证系统程序的正常运转。
如果FIFO深度过大,以及时钟设计不合理,会干扰Nios CPU正常工作。出现图像不流畅等状况。
LCD控制器的内部结构图
关于方案的整体框架已经在第二章中做了介绍,本章主要介绍方案的详细设计。本设计中最关键的是LCD控制器的设计,要把LCD控制器整合到配置有Nios CPU的FPGA中。
LCD控制器的内部结构如上图所示,有一个FIFO和LCD的时序发生器组成。DMA把SDRAM从Avalon总线上读取像素数据(16位),存到FIFO中缓冲,等待LCD时序发生的时序要求,把相应像素数据发送到LCD(TFT),并显示。
3.3 FIFO的定制
FIFO(先进先出寄存器),是一种常用于数据缓存的电路器件,可应用于包括高速数据采集、多处理器接口和通信中的高速缓冲等各种领域。FIFO是一种基于RAM的器件,我们可以在FPGA中,利用内部的寄存器定制我们需要的FIFO。
在这个设计中,我们采用的就是直接调用厂商(Altera)为自己的FPGA专门打造的FIFO核(关于Quartus Ⅱ和SoPC Builder会在后面介绍)。
通过利用Quartus Ⅱ的MegaWizard定制的过程如下:
设置FIFO的输出控制信号的选择
设置“读请求信号”的类型
设置FIFO的输出寄存器
生成文件列表
3.4 LCD时序发生
下图是TFT屏的典型时序。其中VSYNC是帧同步信号,VSYNC每发出1个脉冲,都意味着新的1屏视频资料开始发送。而HSYNC为行同步信号,每个HSYNC脉冲都表明新的1行视频资料开始发送。而VDEN则用来标明视频资料的有效,VCLK是用来锁存视频资料的像数时钟。
并且在帧同步以及行同步的头尾都必须留有回扫时间,例如对于VSYNC来说前回扫时间就是(VSPW+1)+(VBPD+1),后回扫时间就是(VFPD+1);HSYNC亦类同。这样的时序要求是当初CRT显示器由于电子偏转需要时间,但后来成了实际上的工业标准,乃至于后来出现的TFT屏为了在时序上于CRT兼容,也采用了这样的控制时序。
图5-12 TFT时序
在Quartus Ⅱ中,利用VHDL(硬件描述语言),对上述时序进行描述。形成LCD控制器的一个时序发生器的关键文件(lcd_timing.vhd)。
ENTITY部分的程序代码(见附录)
形成仿真文件后,看波形分析是,没有错误和警号,顺利仿真。
3.5 LCD控制器的主要寄存器设置
LCDCON1寄存器设置
LCDCON1 | 位数 | 功能描述 | 初始状态 |
LINECNT | [27:18] | 行数寄存器 | 00000000000 |
CLKVAL | [17:8] | 测定时钟频率 | 00000000000 |
MMODE | [7] | VM触发器频率 | 0 |
PNRMODE | [6:5] | TFT显示 | 11 |
BPPMODE | [4:1] | 像素位数(16bbp) | 1100 |
ENVID | [0] | 视频输出使能 | 0 |
●CLKVAL :决定VCLK的分频比。LCD控制器输出的VCLK是直接由系统总线(AHB)的工作频率HCLK直接分频得到的。作为240*320的TFT屏,应保证得出的VCLK在5~10MHz之间。
●MMODE :VM信号的触发模式(仅对STN屏有效,对TFT屏无意义)。
●PNRMODE :选择当前的显示模式,对于TFT屏而言,应选择[11],即TFT LCD panel
●BPPMODE :选择色彩模式,对于真彩显示而言,选择16bpp(K色)即可满足要求。
●ENVID :使能LCD信号输出。
LCDCON2 寄存器设置
LCDCON2 | 位数 | 功能 | 初始值 |
VBPD | [31:24] | 后回扫时间 | 0x00 |
LINEVAL | [23:14] | 水平尺寸 | 0000000000 |
VFPD | [13:6] | 前回扫时间 | 00000000 |
VSPW | [5:0] | 脉冲宽度 | 000000 |
LCDCON3 寄存器设置
LCDCON3 | 位数 | 功能 | 初始值 |
HBPD | [25:19] | 水平回扫时间 | 0000000 |
HOZVAL | [18:8] | 水平尺寸 | 00000000000 |
HFPD | [7:0] | 水平前回扫时间 | 0x00 |
LCDCON4 寄存器设置
LCDCON4 | 位数 | 功能 | 初始值 |
HSPW | [7:0] | 水平同步 | 0x00 |
3.6参数化的实现途径:
参数化的实现是通过修改控制寄存器的对应参数来实现的。CPU在对寄存器堆(REGBANK)进行初始化的时候,对相应的参数寄存器和控制寄存器进行写操作,即可改变显示分辨率大小,实现一定的通用性,本文所阐述的控制器设计,现仅限于TFT显示屏。对STN和其他屏幕的IP要后期完善。
本TFT的IP核支持的是5:6:5 显示模式,在屏幕上每一个点的像素数据(RGB)为十六位。以分辨率为320×240为例:
每行的数据量为320×16,对于计数器(pixel_cnt)当为320是行结束(Lend)。
每一屏的数据量为320×240×16,对应行计数器(Line_cnt)上限为240。
两个计数器的值,通过CPU初始化寄存器(REGBANK),即可控制了显示屏幕的分辨率了。
3.7在SOPC Builder中的Nios系统生成
LCD控制器由三个文件构成,分别对应这时序发生、像素缓冲FIFO和LCD控制器模块顶层文件。
lcd_timing.vhd
lcd_pixel_fifo.v
lcd_controller.v (源文件详见附录)
添加用户逻辑
在SoPC Builder中添加用户逻辑(add interface to user logic),图示入上图。在“创建新组件”选项下,点击“Add”,添加上述三个文件到SoPC Builder中去。
LCD控制器三个模块文件
由图可以看到,用户逻辑的LCD控制器三个模块文件分别添加到了系统中去。并且下方的“Component ‘lcd_controller’is ok.”,说明组件添加正常,并符合Avalon总线规则。
引脚分配
我们可以通过把用户自定义的逻辑,通过这种方式添加到我们要开发的SoPC Builder中来。上图查看并分配模块信号引脚。
设置模块名称和属性
通过把用户逻辑添加到SoPC Builder中后,即可作为一个Avalon的slave设备添加到系统中了。
LCD控制器
把lcd_controller集成到了SoPC Builder中形成的Nios II系统。它包括了整个系统的各个组成元件和Avalon总线连接。
4. 总结
综合分析各章所述,本论文的主要的工作总结如下:
●简单介绍了一下LCD显示技术以及SOPC技术;
●分析了LCD屏的接口时序;
●研究了FPGA集成Nios II的方法,了解了Avalon总线技术和规范;
●将Nios II软核集成到FPGA上并进行相应配置;
●研究了如何使用VHDL和C语言对系统进行编程。