fpga电子密码锁是验证数字设计基本功的经典项目。它逼你把状态机、时序约束、按键消抖、GPIO驱动串成一条完整链路。面试被问"做过什么项目",这个比点亮LED有说服力得多。对在校学生,它是简历上第一个能讲出架构的项目;对转行的软件工程师,它是理解硬件时序最直观的入口。
核心设计拆四块:
① 状态机(FSM): 四个状态——IDLE(等待按键)→ INPUT(逐位输入密码)→ VERIFY(逐位比对)→ LOCKED/UNLOCKED(输出锁控信号)。INPUT 阶段用 4 位计数器记录已输入位数,密码正确走解锁分支,连续错误 3 次走锁定分支。状态转移条件写清楚,别把组合逻辑和时序逻辑混在一个 always 块里。
② 按键消抖: 机械按键抖动 5~20ms,50MHz 时钟下对应 2500~100000 个周期。推荐两级移位寄存器打拍:相邻两拍均为低电平且与前一拍不同,判定为一次有效按下沿。比单计数器方案更灵活——加一个 parameter 即可适配 32MHz、100MHz 等不同主频,资源只多两个触发器。
③ 密码存储与比对: 4~6 位密码存于 ROM 或寄存器组。VERIFY 阶段逐位比较,全匹配则置解锁标志。错误计数用独立 3 位寄存器,达上限进锁定倒计时:50MHz 下 60s 约 3 亿周期,32 位计数器足够。
④ 锁控输出: 解锁/锁定信号驱动电磁锁或继电器模块。务必加上下电默认锁定逻辑(复位信号拉低即锁定),防止掉电后门处于打开态。
两种都可行。单计数器(50MHz 下计 5000 周期即 100ms)写法最简,但只能滤除固定时长内的抖动,换主频就得改代码。两级移位寄存器打拍方案资源只多两个触发器,且通过参数化周期数适应不同按键寿命。实际项目推荐移位寄存器法,写进代码后改一个 parameter 即可。
### 错误锁定功能在 fpga 里怎么实现比较干净?
VERIFY 状态挂 3 位错误计数器,比对失败则计数 +1,达到 3 次跳转 LOCK 状态,内部起 60s 倒计时。归零后清零计数回 IDLE。关键细节:锁定期间必须屏蔽所有按键输入,防止用户狂按导致计数器反复溢出、逻辑进入死循环。
总结: 密码锁项目覆盖 FSM、GPIO 时序、基本 CDC 三大基础,是求职简历上性价比最高的入门项目。
思考题: 如果你的密码锁要支持"指纹+密码"双模认证,状态机需要怎么扩展?想聊具体方案,直接找我们。
CTA: 如果你正备赛或准备 FPGA 求职项目,想把密码锁这类基础项目升级到带 AXI 总线、以太网远程验证的企业级方案,点击页面右下角客服窗口,和宸极教育 FPGA 讲师 1v1 沟通。我们根据你的基础和时间,给出匹配的学习路径与项目清单。
未经许可,禁止转载!