资源描述
淮南师范学院电气信息工程学院2015届电子信息工程专业课程设计报告
成绩
课程设计报告
题 目: 基于FPGA的数字密码锁设计
学生姓名: 汪金涛
学生学号: 1114020232
系 别: 电气信息工程学院
专 业: 电子信息工程
届 别: 2015届
指导教师: 李 营
电气信息工程学院制
2014年5月
第 1 页
目 录
1 课程设计的任务与要求 1
1.1 课程设计的任务 1
1.2课程设计的要求 1
2 电子密码锁简介 1
2.1 国内外发展和现状 1
2.2 课题研究目的和意义 2
3 设计方案的制定 2
3.1设计思路 2
3.2总体方案设计 4
3.2.1 密码锁输入电路设计 4
3.2.2 矩阵式键盘工作原理 4
3.2.3 密码锁输入电路主要功能模块设计 5
3.2.4 密码锁控制电路设计 7
3.2.5 密码锁显示电路设计 9
3.2.6 Quartus Ⅱ软件引脚配置 9
4 系统时序仿真结果 10
5 总结与体会 11
5.1 总结 11
5.2 体会 12
6 参考文献 12
附录 13
基于FPGA的数字密码锁设计
学生:汪金涛
指导教师:李营
电气信息工程学院电子信息工程专业
1 课程设计的任务与要求
1.1 课程设计的任务
通用的电子密码锁主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。
(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
(2)密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。
(3)密码显示电路主要将显示数据的BCD码转换成相对应的编码。如,若选用七段数码管显示电路,主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。
1.2课程设计的要求
设计一个具有较高安全性和较低成本的通用电子密码锁,具体功能要求如下:
(1)数码输入:每按下一个数字键,就输入一个数值,并在显示器上的显示出该数值,同时将先前输入的数据依序左移一个数字位置。
(2)数码清除:按下此键可清除前面所有的输入值,清除为“0000”。
(3)密码更改:按下此键时会将目前的数字设定成新的密码。
(4)激活电锁:按下此键可将密码锁上锁。
(5)解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
2 电子密码锁简介
2.1 国内外发展和现状
随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。但较实用的还是按键式电子密码锁。
目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差。基于现场可编程逻辑门阵列FPGA器件的电子密码锁,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率。
2.2 课题研究目的和意义
随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。相对于基于单片机技术的电子密码锁,用FPGA器件来构成系统,可靠性提高,并且由于FPGA具有的现场可编程功能,使得电子密码锁的更改与升级更为方便简单。
通过本次设计掌握FPGA系统设计的方法,熟悉FPGA设计的相关软件,以及硬件描述语言的使用,了解电子密码锁的系统构成,利用FPGA实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。
3 设计方案的制定
3.1设计思路
作为通用数字密码锁,主要有三部分组成:数字密码输入电路、密码控制电路和密码显示电路。
控制器模块是整个系统的控制核心,负责接收其它模块传来的输入信号,再根据系统的功能产生相应的控制信号送到相关的模块。消抖同步电路用来消去开关电平抖动现象并提供同步信号;编码器接收消抖同步电路传来的数字密码信号后编码输出给比较器和RAM,并提供一个数字输入信号。
作为数字密码锁的输入电路,可供选择的方案有数字机械式键盘和键触式数字键盘等多种。虽然机械式键盘存在一些诸如机械的弹跳消除问题和机械部分的接触问题,但是和接触式3x4键盘相比,机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此是比较合适的。根据以上选定的输入设备和显示器件,并考虑到实现的具体要求,整个数字密码锁系统的总体框图如图1所示。
密码输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
键盘
时序产生电路
弹跳消除电路
键盘译码电路
寄存器清除信号发生电路
开/关锁电路
数值比较电路
按键数值缓冲器
BCD至七段译码器电路
键盘扫描电路
图1 系统方框图
3.2总体方案设计
3.2.1 密码锁输入电路设计
图2是数字密码锁的输入电路框图,由键盘扫描电路、清抖电路、键盘译码电路、按键数据存储,加上外接的一个3*4矩阵式键盘组成。 1
2
3
4
7
0
5
6
8
9
#
*
清抖电路
键盘扫描
键盘译码
按键存储
图2 密码锁输入框图
3.2.2 矩阵式键盘工作原理
矩阵式键盘是一种常见的输入装置,如图3-3所示为一个3*4矩阵式键盘。键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0的状态,图中键盘的扫描为行扫方式,其中的某一位为0即扫描其中的一行,具体扫描信号对应如表1所示。
表1 扫描信号对应表
KEYR3..0
KEYC2..0
对应的按键
0111
011
1
101
2
110
3
1011
011
4
101
5
110
6
1101
011
7
101
8
110
9
1110
011
0
101
*
110
#
键盘扫描信号KEYR3与第一行相连,KEYR2与第二行相连,依此类推。很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。在扫描的过程中,当有键按下时,对应的键位就为逻辑0状态,从而从KEYC2..0 读出的键值相应列为0.具体情况如表1所示:若从KEYC2..0 读出的值全为1 时,表示没有键被按下,则不进行按键的处理。如果有键被按下,则将KEYC2..0 读出的送至键盘译码电路进行译码。
3.2.3 密码锁输入电路主要功能模块设计
⑴ 时序产生电路:
本时序产生电路中使用了三种不同的工作脉冲波形:系统时钟脉冲、弹跳消除脉冲、键盘扫描信号。本设计选用信号Q建立一个9位自由计数器,对输入主时钟进行降频处理。
首选信号Q建立一个9位自由计数器,对输入主时钟进行降频处理。分频仿真图如下图3所示。
图3 分频模块仿真图
使用CLK_A<=Q(1)语句,取得一个脉冲波形,对主时钟进行2分频,其值为0、1、0、1…;
使用CLK_B<=Q(4 DOWNTO 3)语句,取得一脉冲序列,依次为00、01、10、11、
00…;
⑵ 键盘扫描电路:
目标:提供键盘扫描信号,即表1中的KEYR3—0,变化顺序依次为0111、1011、1101、1110…,依次重复出现。
说明:在程序中,S信号是用来产生扫描信号的四个状态,Q是为了对输入主时钟进行降频处理。
⑶ 键盘消抖电路
因为按键大多是机械式开关,在开关切换的瞬间会在接解点出现来回弹跳的现象,其现象如图4所知,虽然只是按了一次键,实际产生的按键信号却不只跳动一次,经过取样信号的检查后,将会造成误码判,认为是按了两次键。如果调整取样频率,可以发现抖现象得到了改善。
调整取样频率后的情况如图4所示。
图4 键盘消抖信号图
⑷ 键盘译码电路
从前面所述的键盘扫描电路的输出可以看出,扫描得到的信号规律性不强,例如数字键主要用来输入数字,但键盘扫描输出无法拿来直接使用,必须对其进行译码才能使用。如表2所示,只要使用begin…case或if…else语句,便可完成设计。
键盘译码电路主要负责的工作是:首先判断是否有键按下,若被按下的是数字按键,则解释成相应的BCD码,若被按下的是功能键,则译成四位的数字码,由密码控制电路做相应的工作。
表2 键盘参数表
KEYR3..0
KEYC2..0
对应的按键
译码输出
功能
0111
011
1
0001
数码输入
101
2
0010
数码输入
110
3
0011
数码输入
1011
011
4
0100
数码输入
101
5
0101
数码输入
110
6
0110
数码输入
1101
011
7
0111
数码输入
101
8
1000
数码输入
110
9
1001
数码输入
1110
011
0
0100
击活电锁
101
*
0000
数码输入
110
#
0001
清除/解锁电路
⑸ 按键存储电路
因为每次按键都会产生新的数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将键盘扫描译码后的结果记录下来。这一功能可以用移位寄存器来实现。
3.2.4 密码锁控制电路设计
数字密码锁控制电路是整个电路的控制中心,主要完成如下功能:
⑴ 数字按键输入部分
如果输入数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须往左移动一位。
若想要更改输入的数字,可按退格键来清除前一个输入的数字,或按清除键清除输入的所有数字,再重新输入4位数字。
既然设计的是四位电子密码锁,当输入的数字键超过4位时,电路不应理会。
⑵ 功能键输入部分
退格键:只清除前一个输入的数字。
清除键:清除所有输入。
密码核对:在密码更改,开锁之前必须先核对密码。
密码变更:按下此键将目前输入的数字设定为新的密码。
激活电锁:上锁之前必须先设定密码才能上锁。
解除电锁:检查输入的密码是否正确,正确才开锁。
万用密码:电子密码锁维护者使用。
⑶ 六种工作状态
控制器实际上是一个有限状态机,它一共有六个状态:初始状态S0、接收数码状态S1、准备开锁状态S2、S3状态表示每正确接受一次数码,计数器C加1、开锁状态S4和错误报警状态S5。
初始状态S0:系统开锁、报警或上电后进入准备状态,这时系统不接收除READY 信号外的任何输入信号。
接收数码状态S1:在该状态下, 如果按下“READY” 则保持该状态不变;如果按下“OK”和“OPEN”则转到报警状态;如果有数据输入,则控制器输入一个DATA-IN信号,输出RD和CNP1信号,从RAM中读取密码进行比较,同时使计数器加1;检查计数是否计数到100 ,若CNTe1有效,表示已经接收到4个正确的密码,可以转入下一个状态,否则返回本状态,继续接收其它密码。检查Dep信号状态,Dep=1则密码正确,进入确认状态,反之则输出CNP2信号进入报警状态;如果仍然有数据输入,则说明输入密码错误,则输出CNP2信号进入报警状态。
准备开锁状态S2:在确认状态下按“SET”键进入该状态,EN信号有效。该状态首先由控制器发RESET-CNT信号;检查是否有数据输入,如果没有则等待;若有数据输入,控制器则输出WR和CNP1信号,向RAM发出信号,并使计数器加1,检查计数器是否计数到100,若CNTe1有效,表示已经接收到4个正确的密码,进入确认状态,否则返回本状态,继续接收其它密码。
确认状态S3:输入密码正确后进入该状态。密码输入得到确认才可以进入开锁状态,密码设置完毕后,只有得到确认才可生效,并返回准备状态。
开锁状态S4:输入密码确认后进入该状态,此时按“OPEN”键,控制器便发出SLT信号开锁并返回到准备状态。
错误报警状态S5:每次进入该状态首先检查计数器2是否计数到11。若输入错误密码达到三次,则CNTe2有效,控制器输出SLB信号,报警电路报警;若输入错误次数不超过三次,则CNTe2无效,返回到输入密码状态。
3.2.5 密码锁显示电路设计
本文设计的密码锁采用7段LED数码管来分别显示其在不同工作状态下的信息,并能对输入的口令消隐显示。以下为显示模块部分程序。
always @(posedge CLK or negedge nCLR)
begin:counter
if (~nCLR)Q <=3'b000;
else if (CNT==1'b1)Q <=Q+1'b1;
else Q <=Q;
end
assign M=(Q ==3'b111);
assign {A2,A1,A0}=Q;
assign D=Password;
always @(A2 or A1 or A0 or D)
begin :Muxltiplexer
case ({A2,A1,A0})
3'd0:Mux_out=D[0];
3'd1:Mux_out=D[1];
3'd2:Mux_out=D[2];
3'd3:Mux_out=D[3];
3'd4:Mux_out=D[4];
3'd5:Mux_out=D[5];
3'd6:Mux_out=D[6];
3'd7:Mux_out=D[7];
endcase
end
程序中cnt为编码计数器,它的每一个值代表一种状态,在不同状态下encode端口输出不同的LED选择编码。此编码作为译码器74LS138的地址输入,用于选择操作哪一位LED数码管。
3.2.6 Quartus Ⅱ软件引脚配置
引脚配置图如图5所示。
图5 引脚配置图
4 系统时序仿真结果
该密码锁利用QuartusⅡ工作平台进行编译和综合仿真,系统最后仿真结果如下,由图7可以很明显的看到,此数字密码锁能够很好的完成对电子锁上锁和解锁的过程,能够实现系统设计任务中的各项要求。说明我们对模块的设计是正确的。
(a)正确开锁过程仿真
(b)错误开锁过程
图6 系统仿真波形图
若系统内设置的密码为01011001。分析波形图可知,nRESET信号使系统首先进入初始状态。BIT开关用于产生一位数码,READ开关将BIT产生的当前数码读入系统,并与系统内所设置的密码的相应位进行比较,比较的顺序是从低位到高位。当读入8位数码与开锁密码一致时,按下开锁的TRY信号,系统将产生高电平的开锁信号OPEN,如图6(a)所示。如果开锁过程中任何一次送入的数码与设置的密码数值不一致,例如图6(b)中输入的第二位数码为1,与设置的0不符,系统发出错误信号ERROR。或者TRY信号使用不当,也会产生ERROR信号。
为了便于分析开锁过程中,系统状态之间的转换,图6中给出了中间变量的波形图。
5 总结与体会
5.1 总结
本设计中采用了Altera公司的FPGA芯片进行设计,可以极大地减少其他分立元件或其他芯片的使用,有效地缩小了印制电路板面积,提高了系统的可靠性,大大缩短了系统开发的周期。由于采用Verilog HDL进行设计,用软件实现硬件电路,具有良好的可移植性,可随时在线更改逻辑设计及有关参数,充分体现FPGA的优越性,具有一定的实用性。本文设计的密码锁克服了基于单片机的密码锁的可靠性较差的缺点,利用了FPGA 的ISP功能可高效的进行功能扩展和产品升级,具有使用灵活,性能可靠,安全保密性强等优点, 将有十分良好的应用前景。
本设计参考和结合了很多有关电子密码锁问题的论文,经过多次修改和整理,可以满足人们的基本要求,防盗系数高,安全性能好。但因为水平有限,可能也存在一定的问题。
5.2 体会
通过本次课程设计,我得到了大量的锻炼并受益匪浅,不但提高了自身对理论基础知识的掌握,同时还锻炼了自己的动手实践能力。让我更牢固地掌握了有关的理论知识,并简单了解了系统仿真建模的基本步骤,同时还加深了我对quartusⅡ软件的理解与应用。
在做设计的过程中,我深刻地体会到,对理论知识的掌握并不以意味着自己就能将理论知识转化为实际的系统。但是,理论知识的认识深刻与否,对实践活动有着重要的作用,只有对理论基础知识有深入地了解,才能通过理论来指导实践,如果没有掌握理论知识,是不可能获得实践上的成功。同时,通过此次课程设计,充分调动了自身对知识的运用和对以前学过的知识的灵活调用。在设计过程中遇到过许多困难,但通过查阅相关资料以及前人的结果,从而解决了许多问题,同时也提高了自己分析问题解决问题的能力。
最后,课程设计中与老师和同学的交流是很有必要的。毕竟每个人对课程设计的思路和自己遇到的问题都有不同的理解,所以遇到问题共同交流还是能够解决各种问题的。
6 参考文献
[1] 潘松,陈龙,黄继业.EDA技术与Verilog HDL(第二版)[M].北京:清华大学出版社,2010, 4:44-70
[2] 周润景,苏良碧.基于Quartus Ⅱ的数字系统Verilog HDL设计实例详解 [M].北京:电子工业出版社,2010,5:6-154
[3] 王卫兵,刘克刚,朱秋萍.用FPGA的电子密码锁[M].北京:中国机械工业出版社,2011:26-28
[4] 赵益丹,徐晓林,周振峰.电子密码锁的系统原理、设计程序及流程图[N].嘉兴学院学报, 2003, 15(S1):103-105
[5] 李连华.基于FPGA的电子密码锁设计[N].中国科技信息报,2010,5:64
[6] 许琦.基于FPGA的电子密码锁的设计[M].北京:电子工业出版社,2009,10:240 -241
[7] 康华光,邹寿彬.电子技术基础数字部分(第五版)[M].北京:高等教育出版社,2005,7:58-69
[8] 李士雄,丁康源.数字集成电子技术教程[M].北京:高等教育出版社,2010,7:58-69
[9] 王金明,杨吉斌.数字系统设计与Verilog HDL[M].北京:电子工业出版社,2010,10:34-68
[10] 任爱锋.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2010, 7:35-169
附录
数字密码锁源程序
module Lock_RTL (OPEN,ERROR,nRESET,TRY,READ,BIT,CLK,W,B,Q,M);
/****** 定义输入/输出 ******/
input nRESET,TRY,READ,BIT,CLK;
output OPEN,ERROR,B,M;
output [3:0]W;
output [2:0] Q;
assign W="0001";
reg OPEN,ERROR;
wire nRESET,TRY,READ,BIT,CLK; //对状态进行编码
parameter S0=6'b000001,S1=6'b000010,S2=6'b000100,S3=6'b001000,S4=6'b010000,S5=6'b100000;
parameter Password=8'b01011001; //定义系统内部信号变量及其类型
reg [5:0] CurrentState,NextState; //控制寄存器
reg nCLR,CNT; //CNT=1,计数器工作;CNT=0,暂停计数
wire B,M; //数据处理器输出
reg [2:0]Q; //计数器输出
wire A2,A1,A0; //数据选择器控制信号
wire [7:0]D; //数据选择器输入信号
reg Mux_out; //数据选择器输出信号
/****** 控制单元状态转换的描述 ******/
always@(posedge CLK or negedge nRESET)
begin:ststereg
if(~nRESET)
begin CurrentState <=S0; nCLR <=1'b0;end
else
begin CurrentState <=NextState;
nCLR <=1'b1; end
end
always@(BIT or READ or TRY or B or M or CurrentState)
begin:fsm
OPEN=1'b0;
ERROR=1'b0;
CNT=1'b0;
case(CurrentState)
S0:begin
NextState=S1;
end
S1:begin
CNT=(~TRY&READ==1'b1);
if(TRY)NextState=S5;
else if(~READ)NextState=S1;
else if(~B)NextState=S5;
else if(~M)NextState=S2;
else NextState=S3; end
S2:begin
if(READ)NextState=S5;
else if(~TRY)NextState=S2;
else NextState=S4;
end
S3:begin
NextState=S1;
end
S4:begin
OPEN=1'b1;
NextState=S4;
end
S5:begin
ERROR=1'b1;
NextState=S5;
end
default: NextState=S0;
endcase
end
/****** 处理单元的描述 ******/
always @(posedge CLK or negedge nCLR)
begin:counter
if (~nCLR)Q <=3'b000;
else if (CNT==1'b1)Q <=Q+1'b1;
else Q <=Q; end
assign M=(Q ==3'b111); //比较器输出信号
assign {A2,A1,A0}=Q;
assign D=Password; //设置密码
always @(A2 or A1 or A0 or D)
begin :Muxltiplexer
case ({A2,A1,A0})
3'd0:Mux_out=D[0];
3'd1:Mux_out=D[1];
3'd2:Mux_out=D[2];
3'd3:Mux_out=D[3];
3'd4:Mux_out=D[4];
3'd5:Mux_out=D[5];
3'd6:Mux_out=D[6];
3'd7:Mux_out=D[7];
endcase
end
assign B=(Mux_out~^BIT); //异或运算
endmodule
第 17 页
指导教师评语
成绩(60%)
指导教师签字:
年 月 日
答辩小组评语
成绩(40%)
答辩小组签字:
年 月 日
教研室综合意见
综合成绩
教研室主任签字(盖章):
年 月 日
展开阅读全文