EDA设计报告点阵LED.doc_第1页
EDA设计报告点阵LED.doc_第2页
EDA设计报告点阵LED.doc_第3页
EDA设计报告点阵LED.doc_第4页
EDA设计报告点阵LED.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

EDA 嵌入式系统课程设计北京印刷学院课 程 设 计 报 告 -嵌入式系统EDA课程设计名称:EDA技术课程设计课程设计题目:点阵LED显示屏控制器的设计专 业:电子信息工程专业 班 级: 学 生 姓 名:学 生 姓 名指 导 老 师:唐英杰时 间: 目录一、设计任务要求.31、基本要求:.3二、设计方案.31、系统功能.32、系统设计.31)系统设计方案说明.32)模块分析.41、分频模块.42、 时钟模块.43、按键去抖模块.54、 只读ROM模块.65、 显示控制模块.66、 16*16LED点阵扫描显示模块.7三、应用设备及软件介绍.91:主要仪器设备(实验用的软硬件环境).92:实验的软件环境.93:操作方法与实验步骤.9四、调试过程分析、遇到的问题及解决方法.9五、设计结论.10六、管脚分配说明.11七、参考文献.11八、附录.11附录一、分频模块程序.11附录二、按键去抖模块程序.13附录三、显示控制模块程序.14附录四、扫描显示控制模块程序. 18附录五、只读ROM模块程序.20一、设计任务要求1、基本要求: 点阵LED显示屏为16*16的屏; 能显示一组汉字,如:电子信息工程专业; 能以多种显示方式显示汉字,如左移、右移等;二、设计方案1、系统功能 系统能够在16*16的LED点阵屏幕上显示任一汉字,有三种显示方式,分别是直接显示文字、从左到右刷屏显示、从右到左刷屏显示;并且能显示不同长度的文字。2、 系统设计1)系统设计方案说明 此实验是基于CycloneIII的EP3C55F484C8嵌入式系统的设计,主要有时钟模块、按键去抖模块、只读ROM模块、显示控制模块、16*16LED点阵扫描显示模块以及一些输入和输出管脚、电源和地构成。2) 模块分析1、分频模块 分频器,使输入时钟信号分频成低频信号,达到适合的频率,以供此实验应用。其中分为奇分频和偶分频,这里用到100的偶分频和5的奇分频。图一 100分频模块图二 5分频模块2、时钟模块系统输入时钟为50MHz,为了能达到各模块需要的系统时钟,系统要通过时钟模块分频到1KHz。在扫描显示模块要求输入时钟必须大于50*16ms,即小于人眼分辨时间,到达显示效果。时钟模块输入为50MHz通过两个100分频,和一个5分频达到1KHz;图三 时钟模块组成图四 时钟模块3、按键去抖模块通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键去抖。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。在该按键去抖模块输入时钟为1KHz,去抖系数为20,即按键抖动时间允许在20ms以内。图五 按键去抖模块4、只读ROM模块只读存储器ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。该只读ROM大小为16bitX512word,在这ROM存储用做字符发生器,用来存储要显示的文字编码。每个文字编码为16个16b的数据,如“北”字的编码为00040406040404080408FFFE00000000FEFC04020802100230020002000E0000其中“北京印刷学院”存储地址为095;“愚者千虑,必有一得”地址为96239,反向编码的“北京印刷学院”存储地址为240335。图六 只读ROM模块5、显示控制模块该模块是本系统重要模块,本系统显示方式是通过改变字模的地址来呈现不同的显示形式。本模块有时钟信号clk_1K;mode按键kin和复位按键rest;输出初始地址star_addr8.0;同步复位信号r_flg和改变扫描方式的change信号,输出信号都作用于扫描显示show_count模块。输入输出信号如下:clk_1K1KHz的时钟输入star_addr8.0每状态对应的初始地址kin 状态转换按键输入r_flg同步复位信号rest复位按键输入change改变扫描方式信号本系统的三种显示方式分别是本模块里状态机:s0: 直接显示文字;s1:从左到右刷屏显示;s2:从右到左刷屏显示;S0S1S3Count=1Count=2Count=3Rest=0Rest=0状态转换图如右图:文字编码已按地址存储在文字库ROM里,每种显示方式都通过改变扫描显示的初始地址来实现。在每个状态机里当显示时间达到show_times*16即800ms左右就会改变一次初始地址(+16或+1)直到该段文字结束后,初始地址又变为该段文字的初始地址。如显示方式 图七 显示方式状态转换图一:“北京印刷学院”存储地址为095。初始地址为0,每次显示时间到800ms地址加16,直到地址为80的时候下一次计时到800ms后地址变为0;图八 显示控制模块6、16*16LED点阵扫描显示模块LED动态显示接口是嵌入式系统中应用最为广泛的一种显示方式之一,动态驱动是将所有行LED的同名端连在一起,另外为每列LED的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当FPGA输出字形码时,FPGA对位选通COM端电路的控制,所以我们只要将需要显示的列码的选通控制打开,该位就显示出字形,没有选通的列就不会亮。通过分时轮流控制各列的COM端,就使各列LED轮流受控显示,这就是动态驱动。在轮流显示过程中,每列LED的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各列LED并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。在本系统的扫描显示模块里包括LED动态扫描显示模块show_count和文字库ROM组成。在核心模块扫描显示模块show_count输入信号有时钟clk,初始地址信号star_addr,控制信号change、rest。输出信号有字模地址addr和位选信号bit_code。个信号具体如下表:Change改变扫描方式信号输入star_addr控制端初始地址输入rest同步复位信号输入addr字模地址输出clk1KHz时钟输入bit_code列码位选信号输出本模块通过地址控制ROM输出文字编码到LED点阵相应的每一列上来达到显示目的。每个文字编码为16个16位的数据,每个16位数据对应每一列,故每个文字要扫描显示16次;用第一种显示效果为例:当输出bit_code码为0时输出地址为0的数据,下一个时钟到来时,bit_code加1,同时addr加1显示下一列数据。直到bit_code=15,addr也刚好加到star_addr+15,在下一时钟图九 扫描显示控制模块到来时bit_code回到0;同时addr也回到改文字的star_addr。这样不断的扫描显示达到显示出一个文字的效果。下图为本系统的16*16LED点阵扫描显示模块总电路图,核心模块show_count通过addr总线连到字模ROM的address,这样实现了扫描显示模块通过控制ROM地址输出相应字模编码到对应列上来进行扫描显示。其中注意的是,该ROM需要在输入地址后的第二个上升沿才能把数据送到q(输出)端,故在初始时刻,要在第三个上升沿才能让bit_code加1。图十 扫描显示模块总电路图3、 应用设备及软件介绍 1:主要仪器设备(实验用的软硬件环境) (1)计算机; (2)实验箱(CycloneIII的EP3C55F484C8) (3)电源线一根 (4)USB下载线一根 2:实验的软件环境 Quartus 9.0软件 3:操作方法与实验步骤 (1)利用Quartus II 9.0 软件实现EDA 的基本设计流程:创建工程、编辑文本输设计文件、编译前设置、全程编译、功能仿真。 (2)利用Quartus II 9.0 软件实现引脚锁定和编译文件下载。 四、调试过程分析、遇到的问题及解决方法问题1: 本来自己通过在显示屏上设计好每个LED灯的状态,则需要32个管脚控制, 结果发现管脚不够分配,只有20个管脚。解决方法:通过查阅实验说明书,了解了实验原理以及管脚分配,知道了每个字的代码是用字模软件生成的,重新根据实验原理编写代码从而实现20个管脚的分配。 问题2: 调试成功,但是LED屏幕上一直无法显示汉字。解决方法:通过仔细查阅实验说明书,将开发平台上的CTRL_SW组合开关上的1拨上,2、 3、4拨下,使数码管显示为1,LED屏幕上显示汉字。 问题3: 在显示一段文字时,每次返回显示第一个文字的时候总是错位。解决方法:把扫描显示模块的复位信号用作跟显示控制模块的同步复位信号r_flg,当该段文字返回显示第一个文字时,由显示控制模块产生一个复位信号作用于扫描显示模块,让扫描显示模块同步复位,这样就不会出错了。问题4: 每段文字显示完后总会出现一串乱码,然后一直黑屏。解决方法:导致这种情况的原因是运算语句参数错误,导致地址超范围;最后通过改变参 数,使每次显示文字都在该段文字编码范围内,问题就解决了。五、设计总结通过这次课程设计的整个过程中,我们做了一次全面、较规范的设计练习,全面地温习了以前所学过的知识,以及做过的实验,用理论联系实际并结合FPGA课程和解决实际问题,巩固、加深和扩展了有关FPGA设计方面的知识。尤其重要的是让我们养成了科学的习惯,在设计过程中一定要注意掌握项目工程设计方案,在设计阶段,注意设计模块与结构设计时序交替进行,采用正确的设计方法。在整个设计过程中注意对设计资料和计算数据的保存和积累,保持记录的完整性。在状态机的设计过程中要注意分清状态。在课程设计的实践中进行了设计基本技能的训练,掌握了查阅和使用标准、规范、手册、图册、及相关技术资料的基本技能以及计算、数据处理等方面的能力。在整个设计工过程中,尤其是设计之前,一定要有整体的逻辑思路;然后在分块解决。同样在检测的过程中,要学会分模块检测,这一点是很重要的,会起事半功倍的效果。通过对通用EP3C55F484C8的FPGA处理器的设计,掌握了一般verilog设计的程序和方法,让我们对整个FPGA程序的设计,verilog语言有了一个比较深的理解。还有就是增强了自身的动手能力,把以前书本上讲的或是没有讲的,通过一次课程设计具体的实施,使自己真正得到锻炼,对于以后我们的发展与学习来说,都可以看作一笔不小的财富,前面还有很多需要我们去尝试。这次课程设计还是有了不少收获,对FPGA的认识更加深了,自己动手能力也提高一些六、管脚分配说明管脚分配设计端口芯片引脚开发平台模块EP3C16/40/55/80F484row16 PIN_A13 16X16点阵 row15 PIN_F9 row14 PIN_D10 row13 PIN_B10 row12 PIN_B9 row11 PIN_B8 row10 PIN_B7 row9 PIN_E14 row8 PIN_C15 row7 PIN_F11 row6 PIN_C13 row5 PIN_E11 row4 PIN_B6 row3 PIN_A6row2 PIN_A5row1 PIN_A4col4 PIN_C4 col3 PIN_A16 col2 PIN_A15 col1 PIN_A14 7、 参考文献:1 夏宇闻. Verilog数字系统设计教程(第3版). 北京:北京航空航天出版社. 20132 夏宇闻. Verilog嵌入式数字系统设计教程. 北京:北京航空航天出版社. 20093 GX-BICE-EDA实验教程说明书. 北京革新科技.八、附录:附录一、分频模块程序DDF_2:/二分频模块module DDF_2(clkin,clkout); input clkin; output clkout; reg clkout; reg8:0 count; parameter NUM=0; always (posedge clkin)beginif(count=NUM)begincount=8b0000_0000;clkout=clkout;endelsecount=count+8b0000_0001;endendmoduleDDF_5:/五分频模块module DDF_5(clkin,clkout); parameter NUM=5; input clkin; output clkout; wire clkout; reg4:0 m,n; reg count1,count2; assign clkout=count1|count2; always (posedge clkin)begin if(m=NUM-1)m=0;elsem=m+1;if(m(NUM-1)/2)count1=1;elsecount1=0;end always (negedge clkin) begin if(n=NUM-1)n=0;elsen=n+1;if(n(NUM-1)/2)count2=1;elsecount2=disort) /大于去抖值disortbeginKout=0;/输出按键counter=disort; /固定counter值endelsebeginKout=1; /输出按键counter=counter+1; /计数加1endendelse /没有按键begincounter=0; /计数值为0,清零Kout=1;endendendmodule附录三、显示控制模块程序display_count:/显示控制模块module display_count(clk_1k,kin,rest,star_addr,r_flg,change); input clk_1k,rest,kin; output reg 8:0 star_addr; output reg r_flg,change; reg 10:0 s_count; reg 1:0 k_count; reg 3:0 state; parameter show_times=50,display_word=5,s0=4b0001,s1=4b0010,s2=4b0100,s3=4b1000; always (negedge kin or negedge rest)beginif(!rest)k_count = 2b00;else if(k_count=3)k_count = 1;elsek_count = k_count + 1b1;end always (posedge clk_1k)beginif(!rest)beginr_flg = 0;/tong bu fu weis_count = 0;star_addr = 0;state = s0;change = 0;endelse begin/r_flg = 1;case(state)s0:beginif(k_count=1)beginstate = s1;r_flg = 0;star_addr = 96;endelse beginif(s_count=show_times*16)begins_count =display_word*16)beginr_flg = 0;star_addr = 0;endelsestar_addr = star_addr + 16;endelse beginstate = s0;r_flg = 1;s_count = s_count + 1b1;endendends1:beginif(k_count=2)beginstate = s2;r_flg = 0;star_addr = 240;change = 1;endif(s_count=(show_times-45)*16)begins_count = 0;if(star_addr = 208)beginstar_addr = 96;r_flg = 0;/tong bu fu weiendelsebeginstar_addr = star_addr + 1;r_flg = 1;endendelsebegins_count = s_count + 1b1;r_flg = 1;state=s1;endends2:beginif(k_count=3)beginstate = s0;r_flg = 0;star_addr = 0;change = 0;endelse begin if(s_count=show_times)begins_count =320)beginstar_addr = 240;r_flg = 0;endelsebeginstar_addr = star_addr + 1;r_flg = 1;endendelsebegins_count = s_count + 1b1;change = 1;state=s2;r_flg = 1;endendenddefault:state=s0;endcaseend endendmodule附录四、扫描显示控制模块程序show_count: /扫描显示控制模块module show_count(clk,rest,star_addr,bit_code,addr,change); input clk,rest,change; input 8:0 star_addr; output reg8:0 addr; output reg3:0 bit_code; reg1:0 flg = 0; always (posedge clk)beginif(!rest)beginflg = 0;/addr = star_addr;bit_code =2)/delay 2 clk star to showbeginbit_code = bit_code - 1b1;endelseflg = flg + 1b1;if(addr=star_addr+15)addr = star_addr;elsebeginaddr =2)/delay 2 clk star to showbit_code = bit_code + 1b1;elseflg = flg + 1b1;if(addr=star_addr+15)addr = star_addr;elsebeginaddr = addr + 1b1;endendendendmodule附录五、只读ROM模块程序module ROM (address,clock,q);/ROM字库模块input8:0 address;input clock;output15:0 q;wire 15:0 sub_wire0;wire 15:0 q = sub_wire015:0;altsyncramaltsyncram_component (.clock0 (clock),.address_a (address),.q_a (sub_wire0),.aclr0 (1b0),.aclr1 (1b0),.address_b (1b1),.addressstall_a (1b0

温馨提示

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

评论

0/150

提交评论