五位二进制简易密码锁verilog代码ego1开发板vivado软件

名称:五位二进制简易密码锁verilog代码ego1开发板vivado软件

软件:VIVADO

语言:Verilog

代码功能:

1、设计五位二进制简易密码锁,密码用五位二进制数组成;

2、用按键预设置密码和改动密码;

3、输入密码如果与设置密码一致,则用一个LED灯表示输入正确,否则用一个LED灯显示输入错误。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

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

ego1开发板.png

代码下载:五位二进制简易密码锁verilog代码ego1开发板vivado软件名称:五位二进制简易密码锁verilog代码ego1开发板vivado软件(代码在文末下载)软件:VIVADO语言:Verilog代码功能:1、设计五位二进制简易密码锁,密码用五位二进制数组成;2、用按键预设置密码和改动密码;3、输入密码如果与设置密码一致,则用一个LED灯表示输入正确,否则用一个LED灯显示输入错误。FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.comicon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=308

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 管脚分配

6. Testbench

7. 仿真图

整体仿真图

图中仿真了原始密码为11111时吗,输入10111,密码错误,然后再次输入11111,按下确认键后,密码锁打开(LED1亮),次数按下修改密码按键,输入10111,将密码修改为10111,然后关锁,再次输入10111,密码锁打开。

按键消抖模块(上升沿检测)

密码输入模块

图中仿真了输入10111,密码错误,然后再次输入11111,输入10111,将密码修改为10111,然后关锁,再次输入10111

密码锁控制模块

图中仿真了原始密码为11111时,输入10111,密码错误,然后再次输入11111,按下确认键后,密码锁打开(LED1亮),次数按下修改密码按键,输入10111,将密码修改为10111,然后关锁,再次输入10111,密码锁打开。

数码管显示模块

密码重置模块

图中仿真了原始密码为11111时,将密码修改为10111的过程。

部分代码展示:

//密码锁控制模块
module mimasuo_ctrl(
input clk,
input [19:0] password,//输入的密码
input [19: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://密码错误
state<=s_lock;//继续锁定
s_modify://修改密码
if(confirm==1)
state<=s_pass;//返回开锁状态
else
state<=s_modify;
default:state<=s_lock;
endcase
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

猜你喜欢

转载自blog.csdn.net/diaojiangxue/article/details/134607539