搜档网
当前位置:搜档网 › 数字密码锁

数字密码锁

数字密码锁
数字密码锁

目录

1 前言 (1)

2 设计背景 (2)

2.1 EDA 技术简介 (2)

2.2 电子密码锁的系统简介 (2)

2.3 系统设计要求 (2)

3 设计原理 (3)

3.1 设计概述 (3)

3.2 模块功能 (4)

3.2.1 各引脚功能 (4)

3.2.2 控制模块 (4)

3.2.3 寄存模块 (5)

3.2.4 比较模块 (5)

4 设计分析 (6)

4.1 整体波形仿真 (6)

4.2 模块波形仿真 (7)

4.2.1 寄存器模块波形仿真 (7)

4.2.2 控制器模块波形仿真 (7)

4.2.3 比较器模块波形仿真 (8)

5 设计总结 (9)

参考文献 (10)

附录 (11)

1 前言

随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。所以,人们对锁的要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC 卡锁,生物锁等。但较实用的还是按键式电子密码锁。20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。

目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。

2.1 EDA 技术简介

EDA 即电子设计自动化,是近几年来迅速发展起来的计算机软件、硬件、微电子技术交叉运用的现代电子学科,是20世纪90年代从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助翻译)和CAE(计算机辅助工程)的概念发展而来的。EDA 技术就是以计算机为工作平台,以EDA 软件工具为开发环境,以硬件描述语言为设计语言,以ASIC 为实现载体的电子产品自动化过程。EDA 软件平台上,在根据硬件描述语言HDL 完成的设计文件,自动地完成逻辑编辑编译、化简、分隔、综合及优化,布局布线、仿真、目标芯片的适配编译,逻辑映射和编程下载等工作。设计者的工作只限于软件的方式来完成对旧的硬件功能描述,要在EDA 工具的帮组下,就应用相应的FPGA 器件就可以得到最后的设计结果。尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。

2.2 电子密码锁的系统简介

通用的电子密码锁主要由以下两部分组成:数字密码输入电路、密码锁控制电路。

(1)密码锁输入电路包括时序产生电路、扫描电路、弹跳消除电路、译码电路等几个小的功能电路。

(2)密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。

2.3 系统设计要求

本文所设计的密码锁是一个具有较高安全性和较低成本的通用电子密码锁,具体功能要求如下:设计一种数字密码锁,密码由3位十进制数字组成,初始设定为“000”。可由用户任意设置,密码输入正确时开锁,密码输入错误时报警。

按“安锁”键,将锁闭合;开锁时,先按“输入密码”键,输入密码,再按“确认”键;若输入密码内容或者长度有误,则报警;只有在开锁状态下才可以重新设置新密码,先按“修改密码”键,输入新密码,再按“确认”键。

3.1 设计概述

系统是基于EDA作为开发工具,VHDL语言为硬件描述语言,QUARTUS II 作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,初步实现了设计目标。本系统具体采用元件例化的方法将各个工作模块连接在一起,实现系统完整的功能。数字密码锁的系统结构框图如图3-1所示。

密码锁密码由3位十进制数字组成,初始密为“000”,密码由用户随意设置,当密码输入正确时开锁,密码输入错误时报警。控制器是整个系统的功能核心,接受按键和其它模块传来的信息。然后,根据系统的功能将不同的控制信号送到各个模块;比较器用来比较输入数据和寄存器的数据是否相等,结果送给控制器;寄存器在密码数据校验时,输出密码以供比较,在修改密码时,保存新的密码信息;钥匙信号控制锁的开和关;报警信号可接到LED或其它防盗设备上。

按“安锁”键,将锁闭合,开锁时,先按“输入密码”键,输入密码,再按“确认”键。若输入密码有误,则报警,只有在开锁状态下才可设置新密码,应该先按“修改密码”键,输入新密码,然后按“确认”键。

图3-1数字密码锁结构框图

系统主要由3个模块组成,分别是控制模块、寄存器模块、比较器模块。3.2.1 各引脚功能

输入信号:clk 输入时钟,lock 安锁信号,start 开始输入密码,ps_ch 修改密码,enter 密码确认,yes 密码比较

输出信号:warn 警告信号,op 密码正确显示,wr寄存器读写信号,en密码输入使能

3.2.2 控制模块

控制模块采用有限状态机设计,将系统分为7个状态,即开锁状态、安锁状态、输入密码状态、密码初验正确状态、密码初验错误状态、报警状态及修改密码状态,状态转换图如图3-2所示。

系统上电时,处于开锁状态,当输入ps_ch信号时,系统进入修改密码状态;若输入lock信号,进入安锁状态,锁闭合;在安锁状态,输入start信号,进入输入密码状态;如果输入密码内容正确,进入密码初验正确状态,如果密码错误,进入密码初验错误状态;在密码初验正确状态,输入确认信号enter时,进入开锁状态;在密码初验错误状态,输入确认信号enter时,进入报警状态;在报警状态,alarm信号等于…1?。

图3-2 状态转移图

寄存器模块用于存放预设和修改后的密码,并在开锁时将所存密码输出到比较器与按键输入的密码进行比较,判断由按键输入密码是否正确的结果

3.2.4 比较模块

在数字密码器中,比较器模块的功能是对按键输入和寄存器模块的输出进行比较,然后将比较的结果送入到控制器模块。比较器的具体工作原理是:当比较结果相等时,c输出为…1?;当比较结果不相等时,c的输出为…0?。

4 设计分析

4.1 整体波形仿真

在数字密码锁代码编写完成后,用QUARTUS II对其进行编译并仿真,整个系统的仿真波形如图4-1所示。

可以看到,系统的初始密码为“000”,按“输入密码”键(start)后,“钥匙信号”(key)变为高电平,再按“确认”键(enter),此时系统为开锁状态;

在此状态下,按“修改密码”键(ps_ch),输入新密码“001”,再按“确认”键(enteR);

按“安锁”键(lock),锁闭合(key变为低电平);

再按“输入密码”键(start),此时输入密码“000”,然后按“确认”键(enter),系统报警(warn),因为新密码已变为“001”;

再次按“输入密码”键(start),此时输入密码“001”,“钥匙信号”(key)变为高电平,报警信号(warn)变为低电平,然后按“确认”键(enter)。

图4-1 数字密码锁整体仿真波形

4.2 模块波形仿真

4.2.1 寄存器模块波形仿真

寄存器模块用于存放预设和修改后的密码,并在开锁时将所存密码输出到比较器与按键输入的密码进行比较,达到判断由按键输入密码是否正确的结果。

波形仿真图如图4-2寄存器模块仿真图所示:

图4-2 寄存器模块仿真图

波形仿真分析:如图4-2当使能信号en无效时,无论输入data_in信号与写使能信号wr是否有效输出data_out都为“000”当使能信号en与写使能信号wr都有效时,将data_in输入的信号存储到寄存器中如data分别为“005”,“006”,“007”时,对应寄存器中存放“005”,“006”,“007”。当使能信号en有效而写使能信号wr无效时,无论输入信号data_in为多少,输出信号data_out都为寄存器所存内容。

4.2.2 控制器模块波形仿真

图4-3是控制器模块的仿真波形。按“输入密码”键(statr),再使“确认”键(enter)、“比较信号”键分别为高电平有效,“钥匙信号”(key)变为高电平,系统处于开锁状态;在此状态下,按“修改密码”键(ps_ch),计数器时钟信号(cnt_clk)有效计数,按“安锁”键(lock),锁闭合,钥匙信号(key变为低电平);使“确认”键(entet)为高电平、“比较信号”键为低电平,这时再按“输入密码”键(start),钥匙信号(key 变为低电平),系统报警(warn)

波形仿真分析:起始密码为“000”,安锁后锁关闭op 信号为…0?;开锁时,按下start 开锁键,密码比较yes 信号为…1?有效,输入密码正确,按下enter 确认键,锁开,锁开标志信号op 有效为…1?;开锁状态下,按下ps_ch 修改密码键,输入新密码后按确认键start ,密码修改成功,再按下lock 安锁,此时密码为新输入密码;按下输入密码键start 输入密码键若输入密码错误,按下确认键enter 后,报警warm 信号有效。

4.2.3 比较器模块波形仿真

图4-4是比较器模块的仿真波形。在数字密码锁中,比较器模块的功能是将输入数据与寄存器数据进行比较,结果送入控制器模块。比较器的具体工作原理是:当a 和b 相等时,c 输出为1,不相等时为0。

图4-4 比较器模块波形仿真

波形仿真分析:起始寄存器输出密码为“001”,键盘输入为“231”时不相等,所以输出c 为0;当寄存器输出密码为“124”,键盘输入为“124”时相等,所以输出c 为1,其他与此相同。

图4-3 控制模块仿真图

5 设计总结

VHDL语言是一种很有用的硬件描述语言,通过两周的学习与实践终于基本实现了老师要求的设计,通过自己动手实践和同学们交流,研究完成了一次设计,掌握了设计应有的基本流程,很开心,也使我对EDA课程VHDL语言有了更深刻的了解,同时也增加了我的兴趣。通过仿真分析可以看出,该密码锁达到了设计要求。

本文提出的数字密码锁由于采用VHDL语言设计,使用FPGA实现,因而体积小,功耗低、性能特别灵活,稍加修改就可以改变密码的位数和输入密码的次数,因而升级和维护都很方便。连续开锁失败后,报警系统报警,但不死锁;只有锁处于开启状态时,才可以重新设置密码;开锁后有显示开锁的输出信号,有较好的识别性。总之该密码锁具有较好的应用前景。

参考文献

[1]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2010.6

[2]刘江海.EDA技术课程设计[M].华中科技大学出版社,2009.5

[3]龙永红,彭涛.可编程逻辑器件及VHDL设计技术[M].广州:华南工学院出版社,2001

[4]周立功,EDA实验与实践[M].北京.北京航空航天大学出版社,2007

[5]乔庐峰,王志功等.VHDL数字电路设计教程[M].电子工业出版社,2010

附录

------------------控制模块-----------------------

library ieee;

use ieee.std_logic_1164.all;

entity control is

port(clk,lock,start,ps_ch,enter,yes:in std_logic;

warn,key,wr,en:out std_logic);

end;

architecture bhv of control is

type state is(inlock,input,right1,wrong,unlock,change,alarm); signal ps,ns:state;

begin

process(clk)

begin

if clk'event and clk='1'then

ps<=ns;

end if;

end process;

process(ps,lock,start,ps_ch,enter,yes)

begin

case ps is

when inlock=>key<='0';en<='0';warn<='0';wr<='0';

if(start='1')then ns<=input;

else ns<=inlock;

end if;

when input=>en<='1';wr<='0';key<='0';warn<='0';

if(enter='0')then ns<=input;

elsif(yes='1')then ns<=right1;

else ns<=wrong;

end if;

when right1=>en<='0';wr<='0';key<='0';warn<='0';

ns<=unlock;

when wrong =>en<='0';wr<='0';key<='0';warn<='0';

ns<=alarm;

when unlock =>key<='1';warn<='0';en<='1';wr<='0';

if lock='1'then ns<=inlock;

elsif ps_ch='1'then ns<=change;

else ns<=unlock;

end if;

when alarm =>warn<='1';key<='0';en<='0';wr<='0';

if enter='0'then ns<=inlock;

else ns<=alarm;

end if;

when change =>en<='1';wr<='1';warn<='0';key<='1';

if enter='1'then ns<=unlock;

else ns<=change;

end if;

end case;

end process;

end;

-----------------寄存器模块--------------------

library ieee;

use ieee.std_logic_1164.all;

entity reg is

port(clk,wr,en:in std_logic;

data_in:in std_logic_vector(11 downto 0);

data_out:out std_logic_vector(11 downto 0));

end;

architecture bhv of reg is

begin

process(clk)

variable m:std_logic_vector(11 downto 0);

begin

if clk'event and clk='1' then

if en='1'and wr='1'then m:=data_in;

end if;

if m(3 downto 0)<="1001"and m(7 downto 4)<="1001"and m(11 downto 8)<="1001" then

if wr='0'and en='1' then data_out<=m;

end if;

end if;

end if;

end process;

end;

--------------比较器模块-----------------------

library ieee;

use ieee.std_logic_1164.all;

entity cmp is

port(a,b:in std_logic_vector(11 downto 0);

c:out std_logic);

end;

architecture bhv of cmp is

begin

c<='1'when a=b else

'0';

end;

------------------顶层文件---------------------

library ieee;

use ieee.std_logic_1164.all;

entity EDA1 is

port(clk,lock,start,ps_ch,enter:in std_logic;

key_in:in std_logic_vector(11 downto 0);

warn,key:out std_logic);

end;

architecture bhv of EDA1 is

component control is

port(clk,lock,start,ps_ch,enter,yes:in std_logic;

warn,key,wr,en:out std_logic);

end component;

component reg is

port(clk,wr,en:in std_logic;

data_in:in std_logic_vector(11 downto 0);

data_out:out std_logic_vector(11 downto 0));

end component;

component cmp is

port(a,b:in std_logic_vector(11 downto 0);

c:out std_logic);

end component;

signal d,e,g:std_logic;

signal f:std_logic_vector(11 downto 0);

begin

u1:control port map (clk=>clk,lock=>lock,start=>start,

ps_ch=>ps_ch,enter=>enter,yes=>g,key=>key,

warn=>warn,wr=>d,en=>e);

u2:reg port map(clk=>clk,wr=>d,en=>e,data_in=>key_in,data_out=>f); u3:cmp port map(a=>key_in,b=>f,c=>g);

end;

相关主题