《基于FPGA的电子系统综合设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA的电子系统综合设计.doc(21页珍藏版)》请在三一办公上搜索。
1、电子系统综合设计报告基于FPGA的液晶显示设计摘 要如今,科技进步给我们的生活带来了很大的变化。液晶显示设备越来越多,各种各样的液晶显示产品走进我们生活中。从手机到电脑显示器,从掌上电脑到平板电视。无处没有液晶显示技术的身影。液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。本设计是一种基于FPGA(现场可编程门阵列)的液晶显示控制器。与集成电路控制器相比,FPGA更加灵活,可以针
2、对小同的液晶显示模块更改时序信号和显示数据。FPGA的集成度、复杂度和面积优势使得其日益成为一种颇具吸引力的高性价比ASIC替代方案。本文选用MAX7000S系列的EPM7128SLC84-15器件,利用硬件描述语言VHDL设计了液晶显示控制器,实现了替代专用集成电路驱动控制LCD的作用。首先,本文介绍了液晶控制器设计方案。其次,讲述了根据本设计所要实现的基本功能,液晶显示器接口底层电路设计。采用EPM7128SLC84-15器件为系统控制核心。再次,本文详细阐述液晶控制器接口的顶层文件设计。最后,液晶控制器接口设计的测试与运行关键词:EDA(电子设计自动化),VHDL(硬件描述语言),液晶控
3、制器接口设计,LCD(液晶显示器)。目 录第1章 课程设计内容和要求21.1 设计目的21.2 设计内容21.3 设计要求2第2章 液晶控制器设计方案32.1 设计思路32.2 工作原理及框图3第3章 液晶显示器接口底层电路设计63.1设计规划63.2设计说明63.3底层电路程序6第4章 液晶控制器接口的顶层文件设计114.1设计说明114.2 顶层文件程序11第5章 液晶控制器接口设计的测试与运行135.1液晶控制器设计仿真结果135.2 实验箱验证情况13结 论14参考文献15第1章 课程设计内容和要求1.1 设计目的设计并实现一个12832的汉字图形液晶显示器的控制器,要求:(1)能够显
4、示几个液晶模块字库中的汉字和ASIC字符。(2)能够显示一个简单的图形。1.2 设计内容 (1)学习掌握液晶显示模块的工作原理及应用。(2)熟练掌握VHDL编程语言,编写液晶显示模块的控制逻辑。1.3 设计要求(1)仿真所编写的程序,模拟验证所编写的模块功能。(2)下载程序到芯片中,硬件验证所设置的功能,能够实现汉字的显示。(3)整理设计内容,编写设计说明书。第2章 液晶控制器设计方案2.1 设计思路根据指导教师布置的课题,通过参考书籍、查阅手册、图表和文献资料,网络等获取相关的知识后,了解到:液晶显示模块硬件接口协议为请求/应答(REQ/BUSY)握手方式。应答BUSY 高电平(BUSY =
5、1)表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY =0
6、?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。2.2 工作原理及框图2.2.1液晶LCD显示器的工作原理:液晶显示器是一种采用了液晶控制透光技术来实现色彩的显示器。从液晶显示器的结构来看,采用的LCD显示屏都是由不同部分组成的分层结构。LCD由两块玻璃板构成,厚约1mm,其间由包含有液晶材料的5um均匀间隔隔开。因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,而在液晶显示屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成的可以发射光线,其作用主要是提供均匀的背景光源。背光板发出的光线在穿过第一层偏振过滤层之后进入包含成千上万液晶
7、液滴的液晶层。液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小的光阀。液晶材料周边是控制电路部分。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层在屏幕上显示出来。2.2.2设计原理图如下:图2-1 液晶控制器接口设计原理图显示国标汉字:命令格式: F0 XX YY QQ WW。该命令为5字节命令(最大执行时间为1.2毫秒,Ts2=1.2mS),其中:XX:为以汉字为单
8、位的屏幕行坐标值,取值范围00到07、02到09、00到09;YY:为以汉字为单位的屏幕列坐标值,取值范围00到01、00到03、00到04;QQ WW:坐标位置上要显示的GB 2312 汉字区位码。2.2.3设计框图: 下载编程时序仿真在线测试设计处理设计输入功能仿真图2-2 液晶控制器设计框图2.3 各模块功能描述液晶显示模块共有四个单元电路组成,分别是:时序发生器、地地址发生器、存储器、控制器。引脚功能图和内部结构框图分别如图3-3和图3-4所示。图2-3 液晶控制器引脚功能图图2-4 液晶控制器内部结构框图其中,时钟发生器共有三组时钟输出,分别送给:地址发生器,使其产生存储器读地址;存
9、储器,作为输出数据的同步时钟;控制器,作为控制器的工作时钟及输出信号同步时钟。地址发生器在时钟信号与BUSY信号的共同作用下,产生存储器所需的地址信息。当BUSY信号有效时(BUSY=1),停止输出地址信号;当液晶模块处于空闲状态(BUSY=0)时,输出地址信号。控制器用来产生液晶模块所需的STOBE和存储器输出使能信号。当BUSY信号有效时(BUSY=1),关闭存储器的输出;当液晶模块处于空闲状态(BUSY=0)时,分别送出STOBE=1和存储器输出使能信号,等待BUSY变为1。当BUSY=1时,使STOBE=0,数据传送结束。存储器主要用来存储液晶模块的命令,在同步时钟的作用下,数据同步输
10、出。该存储器可为ROM型,也可以为RAM型。当为ROM型是,其显示模式及显示数据不可变,即只能显示固定的信息;为RAM型时,其显示模块及数据可根据需要任意配置,即可显示出更为灵活及复杂的信息,如实时的波形显示器等。 第3章 液晶显示器接口底层电路设计3.1设计规划该液晶控制器可显示模块字库中的汉字和ASSIC字符,又具有清零功能。因此。此程序共有两大大模块,汉字显示模块,清零模块。1.汉字显示模块是根据查表对照的方法显示出设计者想要表达的文字。液晶屏上显示的汉字是16*16的像素。2.ASIC字符显示相对汉字来说比较简单。只需要16*8个像素。3.清零功能是强制清除一切记录的功能。3.2设计说
11、明液晶屏幕上是如何显示一些汉字或者是图画,这是我们应该思考的一个问题。在数字电路中,所有数据都是由0、1保存的,同样LCD也是利用这种方法。在点阵LCD上显示的只有两种颜色,因此可用0和1来表示这两种颜色,假设空格是16*16个0组成的,在现实16*16的字体时,将其中某些点置为1便可在视觉上形成汉字,这些二进制数成为代码。与汉字不同的是一个字符只需要16*8的像素便可。3.3底层电路程序3.3.1 清零模块清零模块的功能:实现将地址清零的功能。当clr为0时,将初始地址置为00000000。当clr为1时,出现上升沿时,如果addr1为00111100,则将addr置为00000001;不出
12、现上升沿时,则将addr加1,以实现地址的循环。如此实现清零模块的功能。清零模块的代码(VHDL)如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all;ENTITY lcd1 is PORT(clr,clk,BUSY: IN std_logic; STOBE : OUT std_logic; dout: OUT std_logic_vector(7 DOWNTO 0); -实体端口的设计END lcd1;A
13、RCHITECTURE doit OF lcd1 ISsignal counter,addr1: std_logic_vector(7 downto 0); -结构体的信号设计signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begin if(clr=0) then addr1=00000000; -给地址清零 elsif(busyevent and busy=1) then if(addr1=00111100) then addr1=00000001; -如果出现busy出现上升沿实现地址的赋值 els
14、e addr1=addr1+1; -实现地址的循环 end if; end if;end process P1;P2: process(clr,busy) begin if(clr=0) then addr=00000000; -地址清零 elsif(busyevent and busy=0) then addr=addr1; -当busy出现下降沿时地址的赋值 end if;end process P2; 由以上程序可发现:如果clr 为1,初始地址被赋值为000000001,如果busy为1,则准备下一条地址。如果busy为0,则把地址数据传送给存储器,来进行数据的存储。如果clr为0时,
15、地址置00000000清零,则实现了清零的功能。3.3.2 汉字显示模块汉字显示模块的原理是:将汉字内码gb2312码存入只读存储器rom中,用下面程序对汉字内码进行调用,则可以将所对应的汉字显示出来。例如汉字“东”的汉字内码为2211,用显示模块二进制将2211表示出来,则可以将汉字“东”显示出来。如此,则可以显示出所需要的汉字。此液晶显示器每行显示六个字,一共两行。另外,由于只读存储器的大小为256*8,所以,当所需要的汉字的内码设置完后,应当用00000000对rom进行填充,使其达到256*8的大小,以实现循环,避免产生乱码。汉字显示模块的代码(VHDL)如下:LIBRARY ieee
16、;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all; -调用存储器中的内容ENTITY lcd1 is PORT(clr,clk,BUSY: IN std_logic; STOBE : OUT std_logic; dout: OUT std_logic_vector(7 DOWNTO 0); -实体端口的设计END lcd1;ARCHITECTURE doit OF lcd1 IS -结构体信号的设计signal counter,a
17、ddr1: std_logic_vector(7 downto 0);signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begin if(clr=0) then -清零功能的实现 addr1=00000000; elsif(busyevent and busy=1) then -busy出现上升沿地址的赋值 if(addr1=00111100) then addr1=00000001; else addr1=addr1+1; end if; end if;end process P1;P2: proces
18、s(clr,busy) begin if(clr=0) then addr=00000000; -清零功能的实现 elsif(busyevent and busy=0) then -busy出现下降沿地址的赋值 addr=addr1; end if;end process P2;P3: process(busy, clk) begin if(busy=1) then counter=00000000; -清零 elsif(clkevent and clk=1) then -clock出现上升沿时进行加法计数 counter=counter+1; end if;end process P3;do
19、ut=rom (CONV_INTEGER (addr);stobe=00000011 else 0; END doit;LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE rom IS CONSTANT rom_width: NATURAL :=8; -natural表示大于零的整数 CONSTANT rom_length: NATURAL :=256; SUBTYPE rom_word IS STD_LOGIC_VECTOR(rom_width-1 DOWNTO 0); TYPE rom_table IS ARRAY ( 0 To rom_len
20、gth-1) of rom_word; CONSTANT rom : rom_table :=rom_table (11110000,00000001,00000000,00010110,00001011,-2211“黄”用来显示汉字的内码11110000,00000010,00000000,00010001,00010001,-1717“河”11110000,00000011,00000000,00101010,00001111,-4215“科”11110000,00000100,00000000,00110011,00101101,-5145“技”11110000,00000101,000
21、00000,00010100,01010011,-2083“大”11110000,00000110,00000000,00110001,00000111,-4907“学”-所需要显示的汉字内码输入完整后,为了避免出现乱码,必须用00000000将256*8的只读存储器rom将存储器填满,以实现地址的循环,且不出现乱码。00000000,00000000,00000000,00000000, -如此填充,为保证rom总共的大小为256*8END rom;为节省空间,大小为256*8的内码只显示主要内容,用00000000填充的其它部分,不再作一一显示,用省略号表示。只需保证该只读存储器rom的真
22、正大小为256*8即可。另外,根据汉字gb2312码更改只读存储器rom中的内容可以相应地更改显示汉字的字数和内容;利用点阵列,则可以显示字符;用英文码,则可以显示英文其它显示命令格式如下(不做一一列举):(1)显示8X8 ASCII字符命令格式:F1 XX YY AS该命令为4字节命令(最大执行时间为0.8毫秒,Ts2=0.8mS),其中XX:为以ASCII码为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13YY:为以ASCII码为单位的屏幕列坐标值,取值范围00到1F、00到3F、00到4FAS:坐标位置上要显示的ASCII 字符码(2)显示位点阵命令格式: F2 XX YY
23、 该命令为3字节命令(最大执行时间为0.1毫秒,Ts2=0.1mS),其中XX:为以1*1点阵为单位的屏幕行坐标值,取值范围00到7F、20到9F、00到9FYY:为以1*1点阵为单位的屏幕列坐标值,取值范围00到40、00到40、00到40。第4章 液晶控制器接口的顶层文件设计4.1设计说明所谓建立顶层文件就是将已经设计好的各个功能组件组合调用,连成一个整体,使整个系统按照设计要求在实际中工作起来。而此程序中的顶层文件即是将清零模块和汉字内码显示模块结合起来,使其实现清零和显示汉字的两大功能。具体操作:将汉字显示的内码存入到大小为256*8的只读存储器rom中,然后再在清零模块的程序中对该只
24、读存储器rom进行调用。在一个工程中用两个.vhd文件分别存入顶层文件程序和只读存储器rom的程序即可。如此,便将清零模块和汉字显示模块连成了一个整体。在液晶显示器中便可实现清零和显示汉字的两个功能。4.2 顶层文件程序代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all;ENTITY lcd1 is -实体端口的设计 PORT(clr,clk,BUSY: IN std_logic; STOBE : O
25、UT std_logic; dout: OUT std_logic_vector(7 DOWNTO 0);END lcd1;ARCHITECTURE doit OF lcd1 IS -结构体信号的设计signal counter,addr1: std_logic_vector(7 downto 0);signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begin if(clr=0) then -清零功能的实现 addr1=00000000; elsif(busyevent and busy=1) then
26、-busy出现上升沿地址的赋值 if(addr1=00111100) then addr1=00000001; else addr1=addr1+1; end if; end if;end process P1;P2: process(clr,busy) begin if(clr=0) then -强制清零功能的实现 addr=00000000; elsif(busyevent and busy=0) then -busy出现下降沿地址的赋值 addr=addr1; end if;end process P2;P3: process(busy, clk) begin if(busy=1) th
27、en -清零功能的实现 counter=00000000; elsif(clkevent and clk=1) then -clock出现上升沿时开始计数 counter=counter+1; end if;end process P3;dout=rom (CONV_INTEGER (addr);stobe=00000011 else 0; END doit;最后创建一个工程,在里面新建两个.vhd文件,一个用于存储顶层文件程序,一个用于输入只读存储器rom中的内容。在顶层文件程序中调用只读存储器rom中的内容,便可实现液晶显示的清零功能和显示汉字的功能。第5章 液晶控制器接口设计的测试与运行
28、5.1液晶控制器设计仿真结果下图5-1是将上述程序在Quartus 中进行仿真后实现的波形图:图5-1:液晶控制器设计仿真结果5.2 实验箱验证情况实验连线:将CLK接时钟模块输出,使其频率为1.25MHZ2.5MHZ,BUSY接液晶模块的BUSY输入端,REQ接液晶模块的REQ输出端,dout7.0分别接液晶模块的DB7.0输入端。在MAX7000S系列的EPM7128SLC84-15实验箱中验证情况:液晶显示黄河科技大学。结 论液晶显示器绿色环保,它的能源消耗相对于传统的CRT来说,简直是太小了(17功率大概在200W以内);对于近来逐渐引起国人重视的噪音污染也与它无缘,因为它的自身的工作
29、特点决定了它不会产生噪音。随着仪器、仪表、电子设备等智能化程度的提高,液晶显示模块的使用也越来越广泛。在于液晶的接口中,关键是满足液晶的时序要求;在软件的编程中,关键是要进行正确的初始化、操作以及显示内容的代码。两个星期的课程设计主要经历了以下几个过程:广泛查阅资料、文献综述、总体思路的确定、方案的具体化及论证、方案的确定、软件的调试、系统的调试,还包括论文总结。我认为整个过程是一个联系非常紧密的过程,前一过程的结果为后一过程奠定了基础。在整个过程中,我不仅对液晶控制系统的每一个细节有了比较深入的掌握,而且对关于系统扩展的相关知识有了感性的认识,不仅掌握了大量的专业知识,更学会了系统模块设计的
30、基本思想。最后要感谢老师和同学我的课程设计的指导与帮助!参考文献1侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计M. 西安:西安科技大学出版社,2005.2赵志海.液晶显示器及其应用M.北京:电子工业出版社.2007.3李朝青.单片机原理及接口技术M.北京:北京航空航天大学出版社,2003.4李勇.CPLD/FPGA应用开发技术与工程实践M. 北京:人民邮电出版社,2004.5李维缇,郭强.液晶显示器件应用技术M.北京:北京邮电学院出版社,2003.6罗苑棠.CPLD/FPGA常用模块与综合系统设计M. 北京:电子工业出版社,2007.7姜雪松,张海风.可编程逻辑器件和EDA设计技术M.北京:机械工业出版社,2006.8马建国,孟宪元.电子设计自动化技术基础M.北京:清华大学出版社,2008.9永胜.液晶显示接口设计与仿真M.机械工业出版社,2005.10姜维.实用电子系统设计基础M.北京:电子工业出版社,2008指导教师评阅意见: 评阅老师(签名): 日期:评阅成绩(五级制):