基于FPGA点阵图形显示系统的设计与实现_第1页
基于FPGA点阵图形显示系统的设计与实现_第2页
基于FPGA点阵图形显示系统的设计与实现_第3页
基于FPGA点阵图形显示系统的设计与实现_第4页
基于FPGA点阵图形显示系统的设计与实现_第5页
已阅读5页,还剩75页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文(设计) 题 目 基于FPGA点阵图形显示系统的设计与实现 指导教师 职称 学生姓名 学号 专 业 班级 院 (系) 完成时间 基于FPGA点阵图形显示系统的设计与实现摘 要 随着现代科技的高速发展,现代信息的人机交换发生了重大的变化。数字化、智能化、简洁明了的显示系统在人们的日常生活中发挥着十分重要的作用1。利用FPGA来驱动液晶和数码管显示模块,对时序和驱动芯片各引脚的控制是其核心技术,具有很高的可靠性和灵活性。因此对于基于此结构的智能设备的研究具有重要意义。显示系统的设计,利用DS1302芯片产生实时时间,通过数码管显示。通过五位按键可以对时间进行设置和调整,同时还具有定时报警功能。当上电时,1616液晶会显示初始化信息,然后对提前保存在ROM中的图片进行循、字符、字符为“毕业设计课题基于FPGA显示系统”这几个字的功能。关键词 显示系统/FPGA/1616液晶/DS1302ABSTRACT More and more advanced science and technology , There is a big difference between modern machine and traditional machine。Digital, intelligent, clear and concise display system in Peoples Daily life play a very important role. Using FPGA to drive LCD and digital tube display module, to control the timing of each pin and driver chip is the core technology, has the very high reliability and flexibility11. So based on the structure of intelligent device for research is of great significance. The design of the display system, synchronous time using DS1302 chip, through digital tube display. Through the five keys to set up and adjust the time, at the same time also have regular alarm function12. When power on, 1616 LCD will display initialization information. And then to the images stored in ROM in advance to loop scanning, display dynamic effect. Show time, characters, images, animation, function. KEYWORDS Display system, FPGA , 1616, DS1302 I目 录中文摘要I英文摘要II1 绪论11.1课题研究的背景和意义11.2本课题研究的内容与预期目标12 EDA技术与显示系统概述32.1 EDA技术32.1.1 EDA技术的概念及范畴32.1.2 EDA技术的基本特征32.1.3 EDA历史发展回顾3 2.2 硬件描述语言Verilog42.2.1 Verilog语言简介42.2.2 用Verilog设计电路的设计流程4 2.3 FPGA和Quartus II简介52.3.1 FPGA简介5 2.3.2 Quartus II简介52.4 数码管和1616显示系统设计的概述63 显示系统的设计过程73.1 系统设计目标73.2显示系统的工作原理及系统构成73.3 各组成模块及程序设计7 3.3.1 DS1302&数码管模块设计8 3.3.2 按键模块设计11 3.3.3 报警模块设计14 3.3.4 呼吸灯模块设计17 3.3.5 1616液晶模块设计183.4顶层电路结构的Verilog HDL实现224 显示系统的仿真分析与电路实现254.1 显示系统的设计仿真25 4.1.1 数码管模块的仿真及分析25 4.1.2 1616模块的仿真及分析254.2 基于FPGA的硬件测试274.2.1 FPGA实验开发系统概述274.2.2 硬件配置274.2.3 硬件测试28结束语30致 谢31参考文献32附 录331 绪论1.1课题研究的背景与意义 智能化、自动化是当今世界电子的重要发展趋势。智能设备上越来越丰富的显示系统给人们的使用带来了很高的便利性。人们在不断的努力提高智能设备的智能化和易用性2。 在便捷化和直观化的背景下,各种显示系统应运而生。数码管和1616液晶是显示系统的重要代表。有着很重要的作用。液晶显示器件在世纪的应用中以低压微功耗,无眩目,不伤眼,无电磁辐射赢得了人们的一致好评。而且液晶显示系统也有显示内容多,使用时间长的优点。在过去的几十年中,一般更多的使用单片机来驱动LCD。用单片机来控制LCD的显示在设计上相对FPGA要简单一些,通常通过KEIL等软件编程实现LCD的图形以及字符显示功能。但是由于单片机的顺序执行结构,决定了在实现这些功能的同时,如果遇到其他的数据需要处理或者其他的一些命令需要进行操作,单片机就会无所适从。但是如果通过FPGA来实现相同的功能则不回出现这个问题。而在LCD的应用以及市场方面,几乎任何的电子产品都离不开数码管和液晶显示屏,小到电子表大到液晶电视。显示系统凭借其良好的交互性和可控性会给人们带来了更好的操控以及交互体验,因此研究此课题具有重要意义。1.2 本课题研究的内容与预期目标 基于FPGA的数码管和1616显示系统总体结构可以分为三大部分:实时时间显示模块、1616液晶显示模块、中央处理器。这次我的设计采用的时钟模块将从DS1302、DS1307、PCF8485中选择。在液晶显示模块的选择上,有三种液晶显示模块可以选择,数显液晶模块、点阵字符液晶模块和点阵图形液晶模块3。在液晶模块的选型上以充分考虑系统需求,结合显示对象与显示环境确定合适的显示器的类型、分辨率。 根据设计要求我们确定如下方案:采用DS1302时钟芯片产生实时时间,通过六位数码管显示。通过五位按键可以对时间进行设置以及调整,同时也可设置蜂鸣器定时报警功能。当上电时,1616液晶显示模块首先会显示初始化信息,然后对保存在ROM中的图片进行循环扫描,呈现动态效果。与此同时,LED灯会始终以呼吸的效果呈现。2 EDA技术与显示概述 2.1 EDA技术2.1.1 EDA技术的概念及范畴 当今社会数字电子技术高速发展,自动化得到了很强的推动和发展。从与我们生活紧密相连的智能手机、笔记本电脑、液晶电视,到国防科技科技所用的导弹、航天设备、人造卫星等都离不开数字电子技术,它的应用无处不在。 现代电子设计的工作重心逐渐转移到用计算机工具辅助设计的电子设计自动化技术上来,即EDA技术。EDA技术是基于计算机平台,以辅助设计软件为工具。用硬件描述语言VHDL设计文件,在设计的过程中,计算机会对文件自动的进行编译、简化、分割、综合。最后对它们进行布线、优化、仿真等一些列操作。提高了设计的效率,大大的缩短了设计周期。随着EDA技术又好又快的发展,逐渐开始渗透到其他领域,如AutoCAD可以进行机械和建筑的设计。 运用EDA工具,电子工程师们可以从定义、流程、协议等进行电子设计,可以让计算机完成海量的工作内容。而且EDA工具提供了一套完整的流程,从设计开始,到仿真以及最后做出PCB版图整个过程,均可在计算机上实现。2.1.2 EDA技术的基本特征 EDA技术是当今世界电子设计技术的主流发展方向4。它的基本特点是:设计人员依据从上到下的设计理念,对整个设计进行方案规划和功能划分,设计的核心电路用一片或几片ASIC实现,随后运用硬件描述语言实现系统的行为设计,最后一步用适配器、综合器生成所需要的器件,这是高层次的设计方法。2.1.3 EDA历史发展回顾 早在1960年代中期,人们就已经意识到。由于缺少电子设计的工具导致越来越复杂的电子设计,越来越大的工作量已经严重阻碍了科技的进步。于是科学家们就开始开发各种用计算机辅助的设计工具。集成电路的高速发展,让EDA行业发生了巨大的变化。到了1990年,电子系统设计已经不再是以前的电路级系统集成,ASIC、FPGA、嵌入式系统等多项新技术为电子行业注入了新鲜的血液。EDA技术已成为电子技术的核心。 特别是到了2000年以后,EDA技术发展更加迅速。高速DSP,嵌入式处理器软核等技术日趋成熟,使得EDA软件应用起来更加得心应手。电子领域各学科相互渗透,模拟电路描述语言表达和设计越来越规范化、可编程模拟器件的问世、数字信号处理全硬件实现方案的成熟,使得EDA技术不管是在广度和深度都取得了长久的发展。2.2 硬件描述语言Verilog 2.2.1 Verilog语言简介 Verilog HDL(Hardware Description Language)是一种硬件描述语言5,诞生于1983年末。后来Verilog语言也在20世纪90年代中期年成为IEEE的标准。与VHDL相比,Verilog语言格式要求不严,适合初学者使用。Verilog语言和C语言具有很强的相似之处,同时Verilog的底层统合做的非常好,更偏重与硬件,这个优势在建模方面凸显无疑。Verilog语言主要具备以下特点: (1) 设计功能齐全,方法多样,支持相对比较广泛,可重用性好。早在29世纪90年代中期就成为IEEE的标准。 (2)语言描述能力强,在对硬件进行描述时,可以分为多个层次与不同的范围分别进行描述。 (3) 在进行电路描述时,可以进行高层到低层的自由转换,具有很强的便利性。 (4)可以在电路的设计过程中就对程序进行验证和仿真的操作,降低失败率。 (5)硬件描述与工艺没有直接的任何关系。即使工艺发生了改变也不用修改原设计程序,只需要改变相对的映射工具即可。 (6)Verilog语言与C语言具有很多的相同点,对于有C语言编程基础的人来说,很容易上手。2.2.2 用Verilog设计电路的设计流程 (1) 编辑,输入相应的源文件并保存。 (2)编译,将文本文件通过相应的编译工具编译成代码文件,并核查有误语法错误。 (3)功能仿真,此步骤主要是为了验证相应的逻辑功能。 (4)逻辑综合,将源文件用软件中自带的综合工具从语言转变为直观的电路图。 (5)布线,用上一步生成的门电路级网表文件,根据FPGA的内存和结构,用系统自带的布局布线工具对整个电路进行设计。 (6)时序仿真,也可叫做后仿真。验证设计电路是否满足时延要求,如果满足,即可对器件编程。2.3 FPGA和Quartus II简介2.3.1 FPGA简介 现场可编程门阵列(Field Programmable Gate Array)FPGA。通常使用在芯片设计的验证实验阶段,其内部还嵌入了多个不同功能的模块以方便不同的设计需要。FPGA的设计开发流程:(1)设计输入(2)仿真验证 (3)设计综合 (4)时序分析(6)仿真验证2.3.2 Quartus II简介 Quartus II开发软件是基于电子设计者的需求而提供了一个完善的多功能的一个平台开发环境6。它涵盖了对可编程逻辑器件在设计阶段所需要的的所有解决方案,有完整的用户图形界面,可以完成对整个可编程逻辑器件上系统的整个开发流程。包括输入、逻辑综合、布局、仿真等。基于Quartus II软件工具,电子设计者可以便捷的完成对数字电路设计的整个过程。Quartus II是世界上首款可以从FPGA至掩模器件整个流程的完善的设计工具,同时它也支持多种设计输入形式7。Quartus II完美实现了从设计功能输入到器件编程的所有功能。Quartus II分为综合 、辅助设计、实现、仿真工具等。具有功能强大,使用界面清晰,易于操作等优点。用Quartus II开发软件对数字电路系统进行设计时,分为以下几个步骤:设计输入、时序分析、布局布线、综合、仿真验证、编程等8。在用Verilog HDL完成电路设计过程中,必须借助辅助工具例如时序仿真器、适配器、综合器和编码器等工具进行相应的设计,才能最终在硬件上得到预想的设计结果。2.4 数码管和1616显示系统设计的概述 显示系统的设计是基于FPGA平台开发的,采用DS1302时钟芯片产生实时时间,通过六位数码管显示。通过五位按键可以对时间进行设置以及调整,同时也可设置蜂鸣器定时报警功能。当上电时,1616液晶显示模块首先会显示初始化信息,然后对保存在ROM中的图片进行循环扫描,呈现动态效果。与此同时,LED灯会始终以呼吸的效果呈现。 本设计把整体分成了很多个小模块,先把这些小模块例化。最终把全体例化整合到一起,实现预期目标。3 显示系统的设计过程3.1 系统设计目标采用DS1302时钟芯片产生实时时间,通过六位数码管显示。通过五位按键可以对时间进行设置以及调整,同时也可设置蜂鸣器定时报警功能。当上电时,1616液晶显示模块首先会显示初始化信息,然后对保存在ROM中的图片进行循环扫描,呈现动态效果。与此同时,LED灯会始终以呼吸的效果呈现。3.2 显示系统的工作原理及系统构成 显示系统由DS1302芯片、六位数码管、蜂鸣器、五位按键、四位LED灯、1616液晶模块构成。在设计时,我先从各个小模块开始编程,最后把各个小模块整合到一块。利用FPGA来驱动液晶和显示系统的设计,利用DS1302芯片产生实时时间,通过数码管显示。通过五位按键可以对时间进行设置和调整,同时还具有定时报警功能。当上电时,1616液晶会显示初始化信息,然后对提前保存在ROM中的图片进行循环扫描,显示动态效果。实现显示时间、字符、图片、动画的功能。图1为显示系统总框图图1 显示系统总框图3.3 各组成模块及程序设计显示系统由5个模块组成,分别为:DS1302与数码管、蜂鸣器、五位按键、四位LED灯、1616液晶模块构成3.3.1 DS1302与数码管模块设计 DS1302 是本次设计采用的时钟芯片。DS1302是由美国的一家公司推出的一款稳定性高、功耗低、可靠性强、并且带有RAM的一款时钟芯片,DS1302时钟芯片可以对秒、分、时、日、周、月、年进行计时,其工作电压范围为2.5V5.5V。CPU与三线接口配合进行同步通信,同时具有突发方式传输功能以满足多个信号处理。DS1302的RAM寄存器不能长久存放数据。 DS1302时钟芯片的引脚排列如图2所示,其中主电源是VCC2,后备电源是VCC1。有了后备电源,当遇到主电源关闭的情况时,后备也能继续供电实现时钟的连续运行。一般情况下Vcc1或Vcc2两者中较大者为DS1302芯片供电。当Vcc2小于Vc9c1时,Vcc1为DS1302供电。DS1302由两个振荡源,它们分别是X1和X2,外接32.768kHz晶振。图2 DS1302引脚排列 DS1302包含三个模块分别是DS1302_control_module、DS1302_function、RTC_control_module。数码管模块主要有数码管译码模块、数码管动态扫描、数码管控制模块和数码管实例化模块。DS1302的原理图如图3所示图3 DS1302原理图本次设计中为了显示时间我采用了八位数码管。八位数码管是最常用到的一类数码管。八段数码管是由二极管构成的。二极管有很多优点,例如,发光强度高,穿透性强,显示清晰等。在把多个二极管相连组成数码管时经常用到共阳极、共阴极的方式。了解这些方式的连接原理很重要,因为连接方式不同,它们的程序编写也不同。二极管要发光,必须要有电路去驱动它,驱动方式一般有静态和动态两种。在本次设计中,我选择了动态驱动的方式去显示时间。在动态驱动时,数码管从外观上来看是一直发光的。但真实的原理并不是这样,二极管的点亮时间只有1-2ms。但是只要扫描速度足够快,人眼是不能分辨出来的。这就是二极管的余辉效应。 同时LED数码管具有寿命长、耗电低、价格便宜等优点。本设计中,DS1302与六位数码管相连,显示实时时间。流程图如图4所示图4 DS1302与数码管相连流程图 本模块需要对DS1302的命令和数据进行处理,以及DS1302的各个寄存器的初始化信息。1 往DS1302中写数据(初始化设置和时间的调整)源代码如下1. wire1:0 access_start_sig;2. wire7:0 words_addr;3. wire7:0 write_data;4. DS1302_control_moduleU1(5. .clk(clk),6. .reset(reset),7. .start_sig(start_sig),8. .done_sig(done_sig),9. .time_write_data(time_write_data),10. .time_read_data(time_read_data),11. . access_start_sig(access_start_sig),12. .access_done_sig(access_done_sig),13. .words_addr(words_addr),14. .write_data(write_data),15. .read_data(read_data)16. wire access_done_sig;17. wire7:0 read_data;2 读取DS1302的实时时间源代码如下1. if( rtc_done_sig ) beginrhour = time_read_data; isstart = 8d0;i = i + 1b1;end2. elsebeginisstart = 8b0000_0100;end3. if( rtc_done_sig ) beginrmin = time_read_data;isstart = 8d0;i = i + 1b1;end4. elsebeginisstart = 8b0000_0010;end5. if( rtc_done_sig ) begin rsec = time_read_data;isstart = 8d0;i = 5d4;end6. elsebeginisstart = 8b0000_0001;end7. endcase3.送到数码管显示1. wire7:0 time_write_data;2. wire7:0 rtc_start_sig;3. RTC_control_moduleU1(4. .clk(clk),5. .reset(reset),6. .rtc_sig(rtc_sig),7. .time_write_data(time_write_data),8. .rtc_start_sig(rtc_start_sig),9. .rtc_done_sig(rtc_done_sig),10. .time_read_data(time_read_data)11. );12. wire rtc_done_sig;13. wire7:0 time_read_data; 14. DS1302_interfaceU2(15. .clk(clk),16. .reset(reset),17. .RST(RST),18. .SCLK(SCLK),19. .SIO(SIO),20. .time_write_data(time_write_data),21. .start_sig(rtc_start_sig),22. .done_sig(rtc_done_sig),23. .time_read_data(time_read_data)24. ); 25. endmodule3.3.2 按键模块设计 这部分就是对按键的消抖和例化,它包含detect_module模块和delay_module模块。其中detect_module模块是检测按键有按下或松开的模块,delay_module模块就是延时消抖的模块,关键程序如下1. module detect_module模块检测按键有按下或松开源代码如下1. always(posedge clk or negedge reset)2. if(!reset)3. beginENA = 1b0; count = 11d0;end4. elseif(count = T100US)ENA = 1d1;5. elsecount = count + 1d1;6. regH2L_F1;7. regH2L_F2;8. regL2H_F1;9. regL2H_F2;10. always(posedge clk or negedge reset)11. if(!reset)12. begin 13. H2L_F1 = 1b1;14. H2L_F2 = 1b1;15. L2H_F1 = 1b0; 16. L2H_F2 = 1b0;17. end18. else19. begin 20. H2L_F1 = pin_in; 21. H2L_F2 = H2L_F1;22. L2H_F1 = pin_in; 23. L2H_F2 = L2H_F1;24. end2 delay_module模块就是延时消抖的模块,关键程序如下1. always(posedge clk or negedge reset)2. if(!reset)3. temp = 4d0;4. elseif(iscount & count = T1MS)5. temp = temp + 1b1;6. elseif(!iscount)7. temp = 4d0;8. 9. reg2:0 i;10. reg rpin_out;11. always(posedge clk or negedge reset)12. if(!reset)13. begini = 3d0; rpin_out = 1b0; iscount = 1b0;end14. else15. case(i)16. 3d0:if(H2L_sig)i = 3d1;17. else if(L2H_sig)i = 3d3;18. 3d1:19. if(temp = 4d10)20. begin21. iscount = 1b0; 22. rpin_out = 1b1; 23. i = 3d2; 24. end按键的例化RTL视图如下图5所示图5 按键的例化RTL视图3.3.3 报警模块设计 这个模块包含两部分,一个是报警模块alarm_module,一个是选择输出模块mux21_module。报警模块alarm_module中主要是对报警时间的设置,然后选择的输出。选择输出模块mux21_module中主要是选择性的输出,何时输出报警时间何时输出实时时间。报警模块的流程图如图6所示图6 报警模块流程图1 报警模块alarm_module中主要是对报警时间的设置,然后选择的输出。其源代码如下1. always( posedge clk or negedge reset )2. if( !reset )3. begin4. asec = 8d0;5. amin = 8d0;6. ahour = 8d0;7. i = 4d1;8. temp = 8d0;9. comp = 8d0;10. go = 4d0;11. end12. elseif( flag )13. case( i )14. if( alarm_in3 )begintemp = ahour; comp = 8h23; go = 4d1; i = 4d4; end15. elseif( alarm_in2 ) begintemp = ahour; go = 4d1;i = 4d7;end16. elseif( alarm_in0 ) begintemp = amin; i = i + 1b1;end2选择输出模块mux21_module中主要是选择性的输出,何时输出报警时间何时输出实时时间,其源代码如下1. reg flag;2. always( posedge clk or negedge reset)3. if( !reset )flag = 1b0;4. elseif( alarm_flag )flag = flag;5. assignmux21_out = flag ? alarm_sig : rtc_sig;6. Endmodule3. 蜂鸣器模块,一旦设置报警时间与实时时间相等时,就会驱动蜂鸣器响5秒的时间。其核心程序如下17. always( posedge clk or negedge reset )18. if( !reset )flag = 1b0;19. elseif( alarm_in1 )flag = flag;20. reg7:0 asec;21. reg7:0 amin;22. reg7:0 ahour;23. reg7:0 temp;24. reg7:0 comp;25. reg3:0 go;26. reg3:0 i;27. always( posedge clk or negedge reset )28. if( !reset )29. begin30. asec = 8d0;31. amin = 8d0;32. ahour = 8d0;33. i = 4d1;34. temp = 8d0;35. comp = 8d0;36. go = 4d0;37. end 因为这个模块与数码管模块和按键模块共同发挥作用,所以在这部分,我把这三者整合到了一块。最后的RTL视图如下图7所示图7 报警模块和数码管、按键模块整体RTL视图3.3.4 呼吸灯模块设计 呼吸灯模块就是利用PWM脉冲调制原理来实现LED灯的呼吸功能。四位LED用来模拟呼吸效果。这四个LED与FPGA相连的总共有六个引脚,分别为四个LED灯、时钟和复位。LED原理图如下图8所示图8 LED原理图 PWM脉冲主要由以下程序控制:1. always( posedge clk or negedge reset )2. if( !reset )count = 10d0;3. elseif( count = T2US )count = 10d0;4. elsecount = count + 1b1;5. reg9:0 num;6. reg9:0 temp;7. reg2:0 i;8. always( posedge clk or negedge reset)9. if( !reset )10. begin11. i = 3d0;12. num = 10d0;13. temp = 10d0;14. end3.3.5 1616液晶显示模块设计1616数据写入的流程图如下图9所示图9 1616数据写入流程图1616模块主要包含三个模块,分别是lcd_ram_module模块,这个模块相当于一个RAM,大小为1K,作为图片缓存;lcd_control_module模块,这个模块主要是对LCD的一些硬性的相关初始化和对液晶屏的扫描控制,其中每一副画面的扫描包含了8页的扫描,每一页的扫描包含了8行128列的扫描;spi_w_moudle模块就是数据的传输了,与硬件LCD1616相连,把数据传到显示屏中;1616内部结构框图如下图10所示图10 1616内部结构框图1 lcd_ram_module模块这个模块相当于一个RAM,大小为1K,核心程序如下1. always( posedge clk or negedge reset )2. if( !reset )rdata = 8d0;3. elseif( write_en_sig )ramwrite_addr_sig = write_data;4. elserdata = ramread_addr_sig;5. assignread_data = rdata;6. endmodule2 lcd_control_module 模块这个模块主要是对LCD的一些硬性的相关初始化和对液晶屏的扫描控制,其中每一副画面的扫描包含了8页的扫描,每一页的扫描包含了8行128列的扫描。模块核心程序如下1. if( !reset )count = 21d0;2. elseif( count = T25MS )count = 21d0;3. elsecount = count + 1b1;4. 5. reg1:0 isstart;6. always( posedge clk or negedge reset )7. if( !reset )isstart = 2b10;8. elseif( count = T25MS )isstart = 2b01;9. elseif( isdone )isstart = 2b00;10. reg5:0 i;11. reg9:0 rdata;12. reg8:0 x;13. reg3:0 y;14. reg isspi_start;15. reg isdone;16. always( posedge clk or negedge reset )17. if( !reset )18. begin19. i = 6d0;20. rdata = 2b11,8h2f ;21. x = 9d0;22. y = 4d0;23. isspi_start = 1b0;24. isdone = 1b0;25. end3 spi_w_moudle模块就是数据的传输了,与硬件LCD1616相连,把扫描数据送往液晶屏中,核心程序如下1. always( posedge clk or negedge reset )2. if( !reset )count = 5d0;3. elseif( count = TIME )count = 5d0;4. elseif( start_sig )count = count + 1b1;5. elsecount = 5d0;6. reg4:0 i;7. reg rsclk;8. reg rdo;9. reg isdone;10. always( posedge clk or negedge reset )11. if( !reset )12. begin13. i = 5d0;14. rsclk = 1b1;15. rdo = 1b0;16. isdone = 1b0;17. end18. elseif( start_sig )19. case( i )20. 0,2,4,6,8,10,12,14:21. if( count = TIME )22. beginrdo 1); rsclk = 1b0; i = i + 1b1; end23. 1,3,5,7,9,11,13,15:24. if( count = TIME )25. beginrsclk = 1b1; i = i + 1b1; end26. 16:27. beginisdone = 1b1; i = i + 1b1; end28. 17:29. beginisdone = 1b0; i = 5d0; end30. endcase例化lcd_ram_module模块、lcd_control_module模块、spi_w_moudle模块,其中ROM模块使用现场资源,所以不用verilog语言描述。得到的视图如下图11所示图11 lcd_ram_module、lcd_control_module、spi_w_moudle例化视图3.4 顶层电路结构的Verilog HDL实现 最后对各个模块整体例化,最后整体的RTL视图如图12所示 1. module top_module(2. 3. input clk,reset,4. 5. output7:0 smg_data,6. output5:0 scan_sig,7. 8. output RST,9. output SCLK,10. inout SIO,11. 12. input4:0 key_in,13. 14. output beep,15. 16. output3:0 led,17. 18. output3:0 spi_out19. );20.21. wire23:0 rtc_sig;22. ds1302_moduleU1(23. .clk( clk ),24. .reset( reset ),25. 26. .RST( RST ),27. .SCLK( SCLK ),28. .SIO( SIO ),29. 30. .rtc_sig( rtc_sig ),31. 32. .config_sig( key_out )33. );34.35. 36. SMG_interfaceU2(37. .clk( clk ),38. .reset( reset ),39. 40. .scan_sig( scan_sig ),41. .smg_data( smg_data ),42. 43. .number_sig( mux21_out )44. );45. 46. wire4:0 key_out;47. key_interfaceU3(48. .clk(clk),49. .reset(reset),50. 51. .key_in(key_in),52. .key_out(key_out)53. );54.55.56. wire23:0 alarm_sig;57. alarm_moduleU4(58. .clk(clk),59. .reset(reset),60. 61. .alarm_in(key_out),62. .alarm_sig(alarm_sig)63. );64. 65. wire23:0 mux21_out;66. mux21_moduleU5(67. .clk(clk),68. .reset(reset),69. 70. .alarm_flag(key_out1),71. .alarm_sig(alarm_sig),72. .rtc_sig(rtc_sig),73. .mux21_out(mux21_out),74. 75. .beep( beep )76. );77.78. pwm_moduleU6(79. .clk(clk),80. .reset(reset),81. 82. .led(led)83. );84.85. lcd_moduleU7(86. .clk(clk),87. .reset(reset),88. 89. .spi_out(spi_out)90. );91. endmodule图12 整体设计RTL视图4 显示系统的仿真分析与电路实现4.1 显示系统的设计仿真4.1.1 数码管模块的仿真及分析 在调试数码管模块时,将数码管程序下载到FPGA中,运行程序,数码管可以显示数字,但是闪烁感太强,发光不连续。结合前文介绍的数码管的发光原理,发现是计数值的原因。修改计数值,提高扫描速率,闪烁感消失,数码管显示正常。显示正常后用Quartus对数码管仿真如下图13所示:图13 数码管仿真图 4.1.2 1616显示模块仿真及分析 在调试1616模块时,将1616程序下载到FPGA中,发现1616不能正常显示。考虑到FPGA中的I/O脚较多,如果不能与核心板模块的功能引脚正确相连,很容易出现此情况。于是我又认真的排查了一便各管脚的对应,发现确实是管脚对应错误,调整后可以正常显示“毕业设计课题基于FPGA显示系统”这几个字。显示正常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论