当前位置:   article > 正文

数字密码锁Verilog代码vivado ego1开发板_密码锁点亮led的verilog

密码锁点亮led的verilog

名称:数字密码锁Verilog代码vivado  ego1开发板(文末获取)

软件:vivado 

语言:Verilog

代码功能:

数字密码锁  

1、有改密码功能  

2、密码错误三次报警灯闪烁

3、通过按键输入密码

本代码已在ego1开发板验证,ego1开发板如下,其他开发板可以修改管脚适配:

ego1开发板.png

Testbench

仿真图

整体仿真

按键模块

密码输入模块

控制模块

显示模块

报警模块

修改密码模块

部分代码展示:

//密码锁控制模块
module mimasuo_ctrl(
input clk,
input [15:0] password,//输入的密码
input [15: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'd2)
state<=s_alarm;//错误3次报警
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
源代码

 扫描文章末尾的公众号二维码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/860336
推荐阅读
相关标签
  

闽ICP备14008679号