FPGA课程设计报告_第1页
FPGA课程设计报告_第2页
FPGA课程设计报告_第3页
FPGA课程设计报告_第4页
FPGA课程设计报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、汉字点阵的FPGA实现实习报告学院:电气与信息工程学院 姓名:龚妙 专业:电子信息科学与技术081 学号: 08401500126 指导老师:张学毅2011年11月11日汉字点阵显示的FPGA实现1、 引言随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。采用传统方法设计的汉字显示,通常需要使用单片机、存储器和制约逻辑电路来进行PCB板级的系统集成。尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多的研发经费和较长投放市场周期的代价。随着电子

2、设计自动化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB板的传统设计方式。因此,本文主要阐述基于FPGA和VHDL语言实现在16*16点阵上汉字的显示问题。2、 设计方案本文的LED点阵模块,共有16*16个发光二极管组成,此次设计最大的难点在于如何显示汉字。系统采用16路动态分时扫描技术来实现,将16*16数组的显示模块的列输入端与FPGA的ROM的16位数据输出端口相连,16个行控制端与一个4-16译码器的输出端相连,译码器的输入端又与FPGA内的行扫描控制模块的输出sel3-sel0相连。图1.1为硬件原理图。图1.1 系统原理框图3

3、、 LED的显示原理16*16LED点阵的显示原理如同单个LED显示原理,当顺向一端接有高电平,另一端为低电平时,对应的LED就被点亮。16*16的点阵就是对应于行或列为高电平时,另一端为低电平,且为顺接时,他们交叉地方的LED就被点亮。点阵LED一般采用扫描方式显示,包括1)行扫描;2)列扫描;3)点扫描。采用不同的扫描方式其对扫描频率也有不同的要求。此次实验采用的是列扫描的方式。4、 汉字的显示汉字显示使用的是16*16的点阵,EDA实验箱上有其接口,列选信号为sel0-sel3,经416线译码器输出16行,列选信号是由一个4位向量sel3:0控制,行选信号为q0-q15,每一行由一个单独

4、的位来控制,高电平有效。由于列是由一个向量决定的,而每一时刻的值只能有一个固定的值,因而只能使某一列的若干个点亮,因此就决定了只能用逐列扫描的方法。5、 编程思路本次设计的难点在于怎样显示汉字及如何动态的变换汉字,从这方面入手,因为本次设计要显示的汉字和数字较多,故可采取自动切换的方法,即在字与字之间加一延时和循环即可实现汉字的动态显示,故用到了一个17进制计数器(共17个汉字和数字)和一个16进制的计数器,外加一延时单元和汉字字模单元几部分组成。六、程序清单 'define UD #1 module dianzhen ( sysclk, rst_b, led_data, led_se

5、l ); input sysclk,rst_b; output 15:0 led_data; output 3:0 led_sel; wire sysclk; wire rst_b; reg 15:0 led_data; reg 3:0 led_sel; reg 3:0 led_sel_n; reg 15:0 led_scan_cnt; reg 15:0 led_scan_cnt_n; reg 27:0 led_keep_cnt; reg 27:0 led_keep_cnt_n; reg 3:0 led_mode; reg 3:0 led_mode_n; parameter scan_led

6、= 16'h50; parameter scan_src = 28'h100; always (posedge sysclk or negedge rst_b) begin if(!rst_b) led_scan_cnt<='ud 16'b0; else led_scan_cnt<='ud led_scan_cnt_n; end always (*) begin if(led_scan_cnt = scan_led) led_scan_cnt_n = 16'h0; else led_scan_cnt_n = led_scan_cnt

7、+ 16'h1; end always (posedge sysclk or negedge rst_b) begin if(!rst_b) led_sel <= 'UD 4'h0; else led_sel <= 'UD led_sel_n; end always (*) begin if(led_sel_cnt = scan_led) led_sel_n = led_sel + 4'h1; else led_sel_n = led_sel; end always (posedge sysclk or negedge rst_b) begi

8、n if(!rst_b) led_keep_cnt <= 'UD 28'h0; else led_keep_cnt <= 'UD led_keep_cnt_n; end always (*) begin if(led_keep_cnt = scan_scr) led_keep_cnt_n = 28'h0; else led_keep_cnt_n = led_keep_cnt + 28'h1; end always (posedge sysclk or negedge rst_b) begin if(!rst_b) led_mode <=

9、 'UD 4'h0; else led_mode <= 'UD led_mode_n; end always (*) begin if(led_mode = 4'he) led_mode_n = 4'h0; else if(led_keep_cnt = scan_scr) led_mode_n = led_mode +4'h1; else led_mode_n = led_mode; end always (*) begin case(led_mode) 4'h0: case(led_sel) 4'h0:led_data =

10、 16'h0000;/dian 4'h1:led_data = 16'h7000; 4'h2:led_data = 16'h4000; 4'h3:led_data = 16'h4ff8; 4'h4:led_data = 16'h4448; 4'h5:led_data = 16'h4448; 4'h6:led_data = 16'h4448; 4'h7:led_data = 16'h4448; 4'h8:led_data = 16'h3fff; 4'h9

11、:led_data = 16'h0448; 4'ha:led_data = 16'h0448; 4'hb:led_data = 16'h0448; 4'hc:led_data = 16'h0448; 4'hd:led_data = 16'h0ff8; 4'he:led_data = 16'h0000; 4'hf:led_data = 16'h0000; endcase 4'h1: case(led_sel) 4'h0:led_data = 16'h0000;/ke 4

12、'h1:led_data = 16'h0100; 4'h2:led_data = 16'h0100; 4'h3:led_data = 16'hffff; 4'h4:led_data = 16'h0200; 4'h5:led_data = 16'h0200; 4'h6:led_data = 16'h02cc; 4'h7:led_data = 16'h0422; 4'h8:led_data = 16'h0400; 4'h9:led_data = 16'h0

13、491; 4'ha:led_data = 16'h0051; 4'hb:led_data = 16'hffff; 4'hc:led_data = 16'h0072; 4'hd:led_data = 16'h0192; 4'he:led_data = 16'h0212; 4'hf:led_data = 16'h0410; endcase 4'h2: case(led_sel) 4'h0:led_data = 16'h0000;/0 4'h1:led_data = 16&

14、#39;h07c0; 4'h2:led_data = 16'h0ff0; 4'h3:led_data = 16'h1830; 4'h4:led_data = 16'h1018; 4'h5:led_data = 16'h2008; 4'h6:led_data = 16'h2008; 4'h7:led_data = 16'h2008; 4'h8:led_data = 16'h2008; 4'h9:led_data = 16'h2008; 4'ha:led_data

15、 = 16'h1010; 4'hb:led_data = 16'h1830; 4'hc:led_data = 16'h0ff0; 4'hd:led_data = 16'h07c0; 4'he:led_data = 16'h0000; 4'hf:led_data = 16'h0000; endcase 4'h3: case(led_sel) 4'h0:led_data = 16'h0000;/8 4'h1:led_data = 16'h0000; 4'h2:le

16、d_data = 16'h0c70; 4'h3:led_data = 16'h1e70; 4'h4:led_data = 16'h1298; 4'h5:led_data = 16'h2308; 4'h6:led_data = 16'h2108; 4'h7:led_data = 16'h2108; 4'h8:led_data = 16'h2108; 4'h9:led_data = 16'h2088; 4'ha:led_data = 16'h2188; 4'

17、;hb:led_data = 16'h21D8; 4'hc:led_data = 16'h1270; 4'hd:led_data = 16'h1e70; 4'he:led_data = 16'h0C00; 4'hf:led_data = 16'h0000; endcase 4'h4: case(led_sel) 4'h0:led_data = 16'h0000;/1 4'h1:led_data = 16'h0000; 4'h2:led_data = 16'h0000;

18、 4'h3:led_data = 16'h2000; 4'h4:led_data = 16'h2000; 4'h5:led_data = 16'h2000; 4'h6:led_data = 16'h2000; 4'h7:led_data = 16'h3ff8; 4'h8:led_data = 16'h3ff0; 4'h9:led_data = 16'h2010; 4'ha:led_data = 16'h2010; 4'hb:led_data = 16'

19、h2010; 4'hc:led_data = 16'h2010; 4'hd:led_data = 16'h0000; 4'he:led_data = 16'h0000; 4'hf:led_data = 16'h0000; endcase 4'h5: case(led_sel) 4'h0: led_data = 16'h1080; 4'h1: led_data = 16'h4410; 4'h2: led_data = 16'h2492 ; 4'h3: led_data

20、= 16'h1c52 ; 4'h4: led_data = 16'ha732 ; 4'h5: led_data = 16'h251f ; 4'h6: led_data = 16'h1224 ; 4'h7: led_data = 16'h3c12 ; 4'h8: led_data = 16'h1254 ; 4'h9: led_data = 16'h1fd4 ; 4'ha: led_data = 16'h4632; 4'hb: led_data = 16'h445

21、2; 4'hc: led_data = 16'h7492 ; 4'hd: led_data = 16'h0010 ; 4'he: led_data = 16'h0100 ; 4'hf: led_data = 16'h0000 ; endcase 4'h6: case(led_sel) 4'h0: led_data = 16'h4010 ; 4'h1: led_data = 16'h2210 ; 4'h2: led_data = 16'h15f0 ; 4'h3: led

22、_data = 16'h081f ; 4'h4: led_data = 16'h1610 ; 4'h5: led_data = 16'h21f0 ; 4'h6: led_data = 16'h8100 ; 4'h7: led_data = 16'h80c0 ; 4'h8: led_data = 16'h4038 ; 4'h9: led_data = 16'h4000 ; 4'ha: led_data = 16'h27ff ; 4'hb: led_data = 16&#

23、39;h1000 ; 4'hc: led_data = 16'h0c08 ; 4'hd: led_data = 16'h0310 ; 4'he: led_data = 16'h0060 ; 4'hf: led_data = 16'h0000 ; endcase 4'h7: case(led_sel) 4'h0:led_data = 16'h0000;/20 4'h1:led_data = 16'h0fe0; 4'h2:led_data = 16'h1010; 4'h3

24、:led_data = 16'h2008; 4'h4:led_data = 16'h2008; 4'h5:led_data = 16'h1010; 4'h6:led_data = 16'h0fe0; 4'h7:led_data = 16'h0000; 4'h8:led_data = 16'h0000; 4'h9:led_data = 16'h3070; 4'ha:led_data = 16'h2188; 4'hb:led_data = 16'h2208; 4&

25、#39;hc:led_data = 16'h2408; 4'hd:led_data = 16'h2808; 4'he:led_data = 16'h3070; 4'hf:led_data = 16'h0000; endcase 4'h8: case(led_sel) 4'h0:led_data = 16'h0000;/11 4'h1:led_data = 16'h0000; 4'h2:led_data = 16'h2000; 4'h3:led_data = 16'h2

26、000; 4'h4:led_data = 16'h3ff8; 4'h5:led_data = 16'h2010; 4'h6:led_data = 16'h2010; 4'h7:led_data = 16'h0000; 4'h8:led_data = 16'h0000; 4'h9:led_data = 16'h0000; 4'ha:led_data = 16'h2000; 4'hb:led_data = 16'h2000; 4'hc:led_data = 16&

27、#39;h3ff8; 4'hc:led_data = 16'h2010; 4'he:led_data = 16'h2010; 4'hc:led_data = 16'h0000; endcase 4'h9: case(LED_SEL) 4'h0:led_data = 16'h0000;/year 4'h1:led_data = 16'h0400; 4'h2:led_data = 16'h0402; 4'h3:led_data = 16'h0422; 4'h4:led_d

28、ata = 16'h0422; 4'h5:led_data = 16'h0422; 4'h6:led_data = 16'h0422; 4'h7:led_data = 16'hfffe; 4'h8:led_data = 16'h0422; 4'h9:led_data = 16'h0422; 4'ha:led_data = 16'h0422; 4'hb:led_data = 16'h07e3; 4'hc:led_data = 16'h040C; 4'hd

29、:led_data = 16'h0410; 4'he:led_data = 16'h0420; 4'hf:led_data = 16'h0440; endcase 4'ha: case(led_sel) 4'h0:led_data = 16'h0000;/11 4'h1:led_data = 16'h0000; 4'h2:led_data = 16'h2000; 4'h3:led_data = 16'h2000; 4'h4:led_data = 16'h3ff8; 4

30、'h5:led_data = 16'h2010; 4'h6:led_data = 16'h2010; 4'h7:led_data = 16'h0000; 4'h8:led_data = 16'h0000; 4'h9:led_data = 16'h0000; 4'ha:led_data = 16'h2000; 4'hb:led_data = 16'h2000; 4'hc:led_data = 16'h3ff8; 4'hd:led_data = 16'h2

31、010; 4'he:led_data = 16'h2010; 4'hf:led_data = 16'h0000; endcase 4'hb: case(led_sel) 4'h0: led_data = 16'h0000;/month 4'h1: led_data = 16'h0000; 4'h2: led_data = 16'h0000; 4'h3: led_data = 16'h0000; 4'h4: led_data = 16'h3fff; 4'h5: led_

32、data = 16'h4111; 4'h6: led_data = 16'h2111; 4'h7: led_data = 16'h0111; 4'h8: led_data = 16'h0111; 4'h9: led_data = 16'h0111; 4'ha: led_data = 16'h03ff; 4'hb: led_data = 16'h0C00; 4'hc: led_data = 16'h1000; 4'hd: led_data = 16'h2000; 4'he: led_data = 16'h4000; 4'hf: led_data = 16'h0000; endcase 4'hc: case(led_sel) 4'h0: led_data = 16'h0000;/8 4'h1: le

温馨提示

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

评论

0/150

提交评论