赞
踩
名称:电子密码锁Verilog代码Quartus仿真(文末获取)
软件:Quartus
语言:Verilog
代码功能:
电子密码锁
1、密码为4位
2、内置默认密码,可以修改密码
3、密码输入错误3次报警
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
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。