• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

电子密码锁Verilog代码Quartus仿真

06/23 14:06
370
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2401051030403U.doc

共1个文件

名称:电子密码锁Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:

电子密码锁

1、密码为4位;

2、内置默认密码,可以修改密码;

3、密码输入错误3次报警。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

下降沿检测模块

密码输入模块

控制模块

显示模块

蜂鸣器模块

重置密码模块

整体设计功能及整体仿真图分析如下:

默认密码1234,下图输入1234后按下确认键后开锁,led_open高电平表示开锁,此时按下modify按键进行密码修改,输入新密码后,按下确认键,将密码修改为2537。

修改完密码按下lock_up键,锁定,此时led_open变为低电平

输入原密码1234无法打开,连续输入三次密码错误后报警,alarm信号拉高

按下reset信号关闭报警,才能再次密码,关闭报警后输入新密码2537,将锁打开。

注:按键按下均为低电平。

部分代码展示:

//密码输入模块
module?mima_input(
input?clk,
input?key_0,
input?key_1,
input?key_2,
input?key_3,
input?key_4,
input?key_5,
input?key_6,
input?key_7,
input?key_8,
input?key_9,
input?[2:0]?current_state,//密码锁当前状态
output?[15:0]?password//输入密码
);
reg?key_0_buf1=0;
reg?key_1_buf1=0;
reg?key_2_buf1=0;
reg?key_3_buf1=0;
reg?key_4_buf1=0;
reg?key_5_buf1=0;
reg?key_6_buf1=0;
reg?key_7_buf1=0;
reg?key_8_buf1=0;
reg?key_9_buf1=0;
reg?key_0_buf2=0;
reg?key_1_buf2=0;
reg?key_2_buf2=0;
reg?key_3_buf2=0;
reg?key_4_buf2=0;
reg?key_5_buf2=0;
reg?key_6_buf2=0;
reg?key_7_buf2=0;
reg?key_8_buf2=0;
reg?key_9_buf2=0;
wire?key_0_rise;
wire?key_1_rise;
wire?key_2_rise;
wire?key_3_rise;
wire?key_4_rise;
wire?key_5_rise;
wire?key_6_rise;
wire?key_7_rise;
wire?key_8_rise;
wire?key_9_rise;
always@(posedge?clk)
begin
key_0_buf1<=key_0;
key_1_buf1<=key_1;
key_2_buf1<=key_2;
key_3_buf1<=key_3;
key_4_buf1<=key_4;
key_5_buf1<=key_5;
key_6_buf1<=key_6;
key_7_buf1<=key_7;
key_8_buf1<=key_8;
key_9_buf1<=key_9;
key_0_buf2<=key_0_buf1;
key_1_buf2<=key_1_buf1;
key_2_buf2<=key_2_buf1;
key_3_buf2<=key_3_buf1;
key_4_buf2<=key_4_buf1;
key_5_buf2<=key_5_buf1;
key_6_buf2<=key_6_buf1;
key_7_buf2<=key_7_buf1;
key_8_buf2<=key_8_buf1;
key_9_buf2<=key_9_buf1;
end
//assign?key_0_rise=key_0_buf1?&?~key_0_buf2;//数字按键输入上升沿
//assign?key_1_rise=key_1_buf1?&?~key_1_buf2;//数字按键输入上升沿
//assign?key_2_rise=key_2_buf1?&?~key_2_buf2;//数字按键输入上升沿
//assign?key_3_rise=key_3_buf1?&?~key_3_buf2;//数字按键输入上升沿
//assign?key_4_rise=key_4_buf1?&?~key_4_buf2;//数字按键输入上升沿
//assign?key_5_rise=key_5_buf1?&?~key_5_buf2;//数字按键输入上升沿
//assign?key_6_rise=key_6_buf1?&?~key_6_buf2;//数字按键输入上升沿
//assign?key_7_rise=key_7_buf1?&?~key_7_buf2;//数字按键输入上升沿
//assign?key_8_rise=key_8_buf1?&?~key_8_buf2;//数字按键输入上升沿
//assign?key_9_rise=key_9_buf1?&?~key_9_buf2;//数字按键输入上升沿
key_jitter?key_jitter_k0(
?????.?clkin(clk),
?????.?key_in(key_0_buf2),//输入
??.?key_posedge(key_0_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k1(
?????.?clkin(clk),
?????.?key_in(key_1_buf2),//输入
??.?key_posedge(key_1_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k2(
?????.?clkin(clk),
?????.?key_in(key_2_buf2),//输入
??.?key_posedge(key_2_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k3(
?????.?clkin(clk),
?????.?key_in(key_3_buf2),//输入
??.?key_posedge(key_3_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k4(
?????.?clkin(clk),
?????.?key_in(key_4_buf2),//输入
??.?key_posedge(key_4_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k5(
?????.?clkin(clk),
?????.?key_in(key_5_buf2),//输入
??.?key_posedge(key_5_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k6(
?????.?clkin(clk),
?????.?key_in(key_6_buf2),//输入
??.?key_posedge(key_6_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k7(
?????.?clkin(clk),
?????.?key_in(key_7_buf2),//输入
??.?key_posedge(key_7_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k8(
?????.?clkin(clk),
?????.?key_in(key_8_buf2),//输入
??.?key_posedge(key_8_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
key_jitter?key_jitter_k9(
?????.?clkin(clk),
?????.?key_in(key_9_buf2),//输入
??.?key_posedge(key_9_rise),//消抖后按键上升沿
??.?key_negedge(),//消抖后按键下降沿
?????.?key_value()//消抖后按键
);
reg?[15:0]?password_buf=16'd0;//pass,alarm--clear
always@(posedge?clk)
if(current_state==3'd2?||?current_state==3'd5)
password_buf<=16'h0;
else
if(key_0_rise==1)
password_buf<={password_buf[11:0],4'd0};//数字按键0输入
else?if(key_1_rise==1)
password_buf<={password_buf[11:0],4'd1};//数字按键1输入
else?if(key_2_rise==1)
password_buf<={password_buf[11:0],4'd2};//数字按键2输入
else?if(key_3_rise==1)
password_buf<={password_buf[11:0],4'd3};//数字按键3输入
else?if(key_4_rise==1)
password_buf<={password_buf[11:0],4'd4};//数字按键4输入
else?if(key_5_rise==1)
password_buf<={password_buf[11:0],4'd5};//数字按键5输入
else?if(key_6_rise==1)
password_buf<={password_buf[11:0],4'd6};//数字按键6输入
else?if(key_7_rise==1)
password_buf<={password_buf[11:0],4'd7};//数字按键7输入
else?if(key_8_rise==1)
password_buf<={password_buf[11:0],4'd8};//数字按键8输入
else?if(key_9_rise==1)
password_buf<={password_buf[11:0],4'd9};//数字按键9输入
else
password_buf<=password_buf;
assign?password=password_buf;
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=498

  • 2-2401051030403U.doc
    下载

相关推荐