明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 6000|回复: 0

【至简设计案例系列】基于FPGA的密码锁(XILINX ISE版)

[复制链接]
发表于 2020-3-28 17:01:58 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
至简案例系列:密码锁
作者:造就狂野青春
本文为明德扬原创及录用文章,转载请注明出处

一、总体设计

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

信号
定义
clk
系统时钟
rst_n
低电平复位信号
key_in
按键输入
sw
拨码开关
led_y
正确指示灯
led_n
错误指示灯
seg_sel
数码管位选信号
segment
数码管显示信号



2)密码模块password.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
key_vld
按键有效
SW
拨码开关
password_set
设置的密码
password_shift
输入的密码

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

信号
定义
clk
系统时钟
rst_n
低电平复位信号
password_set
设置的密码
password_shift
输入的密码
seg_sel
数码管位选信号
segment
数码管显示信号



4)led模块led_flag.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
led_y
正确指示灯
led_n
错误指示灯

5)按键模块key_module.v

信号
定义
clk
系统时钟
rst_n
低电平复位信号
key_in
按键输入
key_vld
有效按键

5.密码模块核心代码

4.png

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

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

6.数码管显示

5.png

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

6.png

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

7.led指示灯模块

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

8.按键消抖代码

8.png

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

9、Modelsim仿真验证

9.png

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

10.png

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

11.png

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

12.png

设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0;从仿真图可以看出符合功能要求。
在这个设计案例中,至简设计法和明德扬至简法发挥了至关重要的作用,使我能够快速准确完成设计。本设计可以加以拓展:

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

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

FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-11-22 19:06 , Processed in 0.057028 second(s), 24 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表