文档介绍:基于FPGA的电子密码锁的设计一、设计内容与要求设计一个密码锁,密码为一个8位的十六进制数,密码固化在锁内用户有三次输入密码的机会,如果正确,则***如果三次都输入错误,密码将报警并进入锁定状态用户在较长的一段时间内不能再次输入密码,警报时间过后,密码重新回到等待状态,用户可以再次输入密码。二、所需设备QuartusII开发软件1套T-RexC1DevelopmentKit设计思想可通过FPGA有限状态机来实现。设计有限状态机最开始的工作时要确定电路,包括哪些状态,比如某个电路包括四个状态,S0,S1,S2,S3。然后对所有状态给出一个状态编码,比如为状态S0赋予编码00,为状态S1赋予编码01,为状态S2赋予编码10,为状态S3赋予编码11。状态编码是状态的标识,保存在寄存器当中,对于此编码形式,只需一个2位的寄存器就可以了。FSMEncodingStyle主要有:BinaryEncodingOneHotEncodingGrayEncoding二进制与一位热码的特性比较:状态机可以认为是组合逻辑和寄存器逻辑的特殊租户,它一般包括两个部分:组合逻辑部分和寄存器逻辑部分。寄存器用于存储状态,组合电路用于状态译码和产生输出信号。状态机的下一个状态及输出,不仅与输入信号有关,而且还有寄存器当前所处的状态有关。根据输出信号产生方法的不同,状态机可以分成两类:Mealy型和Moore型。Moore型状态机的输出只是当前状态的函数,而Moore型状态机的输出只是当前状态的函数,而Mealy型状态机的输出则是当前状态和当前输入状态的函数。其原理如下两图:四、设计流程:本次密码锁的设计,有限状态机应该包括以下状态:密码为输入前的等待状态、输入密码时的等待状态、输入密码正确时的通过状态、输入密码错误时的警报状态。其中当密码输入时又可包括以下状态,正常输入状态、异常输入状态(包括命令状态)、输入确认状态。状态编码状态编码主要有二进制编码、格雷编码和一位独热编码等方式。格雷编码时,相邻状态每次只有一个比特位产生变化,这样减少了瞬变的次数,也减少了产生毛刺和一些状态的可能。采用一位独热编码,虽然多用了触发器,当可以有效节省和简化组合电路。对于寄存器数量多而逻辑相对缺乏的FPGA器件来说,采用一位独热编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。将产生状态的组合逻辑电路和用于保存状态的寄存器分别写在不同的always块中。其中主要包括:输出控制部分、警报计时部分、锁打开后的计时部分、比较密码部分、记录密码部分和记录错误次数的部分。编写代码功能仿真和时序仿真引脚配置与下载五、程序清单:modulepasswd_lock( clk, resetb, cmd, alarmed, passed,);input clk; //输入时钟信号input resetb; //输入复位信号input [4:0] cmd; //输入命令信号output alarmed; //输出警报信号output passed; //输出通过信号wire clk;wire resetb;wire [4:0] cmd;reg alarmed;reg passed;//输入与输出的声明部分,其中,clk为输入的时钟信号,resetb为密码舒服的输入信号,cmd为输入命令,需注意的时,cmd并不是总在表示密码,也表示密码的间隔,如当输入4位密码后需要一个确认“enter”信号,当密码输入错误时,需要取消“cancel”信号,这些信号之间在设计中通过有限状态转换机实现。parameter PASSWORD=16'd1234;//盛放密码的参数reg [15:0] password;//输入数值盛放寄存器//输入的数字编码0~9,enter,cancelreg one=5'b10001,。 two=5'b10010, three=5'b10011, four=5'b10100, five=5'b10101, six=5'b10110, seven=5'b10111, eight=5'b11000, nine=5'b11001, zero=5'b11000, enter=5'b11010, cancel=5'b11011;reg cmd_t;//检验是否有按键按下reg [2:0] main_state;//主状态reg [2:0] next_state;//下一个状态//主有限状态转换机的三个状态:waits、pass、alarmparameter waits=3'b001, pass=3'b010, alarm=3'b100;reg [2:0] sub_state;reg [2:0] next_sub_state;//主有限状态转换机的三个状态:first、second、th