ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:454.13KB ,
资源ID:7738435      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7738435.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PLD与数字系统设计实验报告剖析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PLD与数字系统设计实验报告剖析.docx

1、PLD与数字系统设计实验报告剖析PLD与数字系统设计实验报告A组实验四:数字密码锁1 实验要求 使用Xilinx公司的Spartan3S400AN开发板上的相关模块,利用ISE开发软件完成数字密码锁的设计,要求实现如下功能: 利用实验板上的43小键盘,设计4位密码锁,当输入密码正确时,在液晶屏上显示“OK”,否则,显示“ERROR”,在输入过程中,显示输入的数据个数,当有错误的输入时,显示“ERROR”,当全部输入正确时,才显示OK。2 实验原理2.1 43数字键盘数字键盘又叫行列式键盘。用带IO口的线组成行列结构,按键设置在行列的交点上。例如用43的行列式结构可以构成12个键的键盘。实验中所

2、用到的数字键盘原理如图1所示。图1 43数字键盘例如设置此模块的列为输入端口,行为输出端口。那么在按下某一个键时,该键所在的开关接通,由输入端口向输出端口输出一个有效电平,继而触发其他模块。2.2 LCD液晶显示模块开发板上使用的是无字库的12864LCD显示器,12864LCD显示模块是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭(但实验所用开发板上该模块实际是低电平表示亮、高电平表示灭)。存储这些点阵信息的RAM称为显示数据存储器。以下是关于显示屏的一些参数:图2 128*64 LCD控制器结构框图图3 128*64时序图图4

3、指令功能表图5 初始化指令流程要显示某个图形就是将相应的点阵信息写入到相应的存储单元中。图形的点阵信息可以由自己设计也可借助字模软件,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line, 063)与列号(column, 063)确定。512*8 bits RAM中某个存储单元的地址

4、由页地址(Xpage,07)和列地址(Yaddress, 063)确定。每个存储单元存储8个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage, 07)和列地址(Yaddress, 063)。例如点亮

5、128*64的屏中(50, 30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址50除以8取整得6,取余得2,该点在RAM中页地址为6,在字节中的序号为2;所以将二进制数据11111101写入Xpage=6,Yaddress=29的存储单元中即点亮(50, 30)上的液晶点。3 实验仪器1.XUP(FPGA:spartan3S400AN)实验开发板2.安装ISE软件的电脑4 实验主要操作步骤4.1 实验设计思想实验采用分层次设计的方法,用硬件描述语言分别实现数字键盘数据的发送接收功能及液晶显示的功能模块,具体方法如下:1. 通过ISE开发工具,新建3个模块,

6、分别为数字键盘模块,LCD12864液晶显示模块和LCD字库模块。2.数字键盘模块:以一定频率按行扫描数字键盘,检测该行有无输入,若有则判断输入是什么,并传送相应信息给LCD模块;若无则继续扫描下一行。如此反复。3. 液晶显示模块:根据LCD显示模块的原理,将其控制分为指令控制部分和显示控制部分。其中使用状态机和分频器完成指令控制,每一个分频时钟周期到来时,执行状态机中的一个状态,即初始化命令或读写数据命令。4. LCD字库模块:因为实验板上的12864LCD是无字库的,故利用字模软件将要用到的字模数据保存在模块中。4.2 各模块设计实现在理解数字键盘和LCD液晶显示的使用方法后,使用Veri

7、log语言描述出各部分要实现的功能,完成实验的要求。4.2.1 数字键盘模块的设计下面是该模块功能实现的部分Verilog源程序:always ( posedge clk or negedge rst_s ) /产生周期为1ms的控制信号,占空时间为20ns begin if( !rst_s ) begin CountA = 16d0; ENA = 1b0; end else if( CountA = T1MS ) begin CountA = 16d0; ENA = 1b1; end else begin CountA = CountA + 1b1; ENA = 1b0; end end a

8、lways ( posedge clk or negedge rst_s ) /数字键盘扫描,每50ms扫描一行 begin if( !rst_s ) begin CountB = 6d0; Key_Row = 4b0111; ENB = 1b0; end else if( CountB = 6d49 & ENA ) begin CountB = 6d0; Key_Row = Key_Row0, Key_Row3:1 ; ENB = 1b1; end else if( ENA ) begin CountB = CountB + 1b1; ENB = 1b0; end else ENB = 1b

9、0; end always ( posedge clk ) /判断每行是否有数据输入,是什么数据 begin if( Key_Row = 4b0111 & ENB ) begin if( !Key_Column2 ) begin w_flag=1;key_get = 1;end else if( !Key_Column1 ) begin w_flag=1;key_get = 2;end else if( !Key_Column0 ) begin w_flag=1;key_get = 3;end else w_flag=0; end else if( Key_Row = 4b1011 & ENB

10、 ) begin if( !Key_Column2 ) begin w_flag=1;key_get = 4;end else if( !Key_Column1 ) begin w_flag=1;key_get = 5;end else if( !Key_Column0 ) begin w_flag=1;key_get = 6;end else w_flag=0; end else if( Key_Row = 4b1101 & ENB ) begin if( !Key_Column2 ) begin w_flag=1;key_get = 7;end else if( !Key_Column1

11、) begin w_flag=1;key_get = 8;end else if( !Key_Column0 ) begin w_flag=1;key_get = 9;end else w_flag=0; end else if( Key_Row = 4b1110 & ENB ) begin if( !Key_Column2 ) begin w_flag=1;key_get = 10;end /10代表“*” else if( !Key_Column1 ) begin w_flag=1;key_get = 0;end else if( !Key_Column0 ) begin w_flag=1

12、;key_get = 11;end /11代表“#” else w_flag=0; end end4.2.2 显示模块的设计always(posedge clk_lcd ) begin if(!rst_s) begin state=IDLE; data=8hzz; char_cnt=8h00; flag=1b1; cle_cnt=9d0; mi_cnt=6d0; end else begin case(state) 0: /初始化Function Set begin state=state+1; data=8h30; rst_lcd=0; end 1: begin state=state+1;

13、 data=8h3f; rst_lcd=1; end 2: begin state=state+1; data=8h3f; end 3: /初始化Display ON/OFF Control begin state=state+1; data=8h0c; end 4: /初始化Display Clear begin state=state+1; data=8h01; end 5: /初始化Entry Mode Set begin state=state+1; data=8h06; end 6: /页初始化 begin state=state+1; if(char_cnt=0)|(char_cn

14、t=128) data=8hb8; else if(char_cnt=64)|(char_cnt=136) data=8hb9; else if(char_cnt=144)|(char_cnt=176) data=8hbc; else if(char_cnt=160)|(char_cnt=216) data=8hbd; end 7: /列初始化 begin state=state+1; data=0&char_cnt=144&char_cnt=176&char_cnt=255) begin cs1=1; cs2=0&char_cnt=144&char_cnt=176&char_cnt=215)

15、 begin char_cnt=char_cnt+1b1; data=data_disp; if(char_cnt=63)|(char_cnt=159)|(char_cnt=215) state=6; else state=64&char_cnt=160&char_cnt=216&char_cnt=255) begin char_cnt=char_cnt+1b1; data=data_disp; if(char_cnt=127) state=6; else if(char_cnt=175)|(char_cnt=255) state=STOP1; else state=128&char_cnt=

16、143) begin cs1=0; cs2=128&char_cnt=135) begin char_cnt=char_cnt+1b1; data=data_disp; if(char_cnt=135) state=6; else state=136&char_cnt=143) begin char_cnt=char_cnt+1b1; data=data_disp; if(char_cnt=143) state=9; else state=8; end end end 9: /判断数字键盘收到的第一个密码是否正确 begin if(w_flag=0) begin state=9; cs1=1;

17、 cs2=1; data=8h3f; end else begin if(di_mi=0)&(pw0=key_get) state=13; else begin state=6; char_cnt=176; end end end 10: /判断数字键盘收到的第二个密码是否正确 begin if(w_flag=0|key_get=pw0) begin state=10; cs1=1; cs2=1; data=8h3f; end else begin if(di_mi=1)&(pw1=key_get) state=13; else begin state=6; char_cnt=176; end

18、 end end 11: /判断数字键盘收到的第三个密码是否正确 begin if(w_flag=0|key_get=pw1) begin state=11; cs1=1; cs2=1; data=8h3f; end else begin if(di_mi=2)&(pw2=key_get) state=13; else begin state=6; char_cnt=176; end end end 12: /判断数字键盘收到的第四个密码是否正确 begin if(w_flag=0|key_get=pw2) begin state=12; cs1=1; cs2=1; data=8h3f; en

19、d else begin if(di_mi=3)&(pw3=key_get) state=state+1; else begin state=6; char_cnt=176; end end end 13: /显示数字页初始化 begin state=state+1; if(mi_cnt=0)|(mi_cnt=16)|(mi_cnt=32)|(mi_cnt=48) data=8hb8; else if(mi_cnt=8)|(mi_cnt=24)|(mi_cnt=40)|(mi_cnt=56) data=8hb9; end 14: /显示数字列初始化 begin state=state+1; i

20、f(mi_cnt=0)|(mi_cnt=8) data=8h50; else if(mi_cnt=16)|(mi_cnt=24) data=8h58; else if(mi_cnt=32)|(mi_cnt=40) data=8h60; else if(mi_cnt=48)|(mi_cnt=56) data=8h68; end 15: /写数字数据给LCD begin cs1=0; cs2=0&mi_cnt=7) begin mi_cnt=mi_cnt+1b1; data=mi_disp; if(mi_cnt=7) state=13; else state=8&mi_cnt=15) begin mi_cnt=mi_cnt+1b1; data=mi_disp; if(mi_cnt=15) begin state=10; di_mi=2b01; end else state=15; end

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1