PLD与数字系统设计实验报告.doc_第1页
PLD与数字系统设计实验报告.doc_第2页
PLD与数字系统设计实验报告.doc_第3页
PLD与数字系统设计实验报告.doc_第4页
PLD与数字系统设计实验报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

PLD与数字系统设计实验报告A组实验四:数字密码锁1 实验要求 使用Xilinx公司的Spartan3S400AN开发板上的相关模块,利用ISE开发软件完成数字密码锁的设计,要求实现如下功能: 利用实验板上的43小键盘,设计4位密码锁,当输入密码正确时,在液晶屏上显示“OK”,否则,显示“ERROR”,在输入过程中,显示输入的数据个数,当有错误的输入时,显示“ERROR”,当全部输入正确时,才显示OK。2 实验原理2.1 43数字键盘数字键盘又叫行列式键盘。用带IO口的线组成行列结构,按键设置在行列的交点上。例如用43的行列式结构可以构成12个键的键盘。实验中所用到的数字键盘原理如图1所示。图1 43数字键盘例如设置此模块的列为输入端口,行为输出端口。那么在按下某一个键时,该键所在的开关接通,由输入端口向输出端口输出一个有效电平,继而触发其他模块。2.2 LCD液晶显示模块开发板上使用的是无字库的12864LCD显示器,12864LCD显示模块是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭(但实验所用开发板上该模块实际是低电平表示亮、高电平表示灭)。存储这些点阵信息的RAM称为显示数据存储器。以下是关于显示屏的一些参数:图2 128*64 LCD控制器结构框图图3 128*64时序图图4 指令功能表图5 初始化指令流程要显示某个图形就是将相应的点阵信息写入到相应的存储单元中。图形的点阵信息可以由自己设计也可借助字模软件,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line, 063)与列号(column, 063)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress, 063)确定。每个存储单元存储8个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage, 07)和列地址(Yaddress, 063)。例如点亮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个模块,分别为数字键盘模块,LCD12864液晶显示模块和LCD字库模块。2.数字键盘模块:以一定频率按行扫描数字键盘,检测该行有无输入,若有则判断输入是什么,并传送相应信息给LCD模块;若无则继续扫描下一行。如此反复。3. 液晶显示模块:根据LCD显示模块的原理,将其控制分为指令控制部分和显示控制部分。其中使用状态机和分频器完成指令控制,每一个分频时钟周期到来时,执行状态机中的一个状态,即初始化命令或读写数据命令。4. LCD字库模块:因为实验板上的12864LCD是无字库的,故利用字模软件将要用到的字模数据保存在模块中。4.2 各模块设计实现在理解数字键盘和LCD液晶显示的使用方法后,使用Verilog语言描述出各部分要实现的功能,完成实验的要求。4.2.1 数字键盘模块的设计下面是该模块功能实现的部分Verilog源程序:always ( posedge clk or negedge rst_s ) /产生周期为1ms的控制信号,占空时间为20nsbeginif( !rst_s )beginCountA = 16d0;ENA = 1b0;endelseif( CountA = T1MS )beginCountA = 16d0;ENA = 1b1;endelsebeginCountA = CountA + 1b1;ENA = 1b0;endendalways ( posedge clk or negedge rst_s ) /数字键盘扫描,每50ms扫描一行beginif( !rst_s )beginCountB = 6d0;Key_Row = 4b0111;ENB = 1b0;endelseif( CountB = 6d49 & ENA )beginCountB = 6d0;Key_Row = Key_Row0, Key_Row3:1 ;ENB = 1b1;endelse if( ENA )beginCountB = CountB + 1b1;ENB = 1b0;endelseENB = 1b0;endalways ( posedge clk ) /判断每行是否有数据输入,是什么数据beginif( Key_Row = 4b0111 & ENB )beginif( !Key_Column2 )begin w_flag=1;key_get = 1;endelse if( !Key_Column1 )begin w_flag=1;key_get = 2;endelse if( !Key_Column0 )begin w_flag=1;key_get = 3;endelsew_flag=0;endelse if( Key_Row = 4b1011 & ENB )beginif( !Key_Column2 )begin w_flag=1;key_get = 4;endelse if( !Key_Column1 )begin w_flag=1;key_get = 5;endelse if( !Key_Column0 )begin w_flag=1;key_get = 6;endelsew_flag=0;endelse if( Key_Row = 4b1101 & ENB )beginif( !Key_Column2 )begin w_flag=1;key_get = 7;endelse if( !Key_Column1 )begin w_flag=1;key_get = 8;endelse if( !Key_Column0 )begin w_flag=1;key_get = 9;endelsew_flag=0;endelse if( Key_Row = 4b1110 & ENB )beginif( !Key_Column2 )begin w_flag=1;key_get = 10;end/10代表“*”else if( !Key_Column1 )begin w_flag=1;key_get = 0;endelse if( !Key_Column0 )begin w_flag=1;key_get = 11;end/11代表“#”elsew_flag=0;endend4.2.2 显示模块的设计always(posedge clk_lcd )beginif(!rst_s)beginstate=IDLE;data=8hzz;char_cnt=8h00;flag=1b1;cle_cnt=9d0;mi_cnt=6d0;endelsebegincase(state)0: /初始化Function Setbeginstate=state+1;data=8h30;rst_lcd=0;end1: beginstate=state+1;data=8h3f;rst_lcd=1;end2:beginstate=state+1;data=8h3f; end3: /初始化Display ON/OFF Controlbeginstate=state+1;data=8h0c;end4: /初始化Display Clearbeginstate=state+1;data=8h01;end5: /初始化Entry Mode Setbeginstate=state+1;data=8h06;end6: /页初始化beginstate=state+1;if(char_cnt=0)|(char_cnt=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;end7: /列初始化beginstate=state+1;data=0&char_cnt=144&char_cnt=176&char_cnt=255)begincs1=1;cs2=0&char_cnt=144&char_cnt=176&char_cnt=215)beginchar_cnt=char_cnt+1b1;data=data_disp;if(char_cnt=63)|(char_cnt=159)|(char_cnt=215)state=6;elsestate=64&char_cnt=160&char_cnt=216&char_cnt=255)beginchar_cnt=char_cnt+1b1;data=data_disp;if(char_cnt=127)state=6;else if(char_cnt=175)|(char_cnt=255)state=STOP1;elsestate=128&char_cnt=143)begincs1=0;cs2=128&char_cnt=135)beginchar_cnt=char_cnt+1b1;data=data_disp;if(char_cnt=135)state=6;elsestate=136&char_cnt=143)beginchar_cnt=char_cnt+1b1;data=data_disp;if(char_cnt=143)state=9;elsestate=8;endendend9:/判断数字键盘收到的第一个密码是否正确beginif(w_flag=0)beginstate=9;cs1=1;cs2=1;data=8h3f; endelsebeginif(di_mi=0)&(pw0=key_get) state=13; elsebeginstate=6;char_cnt=176;endendend10: /判断数字键盘收到的第二个密码是否正确beginif(w_flag=0|key_get=pw0)beginstate=10;cs1=1;cs2=1;data=8h3f; endelsebeginif(di_mi=1)&(pw1=key_get) state=13; elsebeginstate=6;char_cnt=176;endendend11:/判断数字键盘收到的第三个密码是否正确beginif(w_flag=0|key_get=pw1)beginstate=11;cs1=1;cs2=1;data=8h3f; endelse beginif(di_mi=2)&(pw2=key_get) state=13; elsebeginstate=6;char_cnt=176;endendend12: /判断数字键盘收到的第四个密码是否正确beginif(w_flag=0|key_get=pw2)beginstate=12;cs1=1;cs2=1;data=8h3f; endelsebeginif(di_mi=3)&(pw3=key_get) state=state+1; elsebeginstate=6;char_cnt=176;endendend13:/显示数字页初始化beginstate=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;end14:/显示数字列初始化beginstate=state+1;if(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;end15:/写数字数据给LCDbegincs1=0;cs2=0&mi_cnt=7)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=7)state=13;elsestate=8&mi_cnt=15)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=15)beginstate=10;di_mi=2b01;endelsestate=16&mi_cnt=23)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=23)state=13;elsestate=24&mi_cnt=31)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=31)beginstate=11;di_mi=2b10;endelsestate=32&mi_cnt=39)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=39)state=13;elsestate=40&mi_cnt=47)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=47)beginstate=12;di_mi=2b11;endelsestate=48&mi_cnt=55)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=55)state=13;elsestate=56&mi_cnt=63)beginmi_cnt=mi_cnt+1b1;data=mi_disp;if(mi_cnt=63)beginstate=state+1;char_cnt=144;di_mi=2b00;endelsestate=WRITERAM1;endendalways(mi_cnt)begincase(mi_cnt)6h00:mi_disp=8h00; 6h01:mi_disp=8hE0; 6h02:mi_disp=8h10; 6h03:mi_disp=8h08; 6h04:mi_disp=8h08; 6h05:mi_disp=8h10; 6h06:mi_disp=8hE0; 6h07:mi_disp=8h00;6h08:mi_disp=8h00;6h09:mi_disp=8h0F;6h0a:mi_disp=8h10;6h0b:mi_disp=8h20;6h0c:mi_disp=8h20;6h0d:mi_disp=8h10;6h0e:mi_disp=8h0F;6h0f:mi_disp=8h00;6h10:mi_disp=8h00; 6h11:mi_disp=8h10; 6h12:mi_disp=8h10; 6h13:mi

温馨提示

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

评论

0/150

提交评论