基于FPGA的verilog的电子密码锁设计_第1页
基于FPGA的verilog的电子密码锁设计_第2页
基于FPGA的verilog的电子密码锁设计_第3页
基于FPGA的verilog的电子密码锁设计_第4页
基于FPGA的verilog的电子密码锁设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、蚁 eda技术 荿 设计报告膆袂肁肀题 目: 芇学 院: 芄专 业: 蒀班 级: 螀姓 名: 肄学 号: 莃 罿薀肆螅薃肇膇袄肂螇羄一.引言羂蒂1.1 电子密码锁的现状蒈随着我国对外开放的不断深入,高档建筑发展很快,高档密码锁具市场的前景乐观。我国密码锁具行业对密码锁具高新技术的投入正逐年增大,高档密码锁的市场需求也逐年增加。在安防工程中,锁具产品是关系到整个系统安全性的重要设备,所以锁具产品的优劣也关系了整个安防工程的质量和验收。肆目前,市场上比较先进的智能电子密码锁分别有:ic卡电子密码锁、射频卡式电子密码锁、红外遥控电子密码锁、指纹识别电子密码锁和瞳孔识别电子密码锁等。ic卡电子密码锁成

2、本低,体积小,卡片本身无须电源等优点占领了一定的市场份额,但是由于有机械接触,会产生接触磨损,而且使用不太方便,在一定程度上限制了它的应用;射频卡式电子密码锁是非接触式电子密码锁,成本也不太高,体积跟ic卡密码锁相当,卡片使用感应电源,重量很轻,技术成熟,受到了广泛的欢迎,但是与ic卡电子密码锁相比,成本偏高;指纹识别电子密码锁和瞳孔识别电子密码锁可靠性很高,安全性是目前应用系统中最高的,但是成本高昂,还没进入大众化使用阶段。莄在国外,美国、日本、德国的电子密码锁保密性较好,并结合感应卡技术,生物识别技术,使电子密码锁系统得到了飞跃式的发展。这几个国家的密码锁识别的密码更复杂,并且综合性比较好

3、,已经进入了成熟期,出现了感应卡式密码锁,指纹式密码锁,虹膜密码锁,面部识别密码锁,序列混乱的键盘密码锁等各种技术的系统,它们在安全性,方便性,易管理性等方面都各有特长,新型的电子密码锁系统的应用也越来越广。袁基于fpga的电子密码锁是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。芈在数字技术网络技术飞速发展的今天,电子密码锁技术得到了迅猛的发展。它早已超越了单纯的门道及钥匙管

4、理,逐渐发展成为一套完整的出入管理系统。它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。在该系统的基础上增加相应的辅助设备可以进行电梯控制、车辆进出控制,物业消防监控、餐饮收费、私家车库管理等,真正实现区域内一卡智能管理。肇 目前使用的电子密码锁大部分是基于单片机技术, 以单片机为主要器件, 其编码器与解码器的生成为软件方式。在实际应用中, 由于程序容易跑飞, 系统的可靠性能较差。基于fpga的电子密码锁已经是现代生活中经常用到的工具之一,用于各类保险柜、房门、防盗门等等。用电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。由于采用的是可编程逻辑器

5、件fpga,使得系统有相当大的灵活性,随时可以进行硬件升级、扩展,而且系统设计完善以后还可以将主控的fpga固化成一片asic,那么这块asic就可以作为专用的数字密码锁芯片。而且由于硬件可升级,还可随时增加密码位数或增加新的功能,使得密码锁有更高的安全性、可靠性和方便性。蒃1.2 主要完成的工作莀课题主要解决系统硬件和软件两方面的问题。硬件方面要解决fpga可编程器件与其外围电路的接口设计的问题;软件方面主要问题是利用verilog hdl语言完成基于fpga的电子密码锁的编程问题。除此之外,程序还要完成基本的密码开锁功能,并通过扬声器长时间鸣叫报警。本设计是由fpga可编程逻辑器件编程实现

6、的控制电路,具体有按键指示、输入错误提示、密码有效指示、控制开锁、控制报警等功能。它具有安全可靠、连接方便、简单易用、结构紧凑、系统可扩展性好等特点。1、2、 羈系统硬件设计袅2.1 设计方案袅2.1.1 功能需求分析螀本系统主要集中在以fpga以核心外围扩展设计,整个电路主要电子锁具的组成框图是以可编程逻辑器件(fpga)为核心,配以相应硬件电路,设计一个密码锁,密码为一个4位的十进制数,密码固化在锁内,用户输入密码正确,则开锁(绿灯亮);若不正确,则报警(红灯亮)若用户输入密码不正确,可以按复位键重新输入密码。 蝿2.1.2 系统实现方案的论证比较羆方案一 :采样台湾凌阳科技有限公司推出的

7、以凌阳自主研发的spce061a芯片为主控芯片,用一条下载线连接到计算机就可以实现在线仿真、在线调试、在线下载,低廉的价格保证了系统可靠开发;此外,61板具有soc概念、dsp功能和语音特色,为电子密码锁的语音报警提供了方便,但是基于单片机设计的密码锁外围电路比较复杂,系统可靠性差,密码的数量少,尤其是系统的程序不够稳定,功率较大,需要专门的电源供电,所以不采用这个方案。 羃 方案二:设计一种基于fpga的电子密码锁的设计,用fpga设计的系统已经是现代生活中经常用到的工具之一,通过键盘输入密码,用fpga作为主控芯片,用数码管显示输入的数字,如果出现错误便通过报警电路发出报警,主控芯片又可分

8、为按键处理部分、控制部分和译码显示部分用电子密码锁代替传统的机械式密码锁。由于采用的是可编程逻辑器件fpga,使得系统有相当大的灵活性,随时可以进行硬件升级、扩展。而且系统设计完善以后还可以将主控的fpga固化成一片asic,那么这块asic就可以作为专用的数字密码锁芯片。蒃方案的论证比较葿 在实际应用中, 由于程序容易跑飞, 系统的可靠性能较差,而基于fpga设计的电子密码锁克服了基于单片机设计密码锁的缺点。基于上述比较以上两种方案,根据系统设计要求,采用方案二。羇2.1.3 方案的总体设计肂原理框图袂本系统由主控芯片(fpga),键盘,显示电路,报警电路和开/关门电路组成,而主控芯片又可分

9、为按键处理部分,控制部分和译码显示部分。系统原理框系统原理框图如图2.1.3所示:艿螅图2.1.3 总体框架蒄节总体设计原理羀本系统有8个按键,k0,k1,k2,k3,k4,k5代表数字0-9共10个数字和1个确认键,1个复位键。密码长度为四位,并且固化在锁内,输入正确密码后,按确认键即可开门,本系统设置为绿灯亮。在输入密码的过程中,当用户键入错误密码时,报警灯红灯亮。按下复位键,可使报警停止,同时清除所有密码显示。袆每输入一位数字,密码在数码管上的显示左移一位。即上电后,按确认键即可开门。门开后可通过锁门按钮关门,门关上后要再次输入密码才能开门。在输入密码的过程中,当用户键入错误密码时,系统

10、就会报警,由扬声器发出报警声,当连续三次出现密码错误时,则系统会长时间报警不止,这时必须按警报复位键方可停止。薂2.2 主控模块螁2.2.1 主控芯片ep4ce6e22c8的介绍螀主控芯片采用acex1k 系列的ep4ce6e22c8。cyclone iv系列是当今altera cpld 中应 用前景最好的器件系列之一,该系列的fpga 由逻辑阵列块lab(logic array block)、 嵌入式阵列块eab(embedded array block)、快速互联以及io 单元构成,每个逻辑阵列块 包含8 个逻辑单元le(logic element)和一个局部互联。每个逻辑单元则由一个4

11、输入查找 表(lut)、一个可编程触发器、快速进位链、级连链组成,多个lab 和多个eab 则可通过快速通道互相连接3。eab 是cyclone iv系列器件在结构设计上的一个重要部件,他是输入 端口和输出端口都带有触发器的一种灵活的ram 块,其主要功能是实现一些规模不太大的 fifo、rom、ram 和双端口ram 等。袇2.3 键盘模块羅按键方式分为8个独立按键,k0,k1,k2,k3,k4,k5代表数字0-9共10个数字和1个确认键,1个复位键。考虑到按键数目不够,采用了一位按键作为功能转换按键;即前5位按键输入04,同时按下功能转换按键时,按键04即转换为按键59,这就弥补了按键数目

12、的不足。最后两位按键设定为确认输入按键和复位按键。密码输入完成后可以按确认键检验密码的正误,报警、输入错误或者其他情况可以按复位按键重新输入。按键上拉,当io口被拉高电平,当io口检测到高电平时,表示按键按下。部分按键控制电路如图2.3所示:膁蒁图2.3 蚅2.4 显示模块肃led显示块是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是7段led,本设计将采用共阳极。共阳极led显示块的发光二极管与阳极并接。薀数码管显示块中共有8个发光二极管,其中7个发光二极管构成七笔字形“8”,1个发光二极管构成小数点。7段显示块与fpga接口非常容易。只要将一个8位并行输出与显示块的发光二极

13、管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如表5.1所示。通常将控制发光二极管的8位字节数据称为段选码。共阳极与共阴极的段选码互为补数。羇螆膂罿蚇袈薄蚃蒈显示字符蚅共阴极段选码蚂共阳极段选码膂显示字符膈共阴极段选码蚆共阳极段选码肅 0薁 3fh袈 c0h螈 c膃 39h羁 c6h虿 1薅 06h蒆 f9h莀 d荿 5eh薆 a1h蚄 2袀 5bh膀 a4h蚈 e螂 79h薃 86h袀 3蒅 4fh肅 b0h羂 b蚀 7ch蒇 83h膃 4莂 66h肇 99h薈 f薅 71h螁 8eh袇 5莅 6dh蚄 92h芀 p薇 73h蒇 8ch螂 6蚀 7dh莈 82h蒈

14、 u膅 3eh聿 c1h肈 7芅 07h芃 f8h螃 l衿 31h莇 ceh蚅 8膂 7fh蕿 80h膄 y螄 6eh莇 91h肅 9羁 6fh蚈 90h螇 螆 羃羀 a芆 77h薆 88h螀腿蚅芆表2.4 led显示块功能表袂蒁三、芯片主控设计荿3.1 fpga有限状态机螃本设计是通过fpga有限状态机来实现,设计有限状态机最开始的工作时要确定电路,包括哪些状态,比如某个电路包括四个状态,s0,s1,s2,s3。然后对所有状态给出一个状态编码,比如为状态s0赋予编码00,为状态s1赋予编码01,为状态s2赋予编码10,为状态s3赋予编码11。状态编码是状态的标识,保存在寄存器当中,对于此编码

15、形式,只需一个2位的寄存器就可以了。袃fsm encoding style 主要有: binary encoding one hot encoding gray encoding 二进制与一位热码的特性比较:蕿 表3.1 二进制与一位热码的特性比较螈 状态机可以认为是组合逻辑和寄存器逻辑的特殊租户,它一般包括两个部分:组合逻辑部分和寄存器逻辑部分。寄存器用于存储状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信号有关,而且还有寄存器当前所处的状态有关。 根据输出信号产生方法的不同,状态机可以分成两类:mealy型和moore型。moore型状态机的输出只是当前状态

16、的函数,而moore型状态机的输出只是当前状态的函数,而mealy型状态机的输出则是当前状态和当前输入状态的函数。其原理如下两图:蒃蚀螈膈3.2 设计流程芃本次密码锁的设计,有限状态机应该包括以下状态:密码为输入前的等待状态、输入密码时的等待状态、输入密码正确时的通过状态、输入密码错误时的警报状态。螂肀图3.3 主有效状态机的状态转换图蚇其中当密码输入时又可包括以下状态,正常输入状态、异常输入状态(包括命令状态)、输入确认状态。羄下面的图(图是在程序编译后,tools-netlist_vewers-rtl vewer得到的)表示了密码输入的时候的次状态机,表示了4个密码输入的顺序状态,以及输入

17、完成后的等待确认状态。袃腿肆图3.4次有效状态机的状态转换螄3.3 软件设计总rtc级图薀薁3.4 状态编码蒆状态编码主要有二进制编码、格雷编码和一位独热编码等方式。格雷编码时,相邻状态每次只有一个比特位产生变化,这样减少了瞬变的次数,也减少了产生毛刺和一些状态的可能。蒅采用一位独热编码,虽然多用了触发器,当可以有效节省和简化组合电路。 对于寄存器数量多而逻辑相对缺乏的fpga器件来说,采用一位独热编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。蚂将产生状态的组合逻辑电路和用于保存状态的寄存器分别写在不同的always块中。其中主要包括:输出控制部分、警报计时部分、锁打开后的

18、计时部分、比较密码部分、记录密码部分和记录错误次数的部分虿3.5 密码的输入腿本次密码锁的密码输入采用fpga芯片上的8位单个按键,考虑到按键数目不够,采用了一位按键作为功能转换按键;即前5位按键输入04,同时按下功能转换按键时,按键04即转换为按键59,这就弥补了按键数目的不足。最后两位按键设定为确认输入按键和复位按键。密码输入完成后可以按确认键检验密码的正误,报警、输入错误或者其他情况可以按复位按键重新输入。芅另外由于按键的时候同时会引起状态机的转换,所以如果按键的时候对按键判断次数过多会产生状态的过快转换,记录的密码和数码管的显示就同时会出现错误,因此在按键部分加入了消除多重按键的程序,

19、只检测一次按键的下降沿,解决了这个问题。螃3.6 密码的记录与比较螈程序设定了一个寄存器用来记录输入的密码。当次有效状态机(即密码输入的状态机)发生转换并且有密码输入时,程序会记录下输入的密码在寄存器的其中4位里面,最后次有效状态转换到确认密码的状态时,会将记录下的密码与固化在锁内的密码进行对比,正确即将主状态机转换到通过阶段,错误则将状态机转换到报警阶段。其中正确错误的状态转换是通过控制相应的标志位实现的。 薈3.7 密码的显示羅密码显示采用数码管动态扫描显示,初始时显示密码为4位0,当输入密码后数码管的第一位、第二位、第三位、第四位会依次显示输入的密码,错误后复位可以重新输入。密码显示采用

20、的是记录密码的寄存器的数据,显示扫描的扫描时间设置为1ms左右,这样显示不会出现闪烁或者残影。4、5、 薁程序仿真膀肈下前面的输入cmd的编码: /输入的数字编码 09,enter,cancel one=4b0001, two=4b0010,three=4b0011,four=4b0100,five=4b0101, six=4b0110,seven=4b0111,eight=4b1000,nine=4b1001, zero=4b1000,enter=4b1010,cancel=4b1011; 可以看到,在复位以后,输入第1,2,3,4个密码(依次为1111)后,passed变成高电平蚆 当过了

21、一定的时间后,passed变成低电平,重新计入键盘读入值,进行下一轮的密码辨别。 薂芈蒇蒆蚃蚁袇膇蒁蝿6、7、 芆结论蚃本次课题设计完成的是基于fpga的密码锁设计,通过一个多星期的不断努力、克服各种困难,最终实现了任务目标。本次设计解决的主要问题是是利用verilog hdl语言完成基于fpga的电子密码锁的编程问题。蒂设计是理论知识与实践的完美结合,对于现代大学生的实践能力是个很好的培养。袈短短的一个星期的时间的设计虽然短暂,但是它给我的收获确实难忘,不仅仅在智能仪器方面有了很大的进步,而且在fpga、quartus软件等方面也学到了不少在上课学不到的知识。这段时间我查阅到很多关于课程设计

22、的书籍,对我帮助也很大。我觉得自己以前的盲目,现在明白了很多。也对我们专业动手实践的兴趣提高了很多。有了这些经历对于我日后工作一定会有很大帮助。相信这次设计中学到的种种东西一定会存在我的脑海里,令我终身受益。螅在课程设计的过程中也可以看到我的不足,如原理知识掌握不实,曾经学过的知识如今却不会应用,软件的应用也不熟练,希望日后提供给我们更多的锻炼机会来培养我们的实践能力。蒃薃参考文献芀1 高移南.遥控变号电子锁j.电子世界,1994,07:15葿2 许琦.基于fpga 的电子密码锁设计j . 中国科技信息, 2007 (1) : 240-241膄3 刘韬,楼兴华.fpga数字电子系统设计与开发实

23、例导航m.人民邮电出版社,2005.莁4 王金明.数字系统设计与verilog hdl莈袈袄莂螁芇蚄蒄衿蚇莅芁芁膆膅莂莀附 录薆程序清单:薁module passwd_lock( 膀 clk0, /时钟 pin_23膄 passed, /开锁灯与警报灯 羅 zero1, /按键0 pin_84莂 one1, /按键1 pin_85羇 two1, /按键2 pin_86薇 three1, /按键3 pin_87蒄 four1, /按键4 pin_88肂 羈 change, /功能选择键pin_89蚅 yes, /确认按键pin_90袄 resetb, /重输按键pin_91蕿 seg, /数码管

24、段选【7:0】肀 dig /数码管位选【3:0】肇); 芃 荿input one1,two1,three1,four1,zero1,change; 袇reg zero,one,two,three,four; 膆input yes; 蚂input resetb; 聿 衿input clk0; /输入时钟信号 芄output 7:0 passed; /输出信号 /为何要是8位?实际只用了2位膂/output 1:0 passed; /输出信号 螀output 7:0 seg;/段选 羀output 3:0 dig;/位选 蚆reg 3:0 key; /按键存储器薁reg rxbuf0,rxbuf1

25、,rxbuf2,rxbuf3,rxbuf4; /缓存器,可用于按键消抖薀螇/display 螅reg clk0_div; 芄reg 2:0 digyi;/哪一位亮,用于数码管数字移位芀reg 3:0 dig;/位选蝿reg 3:0 seg0;/存储按键按下的数字膇reg 7:0 seg; /段选蚄reg 12:0 cnt_r0; 肁reg 18:0 cnt_r1; 薆reg clk1; 芆reg 21:0 cnt_r2;肃reg clk2; 螁reg 7:0 passed; /pass 8b1000 0000 alarm 8b0000 0001 waits 8b0000 0000蚇/*输入与输

26、出的声明部分,其中,clk0为输入的时钟信号,resetb为密码复位的输入信号,莄key为输入命令, 薃需注意的时,key并不是总在表示密码,也表示密码的间隔,如当输入4位密码后需要一个确认“enter”信号, 薂当密码输入错误时,需要取消“cancel”信号,这些信号之间在设计中通过有限状态转换机膀实现。*/ 芇 蒃parameter password=16b0001001100010100;/盛放密码的参数 螃reg 15:0 password;/输入数值盛放寄存器 羇 莆/输入的数字编码 袂 蒃always ( posedge clk1 ) begin /检测线路的下降沿 肈 rxbuf

27、1 = one1; 蚈 one = (rxbuf1 & ( one1 ); 薆 / rxfall1=rxfall; 羀 end 膀/消除多重按键 袆always ( posedge clk1 ) begin /检测线路的下降沿 羅 rxbuf0 = zero1; 螀 zero = (rxbuf0 & ( zero1 ); 羇 / rxfall1=rxfall; 羅 end 蒄/消除多重按键 蒀always ( posedge clk1 ) begin /检测线路的下降沿 罿 rxbuf2 = two1; 麦档网芇 two = (rxbuf2 & ( two1 ); 袄 / rxfall1=rx

28、fall; 膁 end 肀/消除多重按 蒅always ( posedge clk1 ) 芃 begin /检测线路的下降沿 羁 rxbuf3 = three1; 袇 three = (rxbuf3 & ( three1 ); 螈 / rxfall1=rxfall; 蚂 end 蚁/消除多重按键 衿always ( posedge clk1 ) 袆 begin /检测线路的下降沿 莆 rxbuf4 = four1; 蒂 four = (rxbuf4 & ( four1 ); 羀 / rxfall1=rxfall; 肅 end 袅/消除多重按键 膂螇reg 2:0 main_state;/主状态

29、 莇reg 2:0 next_state;/下一个状态 芅/主有限状态转换机的三个状态:waits、pass、alarm 羃parameter waits=3b001, pass=3b010, alarm=3b100; /3个状态编码蝿蒅reg 2:0 sub_state; /从状态机现状态莀reg 2:0 next_sub_state; /从状态机下一个状态荿 薆/从有限状态转换机的五个状态:first、second、third、fourth、finish蚄parameter first=3b000,second=3b001,third=3b010,fourth=3b011,finish=3

30、b100; 衿 腿/通过计时寄存器 莃reg 7:0 pass_count; /pass计时完后回到wait状态螂/警报计时寄存器 艿reg 10:0 alarm_count; /alarm计时完后回到wait状态蚆/尝试次数寄存器 蒅reg 1:0 try_count; 袀 蚈/输入状态寄存器:error和correct 莆reg error; 蒆reg correct; 芃regkey_pressed_flag; / 键盘按下标志 莁/以上为中间状态的一些寄存器和一些所用到的参数 膆/主机状态机部分 芄always (posedge clk0) 莁begin 螁 cnt_r2 = cnt_

31、r2 + 1b1; 袇 莅 if(cnt_r2 4000000) 蚃 begin 芀 clk1 = 1; 薇 end 蒆 else 袂 begin 蚀 clk1 = 0; 莈 end 芄end 膄always(main_state or correct or error) /3位主状态寄存器,1位输入状态寄存器correct,error聿begin 肈 case(main_state) /判断主状态寄存器芅 waits: /3b001芃 if(correct=1) begin/由waits转换到pass的条件 薈next_state=pass; end/3位next_state寄存器写入等待状

32、态袈 else if(error=1&try_count=1) begin莇next_state=alarm; end/由waits转换到alarm的条件 莁 else begin膂next_state=waits; end蕿 膄 pass: 螃 if(pass_count7=1) begin/由pass转换到waits的条件 计时器时间到,由通过状态变成等待状态蚁 next_state=waits; end荿 else begin羁 next_state=pass; end蚈 螆 alarm: 薁 if(alarm_count10=1) begin/ 由alarm转换到waits的条件 警告

33、时间到达时变成等待状态羃next_state=waits; end羀 else begin芆next_state=alarm;end/否则继续警告节 default:/默认状态:waits 螀next_state=waits; 膈 endcase 蚅 end 肂 袁/状态转换 芇always(posedge clk1 or negedge resetb) 肄begin 螂 if(!resetb) 袃 main_state=waits; 蕿 else 蒄 main_state=next_state; 蒃end 蚀螈/输出控制部分 膇always(posedge clk1 or negedge r

34、esetb) 芃begin 螁 if(!resetb)/复位时,开锁输出与警报输出都为零 肀 begin 蚇 passed=8b10000001; 羄/passed=2b11;蕿 end 膈 else if(main_state=pass)/当主机状态为pass时,开锁 肆 begin 螄 passed=8b00000001; 蚀/passed=2b01;莇 end 蒅 else if(main_state=alarm)/当主机状态为alarm时,警报 蒄 begin 蚂 passed=8b10000000; 虿/passed=2b10;袅 end 芅 else/其它状态复位 葿 begin

35、螇 passed=8b10000001; 莄/passed=2b11;羅 end end 薀 羆/alarm一段时间后,自动进入waits状态 螃/alarm定时器 膇always(posedge clk1 or negedge resetb) 莈begin 肄 if(!resetb) 膃 alarm_count=0; 羈 else if(main_state=alarm)/alarm状态计时器alarm定时器加1 膅 alarm_count=alarm_count+1; 膂 else 蚂 alarm_count=0; 蚈end 膆薅/锁pass以后计数开始,当规定的时间到达后自动上锁,并进入

36、waits状态 肂/pass定时器 荿always(posedge clk1 or negedge resetb) 芈 begin 蚃 if(!resetb) 蒁 pass_count=0; 腿 else if(main_state=pass) /pass状态计时器pass定时器加1 肅 pass_count=pass_count+1; 羆 else 袀 pass_count=0; 衿 end 肇 肄/从状态机,用于输入4位密码 薄always(posedge clk1 or negedge resetb) 蚀begin 膈 if(!resetb) 节 sub_state=first; 肃 e

37、lse 莀 sub_state=next_sub_state; 羅end 薅 蒂always(!zero|!one|!two|!three|!four|!yes or sub_state) 膀/always(key or sub_state) 羇begin 蚃 if(key_pressed_flag|!yes) 袂 if(!yes)/4个密码输完时,进行确认 袁 next_sub_state=first; 肈 /default为输入了某位密码,输入完自动将状态转入下一位 肅 else if (!zero|!one|!two|!three|!four) /zero1,one1,two1,thre

38、e1,four1芁case(sub_state) 蚁first: 袅next_sub_state=second; 膄second: 螁 next_sub_state=third; 肈third: 羇 next_sub_state=fourth; 节fourth: 膀next_sub_state=finish; 袈/当输入完4位密码以后状态保持不变,等待输入enter命令 羈蚅finish: 袃next_sub_state=finish; 薈default: next_sub_state=sub_state; 螅endcase 螃else 芃next_sub_state=sub_state; 荿

39、end 袇膅/比较密码,产生正确或者错误信息 蚂always(posedge clk1 or negedge resetb) 聿begin 袈if(!resetb) begin 芄correct=0; 膁error=0; 衿end 蚆else if(!key_pressed_flag&!yes) 蚆if(password=password)/密码正确时薁begin 薀correct=1; 螇error=0; 螄end 螆else/密码错误时 肆begin 薄error=1; 虿correct=0; 蒀end 螆else begin 莂correct=0; 羁error=0; 衿 end 薇en

40、d 莃肀/记录密码 芈always(posedge clk1 or negedge resetb) 羃begin 蒄if(!resetb) begin 蒂password=0; 蚈end螄else if(!zero|!one|!two|!three|!four) begin节case(sub_state) 薀first: 膇password15:12=key; 蒄second: 芃password11:8=key; 虿third: 薆password7:4=key; 芄fourth: 莅password3:0=key; 肁default: 羆password=password; 羅endcas

41、e 膂end腿else begin虿password=password; 螅end芃end 薂聿/记录错误次数 蒅always(posedge clk1 or negedge resetb) 肁begin 蚀if(!resetb) begin薈try_count=0; 膆end肂else if(error=1) begin蝿try_count=try_count+1; 羇end羆else if(main_state=pass|main_state=alarm) begin膃try_count=0; 膁end莇end 蚇羁/reg key_pressed_flag; / 键盘按下标志 艿 螆al

42、ways(posedge clk1 or negedge resetb) 蒇begin 羂if(!resetb) 蚂 begin 葿 key_pressed_flag=0; 羃 key=4b0000; 肄 end 螀 else if(!zero&change) 罿begin key_pressed_flag=1;key=4b0000; end 蚄 else if(!one&change) 袁begin key_pressed_flag=1;key=4b0001; end 袈 else if(!two&change) 莈begin key_pressed_flag=1;key=4b0010; end 莄 else if(!three&change) 袂begin key_pressed_flag=1;key=4b0011; end 芁else if(!four

温馨提示

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

评论

0/150

提交评论