FPGA课程设计.docx
- 文档编号:1814248
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:20
- 大小:372.48KB
FPGA课程设计.docx
《FPGA课程设计.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
FPGA课程设计
1.设计目的:
1、熟练掌握和使用基于CPLD/FPGA的数字系统开发工具、开发流程,能
够自主进行成熟的基于CPLD/FPGA的数字系统设计,能够发现和独立解决
开发过程中遇到的问题。
2、了解时序电路FPGA的实现。
3、学习用VHDL语言来描述时序电路的过程。
4、了解LCD1602液晶显示器的工作原理。
二.设计环境:
QUARTUSH9.0软件MARS-1270CPLD实验版1602液晶
MARS-1270CPLD实验版是针对CPLD/FPGA的初中级学者设计,该板可以配合其扩展板进行相应的实验,也可以作为相关CPLD/FPGA研发的原型。
核心板简单实用扩展性好,板上提供ISP接口,并将CPLD/FPGA的部分IO引脚引出,为用户提供一个帮助用户快速开始可编程逻辑器件学习之旅的硬件平台。
3.设计要求:
要求用1602液晶显示字符;
显示内容:
学号+英文姓名;
显示方式:
流动显示,开关控制字符流动速度及方向;具有暂停和清屏
的功能;
扩展部分:
设计汉字字符及其他功能
四.设计思路及实现方法
1.下图所示1602字符液晶接口与实验板内部相连之图
上图所示是从MARS-1270CPLD实验版的手册上截取的1602与实验板相连的图,1,2,3,15,16均与实验板内部电压相连,显示时只需注意给1602的
4-14管脚赋值。
(1)1602引脚定义
1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
空脚
(2)1602实际写时每位的地址
第一行:
首地址为80H,”10000000”,最多能显示27个数;尾地址为A7H,”10100111”
第二行:
首地址为C0H,”11000000”,最多能显示27个数;尾地址为
E7H,”11100111”
(3)1602内部
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
LCD1602的工作时序可查阅其他资料
下图为CGROM中字符码与字符字模关系对照表
从下图可以看出,“A”字的对应上面高位代码为0100,对应左边低位代码为0001,合起来就是01000001,也就是41H。
可见它的代码与我们PC中的字符代码是基本一致的。
因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。
PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字
符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
(4)对DDRAM的内容和地址进行操作的指令(只介绍本次设计中涉及的一些)
一.清屏指令:
使液晶不显示任何东西
二.设定显示屏或光标移动方向指令
三.显示模式设置:
写程序时从38H开写,是使液晶处于开始状态
四.暂停及流动
指令码
功能
0
0
0
1
S
x
0
0
若S=1,则静止不动;为0,流动显示
注:
上述四个功能均在RS为0时方可写入;若RS为1,则可写入在1602上显示字符的代码;E一般选取系统时钟分频后的时钟;
2.设计思路及实现方法.
根据写1602的一般顺序:
(1)开始38H.
(2)显示模式设置.(3)显示关闭08H.(4)显示清屏01H.(5)显示光标移动设置06H.(6)显示开及光标移动设置0CH
根据这几步决定用VHDL语言中的状态机描述方式进行编写程序,与其他描述方式相比,状态机的表述丰富多样,程序层次分明,结构清晰,易读易懂;
其中,在设计程序的过程中,由于程序包含地址和显示内容,考虑用到元件例化语句,将每个地址要显示的内容存到相应的元件例化语句中去。
元件例化就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接。
五.程序源文件与设计结果分析
1.显示内容:
学号+英文姓名
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityyejing2is
Port(clk:
instd_logic;--40MHZ
Reset:
instd_logic;--rst
lcd_rs:
outstd_logic;--data/mingling(en0)
lcd_rw:
outstd_logic;--read/write(en1)
lcd_e:
bufferstd_logic;--enable(en2)
data:
outstd_logic_vector(7downto0);--//datashumaguan
key:
instd_logic;--拨码开关0
key1:
instd_logic;--拨码开关1
key2:
instd_logic--拨码开关2
);
endyejing2;
architectureBehavioralofyejing2is
constantIDLE:
std_logic_vector(10downto0):
="00000000000";--//闲置
constantCLEAR:
std_logic_vector(10downto0):
="00000000001";--//清屏
constantRETURNCURSOR:
std_logic_vector(10downto0):
="00000000010";--//光标返回
constantSETMODE:
std_logic_vector(10downto0):
="00000000100";--//输入方式--//0x06--//显示光标移动设置,当读或写一个字符后地址指针加1,且光标加1
constantSWITCHMODE:
std_logic_vector(10downto0):
="00000001000";-/显示开关--//0x0c--//开显示;不显示光标;光标不闪烁
constantSHIFT:
std_logic_vector(10downto0):
="00000011000";
--//移位调整--//0x81--//显示位移;左移
constantSETFUNCTION:
std_logic_vector(10downto0):
="00000100000";--//功能设置--//0x3C--//8位;两行显示16*2;
constantSETCGRAM:
std_logic_vector(10downto0):
="00001000000";--//字符发生存储器地址ACG
constantSETDDRAM:
std_logic_vector(10downto0):
="00010000000";--//设置DDRAM(显示数据RAM)的地址--//0x80显示数据储存器地址ADD--//0xc0显示数据储存器地址ADD第二行开头
constantREADFLAG:
std_logic_vector(10downto0):
="00100000000";--//忙标志
constantWRITERAM:
std_logic_vector(10downto0):
="01000000000";-写数据到CGRAM或者DDRAM
constantREADRAM:
std_logic_vector(10downto0):
="10000000000";--//从CGRAM或者DDRAM读数
signalstate:
std_logic_vector(10downto0);
signalcounter:
integerrange0to127;
signaldiv_counter:
integerrange0to15;
signalflag:
std_logic;
constantDIVSS:
integer:
=15;
signalchar_addr:
std_logic_vector(6downto0);
signaldata_in:
std_logic_vector(7downto0);
componentchar_ram2
port(address:
instd_logic_vector(6downto0);
data:
outstd_logic_vector(7downto0)
);
endcomponent;--元件例化语句
signalclk_int:
std_logic;
signalclkcnt:
std_logic_vector(18downto0);
constantdivcnt:
std_logic_vector(18downto0):
="1111001110001000000";--//498752
signala:
integer;
signalclkdiv:
std_logic;
signaltc_clkcnt:
std_logic;
signalk:
integer;--显示步进
signalyi:
std_logic;--显示左移还是右移
signalzanting:
std_logic;--显示暂停还是流动
begin
process(key)--该部分控制分频步进是1还是5,即是控制字符流动速度
begin
casekeyis
when'0'=>k<=1;
when'1'=>k<=5;
whenothers=>null;
endcase;
endprocess;
process(key1)—该部分控制液晶整屏左移还是右移1是左移,0右移
begin
casekey1is
when'1'=>yi<='1';
when'0'=>yi<='0';
whenothers=>null;
endcase;
endproces
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课程设计