【至简设计案例系列】基于FPGA的密码锁(XILINX ISE版)
本文为明德扬原创及录用文章,转载请注明出处!
作者:造就狂野青春
一、总体设计
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、密码模块核心代码
SW1有效时按键1、2设置密码,按键1有效时设置一位密码0,按键2有效时设置一位密码1,按下8次后密码设置完成
SW2有效时按键3、4输入密码,按键3有效时输入一位密码0,按键2有效时输入一位密码1,按下8次后密码输入完成
6、数码管显示
参数化设置显示0~F对应的8位数
对比设置的密码和输入的密码是否一致,密码正确时数码管显示1,否则显示0;
7、led指示灯模块
密码正确时led_y指示灯亮,否则led_n指示灯亮;
8、按键消抖代码
利用明德扬的按键消抖模块,每20ms扫描一次按键输入key_in,可以达到消抖的目的,再用寄存器缓存一下,按键为低电平有效,所以检测当检测到按键有下降沿变化时,代表该按键被按下,按键有效,输出1;
9、Modelsim仿真验证
编写测试文件,添加激励,这里避免长时间仿真,需将消抖时间缩小
按键2按下时设置了一位密码1,再按键时设置了两位密码1;
按键4按下时输入了一位密码1,再按键时输入了两位密码1;
设置的密码和输入的密码是否相同,正确时正确指示灯亮,数码管显示1,否则错误指示灯亮,数码管显示0;从仿真图可以看出符合功能要求。
在这个设计案例中,至简设计法和明德扬至简法发挥了至关重要的作用,使我能够快速准确完成设计。
本设计可以加以拓展:
可以结合开发板外设和实际情况,改变设置和输入密码的方式、位数,以及密码正确与否的反应,如蜂鸣器报警等等。
对于初学者而言,流水灯太简单,复杂项目又太难,不如尝试一下这些相对简单而又酷炫的案例,并一步步拓展成大项目。赶紧动手尝试吧。
【至简设计案例系列】基于FPGA的密码锁(XILINX ISE版)相关推荐
- 基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁设计(altera版)...
秦红凯 明德扬FPGA科教 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码锁因为它的保密性很高,安全系数也 ...
- 【至简设计案例系列】基于FPGA的密码锁设计(altera版)
本文为明德扬原创及录用文章,转载请注明出处! 作者:秦红锴 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码 ...
- 【至简设计案例系列】基于FPGA的频率、电压测量仪器
作者:造就狂野青春 1.概述 基于明德扬至简设计法和明德扬设计规范,设计一个基于FPGA的频率.电压测量仪器,实现了测量AD采集后的波形频率和电压(峰峰值),并将数值显示在数码管上.这个案例通过扩展还 ...
- 【至简设计案例系列】基于FPGA的曼彻斯特编码解码设计
作者:小周 实验简述 将输入的数据流经过曼彻斯特编码器编码后经过解码器恢复为原来的输入序列. 一.曼彻斯特码简介 曼彻斯特码(Manchester code),又称数字双向码.分相码或相位编码(PE) ...
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层 给我们的框架分为3层,分别是叫逻辑层,数据层,对象层. 这三层的存储格式都用xml来表示. 1.逻辑层 (test ...
- 设计自己的基于Selenium 的自动化测试框架-Java版(2) - 定义自己的工作流程
设计自己的基于Selenium的自动化测试框架-Java版(2) -定义自己的工作流程 Work flow chart 上图是整个工作流程,红色虚线上面的需要手动来完成,红色虚线下面的实现自动化. 我 ...
- Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现
注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...
- java交通信号灯毕业论文范文_信号灯设计论文,关于基于FPGA的交通信号灯控制系统设计相关参考文献资料-免费论文范文...
导读:本文关于信号灯设计论文范文,可以做为相关参考文献. 文/ 胡桂戎 陕西警官职业学院 陕西 西安 710021 [摘 要]本文采用FPGA 设计,结合了道路传感器,设计了交通信号灯全感应自适应的控 ...
- verilog 算法加速模块设计流程_基于FPGA的图像加速器的设计
基于 FPGA 的图像加速器的设计 摘 要 介绍了一种基于 FPGA 的图像加速器的设计.本文硬件加速器的实质是通过流水线 设计来减少多余的操作达到加速的目的的, 内存是由 DMA 控制器访问, 之后 ...
最新文章
- SAP QM 样品废弃后如何删除physical samples记录?
- CSAPP第五章就在“扯淡”!
- 正确使用Windows Azure 中的VM Role
- 《零基础看得懂的C语言入门教程 》——(五)C语言的变量、常量及运算
- 大数据之Spark简介及RDD说明
- 【6.0】组合主键映射
- Qt系列教程-yafeilinx Qt入门教程
- zabbix利用sendEmail邮件报警
- 为什么在 Windows 7系统下无法显示 STEP 7 MicroWin SP9的帮助文件?
- 010Editor分析
- 云知声打磨四年的AI芯片出炉,中国造芯势力群起
- 中国古典学名著选读网课考试题2021版答案
- Kotlin与Java的异同
- global在python中啥意思_Python中global用法详解
- IT行业是吃青春饭的吗?
- Unity插件篇:Pocket RPG Weapon Trails(武器拖尾特效)部分解读以及基本用法
- 怎样把电脑默认安装C盘的位置改成D盘?
- U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学
- win+G没反应,Xbox game bar按不出来
- 卡塔尔世界杯-诸神黄昏