基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁(XILINX ISE版)...

造就狂野的清楚 明德扬FPGA科教

本文为明德扬原创及录用文章,转载请注明出处!

一、总体设计

1、概述

本文基于明德扬至简设计法和明德扬设计规范,设计了一个基于FPGA的数字密码锁,实现了在拨码开关条件下,按键设置密码、按键输入解锁密码,密码正确时正确指示灯亮、密码错误时或者默认状态错误指示灯亮,密码正确时一位数码管显示1,其他情况显示0。本案例的扩展和应用在现实生活中具有重大意义。在本案例的设计过程中,应用了至简设计法、计数器模板应用等,在经过逐步改进、调试等一系列工作之后,最终达到了设计目标。

2、设计目标

(1)实现8位数字密码锁功能

(2)按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成

(3)按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成

(4)比较设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0;

3、模块功能

(1)密码模块实现功能:

SW1有效时按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成

SW2有效时按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成

(2)数码管显示模块实现功能:

密码正确时数码管显示1,否则显示0;

(3)led模块实现功能:

密码正确时led_y指示灯亮,否则led_n指示灯亮;

(4)按键模块实现功能:

将外来异步信号打两拍处理,将异步信号同步化;

实现20ms按键消抖功能,并输出有效按键信号;

4、信号定义

1)顶层模块Lock_Top.v

92d31855f1e80f16d2e5d558cd36b32a.png

2)密码模块password.v

5dea23d3515176b00844c148af672513.png

3)数码管显示模块sel_disp.v

c1342a4155aa26b41a30a8d6780f0f28.png

4)led模块led_flag.v

1648cbe4a26ec6310e410211a74fd101.png

5)按键模块key_module.v

f97b31e4d442a7d422b0fe71a0e9e671.png

5、密码模块核心代码

16a18fbc10b30d7f89f3a3c3aa801846.png

SW1有效时按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成

SW2有效时按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成

6、数码管显示

10555f3e1e5c55699cf24db5186b6e54.png

参数化设置显示0~F对应的8位数

2da7012d87110fde6be9da4e58dc13e9.png

对比设置的密码和输入的密码是否一致,密码正确时数码管显示1,否则显示0;

7、led指示灯模块

aa092c7ef04b56b7e06cc7faec8f1fd2.png

密码正确时led_y指示灯亮,否则led_n指示灯亮;

8、按键消抖代码

6136224a6b825a42899ff26d9a1826ad.png

利用明德扬的按键消抖模块,每20ms扫描一次按键输入key_in,可以达到消抖的目的,再用寄存器缓存一下,按键为低电平有效,所以检测当检测到按键有下降沿变化时,代表该按键被按下,按键有效,输出1;

9、Modelsim仿真验证

8df0334241c2d1c98f7708f9c08827b4.png

编写测试文件,添加激励,这里避免长时间仿真,需将消抖时间缩小

3535b6666cbe3ad95351479b4f972787.png

按键2按下时设置了一位密码1,再按键时设置了两位密码1;

d9d0d09ffb6a70f1171a584643c61f45.png

按键4按下时输入了一位密码1,再按键时输入了两位密码1;

82da76dad18db83d946a1ae4e0b51359.png

设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0;从仿真图可以看出符合功能要求。

在这个设计案例中,至简设计法和明德扬至简法发挥了至关重要的作用,使我能够快速准确完成设计。

本设计可以加以拓展

可以结合开发板外设和实际情况,改变设置和输入密码的方式、位数,以及密码正确与否的反应,如蜂鸣器报警等等。

对于初学者而言,流水灯太简单,复杂项目又太难,不如尝试一下这些相对简单而又酷炫的案例,并一步步拓展成大项目。赶紧动手尝试吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值