基于FPGA的电子密码锁的设计Word文档下载推荐.docx
- 文档编号:15815783
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:7
- 大小:219.97KB
基于FPGA的电子密码锁的设计Word文档下载推荐.docx
《基于FPGA的电子密码锁的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子密码锁的设计Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
本设计主要实现以下六个功能:
(1)初始密码设置:
系统上电后输入4位数字并按“*”后密码设置成功系统进入上锁状态。
为了实际需要,系统另设置了一个4位数的优先级密码,当用户忘记密码或被他人更改密码后,可以用优先级密码清除所设密码。
(2)密码更改:
为了密码安全及避免误操作,只能在开锁状态下先输入旧密码后才能更改系统密码,然后输入4位新密码后按“*”。
(3)解锁:
输入密码或优先级密码后按“#”,系统即解锁。
(4)密码保护:
密码输入错误时,系统自动记录一次错误输入,当错误输入次数等于3次时,系统报警并使键盘失效5分钟,以免密码被盗。
(5)清除输入错误:
当输入数位小于4位时可以按“*”清除前面所有的输入值,清除为“0000”。
(6)系统复位:
按“*”和“#”后系统即复位到初始状态。
考虑到实际情况,系统只在密码更改状态和系统初始状态下才能复位。
2系统设计思路
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
本文采用自顶向下的模块化设计方法,先对系统级进行功能描述,再进行功能模块的划分,最后分别对各个子模块进行VHDL建模。
所设计的电子密码锁系统结构如图1所示。
键盘消抖键盘编码输入处理显示
系统控制
键盘矩阵时钟及扫描
图1系统结构图
2.1时钟产生模块
此模块主要功能是产生时钟信号和键盘扫描信号。
主要产生三个时钟信号(16Hz、64Hz、100kHz),分别为系统各个功能模块提供时钟驱动信号。
其中键盘扫描模块包括在时钟产生模块中,用来产生扫描信号。
由于要产生多个时钟信号。
密码输入一般采用机械式和触摸式两种键盘。
由于机械式键盘具有成本低、结构简单、可靠性高、应用广泛等优点,其按键分布及键值编码如图2所示。
其中‘*’、‘#’为多功能组合键。
键盘扫描电路用来产生扫描信号KH,其按照1110-1101-1011-0111的规律循环变化,并通过KC来检测是否有键按下。
其他键也是类似原理。
特别值得注意的是键盘扫描电路扫描时钟的确立,如果扫描时钟不合适,将产生键按下时反应太慢,或KC产生错误的输出。
2.2按键消抖模块
本设计采用机械键盘,其缺点是易产生抖动,因此键盘输出KC[20]必须经过消抖电路后才能加入到键盘编码模块,以避免多次识别。
此模块采用状态机设计,其状态转换图如图3所示。
只有当连续检测到3次低电平输入,模块才输出一次低电平。
消抖电路的时钟选择很关键,选择不当则不能正常工作。
因为键盘扫描电路的时钟是16Hz且扫描信号为4组循环输出,所以消抖电路要能够在4个键盘扫描时钟内检测出是否有键按下就必须设置其时钟信号至少为键盘扫描时钟的4倍。
2.3键盘编码模块
上述的键盘中可分为数字键和功能键,其中数字键用来输入数字,但键盘所产生的信号KC[20]并不能直接用于键盘输入处理模块,因此必须由键盘编码电路对数字按键的输出形式进行规划。
同时多功能键‘*’、‘#’也分别被规划为“1010”和“1011”。
另外,在系统规划时,也将系统复位电路规划在此模块内,复位信号是由键盘编码模块和系统主控模块输出的系统复位辅助信号mm共同作用产生,从而实现只能在密码更改状态和系统初始状态下才能进行系统复位,确保系统安全可靠。
2.4按键输入处理模块
按键输入处理模块用来储存每次按键产生的值,以免覆盖前面输入的数据,此模块使用串行移位寄存器对依次输入的4位十进制数字进行存储。
按键输入超过4位时,后面的输入将被忽略。
2.5显示模块
为了节省I/O管脚和芯片内部资源,本设计采用动态扫描的方法进行显示。
模块用100kHz时钟信号和人眼的视觉暂留效应使4位数码管看起来像是同时点亮。
图4是根据VHDL代码所绘制的显示模块框图。
其中多路数据选择器是由按键次数(NC)控制选择哪一个数码管和哪一组输入数据。
2.6系统主控模块
此模块是系统的核心控制模块,系统的所有控制行为都是由它完成的,采用状态机(FSM)来描述系统的控制行为。
由于多进程编程状态机的输出是由组合电路发出的,如果这些输出信号被用作时钟信号,则极易产生错误的驱动,其优势是由时序器件同步输出,输出信号不会出现毛刺现象,从而很好地避免了竞争冒险的发生。
缺点是与多进程状态机相比,输出信号要晚一个时钟周期。
通过反复试验在VHDL编程时将输出信号与状态转换同步进行,从而很好地解决了输出信号滞后的问题。
图5为主控模块的状态转换图。
其中S0为系统上电初始化状态,也是系统复位后所转入的状态。
本设计设置S0状态的另一主要原因是考虑到一个完备的状态机应该具备初始化状态和默认状态。
当芯片加电或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。
但需要强调的是,大多数FPGA有GSR(GlobalSet/Reset)信号,当FPGA加电后,GSR信号拉高,对所有的寄存器,RAM等单元复位/置位,这时配置于FPGA的逻辑并未生效;
不能保证正确地进入初始化状态。
所以使用GSR企图进入FPGA的初始化状态,常常会产生种种不必要的麻烦[。
S1为上锁状态,S2为解锁状态,S3为解锁错误次数记录状态,S4为系统报警状态,S5为开锁状态,S6为密码更改状态。
3.重要程序模块分析
1,密码设置模块
process(clk)---定义个存储器将密码存放在keyin中
begin
ifclk'
eventandclk='
1'
then
keyin<
=key;
endif;
endprocess;
prr<
=pdanorrw1orrinorok;
st:
process(keyin,prr,ok1)-----第一次修改密码
ifok1='
thenstart<
='
0'
;
elsif(keyin/="
000000"
andprr='
)then
start<
elsestart<
endprocess;
inkey:
process(key,start,clk)
begin----输入密码时间进入记时状态
thenok1<
ok2<
ifstart='
thensbuf1<
=keyin;
----将密码放入rom1暂存器中
ifok='
thenok2<
elsifcnt="
100"
thencnt<
="
000"
;
ok1<
--5秒到将cnt值零将ok1值置高
elsecnt<
=cnt+'
endif;
sbuf1<
=sbuf1;
----当start=‘1’时cnt永远保持‘0’
2,报警信号产生模块:
pandan:
process(ok,ok1,ok2,clk,start)---输入密码用于判断密码是否正确
ifok2='
orok1='
thenpdan<
------开锁信号
elsifclk'
ifpdan='
ifcnt1="
10011"
pdan<
--20秒后判断结束,进入等待外部输入状态
else
cnt1<
=cnt1+'
00000"
---等待状态时cnt1一直为‘0’
3.显示模块
Display:
process(open,rw,rin,clk1)-----显示程序
ifopen='
then------开锁信号密码正确
red<
green<
speaker<
-----红灯灭,绿灯亮
else------密码错误
=clk1;
----红灯亮,绿灯灭,
elsifrw='
then----第一次修改密码显示状态
speaker<
elsifrin='
else
4主要功能模块的仿真
图6是键盘编码模块的时序仿真图。
其中信号mm是主控模块,用来限制复位条件,即只在S0和S6状态下产生复位信号RR;
信号rst_key和unen_key共同控制键盘,也是来自主控模块;
sn是模块输出信号,为高电平时表示有数字键被按下;
sf为高电平时表示有功能键被按下。
从仿真图上可知,模块设计满足要求。
不管你是一名逻辑设计师、硬件工程师或系统工程师,甚或拥有所有这些头衔,只要你在任何一种高速和多协议的复杂系统中使用了FPGA,你就很可能需要努力解决好器件配置、电源管理、IP集成、信号完整性和其他的一些关键设计问题。
不过,你不必独自面对这些挑战,因为在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 电子 密码锁 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)