基于FPGA的液晶显示接口电路设计毕业设计 - 图文

更新时间:2024-03-28 10:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计(论文)任务书

学生姓名 指导教师 专业班级 工作单位 设计(论文)题目: 基于FPGA的液晶显示接口电路设计 设计(论文)主要内容: 本课题采用FPGA设计一个液晶显示模块LCM的接口控制电路,实现对LCM的有效控制,要求能显示中文和英文两种字符,下载并测试电路功能,分析芯片资源的占用情况。 要求完成的主要任务及其时间安排: 液晶显示模块是将液晶屏和液晶屏控制器制作在一块PCB上的显示系统,选择相应的液晶显示模块,采用FPGA设计接口控制电路,使液晶屏能显示中英文两种字符以及图形的显示。 1—2周 根据设计题目查找并收集相关资料 3—4周 完成开题报告,根据任务书拟定提纲 5—6周 确定整体设计思路,形成设计基本结构与框架 7—10周 软、硬件设计实现,并调试进行功能测试 11—13周 组织并完善毕业设计报告书,进行答辩准备 14周 提交论文 15周 答辩 必读参考资料: 1. 黄庭涛 CPLD/FPGA的开发与应用 电子工业出版社 2009 2. 王洪海 电子设计自动化应用技术——FPGA应用篇 高等教育出版社 2009 3. 姚远、李辰,FPGA应用开发入门与典型实例 人民邮电出版社 2010 4. 张洪润、张亚凡,FPGA/CPLD应用设计200例 北京航空航天大学出版社 2009 指导教师签名: 教研室主任签名: 盖章

毕业设计(论文)开题报告

题目 基于FPGA的液晶显示接口电路设计 1.目的及意义(含国内外的研究现状分析): 首先,21世纪,随着电子技术迅猛发展,高新技术日新月异。传统的设计方法正在逐步退出历史舞台,取而代之的是基于EDA技术的芯片设计技术,它正在成为电子系统设计的主流。大规模可编程器件现场可编程门阵列FPGA,已成为当今应用最广泛的可编程专用集成电路之一。其性能好、可靠性强、容量大、体积小、 微功耗、速度快、灵活使用、设计周期短、开发成本低,静态可重复编程,动态在系统结构,硬件功能可以像软件一样通过编程来修改,极大的提高了电子设计的灵活性和通用性。电子工程师和科学研究人员利用该类器件可以在办公室或试验台设计出所需要的专用集成电路,大大的较少了产品的研发周期和降低成本。近年来可编程逻辑器件的开发生产和销售规模以惊人的速度增长,而且广泛的应用于航空航天,网络通信,军用雷达,仪器仪表,工业控制,医用CT,家用电器,手机和计算机各个领域。它的广泛应用,使传统的设计方法正在进行一场巨大的变革。随着PFGA的空前发展和广泛应用,人们渴望掌握这方面的知识,特别是掌握应用设计方面的知识的要求越来越迫切。 其次,现代社会,以计算机技术为核心的信息技术迅速发展,以及信息的爆炸式增长,人类获得的视觉信息很大部分是从各种各样的电子显示器件上获得的,对这些显示器件的要求也越来越高,在这些因素的驱动下,显示技术也取得了飞速的发展。而液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。使用FPGA/CPLD设计的液晶控制器具有很高的灵活性,可以根据不同的液晶类型、尺寸、使用场合特别是不同的工业产品,做一些特殊的设计,以最小的代价满足系统的要求,而且可以解决通用的液晶显示控制器本身固有的一些缺点。 因此,在诸多科学以及社会环境影响因数下,本课题便把FPAG的应用与液晶显示器连接起来了,即设计基于FPAG的液晶显示接口电路。即本课题采用FPGA设计一个液晶显示模块LCM的接口控制电路,实现对LCM的有效控制,并且能显示中文和英文两种字符,下载并测试电路功能, 并且能分析芯片资源的占用情况。 2.基本内容和技术方案: 基本内容: 采用大规模可编程逻辑器件(Field-Programmable Gate Array)设计一个液晶显示模块LCM的接口控制电路,以FPGA为核心, 通过控制硬件电路和基于硬件描述语言(VHDL)的各功能模块:逻辑阵列块LAB(Logic array block)、嵌入式阵列块EAB(embedded array block)、快速互联以及IO单元,以及外围驱动电路,能够实现对LCM的有效控制,并且能点阵液晶屏上显示中文和英文两种字符,还可以通过下载并测试电路功能,分析芯片资源的占用情况。 技术方案: 采用大规模可编程逻辑器件(Field-Programmable Gate Array)设计与实现液晶显示电路相结合,以FPGA为核心的液晶显示、控制硬件电路和基于硬件描述语言(VHDL)的各功能模块:逻辑阵列块LAB(Logic array block)、嵌入式阵列块EAB(embedded array block)、快速互联以及IO单元,相应地设计了外围驱动电路;通过对驱动电路的分析,设计了时钟模块、串行接口电路、内部RAM块、读写电路以及时序产生电路,并将多个模块集成在一片FPGA芯片上,实现了点阵液晶屏的实时显示。通过扩展外部的行、列驱动器和利用FPGA的快速定制性,可方便地实现更多像素点的液晶显示,增强了系统的灵活性。并且通过软件下载并测试电路功能,分析芯片资源的占用情况。

3.进度安排: (1)毕业论文备题、选题 2011年1月10日--2011年1月20日 (2)下达任务书,根据设计题目查找并收集相关资 2011年2月21日--2011年3月13日 (3)完成开题报告,根据任务书拟定提纲 2011年3月14日--2011年3月20日 (4)确定整体设计思路,形成设计基本结构与框架 2011年3月21日--2011年3月27日 (5)软、硬件设计实现,并调试进行功能测试 2011年3月28日--2011年4月24日 (6)组织并完善毕业设计报告书 2011年4月25日--2011年5月15日 (7)指导教师评阅、定稿,进行答辩准备 2011年5月16日--2011年5月29日 (8)答辩 2011年5月30日--2011年6月5 日 4.指导老师意见: 指导教师签名: 年 月 日

注:1. 开题报告应根据教师下发的毕业设计(论文)任务书,在教师的指导下由学生独立撰写,在毕业设计开始后三周内完成;

2.设计的目的及意义至少800字,基本内容和技术方案至少400字;

3.指导教师意见应从选题的理论或实际价值出发,阐述学生利用的知识、原理、建立的模型正确与否、学生的论证充分否、学生能否完成课题,达到预期的目标。

郑 重 声 明

本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包括任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。

本人签名:

日期:目 录

摘 要 ??????????????????????????????????????? 1 Abstract ??????????????????????????????????????2 1 绪论 ???????????????????????????????????????3 1.1 选题的背景与意义???????????????????????????????? 3 1.2 LCD的控制应用和市场发展状况???????????????????????????3 1.3 设计的主要内容和重点难点?????????????????????????????4 1.4课题设计的预期目标????????????????????????????????5 1.4.1课题研究的预期理论目标????????????????????????????5 1.4.2课题研究的预期技术目标??????????????????????????????5 2 现代FPGA技术????????????????????????????????????6 2.1 FPGA的发展历程??????????????????????????????????6 2.2 FPGA的基本原理 ?????????????????????????????????6 2.2.1查找表的基本原理?????????????????????????????????6 2.2.2 基于乘积项的FPGA的逻辑实现原理????????????????????????7 2.3 FPGA的设计方法??????????????????????????????????7 2.4 VHDL硬件描述语言?????????????????????????????????8 2.5 Quartus II简介??????????????????????????????????8 3 总体系统设计及资源?????????????????????????????????10 3.1 系统设计要求??????????????????????????????????10 3.2系统设计总体框图?????????????????????????????????10 3.3 系统开发选用资源?????????????????????????????????10 3.3.1 液晶模块选用?????????????????????????????????10 3.3.2 FPGA的选择??????????????????????????????????17 4 硬件接口电路设计??????????????????????????????????21 4.1电源电路设计???????????????????????????????????21 4.2复位电路设计???????????????????????????????????22 4.3时钟电路设计???????????????????????????????????22 4.4下载配置与调试接口电路设计???????????????????????????23

4.5显示接口电路设计?????????????????????????????????23 5 系统各部分模块的设计????????????????????????????????24 5.1初始化模块设计??????????????????????????????????24 5.1.1 LCD模块初始化原理????????????????????????????????24 5.1.2 字符显示前初始化模块的设计???????????????????????????25 5.1.3 图片显示前初始化模块的设计???????????????????????????27 5.2 写入数据模块的设计????????????????????????????????28 5.2.1 英文字符部分的数据模块 ????????????????????????????28 5.2.2 中文字符部分的数据模块?????????????????????????????30 5.3显示控制模块的设计????????????????????????????????31 5.3.1字符显示控制模块的设计?????????????????????????????31 5.3.2 动态数据的显示控制???????????????????????????????31 5.3.3 图像数据的显示控制???????????????????????????????33 5.4字符显示及图片显示整体模块????????????????????????????36 6 软件测试与结果显示?????????????????????????????????38 6.1 字符显示部分的测试????????????????????????????????38 6.2 图片显示部分的测试????????????????????????????????38 6.3 预期测试结果???????????????????????????????????39 6.3.1 预期字符显示结果????????????????????????????????39 6.3.2 预期图片显示结果????????????????????????????????39 结束语????????????????????????????????????????40 参考文献 ???????????????????????????????????????41 附 录?????????????????????????????????????????42 致 谢?????????????????????????????????????????47

摘 要

本课题的主要任务是设计基于FPGA的液晶显示模块的接口控制电路,实现对LCM的有效控制,兼顾好程序的易用性,以方便之后模块的移植和应用。本课题的设计采用了带ST7920驱动的液晶显示模块,并使用XILINX公司的spartanII系列的XC2STQ114来作为核心的控制器。控制部分采用VHDL语言编写,主体程序才用了状态机作为主要控制方式。ST7920是一种内置128x64-12汉字图形点阵的液晶显示模块,用于显示是汉字和图形。最后实现使用FPGA在LCD上任意位置显示的中文字符以及英文字符,另外要能够根据输入数据的变化同步变化LCD上显示的内容。同时要能够将存储模块中的图片数据正常的显示在LCD上。

该课题的研究将有助于采用FPGA的系列产品的开发,特别是需要用到LCD的产品的开发。同时可以大大的缩短FPGA的开发时间。另外,由于模块的易用性,也将使得更多的采用FPGA的产品之上出现LCD,增加人际之间的交互性,为行业和我们的生活带来新的变化。

关键词: FPGA;ST7920;液晶显示;VHD

1

ABSTRACT

This topic is the main task of the design on FPGA LCD module interface control circuit, realize the effective control of LCM, considering the good programs to facilitate accessibility, after the transplantation and application. Module This topic was designed using ST7920 drive with the LCD module, and use of a series of spartanII XILINX company XC2STQ114 as core controller. Control part adopts VHDL language, subject program it only took state machine as main control mode. ST7920 is a built-in 128x64-12 characters of graphic dot matrix LCD module, for display Chinese characters and graphics. Finally implementations use FPGA in LCD display on the Chinese characters at any position and English characters, in addition to the changes according to the input data displayed on the LCD synchronous change content. Meanwhile to the image data storage module will be displayed on the LCD on the normal. This topic research will help based on FPGA series of products development, especially the need to use LCD products development. Meanwhile can greatly shorten the FPGA development time. In addition, because module ease-of-use, will also make more based on FPGA products appear LCD, increase on interpersonal interaction, for industry and our life brings new changes.

Key words: FPGA; ST7920; LCD; VHDL

2

1 绪论

1.1选题的背景与意义

液晶,是一种在一定温度范围内呈现不同于固态、液态,又不同于气态的特殊物质,它极具有各向异性的晶体所特有的双折射性,又具有液体的流动性。所以一般可分为热致液晶和溶致液晶两类。在显示领域应用的是热致液晶,超出一定温度范围,热致液晶就不再呈现液晶态,温度低了,出现结晶现象,温度升高了,就变成了液体;液晶显示器所标注的存储温度指的就是呈现液晶态的温度范围。液晶由于它的各向异性而具有的电光效应,尤其是扭曲列效应和超扭曲效应,所以能制作成不同类型的显示器件(Liquid Crystal Display 简称LCD)。在平板显示器件领域,目前应用较广泛的有液晶显示(LCD)、电致发光显示(EL)、等离子体(PDP)、发光二极管(LED)以及低压荧光显示器件(VFD)等等。

现代社会,以计算机技术为核心的信息技术迅速发展,以及信息的爆炸式增长,人类获得的视觉信息很大部分是从各种各样的电子显示器件上获得的,对这些显示器件的要求也越来越高,在这些因素的驱动下,显示技术也取得了飞速的发展。而液晶显示器具有有以下几种特点:1、低压微功耗,2、平板结构,3、被动现实性(不刺眼,不会影起视觉疲劳),4、显示信息量大(因为像素可以做的很小),5、易于彩色化(在色谱上可以非常准确的复现),6、无电磁辐射(对人体安全,易于信息保存),7、长寿命(几乎没有什么劣化问题,因此寿命极长)。正是这些特点,使得它在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。

对于FPGA,随着电子技术迅猛发展,高新技术日新月异。传统的设计方法正在逐步退出历史舞台,取而代之的是基于EDA技术的芯片设计技术,它正在成为电子系统设计的主流。而大规模可编程器件现场可编程门阵列FPGA,已成为当今应用最广泛的可编程专用集成电路之一。其性能好、可靠性强、容量大、体积小、 微功耗、速度快、灵活使用、设计周期短、开发成本低,静态可重复编程,动态在系统结构,硬件功能可以像软件一样通过编程来修改,极大的提高了电子设计的灵活性和通用性。电子工程师和科学研究人员利用该类器件可以在办公室或试验台设计出所需要的专用集成电路,大大的较少了产品的研发周期和降低成本。近年来可编程逻辑器件的开发生产和销售规模以惊人的速度增长,而且广泛的应用于航空航天,网络通信,军用雷达,仪器仪表,工业控制,医用CT,家用电器,手机和计算机各个领域。它的广泛应用,使传统的设计方法正在进行一场巨大的变革。随着PFGA的空前发展和广泛应用,人们渴望掌握这方面的知识,特别是掌握应用设计方面的知识的要求越来越迫切。

本课题主要任务是设计基于FPGA的LCD接口控制电路,来控制LCD的显示。兼顾好程序的易用性,以方便之后模块的移植和应用。最后在FPGA上的任意位置显示任意的中文字符以及英文字符,另外要能根据输入数据的变化同步变化LCD上显示的内容。同时要能将储存模块中的图片数据正常地显示在LCD上。该课题的研究将有助于采用FPGA的系列产品的开发,特别是需要用到LCD得采用FPGA的产品的开发。同时可以大大缩短FPGA的开发时间。另外,由于模块的易用性,也将使得更多的采用FPGA的产品之上出现LCD,增加人机之间的交互性,为行业和我们的生活带来新的变化。

1.2 LCD的控制应用和市场发展状况

在七十年代初液晶开始作为一种显示媒体使用以来,液晶的应用范围被逐渐拓宽,到目前已涉及游

3

戏机,手机/电话机,电视,笔记本电脑/掌上电脑,DC/DV以及液晶显示器等领域。

在1984年,欧美提出了STN-LCD,而同时TFT-LCD技术也被提出,但仍不成熟,在80年代末,日本掌握了STN-LCD的生产技术,在93年,日本又掌握了TFT-LCD生产技术,液晶显示器开始向廉价低成本的方向发展,随后DSTN-LCD诞生;另一方面向高端的薄膜式晶体管TFT-LCD发展,97年,日本建成了一大批大基板尺寸的第三代TFT-LCD生产线。在此期间,韩国和我国台湾开始介入液晶显示器生产领域,我国内地企业也引进生产线,生产TN-LCD,东亚地区逐渐发展成为世界液晶显示器的主要生产地,第三代半及第四代TFT-LCD生产线开始建立,日本,韩国和中国(含台湾省)在液晶显示器生产及技术上开始走在世界最前列。

在技术方面,因集成式的控制芯片具有包括了缩小了IC的体积、低功率消耗、降低封装的成本、节省电路板的数量及体积等优点,并使材料及LCD后段组装成本得以降低,因此许多厂商纷纷朝向高集成度控制芯片发展,并积极开发视讯应用的控制芯片。而最新趋势Sarmtpanel,在制程上则有简化流程、减少材料成本等优点。根据相关资料显示,Sarmtpanel可降低约10%~15%的成本,这也是国外一些大厂所钟爱的方式。

为降低控制IC成本,众多IC厂商纷纷推出集成式的单芯片控制IC。美国的Genesis最早推出集成式IC,将ADC、Scaler、OSD(内置菜单)与PLL(锁相环)为一颗单芯片控制IC。接着更进一步集成入DIV组件,形成双模控制IC。其组件集成数量持续增多,并渐渐添加Video的功能。当前Genesis最高集成度的产品,集成入的组件已经包括ADC、Scaler、PLL、OSD、TCON与DVI,仅剩Video的功能以及SDRAM的组件尚未集成。

随着市场竞争加剧,液晶显示器的成本压力越来越大,必须采用更简单的线路世纪实现液晶显示器的功能,以期降低成本,才能在市场竞争中立于不败之地。LCD控制IC必将向高集成度方向发展,以满足市场需要。

而在LCD的应用以及市场方面,虽然手机仍然是中小尺寸液晶显示器显示屏(LCD)的最主要应用设备,但便携导航设备(PND)、数码相框和MP3/便携媒体播放器(PMP)等新型设备,正在该市场的销售额中占有越来越大的份额。由于这些产品所使用的显示屏大于手机所用的显示屏,因此在供应商的工厂中同样需要更多的面板,这对于LCD面板生产商来说是个绝好的机会。

各种中小尺寸LCD的产能扩张和价格下降,促进了其应用领域的多元化。这又进一步刺激了需求,并吸引许多其它产品来采用中小型LCD,如白色家电和 零售标牌。

大多数行业内的公司认为,为了利用手机市场和新兴产品,中小尺寸显示屏供应商必须相应地平衡和调整策略,否则就可能错失整个市场。

1.3 设计的主要研究内容和重点、难点

本课题的主要内容是:基于FPGA的LCD接口电路的设计与应用,并兼顾程序的易用性以方便以后模块的转移。该课题涉及到FPGA的应用,LCD的驱动的研究,字符及图像显示模式的研究等知识。

本课题的重点难点:

1、液晶显示模块指令集较为复杂,采用FPGA设计需要定义的变量和状态将会很多; 2、中英字符的显示部分程序需要考虑到程序的易用性,方便将来移植后的使用;

3、图像显示部分,由于液晶显示模块内部图形显示GDRAM的地址寻址方式的独特性,并不是始终

4

从0到15循环,而是随着行数的增加会做一个移位。若按普通方法这不能显示。

1.4 课题设计的预期目标

本课题研究的目标主要包括采用FPGA控制LCD在任意位置显示任意中文以及英文字符,和在LCD上显示存储模块中的图像数据。

1.4.1 课题研究的预期理论目标:

1、掌握FPGA对LCD的控制方法,为课题研究做好理论准备;

2、通过FPGA对LCD控制,使得任何开发者都可以较为容易的通过此显示模块,在液晶上显示所需内容;

1.4.2 课题研究的预期技术目标:

1、中文及英文字符在LCD上能正常显示; 2、图像数据在LCD上的正常显示;

3、输入变动的数据能在LCD上同步刷新显示。

5

2 现代FPGA技术

2.1 FPGA的发展历程

可编程逻辑器件(FPGA)是20世纪70年代发展起来的一种新型期间。它的应用不仅简化了电路设计,降低了成本,提高了系统的可靠性,而且给数字系统的设计方式带来了革命性的变化。可编程逻辑器件的发展是以微电子创作技术的不断进步为基础的,其结构和工艺的变化经历了一个不断发展变革的过程。

20世纪70年代,早期的可编程逻辑器件只有可编程只读存储器,紫外线可擦除制度储存器和电可擦除只读储存器3种。

随后,出现了一类结构稍微复杂的可编程芯片,即可编程逻辑阵列(PLA)。PLA在结构上由一个可编程的与阵列和可编程的或阵列构成,阵列规模小,编程过程复杂繁琐。PLA既有现场可编程的,也有掩膜可编程的。

在这之后出现了可编程阵列逻辑(PAL)器件,它由一个可编程的“与”平面和一个固定的“或”平面构成,是现场可编程的。它的实现工艺由反熔丝技术、EPROM技术和EEPROM技术3种。在PLA的基础上,又发展除了一种通用阵列逻辑(GAL),如GAL16V8、GAL22V10等。它采用了输出逻辑宏单元结构和EEPROM工艺,实现了电可擦除、电可改写,由于其输出结构是可编程的逻辑宏单元,因而其设计具有很强的灵活性,至今仍有许多应用。

这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但由于其结构过于简单,因此,只能用于实现较小规模的电路设计

为了弥补这一缺陷,20世纪80年代中期,著名的可编辑逻辑器件厂商Altera和Xilinx分别推出了扩展型的复杂可编程逻辑器件(CPLD)和类似于标准门阵列的现场可编程门阵列(FPGA)。CPLD和FPGA的功能基本相同,只是芯片的内部原理和结构有些差别。这两种器件兼容了PAL和GAL器件的优点,具有体系结构灵活、逻辑资源丰富、集成度高以及适用范围广等特点,可用于实现较大规模的电路设计,编程也很灵活,所以,被广泛应用于产品的原型设计和小批量生产之中。几乎所有使用PAL、GAL和中小规模通用数字集成电路的场合均可应用CPLD和FPGA器件。

如今,FPGA器件已成为当前主流的可编辑逻辑器件之一。经过近20年的发展,可编辑逻辑器件已经取得了长足的进步,资源更加丰富,使用越来越方便。将来的可编程逻辑器件,密度会更高、速度会更快、功耗会更低,同时还会增加更多新的功能,向着集成了可编程逻辑、CPU、储存期等组件的可编程单片系统(SOPC)方向发展。

2.2 FPGA的基本原理

对于可编程逻辑器件,从实现原理上讲,一般分为两种:基于查找表加寄存器结构和基于乘积项的FPGA的逻辑实现原理

2.2.1查找表的基本原理

查找表本质上就是一个RAM。目前FPGA中多使用四输入的LUT,所以每一个LUT可以看成一个有4位地址线的16×1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自

6

动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

2.2.2 基于乘积项的FPGA的逻辑实现原理

以一个简单的电路为例,具体说明FPGA是如何利用以上结构实现逻辑的,电路如下图2.1:

图2.1

假设组合逻辑的输出(AND3的输出)为f,则f=(A+B)*C*(!D)=A*C*!D + B*C*!D (以!D表示D的“非”) FPGA将以下面的方式来实现组合逻辑f:

图2.2

A,B,C,D由FPGA芯片的管脚输入后进入可编程连线阵列(PIA),在内部会产生A,A反,B,B反,C,C反,D,D反8个输出。图中每一个叉表示相连(可编程熔丝导通),所以得到:f= f1 + f2 = (A*C*!D) + (B*C*!D) 。这样组合逻辑就实现了。 图3电路中D触发器的实现比较简单,直接利用宏单元中的可编程D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的全局时钟专用通道,直接连接到可编程触发器的时钟端。可编程触发器的输出与I/O脚相连,把结果输出到芯片管脚。这样FPGA就完成了图3所示电路的功能。

2.3 FPGA的设计方法

FPGA的常用设计方法包括“自顶向下”和“自下而上”。目前大规模FPGA设计一般选择“自顶向下”的设计方法。所谓“自顶向下”设计方法,简单地说,就是采用可完全独立于芯片厂商及其产品结构的描述语言,在功能级对设计产品进行定义,并结合功能仿真技术,以确保设计的正确性,在功能定义完成后,利用逻辑综合技术,把功能描述转换成某一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器,进行包括功能和时序的后验证,以保证布局布线所带来的门延时和线延时不会影响设计的性能。

“自顶向下”设计方法的优越性是显而易见的。首先,由于功能描述可以完全独立于芯片结构,在设计的最初阶段,设计师可不受芯片结构的约束,集中精力进行产品设计,进而避免了传统设计方法所带来的重新再设计风险,大大缩短了设计周期。

其次,设计的再利用得到保证。目前的电子产品正向模块化方向发展。所谓模块化就是对以往设计成果进行修改、组合和再利用,产生全新的或派生设计。而“自顶向下”设计方法的功能描述可与芯片

7

结构无关。因此,可以以一种IP(Intelligence Property 知识产权)的方式进行存档,以便将来重新利用。

第三,设计规模大大提高。简单的语言描述即可完成复杂的功能,而不需要手工绘图。

第四,芯片选择更加灵活。设计师可在较短的时间内采用各种结构芯片来完成同一功能描述,从而在设计规模、速度、芯片价格及系统性能要求等方面进行平衡,选择最佳结果。目前最为常用的功能描述方法是采用均已成为国际标准的两种硬件描述语言VHDL和Verilog HDL。

2.4 VHDL硬件描述语言

VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。

1. 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

2. VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

3. VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

4. 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

5. VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计

2.5 Quartus II简介

Quartus II软件是Altera公司在MAX+PLUS II软件基础上推出的一种更佳的设计软件。对于一个高性能、价格合理、尽快面市的方案,结合使用Quartus II软件和Altera FPGA将是非常好的选择。Quartus II软件比所有竞争产品具有更佳的集成设计环境(例如综合、仿真、逻辑分析和布局布线)。Quartus II平面配置器在输入引脚至所有连接逻辑的信号追踪上,表现出色。集成的Signal Tap II逻辑分析器非常易于使用,不像MAX+PLUS II那样,还要购买第三方开发工具。

Quartus II软件比MAX+PLUS II更加可靠,用户界面更加友好,特别是在仿真,节点发现和引脚分配等方面。同样,图形激励生成器比第三方的仿真工具更快、更有效。转换设计一直非常简单,在很短的时间内,就可以适用到目标器件中。

8

在MAX+PLUS II软件的基础上,Quartus II软件具有一些重要的优点: 1. 支持器件:

支持MAX 3000A、7000AE、MAX 7000B 和 MAX 7000S系列以及新的MAX II系列。

支持 FLEX 10KE?、FLEX 10K?、FLEX 10KA、ACEX、FLEX 6000系列,以及最新的Cyclone、Stratix 和 Stratix II 系列FPGA。 2. 性能:

对于MAX 3000A、MAX 7000AE、MAX 7000B、MAX 7000S、FLEX 10K 和ACEX设计,比MAX+PLUS II 10.2版本提供更好的平均性能表现。 (1) 对MAX设计,平均设计性能快15%;

(2) 对给定的MAX设计,所需器件资源平均少5%。 3. 综合:

(1)一体化RTL综合不仅支持AHDL,还支持最新的VHDL和Verilog语言标准。

(2)在综合和设计实施之前,RTL浏览器提供VHDL或者Verilog设计的图形表示(仅限于Quartus II软件)。

(3)支持所有的主要第三方综合流程。 4. 高级功能:

高级功能支持MAX II CPLD和最新的FPGA器件系列:

(1)PowerGauge? 功率分析功能支持MAX 3000A, MAX 7000AE和MAX 7000B设计和最新的FPGA器件(即将支持MAX II CPLD器件)。 (2)LogicLock? 基于模块的设计流程 (3)SOPC Builder: 同IP轻松集成 5. 编译: (1)物理综合优化

(2)时序收敛平面配置编辑器 6. 验证功能:

(1)多时钟和多周期时序分析

(2)面向FPGA设计的SignalTap II 嵌入式逻辑分析器 7. 最后一刻设计改变支持(ECO支持):

(1)芯片编辑器(将于2004年下半年支持MAX II) (2)渐进式拟和

从MAX+PLUS II软件转换到Quartus II软件非常容易,现在可以用Quartus II进行所有的Altera新设计。Quartus II软件最新版非常实用,根本不用再回到老版本去完成一个设计。转到Quartus II软件的一个主要原因是其出众的实现时序收敛的能力,这对大部分有难度的工程是不可缺少的。如果将Altera CPLD或FPGA中的所有逻辑资源全部用上,即使这样,仍旧能够满足速度需要。比较包括Xilinx在内的其他PLD供货商的开发工具,只有Quartus II软件才是最容易使用的。

9

3 总体系统设计及资源选择

3.1 系统设计要求与内容

根据本系统设计要求,采用大规模可编程逻辑器件(Field-Programmable Gate Array),使用VHDL语言,利用Altera提供的FPGA/CPLD开发集成环境QuartusⅡ调试开发。设计一个液晶显示模块LCM的接口控制电路,以FPGA为核心, 通过控制硬件电路和基于硬件描述语言(VHDL)的各功能模块:逻辑阵列块LAB(Logic array block)、嵌入式阵列块EAB(embedded array block)、快速互联以及IO单元,以及外围驱动电路,能够实现对LCM的有效控制,并且能点阵液晶屏上显示中文和英文两种字符,还可以通过下载并测试电路功能,分析芯片资源的占用情况。

3.2系统设计总体框图

系统设计总体框图如图3.1所示,在系统上电后,FPGA将首先对系统进行初始化操作,在初始化操作中最重要的是寄存器的复位,显示开关的控制,功能设置以及对显示屏幕进行清屏。之后通过显示控制模块对LCD进行显示的控制。显示控制模块主要负责在LCD显示多行字符时进行换行操作,在用户指定数据在屏幕的指定显示位置时设置该位置所对应的RAM的值,以及在图像显示时进行的ROM地址重映射算法,和对LCD显示区对应RAM进行的写入操作。其中的数据分别来自中英文字符模块,动态数据模块,以及图像数据模块。

对此模块的设计,主体结构以状态机来实现。

图3.1 系统设计总体框图

3.3 系统开发选用资源

3.3.1 液晶模块选用

本设计选用了带ST7920驱动的LCD12864-12模块来进行设计和调试。该模块自带字库。其中,12864-12汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵),128个字符(8X16点阵)几64X256点阵显示RAM(GDRAM)。

10

12864液晶显示屏共有128×64点阵,即每行显示128点,每列显示64点。此种型号的液晶显示屏以中间间隔平均划分为左屏和右屏分别显示,均为64×64点阵,而且各自都有独立的片选信号控制选择。先显示左屏,左屏全部显示完后才能显示右屏。显示屏上的显示数据由显示数据随机存储器DDRAM提供。DDRAM每字节中的每1个bit,对应显示屏上的1个点。bit值为1,对应点显示,反之不显示。

DDRAM与显示屏的对应位置如图1所示。每半屏显示数据共有512字节的DDRAM,分为8个数据页来管理,这些页对应显示屏从上到下编号为0-7页,每页64字节,涵盖半边显示屏的64行×64列×8bit点阵数据。向显示屏写数据实际上是向DDRAM中写数据,DDRAM不同页和不同列中的字节数据唯一对应显示屏一行的8个显示点。例如,向DDRAM第0页的第0列写入数据00010100B,则显示屏左上角第0列的8个显示点只有从上往下的第3和5点显示。不同页和不同列DDRAM的寻址,通过左半屏和右半屏各自的页地址计数器和列地址计数器实现,因此对显示屏DDRAM写显示数据前,需要先设置页地址和列地址。

左半屏右半屏 每一点对应的地址信息

图3.2 12864液晶显示屏与内部RAM的对应关系

11

1、主要技术参数和显示特性:

电源:VDD 3.3V~+5.5V(内置升压电路,无需负压) 显示内容:128 X 64行 显示颜色:黄绿 显示角度:6:00种直视 LCD类型:STN

与MCU接口:8位或4位并行/3位串行配置LED背光 2、外形尺寸

外观尺寸:93×70×12.5mm 视域尺寸:72×40mm

图3.3 外观尺寸图

外形尺寸:

表3.1 外形尺寸表

12

3、模块引脚说明:

表3.2 模块引脚

管脚号 1 2 3 4 管脚名称 VSS VDD V0 D/I 电平 0V 5.0V - H/L 管脚功能描述 电源地 电源电压 液晶显示器驱动电压 D/I=“H”,表示DB7~DB0为显示数据 D/I=“L”,表示DB7~DB0为显示指令数据 5 R/W H/L R/W=“H”,E=“H”,数据被读到DB7~DB0 R/W=“L”,E=“H→L”, DB7~DB0的数据被写到IR或DR 6 E H/L 使能信号:R/W=“L”,E信号下降沿锁存DB7~DB0 R/W=“H”,E=“H” DRAM数据读到DB7~DB0(使能端,高电平有效) 7 8 9 10 管脚号 11 12 13 14 15 16 17 18 19 20

逻辑工作电压(VDD):3.3~5.5V 电源地(GND):0V

工作温度(Ta):0~+50℃(常温)/ -20~70℃(宽温)

13

DB0 DB1 DB2 DB3 管脚名称 DB4 DB5 DB6 DB7 CS1 CS2 RESET VEE IED+ IED- H/L H/L H/L H/L 电平 H/L H/L H/L H/L H/L H/L H/L -10V DC+5V DC0V 数据线 数据线 数据线 数据线 管脚功能描述 数据线 数据线 数据线 数据线 左半屏片选信号,高电平有效 右半屏片选信号,高电平有效 复位信号,低电平复位 LCD驱动负电压 背光板电源 背光板电源

4、接口时序

模块有并行和串行两种连接方法(时序如下): a) 8位并行连接时序图

图3.4 MPU写资料到模块

图3.5 MPU从模块读出资料

b) 串行连接时序图

图3.6 串行时序图

14

表3.3 时钟周期表

串行数据传送共分三个字节完成: 第一字节:串口控制——格式 11111ABC

A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD。 B为数据类型选择: H表示数据室显示数据,L表示数据室控制指令 C固定为0

第二字节:(并行)8位数据的高4位——格式DDDD0000 第三字节:(并行)8位数据的低4位——格式DDDD0000 串行接口时序参数:(测试条件: T=25℃ VDD=4.5V) 5、用户指令集:

指令表1:(RE=0:基本指令集)

表3.4 基本指令表

15

指令表2:(RE=1:扩充指令集)

表3.5 扩充指令表

备注:

1、 当模块在接受指令前,微处理器必须先确认内部处于非忙碌状态,即读取BF标志时BF需为0,

16

方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长时间,即是等待前一个指令确实执行完成,指令执行的时间参考指令表中的个别指令说明。

2、 “RE”为基本指令集与扩充指令集的选择控制元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。

3.3.2 FPGA的选择

FPGA器件种类很多,选择一款性价比合理的FPGA芯片,涉及多个方面。设计系统的要求将决定FPGA的选用,一个设计系统会根据设计方案对实现器件提出以下基本要求:器件容量、工作速度、工作电压、引脚数量、编程方式以及器件成本等。有些系统还会提出一些特殊的要求,如希望FPGA器件内部含有存储器块、DSP块、锁相环等。

Cyclone系列是Stratix系列器件的简化版,容量较低,成本大大降低,适宜小系统设计使用。表3.6列出了Cyclone系列器件的性能。

CycloneII系列器件继续发挥低成本优势,采用90nm工艺,是Cyclone系列的第二代产品。CycloneII器件容量为4608~68416个逻辑单元,是第一代Cyclone器件的3倍。Cyclone器件具有150个嵌入18*18乘法器,适合于实现低成本数字信号处理DSP应用,这些乘法器运行速度达250Mhz。

CycloneIII系列器件是Cylone系列的第三代产品,采用65nm低功耗工艺制作,其低成本和高性能进一步扩展了其应用领域。CycloneIII系列包括8个型号,容量在5000~120000逻辑单元之间,最多有534个用户I/O引脚,器件具有4Mb嵌入式存储器、288个嵌入式18*18乘法器、专用外部存储器接口电路、锁相环PLL以及高速差分I/O等。

所以综合对本设计的各个方面要求考虑,最终选择采用Cyclone系列器件的EP1C12Q240C8型号FPGA。它采用全铜层、低K值、1.2V SRAM工艺设计,裸片尺寸被尽可能最小的优化。采用300毫米晶圆,以TSMC成功的90nm工艺技术为基础,Cyclone II器件提供了4,608到68,416个逻辑单元(LE),包括嵌入式18*18位乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力。

核心FPGA型号为EP1C12Q240C8,它具有4608个逻辑单元,119kbits 内部RAM,13个内嵌18*18位硬件乘法器,144个引脚。从资源数量、类型和引脚数量已经符合本设计的各项要求。

表3.6 EP1C12Q240C8资源

FPGA 系列 逻辑单元(大约每个LE上有50个门) M4K RAM 块(4 Kbits+奇偶) 总的RAM KBits 乘法器

1、EP1C12Q240C8管脚说明

EP1C12Q240C8FPGA器件的管脚主要包括:用户I/O(UseI/O)、配置管脚、电源、时钟及特殊应用管脚等。其中有些管脚可有多种用途,所以在设计FPGA电路之前,需要认真的阅读相应FPGA的芯片手册。下面简单说明EP1C12Q240C8各种管脚功能。

EP2C5 4,608 26 119 13

17

(1)用户I/O。

(2)配置管脚。

3.7所示是用户I/O的原理图。

并行等,可以此管脚进行选择。

图3.7 EP1C12Q240C8 用户I/O原理图

nSTATUS:配置状态信号。

CONF_DONE:配置结束信号。

nCONFIG:用户模式配置起始信号。

DCLK:FPGA串行时钟输出,为配置器件提供串行时钟。

nCSO(I/O):FPGA片选信号输出连接至配置器件的nCS管脚。

能下一个器件开始进行配置。下载链的最后一个器件的nCEO应悬空。

ASDO(I/O):FPGA串行数据输出,连接至配置器件的ASDI管脚。

DATA0:FPGA串行数据输出,连接至配置器件的串行数据输出引脚。

num表示管教序号。一般在绘制FPGA原理图时,将同一种功能和用途的管脚放在一个框图中,如图

nCE:下载链器件使能输出,连接至上一个器件的nCEO。下载链第一个器件的nCE接地。

I/Onum(LVDSnumn):可用作输入或输出,或者双向口,同时可作为LVDS差分对的负端。其中

nCEO:下载链器件时能输出。在一条下载链(Chain)中,当第一个器件配置完成后,此信号将使

MSEL[1..0]:用于选择配置模式。FPGA有多种配置模式,比如主动、被动、快速、正常、串行、

18

为1.2V。

(3) 电源管脚。

GND:信号地。

VREF:参考电压。

GND_PLL:锁相环数字地。

GNDA_PLL:锁相环模拟地。

如图3.8所示是FPGA配置管脚原理图

如图3.9所示是FPGA电源管脚原理图。

VCC_PLL:锁相环管脚电压,直接连VCCIO。

VCCA_PLL:锁相环模拟电压,一般通过滤波器接到VCCINT上。

图3.8 EP1C12Q240C8 配置管脚原理图

(1) AS模式下在接口 (2) JTAG调试接口

VCCIO:端口电压。一般为3.3V,还可以支持选择多种电压,如5V、1.8V、1.5V等。

VCCINT:内核电压。通常与FPGA芯片所采用的工艺有关,例如130nm工艺为1.5V,90nm工艺

图3.9 GA电源管脚原理图

19

(4) 时钟管脚

CLKnum(LVDSCLKnump):锁相环时钟输入。支持LVDS时钟输入,p接正端,num表示PLL序号。

CLKnum(LVDSCLKnumn):锁相环时钟输入。支持LVDS时钟输入,n接负端,num表示PLL序号。

PLLnum_OUTp(I/O):锁相环时钟输出。支持LVDS时钟输入,p接正端,num表示PLL序号。 PLLnum_OUTn(I/O):锁相环时钟输出。支持LVDS时钟输入,n接负端,num表示PLL序号。 如图3.10所示是FPGA时钟管脚原理图。

另外,FPGA的管脚中,有一些是全局时钟,这些管脚在FPGA中已经做好了时钟树。使用这些管脚作为关键时钟或信号的布线可以获得最佳的性能。

图3.10 FPGA时钟管脚原理图

2、特殊管脚。

VCCPD:用于选择驱动电压。

VCCSEL:用于控制配置引脚和锁相环相关的输入缓冲电压。 PORSEL:上电复位选项。

NIOPULLUP:用于控制配置时所使用的用户I/O的内部上拉电阻是否工作。 TEMPDIODEn/p:用于关联温度敏感二极管。

20

4 硬件接口电路设计

本设计是设计一个基于FPGA的液晶显示接口电路,其中主要元器件为EP1C12Q240C8和12864-12液晶模块。,总体硬件电路框图如图4.1所示。

电源电路 RS

R/W 复位电路 FPGA E

D0~D7 时钟电路

图4.1总体硬件电路框图

12864液晶显示模块 4.1电源电路设计

电源是整个系统能够正常工作的基本保证,如果电源电路设计的不好,系统有可能不能工作,或者即使能工作但是散热条件不好,导致系统不稳定等异常情况。所以如何选用适合的电源芯片,以及如何合理的对电源进行布局布线,都是值得下功夫研究的。

在选用电源之前要仔细阅读FPGA的芯片手册,一般来说FPGA用到的管脚和资源越多,那么所需要的电流就越大,当电路启动时FPGA的瞬间电流也比较大。通过数据手册中提供的电气参数,确定FPGA最大需要多大的电流才能工作。

下面是几种常使用的FPGA参考电源。

AS117可以提供1A电流,线性电源(适用144管脚以下、5万逻辑门以下的FPGA)。

AS2830(或LT1085/6)可以提供3A电流,线性电源(适用240管脚以下、30万逻辑门以下的FPGA)。 TPS54350可以提供3A电流,开关电源(适用大封装大规模的高端FPGA)。

综合考虑各个方面因素,本设计选择AS2830电源,AS2830电源应用电路如图4.2所示。

图4.2 AS2830电源应用电路

21

4.2 复位电路设计

一般复位电路采用的是低电平复位,只有个别单片机采用高电平复位方式。常见的电平复位电路分为芯片复位和阻容复位。前者的复位信号比较稳定,而后者容易出现抖动。因此在成本允许的范围内我们一般推荐使用复位芯片复位。

常用的芯片复位有MAX708S/706S系列,它们可以提供高、低电平两种复位方式和电源监控能力(监控电源电压低到一定程度自动复位)。

IMP811是一款比较低廉的复位芯片,只有低电平复位功能,但是其体积非常小。本设计选择IMP811复位芯片。IMP811典型连接电路如图4.3所示。

图4.3 IMP811典型连接电路

4.3时钟电路设计

由于FPGA开发板上自带的晶振频率为50MHZ,而所需要的时钟频率则需要小于13.9KHZ,因此需要一个分频器对其进行分频。

这里采用简单的计数器对其进行分频,计数器上限经过计算设为4000. 经过分频后的时钟信号频率为12.5KHZ,满足实验需要。

在分频之后由于时钟信号需要同时控制LCD模块以及FPGA的模块,因此需要编写一个程序,使得两者之间同步。

最终的时钟控制电路典型连接如图4.4所示。

图4.4时钟电路典型连接

22

4.4下载配置与调试接口电路设计

FPGA是SRAM型结构,本身并不能固化程序。因此FPGA需要一片Flash结构的配置芯片来存储逻辑配置信息,用于进行上电配置。

以Altera公司的FPGA为例,配置芯片分为串行(EPCSx系列)和并行(EPCx系列)两种。其中EPCx系列为老款配置芯片,体积较大,价格高。而EPCSx系列芯片与之相比,体积小、价格低。 另外,除了使用Altera公司的配置芯片,也可以使用Flash+CPLD的方式去配置FPGA。 在把程序固化到配置芯片之前,一般先使用JTAG模式去调试程序,也就是把程序下载到FPGA芯片上运行。虽然这种方式在断电以后程序会丢失,但是充分利用了FPGA的无限擦写性。所以一般FPGA有两个下载接口:JTAG调试接口和AS(或PS)模式下在接口。所不同的是前者下载至FPGA,后者是编程配置芯片(如EPCSx),然后再配置FPGA。如图4.5和图4.6所示分别是JTAG模式和AS模式的电路原理图。

图4.5 JTAG模式原理图 图4.6 AS模式原理图

4.5 显示接口电路设计

通过前面对FPGA和12864显示屏引脚功能的分析可以知道,该模块有一个整体的片选信号“E”,只有当该信号为高电平时,所有的电路才会有效。另外左右半屏各有一个选择信号CS1和CS2,CS1和CS2各自为高电平时,分别选中左半屏和右半屏。为了区分读写的是数据还是指令,还设置了一个数据/指令控制线D/I。根据这些原则,设计出接口电路如图4.7所示。

图4.7 FPGA与12864的连接电路图

23

5 系统各部分模块的设计

5.1初始化模块设计

5.1.1 LCD模块初始化原理

对12864-12模块的初始化采用状态机的方式,通过资料中给出的12864-12模块的说明,选择所需要的初始化命令,结合特定的时钟频率,对LCD进行初始化。最终使屏幕清屏,显示区对应RAM复位,LCD的功能则设置为所需要的功能。

其中,字符显示模块的初始化流程图如图5.1:

图5.1 字符初始化流程图图 5.2 图片显示初始化示意图 图片显示模块的初始化流程图如图5.2:

其中直至写数据这一步骤之前都为起始的初始化动作。与字符显示不同,图片的现实需要使用特殊指令集中的指令,因此需要在功能设定时做出改动。而同时,在对GDRAM的地址以及内容进行操作时,必须保持绘图显示的关闭状态,因此在初始化时,需要将绘图显示关闭。但是由于写数据这一指令属于常规指令集,因此在设置完GDRAM地址后,需要重新使用功能设定,将指令集的使用改回常规指令集。当数据全部写入完毕,则可以通过再次使用特殊指令集,开启图像显示,将GDRAM中的数据显示在屏幕上。

24

5.1.2 字符显示前初始化模块的设计

1、初始化部分的状态机设计

根据字符模块初始化的流程图:

图5.3 LCD初始化流程图

因此,此部分的状态机设计如下: when IDLE=> --空闲状态 if flag ='0' then state <= CLEAR; flag<='1'; else state<=IDLE; end if;

when CLEAR=> --清屏状态,使LCD屏幕上显示全白

if div_counter2

state<=CLEAR; --一个0到64的计数器对其进行延迟处理 else

div_counter2 <=0; state<=RETURNCURSOR; end if;

when RETURNCURSOR=> --地址归位,使DDRAM地址复位

if div_counter2

state<=RETURNCURSOR; else

25

div_counter2 <=0; state<=SETMODE end if;

when SETMODE=> --点设置,选择整体画面的移位方式 state<=SWITCHMODE;

when SWITCHMODE=> --显示状态开 state<=SHIFT;

when SHIFT=> --控制游标的移动和显示移位 state<=SETFUNCTION;

when SETFUNCTION=> --功能设置 state<=SETDDRAM1;

when SETDDRAM1=> --设置DDRAM地址 state<=WRITERAM;

其中,由于时钟信号的周期约为80us,而CLEAR清屏和RETURNCURSOR点设定这两个操作需要4.6ms的操作时间,因此在这两个状态中加入了计数器用以延迟,延迟时间为时钟周期的64倍,约为5.12ms.这样设计可以最大化地提高LCD的响应速度。 2、字符显示的数据选择

? 为0;

? 为0;

? ? ? ? ?

点设定(对应状态机状态为SETMODE)选择整体画面不移位,DDRAM地址+1,因此对应显示状态开(对应状态机状态为SWITHMODE),光标显示关,字符不反白,因此对应DB7~DB0游标和显示控制(对应状态机状态为SHIFT)选择AC=AC+1,因此对应DB7~DB0数据为功能设定(对应状态机状态为SETFUNCTION)选择8为数据线接口,以及基本指令集动作,DDRAM(对应状态机状态为SETDDRAM)地址的设定则根据需要设定,对应DB7~DB0数据

DB7~DB0数据为00000110,RS,RW为0; 数据为00001100,RS,RW为0; 00010100,RS,RW为0;

因此对应DB7~DB0数据为00110000,RS,RW为0; 为10000000~10011111之间,RS为1,RW为0;

另外,根据模块引脚说明,FPGA还需要同时控制其他几个引脚。其中,为了选择并行的数据发送模式,PSB引脚应为H。RET引脚则由FPGA控制在经过一段时间的L复位后跳为H。

初始数据的赋值: psb<='1';

rs<='1' when state = WRITERAM or state = READRAM else '0'; -- 当状态为读写RAM时,RS为1

rw<='0' when state = CLEAR or state = RETURNCURSOR or state = SETMODE or

26

清除显示(对应状态机状态为CLEAR)对应的数据接口的数据(DB7~DB0)为00000001,RS,RW地址归位(对应状态机状态为RETURNCURSOR)对应(DB7~DB0)的数据为00000010,RS,RW

state = SWITCHMODE or state = SHIFT or state = SETFUNCTION or state = SETCGRAM or state = SETDDRAM or state = WRITERAM else '1'; --当状态为如上时,RW为0 data<=\

\ \

\ \

\ \

5.1.3 图片显示前初始化模块的设计

1、图片显示初始化的状态机设计

图片显示时需要用到扩充指令集。在基本指令集设置的时候需要将SETFUNCTION,功能设计,中的RE设为1. 而在扩充指令集的功能设定中也要将RE设为1,同时在显示模块写入图片数据时,需要将图片显示关闭,然后转入基本指令集进行数据的写入,直至写入数据完毕再使用扩充指令集,打开图片显示。

因此,其状态机设计与字符显示不同的部分如下:

when SHIFT=> --游标和显示移位,这一部和字符显示部分一样 state<=SETFUNCTION1;

when SETFUNCTION1=> --设置8位数据传输方式 state<=SETFUNCTION2;

when SETFUNCTION2=> --启用特殊指令集

if flag_p='0' then --这个选择结构用于选择打开或者关闭显示, state<=DRAWFUNOFF; --默认为关闭显示,只有当图像数据写入完成 else --才会使flag_p等于1,这时打开显示。 state<=DRAWFUNON; end if;

when DRAWFUNOFF=> --关闭显示 state<=SETGDRAM; …

when SETGDRAM=> --设置GDRAM起始地址 state<=DRAWFUNR;

when DRAWFUNR=> --在使用写入数据命令前,必须转会常规指令集 state<=CLEARRAM; --使GDRAM中数据清0 2、图片显示初始化数据的选择

其中与字符显示不同的指令集数据如下:

27

?

功能设定1(对应状态机状态为SETFUNCTION1)选择8为数据线接口,以及特殊指令集动作,

因此对应DB7~DB0数据为00110100,RS,RW为0;(由于对此指令集的更改,改动了2个数据,需要2个时钟周期,因此增加一个同样的状态SETFUNCTION2)

? ? ?

特殊功能设定(对应状态机状态为DRAWFUNR)选择绘图显示关,以及基本指令集动作,因绘图显示开(对应状态机状态为DRAWFUNON)选择绘图显示开,以及特殊指令集动作,因绘图显示关(对应状态机状态为DRAWFUNOFF)选择绘图显示关,以及基本指令集动作,因

此对应DB7~DB0数据为00110000,RS,RW为0; 此对应DB7~DB0数据为00110100,RS,RW为0; 此对应DB7~DB0数据为00110100,RS,RW为0;

对应的赋值部分程序如下: …. Data<=

\ \ \ \WFUNR else \WFUNON else \WFUNOFF else \

5.2 写入数据模块的设计

5.2.1 英文字符部分的数据模块

由于12864-12模块提供了从02H到7FH的半宽字符,包括英文大小写以及数字和符号,因此,需要编写合适的程序已方便使用者方便地调用以及使用。

设计采用访问RAM的方式对英文字符进行调用。显示控制模块在每一个时钟信号来的时候输出一个地址,这个地址在每一个时钟信号过后都自动加1.而这个地址则作为RAM的输入地址。相应的RAM返回给显示控制模块所对应的数据。

模块设计示意图如下:

图5.4 写入数据模块设计示意图(字符)

28

而RAM在设计的时候采用函数的方式,函数将负责自动辨识用户输入的英文符号,并将其转换为对应数据。如下程序所示,若想改变显示的内容只需要改变进程中每一行末尾char_to_integer函数括号中的内容即可。

函数中包括所需要显示的字符,即26个小写英文字符及26个大写英文字符和部分标点符号,以及其所对应的数据。

函数程序如下

function char_to_integer(indata : character) return integer is variable result : integer range 0 to 16#FF#; begin

case indata is

when ' ' => result := 16#20#; when '.' => result := 16#2E#; when ':' => result := 16#3A#; when 'a' => result := 16#61#; when 'b' => result := 16#62#; when 'c' => result := 16#63#; when 'd' => result := 16#64#; ...

when 'X' => result := 16#58#; when 'Y' => result := 16#59#; when 'Z' => result := 16#5A#; when others => result := 16#20#; end case; return result; end function;

当程序运行时,每当一个时钟信号来临,显示控制模块的输出地址自动加1,并且把地址传输到输入字符模块,模块通过输入地址的加1,从第一个字符数据开始输出对应数据,直到控制模块所设定的输出字符数为止。其中对没有在模块中定义的地址,一致输出“ ”所对应的数据,即16*8的空白。

以显示“This is a simple test for LCD Display.”为例核心程序如下: if(clk2'event and clk2='0') then case address is

when \ when \ when \ when \ when \

29

when \ when \ when \ when \ when \ when \ when others =>data<=conv_std_logic_vector (char_to_integer (' '),8); end case; end if;

5.2.2 中文字符部分的数据模块

中文部分的实现原理与英文部分大体相同,但是由于VHDL中无法识别中文,因此在使用上不可能做到和英文一样方便。使用时需要参照中文字符表,将需要的字符所对应的数据输入RAM,然后通过和英文模块不重复的符号来实现对其的调用。如 “测”这个中文字符,所对应的数据为16#B2E2,因此在函数部分应为:

when '@' => result := 16#B2#; when '#' => result := 16#E2#;

调用时的只需将@和#这两个符号来代替中文字符即可

when \when \

5.2.3图片部分的数据模块

图片部分的数据模块采用ROM的形式对其进行存放和读取。ROM为QUARTUS II的自带模块,大小为8*1024位,含一个使能端。ROM中的图像数据需要通过图像取模软件对图像进行取模,然后把取模得到的数据以MIF文件的形式赋给ROM。然后通过显示控制模块对ROM进行读取操作。

5.3显示控制模块的设计

5.3.1字符显示控制模块的设计

文本显示RAM(DDRAM)提供8X4行的汉字空间。每个单元所对应的DDRAM值如下:

表5.1 DDRAM相应值对应屏幕位置

在设定完起始的DDRAM值后,使用了一个计数器COUNTER,每经过一个写RAM状态,COUNTER自动加1。这个COUNTER经过转换后作为写入数据模块的RAM的输入地址,同时将这个COUNTER映射到DDRAM上。随着COUNTER的不断加1操作,写入数据模块的RAM中的内容被一个个输出到DDRAM所对应的屏幕的相应位置,而屏幕中的位置也在不断移动。这样一组数据就可以完整地显示在LCD现实屏上了。

30

如果需要显示多组数据在屏幕的不同位置,则需要提前计算好每组字符的字数,然后设定当字符数达到要求后,跳转至设定DDRAM值的,也就是屏幕上所对应位置的状态,然后如此反复就可以讲所需内容完整地显示出来。

对应的程序设计示意图如下:

图5.5显示控制模块设计流程图(字符)

假定要在屏幕上显示1组4个汉字组成的字符以及2组8个英文字符组成的字符,则程序如下 when SETDDRAM1=> state<=WRITERAM; when WRITERAM=>

if counter = 7 or counter = 15 then --这里假定要在屏幕上显示3组 state<=SETDDRAM1; --长度均为8位的数据 position<=position+1; --因此需2次改变显示位置 counter<=counter+1;

elsif counter < 24 then --总共共计24个16进制数据 state<=WRITERAM; counter<=counter+1; else

counter<=0; state<=IDLE; end if;

如此久可以再屏幕上的第一行的居中位置和第二、第三行的最左边分别显示写入数据模块RAM中的第1到8,9到16,17到24个字符。

5.3.2 动态数据的显示控制

动态数据的现实则是根据输入的变化,将其反应到写入数据模块的RAM中,使其反馈对应的数据。同时每进行一个写RAM状态后,便跳入设置DDRAM状态,将DDRAM值始终设为同一个,即屏幕

31

上的同一位置,之后再次进入写RAM状态,如此循环,就可以看到数据的不断变化。由于显示的基本原理相同,但是显示的内容却有千万种,因此在程序的编写上也会有无数种方式。基于这种原因,这里只用一个简单的0到15的计数器来做说明。

图5.6 动态数据部分设计流程图

在显示控制模块中,每过1个时钟信号,模块就会读取一次外部的数据,并把数据输入模块处理。主要工作室把外部数据数据分解为每一位上的十进制数据。同时输出信号到输入显示RAM,并调用返回的数据在屏幕上显示。同时,每次显示的时候,屏幕上显示的位置会自动重置,确保每次显示都能覆盖上次的显示,也就实现了动态数据的更新显示。

部分核心程序如下: when WRITERAM1=>

if counter_a='0' then --counter_a为2值变量,确保每次在屏幕上显示2 state<=WRITERAM1; --个16*8的数据 counter_a<='1';

if stream>\ --判断输入数据是否大于9 addr<=\ --对应数据RAM中的字符“1” else

addr<=\ --对应数据RAM中的字符“0” end if; --以上是十位数字的显示 else

if stream>\ --判断数据是否大于9 stream1<=\ --个位显示X-10的数据 else

stream1<=\ --个位数据直接显示 end if; --以上是个位数字的显示 state<=SETDDRAM2; --下一个状态为重置显示位置

32

counter_a<='0'; end if;

when SETDDRAM2=> state<=WRITERAM1;

5.3.3 图像数据的显示控制

绘图显示RAM提供128X8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:

1) 关闭绘图显示功能

2) 先将水平坐标(X)写入绘图RAM地址; 3) 再将垂直坐标(Y)写入绘图RAM地址; 4) 将D15-D8写入到RAM中; 5) 将D7-D0写入到RAM中; 6) 打开绘图显示功能;

因此,图像显示的程序设计示意图大体如下:

图5.7 图片显示流程图

在实际操作时,发现GDRAM的显示方式与DATASHEET上不同。

首先,直接将数据给GDRAM并将其显示后发现屏幕上有非常多的杂点,因此在对其进行写入正式数据前,必须将其清0.

其次当将32个8位数据写入GDRAM后,Y地址不变,需要人为将其设定为下一行,X地址自动加1。但是之后X地址并不是从0开始到15,而是从1开始到15,在跳到0。第三行的情况则是X从2到15,然后是0-1。因此发现X的地址不断在往前移位。

同时,由于GDRAM缓冲区特殊的分行显示方式,和普通取模软件从图片最上开始直接到最底部的取模方式不同。

33

若初始的数据为

0 10 20 30 …. 1 1 32 1 22 33 1 12 23 34 2 13 24 35 3 14 25 36 4 15 26 37 5 16 27 38 6 17 28 39 7 18 29 38 19 29 1图5.8欲显示数据

则直接按普通寻址方式输入数据后,显示的结果为:

0 39 0 … 10 29 0 … 1 31 12 32 1 21 13 33 2 22 14 34 3 23 15 35 4 24 16 36 5 25 17 37 6 26 18 38 7 27 19 38 28 19 2图5.9 实际显示数据

这显然不是我们要的结果,因此,如果想让图片在LCD上正常显示,有两种方式。

第一种是在图片进行取模后,通过电脑中编写的特殊程序对其进行处理。但是这种方法有可能使之后的开发过于依赖上位机,因此这里采用第二种方法。

第二种方法是将图片取模后的数据直接放入ROM中,但是在对ROM进行读取数据时,按照特定的算法进行读取,最后使图片正常显示。

具体操作方式如下 A)换行的算法:

设定一个计数器counter,使其每次进行写RAM操作时加1。当counter等于31+j的时候则进入设置GDRAM的换行状态,同时j加32。如此久完成了换行的过程。

34

B)上下半屏的合并算法:

再设置另一个0到31的计数器r_counter,每次进行写RAM操作时加1。J1为另一个计数器。寻址的地址为r_counter与j1的和。当r_counter在0到15时,则正常寻址,每换一行j1需要加16。如果r_counter大于15,那么寻址时C需要在原来的基础上加上512-16。同理,在换行后,寻址时j1也要再加上16。

C)X地址向前移位的处理:

同样的计数器r_counter,每次换行后在原来的基础上加上2,如此即可解决所有问题。 程序设计示意图如下图,其中,r_counter为5位的2进制数,范围为0到31

图5.10改进后的图片显示控制流程图

特殊寻址的核心程序如下:

char_address<= conv_std_logic_vector(j1,10)+r_counter when state = WRITERAM and r_counter<\ conv_std_logic_vector(j1+496,10)+r_counter when state = WRITERAM and r_counter>\…

进程部分:

首先要对DDRAM进行清0,这个步骤只需要考虑换行,不需要对X的地址的移位做考虑: when CLEARRAM=>

if counter1=j+31 then --由于X地址范围0到16每一位地址包含2个8位 state<=SETGDRAMY; --2进制数据,因此每32个数据Y地址加1 counter1<=counter1+1; --清0计数器,共计1024次 j<=j+32; --换行指示器 gd_addr<=gd_addr+1; --Y地址加1 flag_r<='0';

elsif counter1<1024 then state<=CLEARRAM; counter1<=counter1+1; else

35

counter1<=0; r_counter<=\j<=0; gd_addr<=0; flag_r<='1';

state<=SETGDRAM1; end if;

以上为清0程序。

以下为正式的图像写入程序: when WRITERAM=>

if counter=j+31 then --同清0程序一样原理,当J为32的倍数时换行 state<=SETGDRAMY; j<=j+32;

j1<=j1+16; --J1用作寻址时的累加器

counter<=counter+1; --COUNTER共1024次,共需写入1024个数据 gd_addr<=gd_addr+1; --Y地址加1 flag_r<='1'; i<=\

r_counter<=r_counter+1; --5位的R_COUNTER解决了X地址移位的问题 elsif counter<1024 then state<=WRITERAM; r_counter<=r_counter+1; counter<=counter+1; else counter<=0; flag_p<='1';

state<=SETFUNCTION1; end if;

when SETGDRAM2=> state<=SETGDRAMY;

when SETGDRAMY=> --换行状态 if flag_r='1' then state<=WRITERAM;

r_counter<=r_counter+”10”; --R_COUNTER每当Y地址加1也跟随往 else --前移2位,使得ROM的数据与屏幕 state<=CLEARRAM; --同步

36

end if; …

通过这系列算法的调整,可以使任意128*64像素的图片在取模后正常在LCD上显示。

5.4字符显示及图片显示整体模块

字符显示的整体模块的功能包括任意中文字符及英文字符在12864-12屏幕上的任意位置的显示,同时还要显示动态数据的变动。这里的动态数据为一个0到15的计数器。字符显示整体模块的BLOCK DIAGRAM如下:

图5.11 字符显示整体示意图

初始化部分的QUARTUS II部分仿真结果:

图5.12初始化部分仿真示结果

图像显示的整体模块的BLOCK DIAGRAM:

37

图5.13 图像显示整体示意图

6软件测试与预期结果显示

6.1 字符显示部分的测试

A)中文字符的显示

在屏幕的第一行的正中位置上显示“测试程序”4个汉字 B)英文字符的测试

在屏幕的第二、第三行显示“Current:”和“Voltage:”这几个英文字符和标点。 C)动态显示的测试

在屏幕的第二行的“Current:”之后根据0到15的计数器的输入变化,显示0到15的两位十进制数字。

预期在LCD显示如下图片:

图6.1 预期显示字符图 图6.2待显示图片图

6.2 图片显示部分的测试

图片显示部分使用1张图片如图6.2,进行显示的测试。其所对应的取模后的数据将其赋给对应的ROM模块,ROM中的数据如图6.3:

38

6.3 图片取模后的数据

6.3 预期测试结果

因为此次设计的局限性,使得本次设计只能在软件层次上实现,而不能通过实物仿真下载到开发板上来实现LCD的显示数据,为此,通过系统仿真测试,以下结果为本人预期需要达到的显示结果.

6.3.1 预期字符显示结果

接通电源,下载完程序后,LCD上显示了以下画面。其中数字从0到15循环显示。预期显示图像如下:

图6.4预期字符显示结果

6.3.2 预期图片显示结果

预期图片的显示结果:

39

图6.5预期图片显示结果

结束语

通过对基于FPGA的12864液晶模块接口电路的研究,基本完成了一种能较为简单和有效地控制LCD模块显示字符、图像的接口电路。

本系统设计从开始到完成包括文档的编写总共花了3个月左右时间,设计的难点在于对12864-12液晶模块的研究,以及其图像显示RAM缓冲区特殊的排列方式而设计的对应的算法,和系统的整合。本系统基本达到了设计指标的要求。

但是由于时间的局限性以及本人能力的有限性,本系统还有许多需要改进和完善的地方。其中最主要缺陷是本次设计只能在软件的层次上完成,而不能通过实物仿真下载到开发板上显示出结果来,并且,由于本人因工作的原因使得时间紧迫,很多有关的方面的设计不能分析很到位,这使得设计中有小许的问题,使得本次设计并不是很成功,所以希望以后能有机会对该系统做进一步的完善。

40

参 考 文 献

[1] 姚远、李辰,FPGA应用开发入门与典型实例 人民邮电出版社 2010 [2] 黄庭涛 CPLD/FPGA的开发与应用 电子工业出版社 2009

[3] 王洪海 电子设计自动化应用技术——FPGA应用篇 高等教育出版社 2009 [4] 2010路而红,电子设计自动化应用技术,高等教育出版社2006

[5] 张洪润、张亚凡,FPGA/CPLD应用设计200例 北京航空航天大学出版社 2009

[6] 王彦.基于FPGA的LCD驱动程序设计.真空电子技术。2004。 [7] 李维,液晶显示应用技术[M],电子工业出版社,2000。

[8] I.Stoica,R.Morris,M.Kaashoek.et a1.Chord:A scalable peer—to—peerlookup protocol

for Internet applications.in:Proceeding of Networking。IEEE/ACM Transactions,2003 [9] U.Lechner,B. Schmid. Communities-business models and systemarchitectures:the blueprint

of MP3.com,Napster and Gnutella revisited.in:System Sciences. 2001:

[10] Sunggu Lee,Advanced Digital Logic Design[M],Pohang University of Science and Technology,

2006.

[11] Hee-Chul Kim,Byong-Heon Kwon,Myung-Ryul Choi,An image interpolator with image

improvement for LCD controller[J],Consumer Electronics, IEEE Transactions on Consumer Electronics,2001(47),263~271.

41

[12] M.Simmons and C.H.S equin.Tapestry:A dynamic meshbased display,representation for

interactive rendering.in:Proceedings of the llth,Eurographics Workshop on Rendering,2000(5):329~340

附 录

基于FPGA的液晶显示器接口电路硬件原理图:

42

library IEEE;

基于FPGA的液晶显示器接口电路源程序:

43

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LCD1602 is

Port ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间

Reset:in std_logic;

LCD_RS : out std_logic; --寄存器选择信号 LCD_RW : out std_logic; --液晶读写信号 LCD_EN : out std_logic; --液晶时钟信号 LED : out std_logic;

LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号 end LCD1602;

architecture Behavioral of LCD1602 is type state is

(set_dlnf,set_cursor,set_dcb,set_cgram,write_cgram,set_ddram,write_LCD_Data); signal Current_State:state;

type ram2 is array(0 to 7) of std_logic_vector(7 downto 0); constant cgram:ram2:=( (\ (\ (\ (\ (\ (\ (\

(\字符数据存储器 signal Clkk : std_logic;

signal Count : std_logic_vector(20 downto 0); signal Clk_Out : std_logic; signal LCD_Clk : std_logic; begin

LCD_EN <= Clk_Out ; --液晶时钟信号 LED <= Clk_Out;

LCD_RW <= '0' ; --写数据 clock :

44

本文来源:https://www.bwwdw.com/article/4fsr.html

Top