名称:8位数字密码锁设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
1、储存8位数字密码,输入正确密码开锁,实现开锁。
2、第一次输入密码错误后可输入第二次,两次错误之后密码锁警报并锁住,必须系统操作员解除(复位)
3、密码输入成功后可按下改密键修改密码。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
设计文档:
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
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1018
901