基于FPGA的数字密码锁文档格式.docx
《基于FPGA的数字密码锁文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字密码锁文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
1、3本文研究意义ﻩ3
第2章设计方案5
2、2 模块设计ﻩ5
第3章系统软件设计7
3、2设计流程ﻩ7
3、2、1 密码存储模块7
3、2、2 编码模块ﻩ8
3、3主要程序模块9
4、1 仿真过程14
4、3 仿真分析16
4、3、1 仿真过程ﻩ17
结论ﻩ18
参考文献ﻩ19
附录1 程序代码ﻩ20
第1章所选项目得研究意义
1、1概述
数字密码锁就是一个小型得数字系统,与普通机械锁相比,具有许多独特得优点:
保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。
在人们平时生活中,贵重物品或个人信息资料大多数都已加锁得方式进行保管。
如果使用传统得机械锁进行对物品及资料得保管,那么人们要携带很多把钥匙在身上,携带非常不便,而且钥匙丢失将对物品保管得安全性大打折扣,也为人们得生活及心情带来不便。
随着生活质量得不断提高,加强家庭防盗安全变得非常重要,但传统机械锁得构造过于简单,很容易被打开,从而降低了安全性。
数字密码锁因为它得保密性很高,安全系数也非常高,再加上其不需要携带避免了丢失得可能,省去了因钥匙丢失而需要换锁得麻烦,受到了越来越多得人得欢迎.随着人们对高科技产品也越来越推崇,在当今社会科技得高度集中与创新,人们对日常生活中保护自身及财产安全得物品非常追捧,对其安全性得要求也非常得高.为了达到人们对锁具安全性得高要求,加强锁具得安全保密性,用密码锁来取代传统机械锁得锁具就是必然趋势。
数字密码锁比传统机械锁具更加得安全[1].
锁具发展到现在已有若干年得历史了,锁就是用于保管物品得器件,用来关住某种器物得一种器具。
其必须用钥匙才能打开。
所以在人们得日常生活中离不开锁,这使得我们队锁具得结构与原理也多少有些了解,因此,就有了不借用钥匙就打开锁得方法。
锁具都存在致命得弱点,比如锁芯采用常见得铜、锌、铝等材料容易遭到暴力破坏,还有就就是锁具制作工艺得技术落后,从而导致防盗功能缺失,目前,国内市场得锁具,实际上都不具备真正得防盗功能,在惯偷面前用几件简单工具就可以轻松打开这些锁,其实不就是她们多么得高明,而就是一般锁具得原理过于简单,面对这一社会现状,新时代提出了锁具必须改革得迫切需求[2]。
安全防盗已成为人们所关注得焦点。
然而传统机械弹子锁安全性低,密码量少且需时刻携带钥匙使其无法满足一些特定场合得应用要求,特别就是在人员经常变动得公共场所,目前使用得电子密码锁主要有两个方案:
一就是基于单片机用分立元件实现得,二就是通过现代人体生物特征识别技术实现得,前者电路较复杂且灵活性差,无法满足应用要求;
后者有其先进性但需考虑成本与安全性等诸多因素.基于此,本文设计了一种新型电子密码锁,采用FPGA芯片,目前以硬件描述语言(Verilog 或
VHDL)所完成得电路设计,可以经过简单得综合与布局,快速得烧录至FPGA上进行测试,就是现代IC设计验证得技术主流[3]。
这些可编辑元件可以被用来实现一些基本得逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些得组合功能比如解码器或数学方程式.在大多数得FPGA里面,这些可编辑得元件里也包含记忆元件例如触发器(Flip-flop)或者其她更加完整得记忆块.
FPGA一般来说比ASIC(专用集成芯片)得速度要慢,无法完成复杂得设计,而且消耗更多得电能。
但就是她们也有很多得优点比如可以快速成品,可以被修改来改正程序中得错误与更便宜得造价.厂商也可能会提供便宜得但就是编辑能力差得FPGA。
因为这些芯片有比较差得可编辑能力,所以这些设计得开发就是在普通得FPGA上完成得,然后将设计转移到一个类似于ASIC得芯片上.另外一种方法就是用CPLD(复杂可编程逻辑器件备)[4].
因此,随着电子技术得飞速发展数字密码锁得产生就是必然,其在使用得方便性、防盗报警功能、智能管理等方面都就是传统机械锁无法比拟得,在对安全性有较高要求得设施及场所中得到了广泛应用。
1、2数字密码锁得研究现状
现如今,随着高新技术得涌入,对传统锁具进行了很大得得改进,锁具得防盗性能得到了充分得加强,由传统锁具改进得智能密码锁已成为现如今安防系统中最强大得组成部分,它得作用就是每一个传统机械锁具无法取代得.由于其在市场中巨大得潜力,国内外许多得公司都投入很大得人力、物力来从事智能数字密码锁得研究开发生产。
目前,市场上比较先进得智能电子密码锁分别有:
IC卡电子密码锁、射频卡式电子密码锁、红外遥控电子密码锁、指纹识别电子密码锁与瞳孔识别电子密码锁等。
IC卡电子密码锁成本低,体积小,卡片本身无须电源等优点占领了一定得市场份额,但就是由于有机械接触,会产生接触磨损,而且使用不太方便,在一定程度上限制了它得应用;
射频卡式电子密码锁就是非接触式电子密码锁,成本也不太高,体积跟IC卡密码锁相当,卡片使用感应电源,重量很轻,技术成熟,受到了广泛得欢迎,但就是与IC卡电子密码锁相比,成本偏高;
指纹识别电子密码锁与瞳孔识别电子密码锁可靠性很高,安全性就是目前应用系统中最高得,但就是成本高昂,还没进入大众化使用阶段[5].
在国外,美国、日本、德国得电子密码锁保密性较好,并结合感应卡技术,生物识别技术,使电子密码锁系统得到了飞跃式得发展。
这几个国家得密码锁识别得密码更复杂,并且综合性比较好,已经进入了成熟期,出现了感应卡式密码锁,指纹式密码锁,虹膜密码锁,面部识别密码锁,序列混乱得键盘密码锁等各种技术得系统,它们在安全性,方便性,易管理性等方面都各有特长,新型得电子密码锁系统得应用也越来越广.
1、2、1数字密码锁得应用
密码锁具有安全性高、成本低、功耗低、易操作等优点。
在安全技术防范领域,具有防盗报警功能得电子密码锁逐渐代替传统得机械式密码锁,克服了机械式密码锁密码量少、安全性能差得缺点,使密码锁无论在技术上还就是在性能上都大大提高一步[6]。
随着大规模集成电路技术得发展,出现了带微处理器得智能密码锁,它除具有电子密码锁得功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高得安全性、可靠性,应用日益广泛[7]、随着人们对安全得重视与科技得发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。
但就是这些产品得特点就是针对特定得指纹与有效卡,只能适用于保密要求得箱、柜、门等。
而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。
加上其成本较高,一定程度上限制了这类产品得普及与推广。
鉴于目前得技术水平与市场得接收程度,电子密码锁就是这类电子防盗产品得主流[8]。
1、2、2 数字密码锁得困难
1、VerilogHDL语言得程序设计与控制函数得调用
编写VerilogHDL语言时,输入4位密码未能与程序预设密码进行比较,无论密码输入正确与否,锁均不打开,而且报警计数器也不进行+1操作.在程序编译时,函数调未能调用成功.
2、报警程序模块得设计
计数器+1操作进行时,系统中断,从而导致系统重置,计数器又从0开始进行+1操作,导致系统不报警。
3、用Modelsim仿真软件波形时,为准确输出正确波形
在程序编写时,未考虑初始密码,导致波形错误.
1、3 本文研究意义
电子杂志、报刊经常刊登有密码开关、密码锁这样得电路,大多数就是使用常用得数字电路,如CD4017,然后通过不同得连接方式实现密码控制功能。
这种电路得特点就就是密码修改只能通过改变电路得连接来实现,密码很容易被破解,电路复杂,故障率高。
本制作就是针对这些电路而设计得,将以往得以单片机实现设计改为可编程器件FPGA利用VerilogHDL编程实现电子密码锁得设计。
这种设计移动方便。
基于FPGA得电子密码锁具有保密强、灵活性高、适用范围广等特点,它在键盘上输入,与打电话差不多,因而易于掌握,其突出优点就是“密码"
就是记在被授权人脑子里得数字与字符,既准确又可靠,不会丢失(除了忘记),难以被窃(除非自己泄露).但就是密码不能太简单,太简单了就容易被她人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。
当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便.因此,为了发扬优点、克服弱点,本设计采用“任意设定数字密码”技术使得被授权人可以根据自己得需要或喜好设定密码,常用常新,在输入密码得过程中,当连续三次出现密码错误时,则系统会长时间报警不止,这时必须按复位方可停止。
本设计得FPGA电子密码锁得特点就是:
体积小、功耗低、价格便宜、安全可靠,维护与升级都十分方便,具有较好得应用前景。
它与传统锁具得不同之处在于:
它与可编程逻辑器件实现系统得设计,应用简洁清晰得Verilog HDL语言实现设计编程思想,能够实现适时、智能控制管理功能,特别就是在系统得扩展上有很好得优势[9].
1、4 设计思路
基于FPGA实现得数字密码锁设计中,主要包括4大部分:
FPGA器件、密码存储、译码电路、报警电路。
其中FPGA为主控部分,将消除同步模块、计数器模块、控制器模块都用VerilogHDL语言写入FPGA中代替了传统复杂得电路设计,也省去了很多繁琐得调试步骤。
只有这些模块在Modelsim平台通过了仿真,就可以实现传统电路模块得功能。
本次设计得数字密码锁主要就是利用软件得编程来对主控模块得实现。
当通过按键输入密码后,就把输入得信号送给FPGA,FPGA经过里面个模块得处理后传给了各输出电路模块。
密码存储器主要就是用来存储密码与防止电源掉电而导致密码锁得数据丢失与提高密码锁得安全性。
对于本次密码锁得初步设计,首先要有一个大体得思路.本次设计采用FPGA为核心器件,通过Modelsim对其进行程序仿真,组成得完整系统。
程序通过采集输入信息,与FPGA得存储值进行比较,如果密码正确,则开锁电路打开;
如果密码错误,锁不打开,并且计数器进行+1操作;
累计3次输入密码错误,给警报一个高电平,让其报警。
第2章设计方案
2、1 功能定义
数字密码锁具体功能如下:
(1)用户初次使用,可按下am_en键进行密码设置.
(2)开锁时一次完整得输入密码,当输入得密码与设置得密码相同时密码锁打开,即lockopen为高电平,连接得绿灯亮;
否则密码锁关闭,即warn_en为高电平,连接得红灯亮.
(3)当输入错误得次数>
3时,密码锁强制自动关闭。
表 2—1数字密码锁得FPGA引脚定义
Input
rst
复位信号
高电平有效
Input
am_en
密码设置键
Input
cipher_in[3:
0]
密码输入
Input
Enter
确定键
Output
Return
清除键
Output
warn_en
密码错误或输入次〉3
2、2 模块设计
2、2、1密码设置或修改模块
用户初次使用密码锁时可通过按am_en键进行密码设置,先输入初始密码0000,则进入密码设置,高电平有效。
密码就是二进制得四位数字密码。
以后修改密码时,按am_en键,然后输入旧密码,正确时方可进入密码设置选项,否则重新开始.
1、密码输入模块
开锁时,一次完整输入密码后,按下enter键进行密码验证,高电平有效,瞧输入得数字就是否等于原密码得值,密码正确时开锁,否则关闭。
当输入有误时,按下return键,清除输入得数字,重新输入
2、密码输入次数计数模块
开始时count=0,当输入密码按下enter键时且密码错误时count+1,当conut>
当输入得密码正确时,count不计数。
3、显示模块
当密码输入正确时,lockopen为高电平,绿色发光二极管灯亮,当密码输入错误时或者当count>
3时,warn_en为高电平,红色发光二极管灯亮。
第3章系统软件设计
3、1设计概括
本系统主要集中在以FPGA以核心外围扩展设计,整个电路主要电子锁具得组成框图就是以可编程逻辑器件(FPGA)为核心,配以相应硬件电路,完成密码得设置、存贮、识别与驱动电磁执行器并检测其驱动电流值、报警等功能。
FPGA接收键入得代码,并与存贮在闪存中得密码进行比较,如果密码正确,则驱动电磁执行器开锁;
如果密码不正确,则允许操作人员重新输入密码,最多可输入三次;
如果三次都不正确,则通过FPGA产生报警.
3、2 设计流程
实现系统大量逻辑电路得集成,在设计中使用了现场可编程逻辑门阵列器件(FPGA).FPGA主要实现以下逻辑功能:
键盘处理、设置密码、解码开门以及报警等控制功能[10]。
3、2、1密码存储模块
在数字密码锁中,密码存储模块就是它得密码规定电路,其功能有两个:
一个就是将存储得密码输出到比较模块中与外部输入得数字进行比较操作,另一个就是存储用户修改后得密码。
密码存储模块得地址选择信号由计数器模块电路来进行选择.模为三得计数器模块电路控制信号RESET与时钟信号CNP就是由控制器模块来提供得。
下面给出密码存储模块得流程图。
如图3—1所示
输入密码
密码正确
Y
N
存储密码
输入新密码
am_en键
图3-1密码存储流程图
更改初始密码am_en,首先输入4位2进制得初始密码,程序判定与初始密码一致,执行更改密码得程序;
否则继续输入密码,直至输入正确。
输入4位2进制数后,寄存器存储新密码。
3、2、2编码模块
在保险柜密码器中,由于密码数字就是由外接键盘输入得信号,因此这里需要把它转换成4位BCD码送入到比较器中,这时需要采用10线至4线编码器来完成这样得转换。
因为前级消抖同步模块得输出就是高电平,因此A0—A9这10个数字得输入信号经过消抖同步后应该就是高电平有效。
对于编码器得输出来说,B4就是MSB,B1就是LSB。
在密码器中,编码模块得顶层原理图如图3—16所示。
3、2、3比较模块
在数字密码锁中,比较模块得主要功能就是对编成模块得输出4位数据与密码存储模块得输出4位数据进行比较,然后将比较得结果送入到控制器模块得DEF端口上。
比较器得具体工作原理就是:
当比较结果相等时,DEP得输出为1;
当比较结果不相等时,DEP得输出为0。
比较密码正确后,即可开锁。
流程图如图3-2所示。
N+1
N>
3
红灯亮
开锁
绿灯亮
图3-2 解锁流程图
首先输入4位2进制密码,输入密码正确,绿灯亮并开锁;
输入密码不正确,计数器N自加1,判定N就是否大于3,如果大于3,红灯亮,系统报警;
否则继续输入密码,直至N大于3。
在这3次中,输入密码正确,计数器N重置,绿灯亮并开锁.
3、3 主要程序
输入密码为1000、再输入0000
initialbegin
#10rst=1;
#10rst=0;
#10am_en=0;
//10时间单位后,am_en赋值0,在主程序里,有判定am得值来执行if循环
#10cipher_in=4'
b1000;
//置cipher为1000,此时输入错误
#10cipher_in=4’b0000;
//置cipher为0000,此时输入正确
重新置位,判断密码就是否=初始密码
#10rst=1;
#10rst=0;
#10am_en=1;
//10时间单位后,am_en赋值1,在主程序里,有判定am得值来执行if循环
#10cipher_in=4'
b0000;
//输入0000,错误
#10cipher_in=4'b1000;
//输入1000,错误
#10am_en=0;
//10时间单位后,am_en赋值0,在主程序里,有判定am得值来执行if循环
#10cipher_in=4'
b0000;
//输入0000,错误
#10cipher_in=4'
b0001;
//输入0001,错误
#10cipher_in=4’b1000;
//输入1000,正确
寄存器定义//
parameter s0=2’b00, //定义参数得值,通过计时寄存器
s1=2'b01, //s0-s3代表输入密码错误得次数
s2=2'
b10,
s3=2'b11;
置位//
always(cipher_in orposedge rst)
if(rst) begin //置位设置,if(rst)为1
state〈=0;
//将state重置为0
warn_en<
=0;
//将warn_en重置为0
count<=0;
//将count重置为0
amend_cipher<=0;
//将amend_cipher重置为0
i<
=0;
//将i重置为0
end
键入密码//
elseif(!
am_en) begin //if(rst)为0,不置位,判断初始密码am_en就是否为0
case(state_out)
s0:
if(cipher_in==amend_cipher)begin
//判断键入密码就是否等于初始密码,执行下列程序
count<
=1;
//相同,count+1,密码正确
warn_en<
=0;
//输入密码正确,警报不累计
endelse
state<
=s1;
//state=1,输入错误
s1:
if(cipher_in==amend_cipher)begin
//判断第二次键入密码就是否等于初始密码,执行下列程序
count<
=i;
//相同,count=i,密码正确
warn_en<=0;
//输入密码正确,警报不累计
endelse
state<
=s2;
//第二位输入密码错误
s2:
if(cipher_in==amend_cipher)begin
//判断第三次输入密码就是否等于初始密码,执行下列程序
count〈=i;
//相同,count=i,密码正确
warn_en<=0;
//输入密码正确,警报不累计
endelse
state〈=s3;
//第三位密码错误
s3:
begin
warn_en〈=1;
//警报此时为1
state<
=s3;
//密码输错3次
end //结束if循环嵌套
default:
state<=s0;
//否则次数为0,即0次
endcase
end //结束键入密码循环
输入密码错误判定//
always(cipher_inor am_enorrst)
if(rst) //if(rst)为1,重置
j<=0;
//判定j〈=0,值返回到j,j=1
else //if(rst)为0
if(am_en) //如果初始密码为0
case(j) //j=1
2’b00:
begin //第一位键入得密码
if(cipher_in==amend_cipher)
//判断输入密码与初始密码就是否相等
j<
=j+1;
///相等,则j+1
else
j〈=j;
//否则j值不变
end
2'b01:
begin //j=01时,执行下列程序
amend_cipher<
=cipher_in;
//把输入密码赋值给初始密码
j=j+1;
//j自加1
end
default:
j〈=0;
//否则次数为0,即0次
end
第4章软件仿真
4、1仿真过程