名称:8位数字密码锁设计Verilog代码VIVADO仿真(文末获取)
软件:VIVADO
语言:Verilog
代码功能:
1、储存8位数字密码,输入正确密码开锁,实现开锁。
2、第一次输入密码错误后可输入第二次,两次错误之后密码锁警报并锁住,必须系统操作员解除(复位)
3、密码输入成功后可按下改密键修改密码。
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
Testbench模拟按键输入过程,默认密码为12345678:
先输入12345678将密码锁打开,再按下修改按键,修改密码为87654321,然后上锁,再次输入12345678,密码错误,再次输入12348765,密码再次错误,此时密码锁被锁住,需要按下复位按键,然后再输入新密码87654321,将锁打开
6. 仿真图
整体仿真图
按键检测模块
密码输入模块
密码控制模块
显示模块
报警模块
修改密码模块
部分代码展示:
//密码锁控制模块 module mimasuo_ctrl( input clk, input [31:0] password,//输入的密码 input [31:0] correct_password,//正确的密码 input confirm,//确认 input reset,//清楚报警 input modify,//修改密码 input lock_up,//上锁 output led_open,//开锁指示灯 output [2:0] current_state//当前状态 ); //定义6个状态 parameter s_lock=3'd0; parameter s_compare=3'd1; parameter s_pass=3'd2; parameter s_error=3'd3; parameter s_modify=3'd4; parameter s_alarm=3'd5; reg [2:0] state=3'd0; assign current_state=state; reg [2:0] error_cnt=3'd0; //状态机控制 always@(posedge clk) case(state) s_lock://锁定状态 if(confirm==1) state<=s_compare; else state<=s_lock; s_compare://比对密码状态 if(correct_password==password) state<=s_pass; else state<=s_error; s_pass://密码正确 if(modify==1) state<=s_modify;//修改密码 else if(lock_up==1) state<=s_lock;//上锁 else state<=s_pass; s_error://密码错误 if(error_cnt>=3'd1) state<=s_alarm;//错误2次报警 else state<=s_lock;//继续锁定 s_alarm://报警 if(reset==1)//清除报警 state<=s_lock;//继续锁定 else state<=s_alarm;//报警 s_modify://修改密码 if(confirm==1) state<=s_pass;//返回开锁状态 else state<=s_modify; default:state<=s_lock; endcase always@(posedge clk) if(reset==1) error_cnt<=3'd0; else if(state==s_error) error_cnt<=error_cnt+3'd1;//输入错误密码次数计数 reg led_open_buf=0; always@(posedge clk) if(state==s_modify || state==s_pass)//pass 和 modify状态下都是开锁状态 led_open_buf<=1;//开锁 else led_open_buf<=0;//关锁 assign led_open=led_open_buf; endmodule
源代码
点击下方的公众号卡片获取