EDA技术综合设计课程设计报告基于VHDL的16215;16汉字点阵动态显示系统的设计_第1页
EDA技术综合设计课程设计报告基于VHDL的16215;16汉字点阵动态显示系统的设计_第2页
EDA技术综合设计课程设计报告基于VHDL的16215;16汉字点阵动态显示系统的设计_第3页
EDA技术综合设计课程设计报告基于VHDL的16215;16汉字点阵动态显示系统的设计_第4页
EDA技术综合设计课程设计报告基于VHDL的16215;16汉字点阵动态显示系统的设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、eda技术综合设计课程设计报告报 告 题 目: 基于vhdl的16×16汉字 点阵动态显示系统的设计 作者所在系部: 电子工程系 作者所在专业: 电子信息工程 作者所在班级: b08212 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 2010年12月14日 内 容 摘 要随着电子技术的不断革新,以二极管为基础的led点阵随之获得了广泛的应用。在日常生活中,点阵随处可见。通过多种控制手段,点阵还可以实现各种文字和图案的动态显示。而在不同的应用场合,点阵的设计要求是不同的。传统的思路一般是应用单片机实现点阵控制,但这种方法会受到一定的硬件资源限制。随着电子设计自动化技术的进展

2、,基于可编程逻辑器件进行系统芯片集成的点阵控制不失为一种新的设计思路。本设计以电子设计自动化(eda)技术为核心,运用硬件描述语言(vhdl),在max+plus环境下进行编程并下载到可编程逻辑器件中实现led点阵的控制电路。主要程序除了常用的译码器、计数器之外,还包括了自定义功能的控制模块。通过编程、调试、仿真、下载完成了汉字的动态显示。彰显了eda技术在当今电子领域中的重要地位。 关键词:eda、可编程逻辑器件、计数器、点阵、动态目 录一、 概 述 5二、方案设计与论证 51、点亮点阵中一个点的原理 52、点亮一个字的原理 53、动态显示不同汉字的原理 5三、底层文件与程序设计 61十六进

3、制计数器 6 2八进制计数器 7 3字显示控制模块 8四、系统调试与仿真 121、开发环境介绍122、新建项目 123、输入程序 124、编译 135、时序仿真 136、设计顶层文件 147、选择器件 148、设置管脚 149、下载 14五、硬件调试 15六、心得体会 15七、参考文献 15八、指导教师及评语16 课程设计任务书课题名称基于vhdl的16×16 点阵汉字动态显示系统的设计完成时间2010.12.14指导教师胡 职称副教授学生姓名 班 级b08212总体设计要求和技术要点1在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中位选信号为16-4编码器编码输出。2设计

4、8位开关控制的8种图案显示。3设计4位或4位以上的汉字循环显示,例如“北华航天工业学院” 。工作内容及时间进度安排第15周:立题、论证方案设计周六、周日 :相关的vhdl语言程序设计与调试第16周:周1:进入eda实验室进行硬件与软件的调试周2:验收答辩课程设计成果1与设计内容对应的软件程序2课程设计报告书3成果使用说明书4设计工作量要求一、概述 16×16led点阵由256个发光二极管排成正方形而成,当地二极管一端为高电平,一端为低电平时即可导通发光。通过控制相应的二极管导通或截止,就可以显示控制显示不同的汉字。而要完成汉字动态显示,则需别外设计一个“字显示控制模块”用以控制汉字的

5、动态切换。当要显示的汉字较多时,为了能使点阵迅速恢复到第一个字,还要设置一复位端口。对于汉字的切换速度,可以通过时钟频率进行控制。在以上显示过程中,要力求达到汉字清晰、连续、稳定、无闪烁的设计要求。 二、方案设计与论证本设计列扫描信号4线-16线译码器的输出,行扫描信号规律则由人为定义,从而控制汉字的显示。1、点亮点阵中一个点的原理点阵由行线与列线控制,行线高电平有效,列线低电平有效。通过控制4线-16线译码器的输出,控制点阵中某个点的行控制信号为高电平,列控制信号为低电平(即顺向偏压),该点即被点亮。通过控制行扫描和列扫描,可以点亮点阵中的任意一个点。 2、点亮一个字的原理在任一时刻,点阵中

6、只有一个点能被点亮。为了达到一个点持续点亮的视觉效果,必须考虑人眼的暂留特性,即控制列扫描频率大于128hz,再配合控制行扫描信号,即可“同时点亮”各相应的点从而形成汉字。3、动态显示不同汉字的原理 为了显示多个不同的汉字,需要设计一个计数器,每一个汉字对应计数器的一个输出状态。由4线-16线译码器输出的列扫描信号始终不变,而行扫描信号则由计数器控制,计数器的每一个状态控制一组行扫描信号,这样,在计数器计数输出的同时,实现了多个汉字的切换。由以上给出的设计指标, 该点阵显示器主要包括以下几个部分:1用于行扫描的16进制计数器;2用于控制汉字切换的带复位端口的8进制计数器;3用于控制显示不同汉字

7、的字显示控制模块;以下是16×16点阵汉字显示原理框图(图1):16×16点阵4线-16线译码器74ls138×2片75451×8片字显示控制模块时钟信号源18进制计数器16进制计数器时钟信号源2图1 16×16点阵汉字显示原理框图三、底层文件与程序设计1、十六进制计数器; 十六进制计数器用于行线扫描,十六个状态分别对应点阵的十六行,通过程序给每一行设置相应的代码,可控制相应的点发光,在足够大的扫描频率下,即可显示出字形。该计数器带有复位端口。十六进制计数器的源程序如下:library ieee;use ieee.std_logic_1164.

8、all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity js_16 isport ( clk,re:in std_logic; q:out std_logic_vector(3 downto 0);end js_16;architecture count_16 of js_16 issignal tmp:std_logic_vector(3 downto 0);beginq<=tmp;process(clk,re) begin if re='1' then tmp<="

9、0000" elsif clk'event and clk='1' then if tmp="1111" then tmp<="0000" else tmp<=tmp+'1' end if; end if;end process;end count_16;2、八进制计数器八进制计数器用于控制汉字的动态切换,其工作频率就是汉字切换频率,本设计要显示八个字,恰好对应八进制计数器的八个状态。该计数器带有复位端口,并与上述十六进制计数器共用一个复位信号。八进制计数器的源程序如下:library iee

10、e;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity js_8 isport ( clk,re:in std_logic;q:buffer std_logic_vector(2 downto 0);end js_8;architecture count_8 of js_8 isbeginprocess(clk,re)beginif re='1' then q<="000"elsif clk'event a

11、nd clk='1' thenif q="111" then q<="000"else q<=q+'1'end if;end if;end process;end count_8;3、字显示控制模块显示不同的汉字需要点亮点阵中不同的点,即每个字都要有其相应的程序代码。字显示控制模块的功能正是给每个字设置对应程序代码,从而在八进制和十六进制计数器的控制下显示出不同的汉字。字显示控制模块的源程序代码如下:library ieee;use ieee.std_logic_1164.all;entity a isport

12、(m : in std_logic_vector(2 downto 0); n : in std_logic_vector(3 downto 0); q : out std_logic_vector(15 downto 0);end a;architecture zi_architecture of a isbeginprocess(m,n) begincase m is when "000"=>case n is when "1111" =>q<="0000000000000000" -显示"北"

13、; when "1110" =>q<="0000000000000000" when "1101" =>q<="0001000010000000" when "1100" =>q<="0001000010000000" when "1011" =>q<="0001000010000000" when "1010" =>q<="01111111111

14、11100" when "1001" =>q<="0000000000000000" when "1000" =>q<="0000000000000000" when "0111" =>q<="0111111111111100" when "0110" =>q<="0001000010000000" when "0101" =>q<="0

15、001000010000000" when "0100" =>q<="0001000010000000" when "0011" =>q<="0001000011000000" when "0010" =>q<="0000000000000000" when "0001" =>q<="0000000000000000" when "0000" =>q&l

16、t;="0000000000000000" when others=>null; end case;when "001"=>case n is when "1111" =>q<="0000000000000000" -显示"华" when "1110" =>q<="0000000000000000" when "1101" =>q<="0000000000000000"

17、 when "1100" =>q<="0000100000010000" when "1011" =>q<="0000100000001000" when "1010" =>q<="0000100111111100" when "1001" =>q<="0000100000000010" when "1000" =>q<="000010000000

18、0000" when "0111" =>q<="0111111000100000" when "0110" =>q<="0000100111111110" when "0101" =>q<="0000100100010000" when "0100" =>q<="0000100100001000" when "0011" =>q<="00

19、00100100000000" when "0010" =>q<="0000100111000000" when "0001" =>q<="0000000000000000" when "0000" =>q<="0000000000000000" when others=>null; end case;when "010"=>case n is when "1111" =>

20、q<="0000000000000000" -显示"航" when "1110" =>q<="0100000100000000" when "1101" =>q<="0011111111111000" when "1100" =>q<="0000000100001100" when "1011" =>q<="0010001110001010"

21、when "1010" =>q<="0100000100001000" when "1001" =>q<="0111111111111000" when "1000" =>q<="0000000000000000" when "0111" =>q<="0100000000001000" when "0110" =>q<="0111111111101

22、000" when "0101" =>q<="0000000000101010" when "0100" =>q<="0000000000101100" when "0011" =>q<="0111111111101000" when "0010" =>q<="0100000000001000" when "0001" =>q<="011

23、1000000000000" when "0000" =>q<="0000000000000000" when others=>null; end case;when "011"=>case n is when "1111" =>q<="0000000000000000" -显示"天" when "1110" =>q<="0000000000000000" when "

24、1101" =>q<="0000000000000000" when "1100" =>q<="0100000001000000" when "1011" =>q<="0100000001000000" when "1010" =>q<="0010000001000100" when "1001" =>q<="0001100001000100" w

25、hen "1000" =>q<="0000011001000100" when "0111" =>q<="0000000111111100" when "0110" =>q<="0000011001000100" when "0101" =>q<="0001100001000100" when "0100" =>q<="00100000010001

26、00" when "0011" =>q<="0100000001000000" when "0010" =>q<="0100000001000000" when "0001" =>q<="0000000000000000" when "0000" =>q<="0000000000000000" when others=>null; end case;when "1

27、00"=>case n is when "1111" =>q<="0000000000000000" -显示"工" when "1110" =>q<="0000000000000000" when "1101" =>q<="0010000000000000" when "1100" =>q<="0010000000000000" when "1

28、011" =>q<="0010000000000100" when "1010" =>q<="0010000000000100" when "1001" =>q<="0010000000000100" when "1000" =>q<="0011111111111100" when "0111" =>q<="0010000000000100" wh

29、en "0110" =>q<="0010000000000100" when "0101" =>q<="0010000000000100" when "0100" =>q<="0010000000000100" when "0011" =>q<="0010000000000100" when "0010" =>q<="000000000000000

30、0" when "0001" =>q<="0000000000000000" when "0000" =>q<="0000000000000000" when others=>null; end case;when "101"=>case n is when "1111" =>q<="0000000000000000" -显示"业" when "1110" =

31、>q<="0000000000000000" when "1101" =>q<="0010000000000000" when "1100" =>q<="0010000011100000" when "1011" =>q<="0010000110000000" when "1010" =>q<="0010001000000000" when "10

32、01" =>q<="0011111111111100" when "1000" =>q<="0010000000000000" when "0111" =>q<="0010000000000000" when "0110" =>q<="0011111111111100" when "0101" =>q<="0010001000000000" whe

33、n "0100" =>q<="0010000110000000" when "0011" =>q<="0010000011100000" when "0010" =>q<="0010000000000000" when "0001" =>q<="0000000000000000" when "0000" =>q<="0000000000000000

34、" when others=>null;end case;when "110"=>case n is when "1111" =>q<="0010001000001000" when "1110" =>q<="0001000100001000" when "1101" =>q<="0001000100010000" when "1100" =>q<="000

35、0000000100000" when "1011" =>q<="0111111111111110" when "1010" =>q<="0100000000000010" when "1001" =>q<="1000000000000100" when "1000" =>q<="0001111111100000" when "0111" =>q<

36、="0010000001000000" when "0110" =>q<="0000000110000010" when "0101" =>q<="0111111111111110" when "0100" =>q<="0000000100000000" when "0011" =>q<="0000000100000000" when "0010"

37、=>q<="0000000100000000" when "0001" =>q<="0000010100000000" when "0000" =>q<="0000001000000000" when others=>null; end case;when "111"=>case n is when "1111" =>q<="0000000000000000" -显示"

38、;院" when "1110" =>q<="0111111111111110" when "1101" =>q<="0000000000000010" when "1100" =>q<="0000001001100010" when "1011" =>q<="0000001110011110" when "1010" =>q<="0000

39、000000000000" when "1001" =>q<="0000000000001100" when "1000" =>q<="0100000010000100" when "0111" =>q<="0011000010000100" when "0110" =>q<="0000111110010100" when "0101" =>q<=

40、"0000000010010110" when "0100" =>q<="0011111110010100" when "0011" =>q<="0100000010000100" when "0010" =>q<="0110000010000100" when "0001" =>q<="0000000000001100" when "0000" =

41、>q<="0000000000000000" when others=>null; end case;when others=>null;end case;end process;end zi_architecture;四、系统调试与仿真1、开发环境介绍max+plus 是altera公司的第三代cpld开发工具软件,它集成了可编程逻辑器件的设计环境,可以在多种上平台上运行,可以实现可编程逻辑器件设计的编辑、编译、综合、适配、仿真、编程、下载、和硬件调试等常规操作技术。它还提供了灵活和高效的界面,设计者无需精通器件内部的复杂结构,只需用自己熟悉的设计输入工具(原理图、波形图或硬件描述语言等)进行设计输入,max+plus将这些设计转换成目标结构所要求的格式,从而使设计都能够轻松掌握和使用max+plus软件。2、新建项目(1)启动max+plus软件,进入max+plus管理窗口。(2)在file选择project/name命令,出现以下对话框。图2 新建文本输入(3)在对话框中指定项目文件名和驱动器,单击ok完成。3、输入程序(1)选择file/new命令出现如下对话框,选中text editor file,单击ok完成。 (2)存盘(save & check),指定文件名,后缀为.

温馨提示

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

评论

0/150

提交评论