数字密码锁 FPGA 设计 Verilog Vivado

名称:数字密码锁 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本项目实现了一个 FPGA 数字密码锁系统,采用 Verilog 编写,开发环境为 Vivado。设计支持数字按键输入密码、确认开锁、修改密码、上锁、复位以及 LED 状态指示,并通过数码管接口输出显示信息,适合作为 FPGA 按键控制、状态机设计和数码管动态显示的综合练习工程。 系统顶层模块为 mimasuo,外部接口包含时钟、复位、数字输入按键 key_0 至 key_7、确认键 confirm_key、修改键 modify_key、上锁键 lock_up_key,以及开锁/关锁 LED 和两组数码管显示端口。其中 key_0 至 key_3 用于主要数字输入,key_4 至 key_7 在顶层接口中保留,便于扩展更多输入功能。 密码锁在功能上围绕“输入密码、确认判断、开锁指示、关锁控制、密码修改、倒计时显示”等流程展开。按键经过消抖处理后进入控制逻辑,控制模块根据当前状态和输入密码决定是否开锁,并通过 LED 显示开锁或关锁状态,数码管部分用于显示系统运行过程中的相关信息。

运行环境

开发语言:Verilog 开发软件:Vivado 顶层模块:mimasuo 仿真环境:Vivado XSim 工程类型:FPGA 数字逻辑工程,包含设计源码、测试文件、Vivado 工程和管脚约束文件。

设计思路

本设计以 mimasuo 作为顶层模块,将按键输入、密码判断、密码修改、上锁控制、复位密码和数码管显示拆分为多个功能模块。顶层负责连接外部按键、LED 指示和数码管接口,内部通过 password、correct_password、current_state、down_cnt 等信号在各模块之间传递当前输入密码、正确密码、运行状态和倒计时信息。 按键部分使用 key_jitter 模块对确认键、修改键和上锁键进行消抖与边沿提取,避免机械按键抖动直接影响控制状态。数字输入按键由 mima_input 模块处理,支持 key_0 至 key_3 四个数字输入,并输出对应的按键脉冲信号和 16 位密码数据,便于控制模块按位比较和状态切换。 密码锁核心逻辑由 mimasuo_ctrl 完成,根据输入密码、正确密码、确认、修改、上锁和复位信号控制开锁状态,并输出 led_open 与当前状态。reset_password 模块用于配合修改流程更新正确密码;display 模块负责将倒计时、状态或密码相关信息送到数码管显示端口,使系统具备可观察的人机交互界面。

模块结构

顶层模块:mimasuo,负责连接时钟复位、按键、LED、数码管以及各功能子模块。 主要子模块包括: reset_password:重置或修改正确密码相关逻辑。 display:数码管显示驱动模块,连接 down_cnt 和显示输出端口。 mima_input:数字按键输入处理模块,生成密码数据和按键脉冲。 key_jitter:按键消抖与边沿检测模块。 mimasuo_ctrl:密码锁主控制模块,负责状态切换、密码判断、倒计时与开锁控制。 仿真相关模块包括 mimasuo_tb,可用于 Vivado XSim 行为仿真。

开发板验证

工程提供了 Vivado 管脚约束文件 ego_1pins.xdc,可用于按约束完成 FPGA 引脚分配与上板实现。约束覆盖顶层 mimasuo 的时钟、复位、数字输入按键、确认/修改/上锁按键、开锁/关锁指示灯以及数码管显示相关端口,便于在硬件平台上进行密码输入、状态显示和开关锁指示验证。 实现工程中包含综合、实现与 bitstream 相关结果文件,适合直接在 Vivado 中打开工程后检查约束、综合实现流程,并结合实际按键和数码管观察密码锁的工作状态。

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

包含 mimasuo_tb Verilog 测试文件,可用于在 Vivado 中进行行为仿真;工程中包含 XSim 仿真相关文件,便于参考密码锁顶层模块及各子模块的联调过程。

部分代码

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

module mimasuo(
input clk,//时钟
input reset,//-复位
//数字输入按键
input key_0,//--SW0
input key_1,//--SW1
input key_2,//--SW2
input key_3,//--SW3
input key_4,//--(虚设)
input key_5,//--(虚设)
input key_6,//--(虚设)
input key_7,//--(虚设)

input confirm_key,//-确认键--S0
input modify_key,//--修改--S1
input lock_up_key,//--上锁--S2

output led_open,//开锁,灯
output led_close,//关锁,灯

output        [7:0] dig_led_1,
 output        [3:0] wei_led_1, 
 output        [7:0] dig_led_2,
 output        [3:0] wei_led_2//高电平点亮,高电平选通
);


wire key_0_p;
wire key_1_p;
wire key_2_p;
wire key_3_p;

wire [2:0] current_state;
wire [15:0] password;
wire [15:0] correct_password;
wire confirm;
wire modify;
wire lock_up;
wire [3:0] down_cnt;//10秒倒计时

wire open;
assign led_close=~open;
assign led_open=open;

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

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

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

//密码输入模块
mima_input i_mima_input(
. clk(clk),
. key_0(key_0),
. key_1(key_1),
. key_2(key_2),
. key_3(key_3),

. key_0_p(key_0_p),
. key_1_p(key_1_p),
. key_2_p(key_2_p),
. key_3_p(key_3_p),

. current_state(current_state),
. password(password)
);

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

. key_0(key_0_p),
. key_1(key_1_p),
. key_2(key_2_p),
. key_3(key_3_p),
. down_cnt(down_cnt),//10秒倒计时
. led_open(open),
. current_state(current_state)
);

//重置密码模块
reset_password i_reset_password(
. clk(clk),
. password(password),
. correct_password(correct_password),
. confirm(confirm),
. current_state(current_state)
);

//显示模块
display i_display(
.clk(clk),
.down_cnt(down_cnt),
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

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

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

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