FPGA-Verilog程序设计-lcd.doc_第1页
FPGA-Verilog程序设计-lcd.doc_第2页
FPGA-Verilog程序设计-lcd.doc_第3页
FPGA-Verilog程序设计-lcd.doc_第4页
FPGA-Verilog程序设计-lcd.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

西南交通大学本科毕业设计(论文) 第II页哈尔滨工业大学大学EDA实验-利用LCD显示英文字年 级: 学 号: 姓 名: 专 业: 电气工程及其自动化 指导老师: 二零一三年十一月 西南交通大学本科毕业设计(论文) 第V页 大学本科毕业设计(论文)课 程 设 计 任 务 书班 级 学生姓名 学 号 专 业 电气工程及其自动化 题 目 在FPGA上利用LCD显示英文字 一、 设计任务及要求 要求同学们自己查找或编写一个实验程序,并仿真将最后的实验结果在FPGA开发板上显示出来。如程序为在网上查找需要弄清楚每段程序所代表的内容,及程序的语法。 二、 应完成的硬件或软件实验 利用Quatusii编写程序和modelsim软件进行仿真程序,最后在FPGA开发板上显示出实验内容。 三、 应交出的设计文件及实物(包括设计论文、程序清单或磁盘、实验装置或产品等) 上交报告电子版和纸质版各一份以及程序附件发至老师邮箱 摘 要以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。本实验要求通过verilog语言,在软件Quatusii上编写程序,并利用modelsim软件进行仿真,最终在fpga开发板的液晶显示器上显示出英文字体。关键词:fpga; lcd; 显示英文 1.1 完整的程序内容 /本实验是用LCD1602显示英文。(LCD带字库)module lcd(clk, rs, rw, en,dat); input clk; /系统时钟输入50M output 7:0 dat; /LCD的8位数据口 output rs,rw,en; /LCD的控制脚 reg e; reg 7:0 dat; reg rs; reg 15:0 counter; reg 4:0 current,next; reg clkr; reg 1:0 cnt; parameter set0=4h0; parameter set1=4h1; parameter set2=4h2; parameter set3=4h3; parameter dat0=4h4; parameter dat1=4h5; parameter dat2=4h6; parameter dat3=4h7; parameter dat4=4h8; parameter dat5=4h9; parameter dat6=4hA; parameter dat7=4hB; parameter dat8=4hC; parameter dat9=4hD; parameter dat10=4hE; parameter dat11=5h10; parameter nul=4hF; always (posedge clk) begin counter=counter+1; if(counter=16h000f) clkr=clkr; end always (posedge clkr) begin current=next; case(current) set0: begin rs=0; dat=8h31; next=set1; end /*设置8位格式,2行,5*7* set1: begin rs=0; dat=8h0C; next=set2; end /*整体显示,关光标,不闪烁*/ set2: begin rs=0; dat=8h6; next=set3; end /*设定输入方式,增量不移位*/ set3: begin rs=0; dat=8h1; next=dat0; end /*清除显示*/ /上面是LCD的初始化 dat0: begin rs=1; dat=8h3C; next=dat1; end dat1: begin rs=1; dat=F; next=dat2; end dat2: begin rs=1; dat=P; next=dat3; end dat3: begin rs=1; dat=G; next=dat4; end dat4: begin rs=1; dat=A; next=dat5; end dat5: begin rs=1; dat=8h3E; next=dat6; end dat6: begin rs=1; dat=G; next=dat7; end dat7: begin rs=1; dat=O; next=dat8; end dat8: begin rs=1; dat=O; next=dat9; end dat9: begin rs=1; dat=D; next=dat10; end dat10: begin rs=1; dat=!; next=dat11; end dat11: begin rs=1; dat=!; next=nul; end /上面是在这12个状态中要显示的字符 FPGA GOOD! nul: begin rs=0; dat=8h00; /行一遍 然后 把液晶的E 脚 拉高 if(cnt!=2h2) if(cnt!=2h2) begin e=0;next=set0;cnt=cnt+1; end else begin next=nul; e=1; end end default: next=set0; endcase end assign en=clkr|e; assign rw=0; assign on=1; assign blon=1; endmodule 1.2 各段程序意义的声明1.2.1以下为程序的首部分,各变量类型的声明,是编写每个程序的必要部分:module lcd(clk, rs, rw, en,dat); input clk; /系统时钟输入50M output 7:0 dat; /LCD的8位数据口 output rs,rw,en; /LCD的控制脚 reg e; reg 7:0 dat; reg rs; reg 15:0 counter; reg 4:0 current,next; reg clkr; reg 1:0 cnt; 1.2.2程序中将要用到的常量的声明,为方便在接下来的程序中将要用到这些变量时重复表示的麻烦和修改其中一个值时的繁琐,因此进行如下定义:parameter set0=4h0; parameter set1=4h1; parameter set2=4h2; parameter set3=4h3; parameter dat0=4h4; parameter dat1=4h5; parameter dat2=4h6; parameter dat3=4h7; parameter dat4=4h8; parameter dat5=4h9; parameter dat6=4hA; parameter dat7=4hB; parameter dat8=4hC; parameter dat9=4hD; parameter dat10=4hE; parameter dat11=5h10; parameter nul=4hF; 1.2.3以下为分频段落:always (posedge clk) begin counter=counter+1; if(counter=16h000f) clkr=clkr; end 1.2.4接下来为lcd的初始化程序,用到了case语句:always (posedge clkr) begin current=next; case(current) set0: begin rs=0; dat=8h31; next=set1; end /*设置8位格式,2行,5*7* set1: begin rs=0; dat=8h0C; next=set2; end /*整体显示,关光标,不闪烁*/ set2: begin rs=0; dat=8h6; next=set3; end /*设定输入方式,增量不移位*/ set3: begin rs=0; dat=8h1; next=dat0; end /*清除显示*/ 1.2.5以下程序为在FPGA开发板上显示“FPGA GOOD”:dat0: begin rs=1; dat=8h3C; next=dat1; end dat1: begin rs=1; dat=F; next=dat2; end dat2: begin rs=1; dat=P; next=dat3; end dat3: begin rs=1; dat=G; next=dat4; end dat4: begin rs=1; dat=A; next=dat5; end dat5: begin rs=1; dat=8h3E; next=dat6; end dat6: begin rs=1; dat=G; next=dat7; end dat7: begin rs=1; dat=O; next=dat8; end dat8: begin rs=1; dat=O; next=dat9; end dat9: begin rs=1; dat=D; next=dat10; end dat10: begin rs=1; dat=!; next=dat11; end dat11: begin rs=1; dat=!; next=nul; end 1.2.6以下程序将E脚电平拉高,并返回继续执行前段程序:nul: begin rs=0; dat=8h00; if(cnt!=2h2) if(cnt!=2h2) begin e=0;next=set0;cnt=cnt+1; end else begin next=nul; e=1; end end default: next=set0; endcase end assign en=clkr|e; assign rw=0; assign on=1; assign blon=1; endmodule 1.3 程序意义说明该程序目的在于实现在fpga开发板的lcd上显示英文字体,用Quatusii进行verilog语言的程序编写,并用modelsim软件进行仿真,然后进行管脚的分配,最后下载在fpga的开发板上进行试验结果的观察。改程序并不复杂,在程序中用到了大量的case循环语句,进行lcd的初始化和显示英文字符,在初始化前首先进行了对时钟的分频,以保证显示的稳定。1.4 实验中遇到的问题及解决办法 第一次将实验程序下载到开发板上并进行观察时发现,lcd的显示屏上应显示的“FPGA GOOD”只能在下载的过程中在开发板上显示,下载完成后即消失,经老师的检查发现需要在程序的最后添加上“assign on=1;assign blon=1;”即可,因为lcd的电路原理要求在高电平时才能显示,在下载

温馨提示

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

评论

0/150

提交评论