矩阵键盘密码锁 FPGA 设计 Verilog Vivado

名称:矩阵键盘密码锁 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

开发板/平台:Nexys A7

功能介绍

本设计实现一个基于 FPGA 的矩阵键盘密码锁控制器,使用 Verilog 编写并在 Vivado 工程中组织源码。系统面向数字系统课程设计中常见的密码锁场景,完成密码输入、密码判断、开锁指示、错误提示、报警以及状态返回等核心功能。 密码锁平时处于等待状态,用户可通过 4x4 矩阵键盘输入 4 位密码,并通过确认键提交。若输入密码正确,系统进入开锁状态并点亮开锁指示;若密码错误,系统提示重新输入,连续三次错误后触发报警信号。默认密码为 0000,管理员可通过专用控制按键进入密码修改相关流程。 输入过程中支持退格修正,在按下确认键之前可以逐位删除已输入内容,便于模拟真实密码锁的人机交互。系统还结合 LED、蜂鸣/报警输出和数码管显示,使密码状态、输入内容和控制结果能够在开发板上直观呈现。

运行环境

开发语言:Verilog 开发软件:Vivado 适用工程:FPGA 密码锁控制器工程 开发板验证:Nexys A7 主要外设:4x4 矩阵键盘、独立按键、拨码开关、LED 指示、报警输出、八位数码管显示。

设计思路

整体设计采用模块化结构,将密码锁的人机输入、状态控制、显示输出、报警处理和密码重置分开实现。顶层模块 mimasuo 负责连接时钟、矩阵键盘行列信号、确认/修改/上锁/退格按键、复位开关、管理员开关、报警输出、开锁 LED、状态指示灯以及数码管位选和段选信号。 按键部分先经过 key_jitter 模块进行消抖和边沿检测,将机械按键转换为稳定的确认、修改、上锁、退格等控制脉冲。矩阵键盘由 mima_input 模块完成扫描和密码输入组合,根据当前状态接收用户输入,并在退格键作用下修正已输入数字。 密码锁核心控制由 mimasuo_ctrl 完成,控制逻辑围绕等待、输入、开锁、修改、错误和报警等状态展开。用户提交密码后,控制模块比较输入密码与当前正确密码,输出开锁指示并更新状态;错误次数达到要求后进入报警相关状态。reset_password 模块负责在指定状态下更新正确密码,使管理员修改密码功能与普通用户开锁流程分离。 显示与报警分别由 display 和 alarm_on 模块处理。display 根据当前密码、正确密码、系统状态和管理员开关驱动数码管显示;alarm_on 根据状态和按键情况输出报警信号及三色/状态指示灯效果。这样的划分便于单独理解各模块功能,也方便在 Vivado 中查看 RTL 层次结构和后续扩展。

模块结构

顶层模块:mimasuo 主要子模块包括: reset_password:密码重置/修改逻辑。 key44_scan:4x4 矩阵键盘扫描相关模块。 alarm_on:报警输出和指示灯控制。 display:数码管显示控制。 mima_input:密码输入、退格处理和键值组织。 hx75_hex_7seg:数码管段码转换。 key_jitter:按键消抖与边沿检测。 key_7seg:按键显示辅助模块。 mimasuo_ctrl:密码锁状态机与开锁控制核心。 工程包含 Vivado 项目文件、Verilog 源码文件和 XDC 管脚约束文件,顶层通过模块例化方式把输入、控制、显示、报警和密码管理连接为完整密码锁系统。

开发板验证

本设计带有 Nexys A7 相关管脚约束文件,并配套开发板实物验证图片。约束中包含矩阵键盘、独立按键、拨码开关、LED、报警输出以及数码管等接口分配,可用于在开发板上进行密码输入、确认、退格、修改密码、开锁指示和报警效果验证。

矩阵键盘密码锁 FPGA 设计 Verilog Vivado 开发板验证图片 开发板.jpg

演示视频

配套演示视频展示了密码锁工程在开发板上的运行效果,可用于查看矩阵键盘输入、数码管显示、确认开锁、错误处理和报警等功能的实际表现。

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

设计文档内容包含工程文件、程序文件、程序编译、RTL 图、管脚分配以及课程设计题目说明等部分,并配有多张设计文档图片,可作为理解工程结构、模块连接和管脚配置的参考。

矩阵键盘密码锁 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

部分代码

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

module mimasuo(
input clk,//时钟
input [3:0] row,  //行
output [3:0] col,   //列
input confirm_key,//确认键--key1
input modify_key,//修改密码--key2
input lock_up_key,//上锁--key3
input back_key,//退格--key4
input reset,//SW1--(清除报警)
input admin_sw,//SW2--(管理)
output alarm,//报警(低响)
output led_open,//开锁,绿灯
output [2:0] tri_led,//指示灯

//数码管
output [7:0] seg_sel,//数码管位选
output [7:0] seg_led//数码管段选
);
wire reset_p;
assign reset_p=reset;
wire [2:0] current_state;
wire [15:0] password;
wire [15:0] correct_password;
wire confirm;
wire modify;
wire lock_up;
wire back_s;
wire to_idle_en;

//上升沿检测
key_jitter i1_key_jitter(
. clkin(clk),    
. key_in(confirm_key),//输入
. key_posedge(confirm),//消抖后按键上升沿
. key_negedge(),//消抖后按键下降沿
. key_value()//消抖后按键
);

//上升沿检测
key_jitter i2_key_jitter(
. clkin(clk),    
. key_in(modify_key),//输入
. key_posedge(modify),//消抖后按键上升沿
. key_negedge(),//消抖后按键下降沿
. key_value()//消抖后按键
);

//上升沿检测
key_jitter i3_key_jitter(
. clkin(clk),    
. key_in(lock_up_key),//输入
. key_posedge(lock_up),//消抖后按键上升沿
. key_negedge(),//消抖后按键下降沿
. key_value()//消抖后按键
);

//上升沿检测
key_jitter i4_key_jitter(
. clkin(clk),    
. key_in(back_key),//输入
. key_posedge(back_s),//消抖后按键上升沿
. key_negedge(),//消抖后按键下降沿
. key_value()//消抖后按键
);

//密码输入模块
mima_input i_mima_input(
. clk(clk),
. back_s(back_s),
. row(row),  //行
. col(col),   //列
. to_idle_en(to_idle_en),
. current_state(current_state),
. password(password)
);

//密码锁控制模块
mimasuo_ctrl i_mimasuo_ctrl(
. clk(clk),
. password(password),
. correct_password(correct_password),
. confirm(confirm),
. reset(reset_p),
. modify(modify),
. lock_up(lock_up),
. to_idle_en(to_idle_en),
. led_open(led_open),
. current_state(current_state)
);


//显示控制模块
display i_display
(
. clk(clk),
. password(password),
. state(current_state),
.correct_password(correct_password),
. admin_sw(admin_sw),//SW2--(管理)
. bit_select(seg_sel),//数码管位选
. seg_select(seg_led)//数码管段选
);

//报警模块
alarm_on i_alarm_on(
. clk(clk),
. tri_led(tri_led),
. confirm_key(confirm_key),
. current_state(current_state),
. alarm(alarm)
);

//重置密码模块
reset_password i_reset_password(
. clk(clk),
. password(password),
. correct_password(correct_password),
. confirm(confirm),
. current_state(current_state)
);
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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