当前位置: 首页 > article >正文

用FPGA和Verilog做个带数码管显示的电子密码锁(附完整代码和仿真)

基于FPGA的智能电子密码锁设计与实现从Verilog编码到数码管动态显示在物联网和智能家居快速发展的今天电子密码锁作为基础安全设备其可靠性和用户体验至关重要。本文将带您从零开始构建一个基于FPGA的电子密码锁系统不仅包含完整的Verilog代码实现还深入讲解数码管动态扫描、按键消抖等核心硬件设计技巧。1. 系统架构设计与核心模块电子密码锁的核心是一个状态机控制系统我们采用自顶向下的设计方法将系统划分为三个主要模块顶层控制模块top_fsm_lock负责模块间信号路由按键处理模块key_debounce实现机械按键的稳定检测主状态机模块fsm_lock控制密码锁的核心逻辑1.1 状态机设计原理密码锁的状态转移图包含7个主要状态localparam IDLE 7b000_0001, // 空闲状态 RIGHT_1 7b000_0010, // 第1位密码输入 RIGHT_2 7b000_0100, // 第2位密码输入 RIGHT_3 7b000_1000, // 第3位密码输入 RIGHT_4 7b001_0000, // 第4位密码输入 SUCESS 7b010_0000, // 密码正确 FAILED 7b100_0000; // 密码错误状态转移的关键条件是基于确认按键(key[2])的触发以及当前输入密码与预设密码的比较结果。这种热编码(one-hot)的状态编码方式可以避免状态寄存器出现毛刺。1.2 数码管显示方案对比我们采用动态扫描方式驱动6位数码管与静态驱动相比具有明显优势驱动方式功耗亮度均匀性硬件资源占用编程复杂度静态驱动高优多低动态扫描低良少中动态扫描的核心是通过快速切换位选信号(sel)利用人眼视觉暂留效应实现稳定显示。关键参数包括parameter MAX_1ms 16d50000; // 1ms计数器周期 always (posedge clk or negedge rst_n) begin if(!rst_n) begin sel 6b111_110; end else if(end_cnt_1ms) begin sel {sel[4:0],sel[5]}; // 循环左移 end end2. 按键消抖模块深度解析机械按键的抖动问题是数字系统设计的常见挑战。我们的消抖模块采用状态机实现具有20ms的稳定检测窗口2.1 消抖状态机工作流程IDLE状态等待按键按下检测下降沿FILTER_DOWN状态进入20ms消抖计时HOLD_DOWN状态确认按键稳定按下FILTER_UP状态检测释放并消抖关键消抖代码实现always (posedge clk or negedge rst_n) begin if(!rst_n) begin key_r0 {WIDTH{1b1}}; key_r1 {WIDTH{1b1}}; key_r2 {WIDTH{1b1}}; end else begin key_r0 key_in; key_r1 key_r0; key_r2 key_r1; end end assign n_edge ~key_r1 key_r2; // 下降沿检测 assign p_edge ~key_r2 key_r1; // 上升沿检测2.2 消抖参数优化建议针对不同品质的按键可以调整消抖时间参数parameter DELAY_20MS 1000_000; // 50MHz时钟下对应20ms实际测试中发现对于工业级按键10ms消抖时间已足够而消费级按键可能需要20-50ms的消抖时间。3. 密码管理与显示逻辑系统预设密码为16h1234采用分段式输入验证机制。每位密码输入时数码管会显示特定格式3.1 数码管显示编码方案数码管显示内容与状态密切相关我们采用查表法实现always (*) begin case (data) 4h0: seg 8b1100_0000; // 0 4h1: seg 8b1111_1001; // 1 // ... 其他数字编码 4hA: seg 8b1000_1000; // A 4hB: seg 8b1000_0011; // B 4hC: seg 8b1100_0110; // C 4hD: seg 8b1010_0001; // D 4hE: seg 8b1011_1111; // - 4hF: seg 8b1000_1110; // F default: seg 8b1100_0000; endcase end3.2 密码输入显示规则第一位输入显示AA-(值)第二位输入显示BB-(值)第三位输入显示CC-(值)第四位输入显示DD-(值)密码正确显示111111密码错误显示FFFFFF这种设计既保证了用户体验又能清晰反映系统状态。4. 系统仿真与验证方法完善的验证是FPGA设计的关键环节。我们构建了完整的测试平台涵盖典型用例4.1 测试用例设计正常密码输入流程依次输入1、2、3、4验证成功状态错误密码处理输入错误组合验证失败状态边界值测试密码位加减的溢出处理快速连续按键测试4.2 仿真关键代码// 测试第一位密码输入 tb_key[0] 0; // 按下 wait(u_top_fsm_lock.u_key_debounce.end_cnt_20ms); #(CLOCK_CYCLE*30); tb_key[0] 1; // 释放 wait(u_top_fsm_lock.u_key_debounce.end_cnt_20ms); // 测试确认按键 tb_key[2] 0; // 按下确认 wait(u_top_fsm_lock.u_key_debounce.end_cnt_20ms); #(CLOCK_CYCLE*30); tb_key[2] 1; // 释放 wait(u_top_fsm_lock.u_key_debounce.end_cnt_20ms);4.3 仿真参数优化为加速仿真我们调整了实际的时间参数defparam u_top_fsm_lock.u_key_debounce.DELAY_20MS 100; defparam u_top_fsm_lock.u_fsm_lock.TIME_10S 500; defparam u_top_fsm_lock.u_fsm_lock.TIME_300MS 15;这种参数缩放方法可以在保证功能验证的前提下大幅提高仿真效率。5. 硬件实现与优化建议在实际FPGA板级实现时还需要考虑以下优化点5.1 资源优化技巧状态机编码优化使用独热码(one-hot)减少组合逻辑计数器共享多个定时器可共用基准计数器显示缓冲增加显示数据寄存器减少毛刺5.2 扩展功能建议密码修改功能增加管理员模式错误次数限制防止暴力破解EEPROM存储保存用户设置无线控制增加蓝牙/WiFi接口// 密码存储优化示例 reg [15:0] user_password; always (posedge clk) begin if(set_new_pass) begin user_password {value_1, value_2, value_3, value_4}; end end6. 常见问题与调试技巧在实际部署中我们总结了以下经验显示闪烁问题检查1ms定时是否准确验证位选信号切换是否平滑按键响应异常调整消抖时间参数检查按键硬件连接状态机卡死添加看门狗定时器确保所有状态转移条件完备调试提示使用SignalTap等嵌入式逻辑分析仪实时抓取关键信号比仿真更能反映实际问题。通过这个完整的FPGA密码锁项目我们不仅实现了基本功能更深入理解了状态机设计、时序控制和硬件接口等核心概念。在实际项目中这种模块化设计方法可以显著提高代码的可维护性和可扩展性。

相关文章:

用FPGA和Verilog做个带数码管显示的电子密码锁(附完整代码和仿真)

基于FPGA的智能电子密码锁设计与实现:从Verilog编码到数码管动态显示 在物联网和智能家居快速发展的今天,电子密码锁作为基础安全设备,其可靠性和用户体验至关重要。本文将带您从零开始构建一个基于FPGA的电子密码锁系统,不仅包含…...

如何通过OpenColorIO-Config-ACES实现跨平台色彩管理标准化提升制作效率

如何通过OpenColorIO-Config-ACES实现跨平台色彩管理标准化提升制作效率 【免费下载链接】OpenColorIO-Config-ACES 项目地址: https://gitcode.com/gh_mirrors/op/OpenColorIO-Config-ACES 在现代视觉制作流程中,跨平台色彩一致性问题已成为制约创意协作的…...

如何用douyin-downloader实现抖音无水印批量采集:5个强力方案完整指南

如何用douyin-downloader实现抖音无水印批量采集:5个强力方案完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser…...

精密磨削电主轴故障诊断系统【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)多传感器融合数据采集与预处理:针对精密…...

如何在3秒内从任何图片提取文字:Text-Grab终极指南

如何在3秒内从任何图片提取文字:Text-Grab终极指南 【免费下载链接】Text-Grab Use OCR in Windows quickly and easily with Text Grab. With optional background process and notifications. 项目地址: https://gitcode.com/gh_mirrors/te/Text-Grab 你是…...

5个步骤轻松掌握Blazor WebAssembly:高效构建现代Web应用的实用指南

5个步骤轻松掌握Blazor WebAssembly:高效构建现代Web应用的实用指南 【免费下载链接】blazor Blazor moved to https://github.com/dotnet/aspnetcore 项目地址: https://gitcode.com/gh_mirrors/bl/blazor Blazor WebAssembly是一个革命性的Web开发框架&…...

别再为arm_sin_f32报错发愁了!STM32F103C8T6在CLion里调用DSP库的完整CMake配置流程

别再为arm_sin_f32报错发愁了!STM32F103C8T6在CLion里调用DSP库的完整CMake配置流程 如果你正在从Keil/MDK转向CLion开发STM32,并且尝试集成ARM的DSP库时遇到了undefined reference to arm_sin_f32这类恼人的链接错误,那么这篇文章就是为你准…...

月饼机排名:企业选购选型关键策略深度解析

月饼机排名与企业选购选型全攻略:高频疑问解答,选对设备少走弯路"月饼机排名≠选购唯一标准,企业选型更需结合生产需求与设备适配性" 很多企业在选购月饼机时,容易陷入排名误区,忽略实际生产场景的匹配&…...

别再死记硬背算法了!用Visualgo可视化网站,5分钟搞懂冒泡排序到快速排序

别再死记硬背算法了!用Visualgo可视化网站,5分钟搞懂冒泡排序到快速排序 第一次接触排序算法时,你是否也被那些抽象的伪代码和数学推导弄得晕头转向?当书本上的文字描述和静态图示无法让你真正理解算法如何运作时,Visu…...

从物理约束到AI加速:NVIDIA PhysicsNeMo如何重塑科学计算范式

从物理约束到AI加速:NVIDIA PhysicsNeMo如何重塑科学计算范式 【免费下载链接】modulus Open-source deep-learning framework for building, training, and fine-tuning deep learning models using state-of-the-art Physics-ML methods 项目地址: https://gitc…...

RH850 中断处理详解

Exception Cause List 下面是所有支持的exception类型,其中FENMI FEINT EIINT被称为中断:下面是每种exception类型的详细解释:两种中断地址处理方式 通过寄存器进行设置: 当RBASE.RINT 或 EBASE.RINT 1时,必然采用直…...

PlantDoc:用计算机视觉解决植物病害检测的挑战

PlantDoc:用计算机视觉解决植物病害检测的挑战 【免费下载链接】PlantDoc-Dataset Dataset used in "PlantDoc: A Dataset for Visual Plant Disease Detection" accepted in CODS-COMAD 2020 项目地址: https://gitcode.com/gh_mirrors/pl/PlantDoc-Da…...

Windows 10 也能畅享安卓生态:三步快速部署 Android 子系统

Windows 10 也能畅享安卓生态:三步快速部署 Android 子系统 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 还在羡慕 Windows 11 用户…...

告别Qt冲突!在正点原子IMX6ULL上纯净运行LVGL v8.2的完整避坑指南

告别Qt冲突!在正点原子IMX6ULL上纯净运行LVGL v8.2的完整避坑指南 当你在正点原子IMX6ULL开发板上尝试运行LVGL时,是否遇到过这样的场景:精心移植的界面刚启动,就被系统自带的Qt桌面强行抢占显示资源?或是触摸操作完全…...

企业级LLM评测框架架构设计:DeepEval的5大核心优势与实战部署方案

企业级LLM评测框架架构设计:DeepEval的5大核心优势与实战部署方案 【免费下载链接】deepeval The LLM Evaluation Framework 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval 在当今AI应用快速发展的时代,大语言模型的质量评估已成为…...

别再死记硬背了!用STM32CubeMX实战配置GPIO的推挽、开漏、上拉、下拉

STM32CubeMX实战:GPIO模式配置全解析与项目应用 第一次接触STM32的GPIO配置时,我被各种专业术语搞得晕头转向——推挽输出、开漏输出、上拉输入、下拉输入...这些概念在数据手册上冷冰冰地排列着,直到我真正用STM32CubeMX动手配置了一个LED闪…...

你的Windows优化助手:Winhance中文版完全指南

你的Windows优化助手:Winhance中文版完全指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...

别扔!2012款Mac Mini升级Monterey保姆级教程(附OpenCore EFI配置与避坑指南)

2012款Mac Mini升级Monterey全流程实战:从废旧设备到高效工作站的蜕变 每次打开那台积灰的2012款Mac Mini,总有种面对老朋友的亲切感。这款曾经风靡一时的小巧主机,如今虽已无法流畅运行最新系统,但它的金属机身和扎实做工依然透露…...

PoeCharm:中文BD计算器与流放之路角色构建优化方案

PoeCharm:中文BD计算器与流放之路角色构建优化方案 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm PoeCharm作为Path of Building的中文本地化版本,为流放之路玩家提供了专业…...

PL111 RGB LCD时序配置详解

PL111 RGB LCD 时序说明 1)文档范围 本文从两个维度整理 PL111 时序: 通俗理解(面向调试与沟通)硬件寄存器映射(面向实现与定位问题) 内容与 bsp/qemu-vexpress-a9/drivers/drv_clcd.c 的实现保持一致。2&a…...

从C++20实验性协程到C++27标准落地:某核电DCS系统3年演进路径(217万行代码迁移策略、性能基线对比、FMEA失效模式分析表)

更多请点击: https://intelliparadigm.com 第一章:C27协程标准化工业应用的里程碑意义 C27 将首次将协程(coroutines)从技术规范(TS)正式纳入核心语言标准,标志着其从实验性特性迈向高可靠性、…...

群晖NAS USB 2.5G/5G/10G网卡驱动安装完整教程:突破千兆网络限制

群晖NAS USB 2.5G/5G/10G网卡驱动安装完整教程:突破千兆网络限制 【免费下载链接】r8152 Synology DSM driver for Realtek RTL8152/RTL8153/RTL8156 based adapters 项目地址: https://gitcode.com/gh_mirrors/r8/r8152 还在为群晖NAS的千兆网口速度瓶颈而烦…...

如何免费获取IBM Plex企业级字体:完整指南与实用技巧

如何免费获取IBM Plex企业级字体:完整指南与实用技巧 【免费下载链接】plex The package of IBM’s typeface, IBM Plex. 项目地址: https://gitcode.com/gh_mirrors/pl/plex 在当今数字化时代,字体选择直接影响产品的专业形象和用户体验。IBM Pl…...

douyin-downloader架构深度解析:应对抖音内容采集的3个高效技术方案

douyin-downloader架构深度解析:应对抖音内容采集的3个高效技术方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…...

MATLAB机器人工具箱rvctools保姆级安装与避坑指南(附常见报错解决)

MATLAB机器人工具箱rvctools从安装到实战:机械臂运动学全流程解析 第一次打开MATLAB准备用rvctools做机械臂仿真时,我盯着报错信息发了半小时呆——路径设置、版本兼容、脚本报错这些坑,教程里从来不会详细告诉你。作为Peter Corke教授开发的…...

Ultimate ASI Loader终极指南:5分钟掌握游戏模组安装的完整解决方案

Ultimate ASI Loader终极指南:5分钟掌握游戏模组安装的完整解决方案 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ulti…...

AI教材写作必备:低查重AI工具,一键生成10万字专业教材!

教材编写中的 AI 工具助力 教材编写中的格式问题总是让许多作者头疼。比如,标题应该用多大字体?引用文献要按 GB/T7714 格式,还是其他特定标准?习题的排版选择单栏还是双栏?各种各样的要求让人眼花缭乱,手…...

Sentaurus TCAD准静态分析参数详解:从Increment到Goal,手把手教你读懂那段‘天书’代码

Sentaurus TCAD准静态分析参数实战指南:从代码解析到调参技巧 第一次打开Sentaurus TCAD的仿真脚本时,那些密密麻麻的参数就像电路板上的焊点——看似杂乱无章却各有其存在的意义。特别是Quasistationary块中的那些数值,它们不是随意填写的魔…...

微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆银行

微信聊天记录永久保存指南:用WeChatMsg打造你的数字记忆银行 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

FAQ DockerCompose启动顺序与健康检查

Skeyevss FAQ:Docker Compose 启动顺序与健康检查 试用安装包下载 | SMS | 在线演示 项目地址:https://github.com/openskeye/go-vss 1. 问题现象 docker compose up 后部分容器反复重启;业务日志报数据库连接失败、etcd 未就绪&#xff1…...