微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的电子密码锁的研制

基于FPGA的电子密码锁的研制

时间:06-05 来源:互联网 点击:

2.6 系统主控模块

此模块是系统的核心控制模块,系统的所有控制行为都是由它完成的,采用状态机(FSM)来描述系统的控制行为。由于多进程编程状态机的输出是由组合电路发出的,因此在一些特定情况下容易产生毛刺现象。如果这些输出信号被用作时钟信号,则极易产生错误的驱动。因此本设计采用单进程来实现状态机,其优势是由时序器件同步输出,输出信号不会出现毛刺现象,从而很好地避免了竞争冒险的发生。缺点是与多进程状态机相比,输出信号要晚一个时钟周期[2]。通过反复试验在VHDL编程时将输出信号与状态转换同步进行,从而很好地解决了输出信号滞后的问题。图5为主控模块的状态转换图。其中S0为系统上电初始化状态,也是系统复位后所转入的状态。此状态下系统未设置密码。本设计设置S0状态的另一主要原因是考虑到一个完备的状态机(健壮性强)应该具备初始化状态和默认状态。当芯片加电或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。但需要强调的是,大多数FPGA有GSR(Global Set/Reset)信号,当FPGA加电后,GSR信号拉高,对所有的寄存器,RAM等单元复位/置位,这时配置于FPGA的逻辑并未生效;不能保证正确地进入初始化状态。所以使用GSR企图进入FPGA的初始化状态,常常会产生种种不必要的麻烦[3]。S1为上锁状态,S2为解锁状态,S3为解锁错误次数记录状态,S4为系统报警状态,S5为开锁状态,S6为密码更改状态。以S5状态为例给出S5状态的VHDL代码:

When s5=>
clr_nc=‘0’;
MMA=‘0’;
ED=‘1’;
EA=‘1’;
EB=‘1’;
alarma=‘0’;
unen_keya=‘0’;
if NC=4 and keyout_fun=1011 then
if REGS=ACC or PW=ACC then
states=s1;
clr_nc=‘1’;
else
clr_nc=‘1’;
end if;
elsif NC=4 and keyout_fun=1010 then
--transfer to the state of changing PW-
if REGS=ACC or REGS=PW then
--after entering the right previous PW.
states=s6;
clr_nc=‘1’;
else
clr_nc=‘1’;
end if;
end if;

3 主要功能模块的仿真

图6是键盘编码模块的时序仿真图。其中信号mm是主控模块,用来限制复位条件,即只在S0和S6状态下产生复位信号RR;信号rst_key和unen_key共同控制键盘,也是来自主控模块;sn是模块输出信号,为高电平时表示有数字键被按下;sf为高电平时表示有功能键被按下。从仿真图上可知,模块设计满足要求。

 图7是主控模块的时序仿真图。其中信号NC等于4表示连续输入了4个数字,信号nn记录密码输入错误次数。由图可知,系统初始状态为S0,设置密码后为S1,经过3次输入错误的密码时系统进入S4,再输入密码后返回S1。在S1时输入密码后经过S2进入开锁状态S5,再输入密码后则进入密码更改状态S6,然后设置新密码,设置成功后返回S1,满足系统设计要求。在S6时,系统新密码要在S5转入S6后的下一时钟上升沿时才被系统接受,这主要是因为在S5转S6状态时需要输入旧密码或优先级密码进行确认的原故。在工程实践中,考虑到实际按键要比系统时钟慢,所以在此期间,不可能输入4位数字,因而系统不会出现密码遗漏的问题。而其他状态下,输出信号与状态转换是一致的,这样就克服了输出信号比多进程晚一个时钟周期的缺点。

本文介绍了在FPGA可编程逻辑器件上利用状态机(FSM)实现的电子密码锁,从实际工程设计角度阐述了其工作原理、系统结构、软件设计方法、系统调试及设计注意点。实现了对密码设置、密码更改、上锁、解锁、密码防盗报警等功能。文中对主要模块的程序进行了时序仿真,并在FPGA(EP1C6Q240C8)上下载实现,仿真与实测结果都表明该密码锁满足功能设计要求,且系统工作稳定。此电子密码锁是以实际需求为出发点来完成研制的,具有很好的实用价值和市场前景。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top