名称:电子密码锁设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:电子密码锁设计
II、课题任务
用VerilogHDL语言编写程序,设计一个电子密码锁控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作。密码锁控制电路中存储一个可修改的6位代码,当输入的代码等于存储的代码时,开锁。从第一位代码输入后5秒内未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并发出持续20秒的报警信号。允许有三次输错的机会,三次输入错误,电路自动复位并进入自锁状态,无法再打开。
III、具体设计内容:
1、设计任务
密码锁整体结构如图1所示,其中FPGA编程是本课程设计任务,通过按键产生控制信号输入给FPGA芯片,FPGA对按键信号进行处理,并输出信号给执行机构对密码锁进行操作。FPGA的输入时钟频率为1MHz。
图1 密码锁整体系统
开始开锁信号为外部输入信号,当该信号为高电平时,开始输入密码,密码为按键形式,每次按键会先发送一个高脉冲信号,即按键中断信号,然后将该按键对应的数字送出,具体时序如图2所示,FPGA接收到开始开锁信号后开始检测按键中断信号,如果按键中断有上跳沿跳变,便读取4位键值数据,然后与
存储的代码匹配,如果匹配成功则输出4位二进制数0001,如果匹配不成功,需要重新输入,则输出二进制数0010,如果要复位自锁输出0011,同时将警报输出信号置高电平,高电平持续20秒时间再置成低电平,不进行任何操作时输出0000,电子密码锁按键时序如下图2所示:
图2 电子密码锁按键信号时序图
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
设计文档:见附件
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、Testbench
6、仿真图
Testbench
整体仿真图
上图前段仿真了输入密码5秒内未打开,输出alarm_led报警信号和0011执行机构信号(actuator),中段是输入密码正确,开锁,输出0001执行机构信号(actuator),最后一段是连续输入3次错误密码,输出alarm_led报警信号和0011执行机构信号(actuator)
上图为输入一次错误密码时,执行机构输出0010
按键检测模块
状态机控制模块
输出控制模块
部分代码展示:
//密码锁 module locker( input clk,//时钟 input rst_p,//高电平复位 input start_key,//开始解锁 input [3:0] value,//键值 input confirm_key,//输入按键 output alarm_led,//报警 output [3:0] actuator//执行机构信号 ); wire key_int;//按键中断 wire [3:0] state; //按键中断检测模块 key_detect i_key_detect( . clk(clk),//时钟 . confirm_key(confirm_key),//输入按键 . key_int(key_int) //按键上升沿 ); //状态机控制 fsm i_fsm( . clk(clk), . rst_p(rst_p),//高电平复位 . start_key(start_key),//开始解锁 . value(value),//键值 . key_int(key_int),//按键中断 . state(state) //输出状态 );
代码文件(付费下载):http://hdlcode.com/index.php?m=home&c=View&a=index&aid=1507&sessionid=-806226391
【来源:www.hdlcode.com】