1、 编号 淮安信息职业技术学院毕业论文题 目基于FPGA的LED点阵设计摘 要主要研究基于 VHDL 的 Led 点阵汉字滚动显示。首先描述了基于现场可编程门阵(FPGA)的硬件电路,以及点阵显示汉字的原理; 然后在单个 16X16 LED 发光二极管点阵上滚动汉字的原理;最后给出了描述其功能的 VHDL 语言程序设计方法。通过编程、调试、仿真、下载正确地实现了汉字滚动显示扫描结果,其硬件系统的实验验证也获得了与软件模拟仿真结论相吻合的结果。关键词:LED点阵;FPGA;VHDL语言;汉字滚动显示AbstractAbstractPrimary research is based on FPGA,
2、 Led Scrolling dot matrix characters. First described based on field programmable gate array (FPGA) hardware circuit, as well as the principle character dot matrix display; and then in a single 16X16 LED scrolling LED dot matrix on the principles of Chinese characters; Finally, the VHDL description
3、language program of its functions design. Through programming, debugging, simulation, download the correct character scroll achieved scan results, the experimental verification of its hardware and software are also obtained findings consistent with simulation results.Keywords: LED dot marix; FPGA; V
4、HDL language; Chinese character scrolling display. 目 录目 录摘 要IABSTRACTII第一章 绪论11.1课题背景11.2 LED点阵的发展现状21.2.1国内外LED点阵的发展现状21.2.2研究LED点阵的目的及意义21.3 LED点阵的发展趋势31.4论文结构4第二章 系统方案设计52.1设计任务与要求52.1.1设计任务52.1.2设计要求52.2方案设计与比较52.2.1方案设计52.2.2方案比较52.3扫描控制模块62.3.1 LED的显示原理62.3.2 LED点阵的显示方式72.4 LED点阵汉字的存储72.5 本章小结
5、8第三章 硬件设计93.1功能要求93.2硬件说明93.3硬件设计93.3.1 串行通信模块93.32 LED点阵屏及驱动电路103.33 LED时钟芯片103.34 FPGA控制模块103.35串行通信电路113.4 本章小结12第四章 软件设计134.1 十六进制计数器设计134.2列驱动设计144.3字符样式设计154.4 本章小结18第五章 基于FPGA的LED点阵195.1 FPGA设计的特点195.2开发环境介绍195.3调试与仿真205.3.1创建工程205.3.2编译前设置205.3.3全程编译235.3.4时序仿真245.4 本章小结26第六章 总结与展望276.1总结276
6、.2展望27致 谢29参考文献3131第一章 绪论第一章 绪论1.1课题背景受到体育场馆用LED显示屏需求快速增长的带动,近年来,中国 LED显示屏应用逐步增多。目前,LED已经广泛应用在银行、火车站、广告、体育场馆之中。而随着世博会的临近,LED显示屏将广泛的应用在体育场馆以及道路交通指示中,LED显示屏在体育广场中的应用将出现快速增长。因此研究LED汉字滚动显示屏的设计方法具有重要的理论和现实意义。随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。采用传统方法设计的汉字滚动显示器,通常需要使用单
7、片机、存储器和制约逻辑电路来进行PCB板级的系统集成。尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周期的代价。随着电子设计自动化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB板的传统设计方式。因此,本设计的研究是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。并且采用编写灵活的VHDL语言编写主程序。如图1-1所示:图1-1 LED点阵的应用1.2 LED点阵的发展
8、现状1.2.1国内外LED点阵的发展现状LED照明发展非常迅速,年增长率超过60%,随着LED发光效率的不断提升,封装技术不断改进,驱动陆能和寿命的增加,LED照明技术在未来5年内会逐渐进入千家万户。在世界各国环保议题日渐重视的趋势下,LED照明产业将扮演极重要的角色,其主要应用在于室内、室外照明以及街灯等高功率产品。据悉,2009年全球照明市场约1219亿美元,LED仅占0.5%,显见其未来潜力之可观。其中,以亚太地区的市场规模为最大、约占全球33.7%之比例,居次为北美的30.1%和欧洲之27.4%。以应用产品来讨论,户外照明约占12%,则具有相当大的成长空间,尤其以占有全球38%户外照明
9、的中国市场为最。此外,值得关注的部分是受政府政策及推广影响较为直接且快速的街灯应用可望成为照明产业中快速成长的第一棒。预估在欧美优先领起的趋势中,2010年全球可达到450万盏LED街灯的水平,并且承于国际加紧节能减碳的脚步,一但路灯标准规格普及,中国市场可望占有世界50%以上的规模。LED驱动器技术的发展体现在两个方面:第一,离线式高功率因数校正可调光LED驱动器可替代卤素灯、白炽灯和荧光灯;第二,LED驱动器能高效替代低压卤素灯。以上两种应用需要为LED提供电能及热能保护,以增加其耐用性。其他发展趋势还包括优化驱动器以提供最佳功效,并非将电流最大化。基于FPGA芯片控制全彩LED大屏幕图像
10、显示系统系统设计随着数字技术的飞速发展,各种数字显示屏也随即涌现出来有LED、LCD、DLP等,各种数字大屏幕的控制系统多种多样,有用ARM+FPGA脱机控制系统,也有用PC+DVI接口解码芯片+FPGA芯片联机LED显示板控制系统。尽管大尺寸液晶显示在未来的几年还有相当大的市场份额,但针对大尺寸直下式背光源的驱动和控制芯片的开发才刚刚有几年的历史。针对LED背光源的特点,可以将复杂的控制技术和信号处理技术融合到背光源技术中,目前的做法是采用FPGA,各家均有不同的算法和控制方法。随着背光技术和数字电视技术的发展,背光的控制算法及驱动方法的规范化,为了降低成本,将背光控制单元、屏显控制和电视的
11、机芯微处理器由一个微处理器统一实现将是一种技术趋势。1.2.2研究LED点阵的目的及意义随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。采用传统方法设计的汉字滚动显示器,通常需要使用单片机、存储器和制约逻辑电路来进行PCB板级的系统集成。尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周期的代价。随着电子设计自动化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB
12、板的传统设计方式。因此,本设计的研究是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。并且采用编写灵活的Verilog HDL语言编写主程序。1.3 LED点阵的发展趋势高亮度 LED 为未来趋势:高亮度 LED 的三大市场为:汽车车灯市场、交通市场及全彩 LED 显示屏。(1)汽车车灯市场方面,红色高亮度 LED 应用于汽车第三煞车灯,而左右尾灯、方向灯及车边标识灯,可使用红色或黄色高亮度 LED,而汽车仪表板上则需要各种颜色的高亮度 LED,故汽车市场商机庞大。(2)交通号志方面,使用高亮度 LED 主
13、要为节省能源,且在阳光照射下可仍清楚辨识。依 据资料显示,目前全球约有 2000 万座交通号志,而每一个红、黄、绿灯估计需要使用 200 颗高亮度 LED,故一座交通号志约需 600 颗高亮度 LED,如果 考虑每年新设的交通号志加上更换旧交通号志,估计每年大约有200 万座,以每座更新成本约 1.5 万台币计算,未来每年全球交通号志估计约有300 亿的市场价值。(3)全彩 LED 显示屏方面,目前高亮度 LED 已可以产生红、绿、蓝三原色的光,组成大型全彩 LED 显示屏,目前大型 LED 看板的使用以日本、中国、香港、韩国、台湾、新加坡等亚洲地区为主,欧洲及美国其次。中国大陆运用大型户外
14、LED 看板宣达政令,故有其一定之需求;欧洲方面,常见的应用是文字显示及 气象预报图像,另也盛行使用 LED 显示屏做为广告招牌。目前目前高亮度 LED厂商持续 costdown,市场接受度已逐渐提高,且高亮度 LED 价格高于传 统 LED,厂商投入意愿较大,未来可望逐渐取代传统亮度 LED 市场。目前,基于FPGA(现场可编程门阵列)的LED显示屏的设计应用广泛,美国和中国台湾地区逻辑电路设计和制造厂家大都以Verilog HDL为主,中国大陆地区目前学习使用Verilog HDL已经超过VHDL。从使用的角度看,对于集成电路(ASIC)设计人员来说,多是掌握verilog,因为在IC设计
15、领域,90以上的公司都是采用verilog进行IC设计。而对于PLD/FPGA设计者而言,两种语言没有太大差别。1.4论文结构论文主要从方案论证及选择、硬件电路设计、系统软件设计、制作与调试等几大方面来介绍基于FPGA的LED显示屏的设计和制作过程。其中方案论证及选择主要从两种可以实现基于FPGA的LED显示屏的设计方案中选择一个成本低、易操作、系统性能较高的方案。其中主要设计包括:系统软件设计、ROM存储、点阵汉字字模的提取。系统软件设计主要是设计FPGA芯片进行控制所需要的相关程序,这部分程序采用Verilog语言进行编写。最后的制作与调试主要是进行ROM和点阵汉字的显示并对点阵个点扫描显
16、示进行相关测试,检测是否能达到设计原理实现的功能。最后总结完善设计思路与程序,正确完成汉字的现实与滚动。第二章 系统方案设计第二章 系统方案设计2.1设计任务与要求2.1.1设计任务(1)设计一个1616的LED点阵显示器; (2)在设计过程中,EDA试验箱进行仿真调试。2.1.2设计要求(1)输出预定义“淮、安、信、息”四个汉字;(2)输出汉字循环显示; (3)操作方便、可维护性高; (4)程序简捷,便于修改;2.2方案设计与比较2.2.1方案设计方案一:本设计所使用的1616的点阵,EDA实验箱上有其接口电路,列选信号为SEL0,SEL1,SEL2,SEL3,经4线16线译码器输出16列,
17、从左起为第一列,列选信号是由一个4位向量SEL3.0控制;行选信号为H0H15,是由16个行信号组成的,每一行由一个单独的位来控制,高电平有效。例如“0000”表示第0列,“0000000000000001”表示第一行的点亮。由于列是由一个向量决定,而每一时刻的值只能有一个固定的值,因而只能使某一列的若干个点亮,因此就决定了只能用逐列扫描的方法。例如要使第一列的2,4,6,8,行亮,则列为“0001”、行为“0000000010101010”就可以实现了。 方案二:VHDL程序设计的是硬件,他和编程语言的最大区别是它可以“并发执行”。本设计可以将LED显示屏要的显示内容抽象成一个二维数组(数组
18、中的1对映点阵显示屏上面的亮点),用VHDL语言设计一个进程将这个数组动态显示在LED显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示。如图2-1为该方案原理图。图2-1方案原理图2.2.2方案比较 方案一很容易实现,而且占用 FPGA 的资源较少。但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。方案二中将 LED 点阵抽象成了一个二维数组。可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。但是方
19、案二中对数组的处理部分对 FPGA 芯片的资源消耗太大学校实验室里的 EPF10K10LC84-4 芯片只有 576个逻辑单元远远不够设计要求。所以最终选择方案一。2.3扫描控制模块2.3.1 LED的显示原理1616扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端口,每个共阴极对应有16个 LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。 通过时钟的每列扫描显示完整汉字。图2-2 LED灯信号图2-3LED等效电路2.3.2 LED点阵的显示方式点阵LED一般采用扫描式显示,实际运用分为三种方式: (1)点扫
20、描(2)行扫描(3)列扫描若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。2.4 LED点阵汉字的存储用动态分时扫描技术使LED点阵模块显示图像,需要进行两步工作。第一步是获得数据并保存,即在存贮器中建立汉字数据库。第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。获得图像数据的步骤是,先将要显示的每一幅图像画在一个如图2-4所示的被分成1616共256个小方格的矩形框
21、中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布,再将此分布关系以3216的数据结构组成64个字节的数据,并保存在只读存贮器ROM中。以这种方式将若干个汉字的数据贮存在存贮器内,就完成了图像数据库的建立工作。 图2-4 1616 LED 点阵模块2.5 本章小结本章主要讲述设计任务与要求,方案的设计与比较。并对扫描控制模块和LED点阵汉字的存储做了进一步介绍,分析了LED点阵的工作原理。第三章 硬件设计第三章 硬件设计3.1功能要求设计一个室内用1616 点阵 LED 图文显示屏,要求在目测条件下LED 显示屏各点亮度均匀
22、、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。3.2硬件说明FPGA芯片采用ALTERA公司的CYCLONE系列EPlC3T144C8。EPlC3T144C8内部包含2910个逻辑单元,104个IO引脚,13块128*36bit的RAM共52K,适合设计双DRAM、ROM和FIFO等器件,还有一个可编程触发器和一个给进位和层叠功能专用的信号通道。为了提高FPGA的工作速度,ALTERA的FPGA芯片普遍采用了锁相环技术。时钟可以通过FPGA内建的锁相环进行倍频,使得较慢的外部时钟在FPGAI为部驱动高速电路工作。单片机采用深圳宏晶科技的S
23、TC89C52RC。STC89LE52RC是一款低功耗、高速且抗干扰能力强的单片机。指令代码完全兼容传统的8051单片机,它不但具有普通51核单片机的特点,而且增加了新的功能。在5V电压工作下,提供最高80MHz的时钟频率。内部RAM加大到了512字节,FLASH存储器为8K,EEPROM为2K,增加了P4口,可进行双倍速设定,增加了看门狗,防止死机功能。抗干扰与防解密方面都比普通的51单片机强。在程序下载方面,无需使用专门的编程器和下载线,只要一根9针的串口线就可以实现程序的在线烧写。数模转换器采用转换速率为10M的双通道并行电流输出型DA转换器TLC7528。双路的DA输出都已经用运放TL
24、082进行电流到电压的转换,并且双路输出都可以用跳线帽设置成单极性输出,双极性输出。也可以将两个通道结合起来,实现幅度程控输出。数据采集同样使用德州仪器的TLC5510,最高采样率为20M。用于数据采集,任意信号的输入。存储器使用64K的,2C总线控制的FLASH存储器,和512K8的高速IS61LV5128的静态存储器,它拥有64MB的存储空间,满足数据的存储要求。另外设计有丰富的人机界面。4*4的行列式键盘输入,有AS配置模式和JTAG配置模式的接口,另有液晶显示器的接口,便于数据的获取。3.3硬件设计3.3.1 串行通信模块输入接口模块提供PC上位机到FPGA核心板传输数据的接口。输入接
25、口是通过串口即RS232以及JTAG下载线来实现从PC上位机传输数据至下位机。上位机使用字模提取工具将待显示的数据发送至下位机,JTAG下载线实现PCNios系统间的通信。FPGA核心板与LED显示模块之间的通信也是通过RS232串口实现的。3.32 LED点阵屏及驱动电路本设计采用1616LED点阵屏由4块88LED点阵拼接而成,每一块点阵都有8行8列,因此总共有16根行控制线和16根列控制线。3.33 LED时钟芯片DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM。同时,可以提供秒分时、日期、年月信息,每月的天数和闰年的天数可自动调整。时钟
26、操作可通过AM/PM指示决定采用24或12小时格式。3.34 FPGA控制模块该部分电路是系统控制和数据处理的核心,主要由电源接口及开关及相应的时钟振荡电路和复位电路组成。a.电源接口及开关电路如图3-1所示,其中F1为限流1.1A的F110保险管,在电源的保护上起到了很大的作用。图 3-1 电源接口及开关电路b.复位电路 如图3.2所示,该复位电路可以实现对系统的初始化作用。当没有按下时,KEY读取到高电平。按下键时,KEY拉低。一次复位后产生一脉冲信号,下降沿时触发芯片复位。如图3-3所示,X1为20MHz的有源晶振。图3-2 复位电路c.时钟振荡电路如图3-3所示,时钟振荡电路。图3-3
27、 时钟振荡电路3.35串行通信电路串行通信电路由RS232串口电路和JTAG接口电路组成。RS232串口用于上位机与下位机的数据传输,JTAG接口用于程序下载与调试a.RS232串口电路FPGA的电平为TTL电平(即:高电平 +3.3V,低电平 0V),而计算机串口电平为RS232电平(即:高电平 -12V,低电平 +12V),所以,计算机与单片机之间进行通讯时需要加电平转换芯片。RS232串口电路如图3-4所示:图3-4 RS232 串口电路图3-4中,RS232串口电路使用MAX232CPE作为电平转换芯片,通过串口线连接到计算机的COM口(9针D形口),用于FPGA与上位机通信以及和其他
28、串口设备的数据交互。b.JTAG下载接口JTAG下载接口电路如图3-5所示,用于调试FPGA。JTAG下载不仅下载速度快,而且支持SignalTAP,但是,不能编程EPCS芯片,掉电后数据丢失。使用JTAG时需要配合USB Blaster进行下载调试。图3-5 JTAG下载接口电路3.4 本章小结本章主要讲述硬件电路的功能要求,对硬件结构做了详细的说明。并逐一介绍了串行通信模块、LED时钟芯片、FPGA控制模块、串行通信电路的设计及使用等,分析了主要器件的作用,介绍了各部件在电路中的连接情况。第四章 软件设计第四章 软件设计4.1 十六进制计数器设计COUNT16.vhd 是十六进制的计数器,
29、其输出端控制行和列驱动控制器的输出数据;其描述如下:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY cnt16 ISPORT(clock: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END cnt16;ARCHITECTURE SYN OF cnt16 ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (7 DOWNTO 0);COMPONENT lpm_counterGENERIC (lpm_direction:
30、STRING;lpm_port_updown: STRING;lpm_type: STRING;lpm_width: NATURAL);PORT (clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END COMPONENT;BEGINq UP,lpm_port_updown = PORT_UNUSED,lpm_type = LPM_COUNTER,lpm_width = 8)PORT MAP (clock = clock,q = sub_wire0);END SYN;如图 3-2 所示: 图3-2 COUNT16.vhd仿
31、真波形图从上图可以看出,该模块为十六进制的计数器,当CLK 给予脉冲时输出为前一个数值加 1,例如:在104.86ms 前输出为 0AH,在这个时刻 CLK给予触发脉冲, 104.86ms后输出值为0BH。可以看出该模块满足设计要求。4.2列驱动设计通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连 续的感觉。因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,本设 计的扫描频率不得低于 50Hz, 扫描程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;En
32、tity dz_xs is Port(enable,clk:in std_logic; -端口定义 输入信号Sel:out std_logic_vector(3 downto 0); -端口定义 输出信号End dz_xs;Architecture count of dz_xs isSignal lie:std_logic_vector(3 downto 0);BeginProcess(clk,enable) -脉冲、使能信号beginIf clkevent and clk=1thenIf enable=1 thenIf lie0000 then Lie=lie-0001;Else Lie=1
33、111;End if;End if;End if;Sel=lie;End process;4.3字符样式设计本环节是建立一个数据库,使之能在扫描的同时读取所需要的信息,从而完成汉字的显示。 本次设计“淮、安、信、息”汉字样式设计程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity led16 isport(clk : in std_logic; -时钟输入keyc : out std_logic_vector(15 dow
34、nto 0); -点阵列控制keyr : out std_logic_vector(15 downto 0) -点阵行显示);end led16;architecture one of led16 issignal cdount: std_logic_vector(3 downto 0);signal dount: std_logic_vector(9 downto 0);signal S : std_logic_vector(3 downto 0);begin process(clk) -显示时序控制 begin if clkevent and clk=1 thendount14 thenS
35、=0000; elseS=S+1; end if; end if; if cdount15 then cdount=cdount+1; else cdountkeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyr