电子密码锁 FPGA 设计 Verilog Vivado

名称:电子密码锁 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本设计实现一个基于 FPGA 的电子密码锁控制系统,使用 Verilog 编写,工程软件为 Vivado。系统通过按键、拨码开关、LED 指示和数码管完成密码输入、密码确认、开锁、上锁、修改密码、退格修正和错误报警等功能,适合数字系统课程设计、FPGA 综合实验和密码锁状态机设计参考。 密码锁平时处于等待状态。用户通过开关输入 4 位密码,按下确认键后系统判断密码是否正确;密码正确时进入开锁状态并点亮开锁指示,密码错误时提示重新输入。若连续三次输入错误,系统输出报警信号,需要管理员通过指定操作进行处理后才能停止报警。 管理员可通过专用按键进入密码修改流程,系统支持默认密码 0000。用户在按下确认键之前,可使用退格键修正已输入的密码位,增强了交互完整性。设计还包含空闲超时要求:未开锁时长时间无操作返回等待状态,开锁后长时间无操作自动上锁并回到等待状态。 工程充分利用 FPGA 开发板上的按键、开关、LED 和数码管资源,既能体现状态机控制逻辑,也能展示输入防抖、密码缓存、错误计数、显示驱动和报警输出等常见 FPGA 外设控制方法。

运行环境

开发语言:Verilog 开发软件:Vivado 工程类型:FPGA 密码锁控制工程 顶层模块:secure_lock 主要工程文件:secure_lock.xpr、cons.xdc、secure_lock.v、lock_controller.v、password_input.v、keypad_scanner.v、lcd_display.v、alert_system.v、debounce_filter.v、pwd_reset.v

设计思路

设计采用模块化结构实现电子密码锁,将按键消抖、密码输入、状态控制、密码重置、显示驱动和报警输出分开处理。顶层模块 secure_lock 负责连接各功能模块,将外部按键、开关和数码管/LED 输出组织成完整的密码锁系统,便于在 Vivado 工程中综合、实现和分配管脚。 密码输入部分通过 SW1 和 3 位 SW_num 开关完成数字确认与数值输入,输入数字范围为 0~7,组合形成 4 位密码数据。退格按键经过消抖和边沿检测后送入输入模块,在确认前可逐位修正密码,符合实际密码锁操作习惯。 核心控制逻辑围绕密码锁状态机展开。系统平时处于等待状态,用户输入密码并按确认键后,与当前保存密码进行比较;密码正确则输出开锁指示,密码错误则累计错误次数并要求重新输入;连续三次错误后进入报警状态。修改密码功能由专用按键触发,默认密码按要求设置为 0000,并通过 pwd_reset 模块维护正确密码。 显示与报警独立输出。数码管模块根据当前输入密码和错误次数进行动态显示,报警模块根据状态和确认按键信号控制报警 LED。按键均通过 debounce_filter 处理,减少机械按键抖动对状态切换的影响,提高上板演示时的稳定性。

模块结构

顶层模块:secure_lock 主要子模块包括: 1. lock_controller:密码锁核心控制器,负责状态切换、密码比较、开锁指示、错误次数统计和上锁控制。 2. debounce_filter:按键消抖及上升沿检测模块,用于确认、修改、上锁、退格等机械按键输入。 3. password_input:密码输入处理模块,接收 SW1 和 SW_num 输入,形成当前 4 位密码数据,并支持退格修正。 4. pwd_reset:密码重置模块,用于根据状态和确认信号更新保存密码。 5. alert_system:报警系统模块,根据当前状态输出报警 LED 信号。 6. lcd_display:数码管显示控制模块,根据密码数据和错误次数输出位选、段选信号。 工程文件包含 secure_lock.xpr、cons.xdc 以及各 Verilog 源码文件,可在 Vivado 中打开、综合、实现并生成 bit 文件。

开发板验证

工程包含 Vivado 管脚约束文件,并配套开发板实物图片,可用于在 FPGA 开发板上完成密码锁功能验证。输入侧使用系统时钟、确认按键、修改密码按键、上锁按键、退格按键、SW1 确认开关以及 3 位数字输入开关;输出侧使用报警指示、开锁指示以及 8 位数码管位选和段选信号。 上板运行时,可通过开关输入 0~7 范围内的数字组成 4 位密码,配合确认、退格、修改、上锁等按键观察状态切换。密码正确时开锁指示输出有效,密码错误时进入重新输入流程,连续错误达到设定次数后报警信号输出,适合课程设计验收中对按键、开关、LED 和数码管联动效果的展示。

电子密码锁 FPGA 设计 Verilog Vivado 开发板验证图片 开发板.jpg

演示视频

配套演示视频展示了密码锁工程的实际操作过程,可用于对照确认按键输入、密码输入、开锁指示、错误处理、报警提示等功能表现。

仿真图/仿真说明/设计文档图片

设计文档包含工程文件说明、程序文件、程序编译、RTL 图、管脚分配以及课程设计题目要求等内容,可用于理解密码锁的整体功能、验收要点和模块连接关系。文档图片包括 RTL 结构、编译结果、管脚分配等设计说明截图,便于对照 Vivado 工程查看实现流程。

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image1.png

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image2.png

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image3.png

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image4.png

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image5.png

电子密码锁 FPGA 设计 Verilog Vivado 设计文档图片 image6.png

部分代码

以下展示顶层模块 secure_lock 的部分代码,完整源码请下载压缩包查看。

module secure_lock(
input sys_clock,//系统时钟

input confirm_btn,//确认按键--key1
input modify_btn,//修改密码按键--key2
input lock_up_btn,//上锁按键--key3
input back_btn,//退格按键--key4
input SW1,//按键确认--SW1
input [2:0] SW_num,//输入数字0~7--SW2,3,4

output buzzer_led,//报警led
output unlock_led,//开锁指示,绿灯

//数码管显示
output [7:0] digit_sel,//数码管位选
output [7:0] segment_led//数码管段选
);
wire reset_signal;
wire [2:0] fsm_state;
wire [15:0] pwd_data;
wire [15:0] stored_pwd;
wire confirm_edge;
wire modify_edge;
wire lock_edge;
wire back_edge;
wire idle_enable;
wire [2:0] error_count;
assign reset_signal=lock_edge;//清除报警
//确认按键上升沿检测
debounce_filter u1_debounce_filter(
. clkin(sys_clock),
. key_in(confirm_btn),//输入
. key_posedge(confirm_edge)//消抖后按键上升沿
);

//修改按键上升沿检测
debounce_filter u2_debounce_filter(
. clkin(sys_clock),
. key_in(modify_btn),//输入
. key_posedge(modify_edge)//消抖后按键上升沿
);

//上锁按键上升沿检测
debounce_filter u3_debounce_filter(
. clkin(sys_clock),
. key_in(lock_up_btn),//输入
. key_posedge(lock_edge)//消抖后按键上升沿
);

//退格按键上升沿检测
debounce_filter u4_debounce_filter(
. clkin(sys_clock),
. key_in(back_btn),//输入
. key_posedge(back_edge)//消抖后按键上升沿
);

//密码输入处理模块
password_input u_password_input(
. clk(sys_clock),
. back_s(back_edge),
. SW1(SW1),//按键确认
. SW_num(SW_num),//输入数字0~7
. to_idle_en(idle_enable),
. current_state(fsm_state),
. password(pwd_data)
);

//密码锁控制器模块
lock_controller u_lock_controller(
. clk(sys_clock),
. password(pwd_data),
. correct_password(stored_pwd),
. confirm(confirm_edge),
. reset(reset_signal),
. modify(modify_edge),
. lock_up(lock_edge),
. to_idle_en(idle_enable),
. led_open(unlock_led),
. current_state(fsm_state),
. error_counter_out(error_count)
);

//液晶显示控制模块
lcd_display u_lcd_display
(
. clk(sys_clock),
. password(pwd_data),
. error_count(error_count),
. bit_select(digit_sel),//数码管位选
. seg_select(segment_led)//数码管段选
);

//报警系统模块
alert_system u_alert_system(
. clk(sys_clock),
. confirm_key(confirm_btn),
. current_state(fsm_state),
. alarm(buzzer_led)
);

//密码重置模块
pwd_reset u_pwd_reset(
. clk(sys_clock),
. password(pwd_data),
. correct_password(stored_pwd),
. confirm(confirm_edge),
. current_state(fsm_state)
);

endmodule

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 电子密码锁 FPGA 设计 Verilog Vivado

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员