基于FPGA的电子密码锁系统的设计Word下载.docx
《基于FPGA的电子密码锁系统的设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子密码锁系统的设计Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
关键词:
电子密码锁FPGA硬件描述语言EDA
随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。
锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。
随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。
据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。
这种锁是通过键盘输入一组密码完成开锁过程。
研究这种锁的初衷,就是为提高锁的安全性。
由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。
电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。
电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。
但较实用的还是按键式电子密码锁。
20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。
目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。
在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。
但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。
国内的不少企业也引进了世界上先进的技术,发展前景非常可观。
希望通过不断的努力,使电子密码锁在我国也能得到广泛应用[1]。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式[2]。
基于现场可编程逻辑门阵列FPGA器件的电子密码锁,用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。
通用的电子密码锁主要由三个部分组成:
数字密码输入电路、密码锁控制电路和密码锁显示电路。
(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
(2)密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。
(3)密码显示电路主要将显示数据的BCD码转换成相对应的编码。
如,若选用七段数码管显示电路,主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。
1.3系统设计要求
设计一个具有较高安全性和较低成本的通用电子密码锁,具体功能要求如下:
(1)数码输入:
每按下一个数字键,就输入一个数值,并在显示器上的显示出该数值,同时将先前输入的数据依序左移一个数字位置。
(2)数码清除:
按下此键可清除前面所有的输入值,清除为“0000”。
(3)密码更改:
按下此键时会将目前的数字设定成新的密码。
(4)激活电锁:
按下此键可将密码锁上锁。
(5)解除电锁:
按下此键会检查输入的密码是否正确,密码正确即开锁。
随着人们生活水平的提高,对家庭防盗技术的要求也是越来越高,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的欢迎。
现在市场上主要是基于单片机技术的电子密码锁,但可靠性较差。
FPGA即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物,是一种超大规模集成电路,具有对电路可重配置能力。
通常FPGA都有着上万次的重写次数,也就是说现在的硬件设计和软件设计一样灵活、方便。
相对于基于单片机技术的电子密码锁,用FPGA器件来构成系统,可靠性提高,并且由于FPGA具有的现场可编程功能,使得电子密码锁的更改与升级更为方便简单。
通过本次设计掌握FPGA系统设计的方法,熟悉FPGA设计的相关软件,以及硬件描述语言的使用,了解电子密码锁的系统构成,利用FPGA实现电子密码锁的设计与实现,可以加深自己对所学专业的认识,关联知识,增强自己的动手能力,积累实践经验,为以后的工作打好基础。
第2章现场可编程门阵列FPGA
自1985年Xilinx公司推出第一片大规模现场可编程逻辑器件(FPGA)至今,FPGA已经历了十几年的历史。
在这十几年的过程中,可编程器件有了惊人的发展:
从最初的1200个可利用门,到今天的25万可利用门,规模增大了200多倍;
FPGA供应商也从Xilinx的一枝独秀,到今天近20个厂商的分庭抗争;
FPGA从单一的基于SRA结构到今天各种结构类型的出现,都充分体现了可编程器件这一巨大市场的吸引力。
2.1FPGA的基本结构
FPGA的发展非常迅速,形成了各种不同的结构。
按逻辑功能块的大小,FPGA可分为细粒度FPGA和粗粒度FPGA。
细粒度FPGA的逻辑功能块较小,资源可以充分利用,但连线和开关多,速度慢;
粗粒度FPGA的逻辑功能块规模大,功能强,但资源不能充分利用。
FPGA芯片逻辑功能的配置是由按点阵分布于芯片的存储单元——静态存储器(SRAM)实现的,即通过对分布的SRAM的不同加电配置,决定各部分的逻辑定义。
对于FPGA器件编程实现,实际上就是由加载于SRAM上的配置数据决定和控制各个CLB、IOB及内部连线PI的逻辑功能和它们之间的相互连接关系。
加载不同的配置数据,芯片便实现不同的逻辑功能。
配置LCA的数据文件由XACT(XilinxAutomatedCAETools)开发系统产生,通过数据配置方式及相应接口加载于芯片中。
XC4000系列的CLB具有13个输入、4个输出。
内部由两个独立的四输入逻辑函数发生器、一对触发器和若干个由配置控制的多路转换器组成。
逻辑块的输入输出可以接到外部的可编程连线资源。
两个四输入逻辑函数发生器(输入分别为F1~F4和G1~G4),可以独立提供四输入的任意定义的布尔函数,它们的输出分别为F′和G′。
用户可配置的IOB为芯片外部引脚和内部逻辑提供了一个界面,每个IOB控制一个外部引脚,并可定义为输入、输出或双向三种功能。
当IOB定义为输入时,输入信号经Pad进入输入缓冲器,并根据配置可以直接输入,亦可以通过边沿触发器或电平敏感锁存器输入。
当IOB定义为输出时,输出信号可以通过配置选择是否反相,是直接传输到Pad,还是通过边沿触发器寄存后传输。
可以选择用输出使能信号(OE)使输出缓冲器是否为高阻状态,以实现三态输出或双向I/O传输。
内部连线由一些具有可编程开关点或开关矩阵的金属线段组成,结构对称、规范,适合于建立自动有效的布局布线算法。
布线通道的数目由阵列规模决定。
FPGA设计流程包括系统设计和设计实现,系统方案完成之后即进入设计实现阶段的工作,他以系统方案为输入,进行RTL级描述、功能仿真(RTL级仿真)、逻辑综合、布线前门级仿真、适配(布局布线)、时序仿真(布线后门级仿真)、时序分析、器件编程、系统验证一系列流程的处理才能完成FPGA芯片的设计,其设计流程如图2.4所示。
需要说明的是,如果仿真验证不对或者某一步有错,就要返回修改。
有必要检查和修改的地方有RTL级描述、系统方案、约束和测试激励等。
一般情况下,对RTL级的描述即原理图或者HDL设计代码的修改最多也最有效。
修改后要重新走一遍流程。
有时要反复修改,经过多次这样的迭代才能完成最后的设计。
VHDL(VeryhighspeedintegratedcircuitHardwareDescriptionLanguage)硬件描述语言从高于逻辑级的抽象层次上描述硬件的功能、信号连接关系及定时关系。
VHDL的设计流程如下图。
图2.4VHDL的设计流程
通过第一章电子密码锁系统结构的分析,我们知道通用的电子密码锁主要由三个部分组成:
也就是说,设计分为三个大的功能模块。
图3.1为数字电子密码锁系统总体框图。
图3.1数字电子密码锁系统总体框图
作为电子密码锁的输入电路,数字密码输入电路可采用一个3×
4的通用数字机械键盘作为本设计的输入设备。
机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用电子密码锁中还是比较适宜的。
数字电子密码锁的显示信息电路可采用LED数码管显示和液晶屏幕显示两种。
液晶显示具有高速显示、高可靠性、易于扩展和升级等优点,但是普通液晶显示屏存在亮度低、对复杂环境的适应能力差等缺点,在低亮度的环境下还需要加入其它辅助的照明设备,驱动电路设计相对复杂,因此本设计的显示电路使用通用的LED数码管。
1.时序产生电路
本时序产生电路中使用了三种不同频率的工作脉冲波形:
系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。
当一个系统中需使用多种操作频率的脉冲波形时,最方便的方法之一就是利用一计数器来产生各种需要的频率。
也就是先建立一个N位计数器,N的大小根据电路的需求决定,N的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号。
若输入时钟为CLK,N位计数器的输出为Q[N-1..0],则Q(0)为CLK的2分频脉冲信号,Q
(1)为CLK的4分频脉冲信号,Q
(2)为CLK的8分频脉冲信号……Q(N-1)为CLK的2N分频脉冲信号;
Q(5DOWNTO4)取得的是一个脉冲波形序列,其值依00-01-10-11-00-01周期性变化,其变化频率为CLK的32分频。
我们利用以上规律即可得到各种我们所需要频率的信号或信号序列。
SIGNALCLK:
STD_LOGIC;
--电路工作时钟脉冲
SIGNALC_KEYBOARD:
STD_LOGIC_VECTOR(1DOWNTO0);
--键扫信号“00-01-10-11”寄存器
SIGNALC_DEBOUNCE:
--去抖时钟信号
2.键盘扫描电路
扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110……依序的周而复始。
扫描时依序分别扫描四列按键,当扫描信号为1110时扫描KY3这一排按键;
当扫描信号为1101室,扫描KY2这一排按键;
当扫描信号为1011时,扫描KY1这一排按键;
当扫描信号为0111时,扫描KY0这一排按键。
每扫描一排按键就检查一次是否有键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键则立刻进行按键编码的动作,且将编码的结果储存于寄存器中。
--扫描信号发生器
COUNTER:
BLOCKIS
SIGNALQ:
STD_LOGIC_VECTOR(5DOWNTO0);
SIGNALSEL:
STD_LOGIC_VECTOR(3DOWNTO0);
--1110-1101-1011-0111
BEGIN
PROCESS(CLK_1K)IS
IFCLK_1K'
EVENTANDCLK_1K='
1'
THEN
Q<
=Q+1;
ENDIF;
C_DEBOUNCE<
=Q
(2);
--去抖时钟信号,大约125Hz
C_KEYBOARD<
=Q(6DOWNTO5);
--产生键扫信号***“00-01-10-11”,大约16Hz
--C_DEBOUNCE<
=Q
(1);
--仿真时用
--C_KEYBOARD<
=Q(5DOWNTO4);
--仿真时用
CLK<
=Q(0);
ENDPROCESS;
3.弹跳消除电路
由于设计采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。
弹跳现象产生的原因是,虽然每次只是按下按键一次然后放掉,然而实际产生的按键信号却不知跳动一次,经过取样信号的检查后,将会造成误判断,以为键盘按了两次。
图3.2弹跳现象产生错误的抽样结果
如果调整抽样频率,弹跳现象就可以获得改善。
图3.3调整抽样频率后得到的抽样结果
因此必须加上弹跳消除电路,避免误操作信号的发生。
特别要注意的是,弹跳消除电路所使用的脉冲信号的频率必须比其他电路使用的脉冲信号的频率更高;
通常将扫描电路的工作频率定在24Hz左右,而将弹跳消除电路的工作频率定在128Hz左右,其工作频率通常是前者的4倍或者更高。
DEBOUNUING:
U1:
DEBOUNCINGPORTMAP(D_IN=>
KEY_IN(0),D_OUT=>
C(0),
CLK=>
C_DEBOUNCE);
U2:
KEY_IN
(1),D_OUT=>
C
(1),
U3:
KEY_IN
(2),D_OUT=>
C
(2),
C_DEBOUNCE);
控制锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的相应控制。
1.数字按键输入的响应控制
(1)如果按下数字键,第一个数字会从显示其的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。
(2)假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有出入的数字,再重新输入四位数。
(3)当输入的数字键超过预设位数时,电路不予理会,而且不再显示以后的数字。
2。
功能按键输入的响应控制
(1)清除键:
清除所有的输入数字,即作归零动作。
(2)激活电锁键:
按下此键时可将密码锁的门上锁。
(3)解除电锁键:
按下此键会检查输入的密码是否正确,若密码正确无误则开门。
使用电子密码锁的时候,只会用到三种工作模式,其中输入文字模式用的是数字按键,只有上锁和开锁两个模式必须占用功能按键。
但是在实际操作中,难免会有按错键的情况发生,使得“清除输入”功能是用的机率很高,所以在设计中共设置了两个功能按键,其中“接触电锁”和“清除电锁”共用一个功能按键,另一个功能按键是“激活电锁”。
本节主要是阐述设计在QuartusII6.0软件中实现编译与仿真。
在QuartusII6.0在输入源程序后,我们需要建立一个工程,在工程中我们要把设计文件加入工程中;
然后选择仿真器和综合器类型值得注意的是如果选择默认的“NONE”,表示选择QuartusII软件中自带的仿真器和综合器,结合自己的设计,在此我选择默认项“NONE”;
最后选择目标芯片。
在“Family”栏选择芯片系列,在此我选择“Cyclone”系列再选择此系列的具体芯片EP2C35F484C6。
工程建立以后,可以进行源程序的编译。
选择“Processing”StartCompilation,启动全程编译。
编译后产生的报告如下所示:
图3.4编译后产生的统计报告
编译成功后,就可以进行波形的仿真。
1.防抖模块的仿真
图3.5为键盘输入防抖电路的仿真结果图,图中的输出信号N,ACC,REG是为了便于仿真时观察中间结果而增加的观测点的输出,调试好后程序中的相应语句应注释掉。
由图上可以看出,原来的弹跳现象经过键盘输入防抖电路处理后已经清除了,必须连续两次取样检测到信号才会有反应,否则电路将其视为噪声,不予理会。
图3.5键盘输入防抖电路的仿真结果图
由图中可以看出,键盘扫描出的信号弹跳现象得到改善。
2.密码锁输入电路的仿真
图3.6为密码锁输入电路的仿真结果图,图中的输出信号CLK_SCAN,C_DEBOUNCE是为便于仿真时观察中间结果而增加的观测点的输出,调试好后程序中的相应语句应注释掉。
图3.6密码锁输入电路仿真结果图
输入信号KEY_IN[2..0]依序依011-101-110-011-101的顺序周期性循环,对键盘进行扫描。
如有按键发生,键盘扫描输出信号CLK_SCAN做出反应。
3.密码锁控制电路的仿真
图3.7、图3.8分别是两个密码锁控制电路仿真结果图。
图3.7密码锁控制电路仿真结果图
图3.7的仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁接着输入万能解锁密码“8888”,最后按下解锁键解锁。
图3.8密码锁控制电路仿真结果图
图3.8仿真过程为先输入上锁密码“1234”,再按下上锁键激活电锁,接着输入解锁密码“1234”;
最后按下解锁键解锁。
从仿真图看出,密码控制电路的设计是正确的。
结论
在这次课程设计的过程中,我学到了很多东西,锻炼了自己独立学习的能力。
在与导师和同学的讨论过程中,也看到了自己的不足,更激励我要努力。
感谢我的老师和同学给与我的帮助。
在本论文完成之际,我心中充满了感谢之情,感谢所有关心和支持我的老师,朋友和我的家人,感谢他们对我的关心和支持。
参考文献
[1]李连华.基于FPGA的电子密码锁设计.中国科技信息,2006,(01):
64
[2]许琦.基于FPGA的电子密码锁的设计.科技信息,2006,(10):
240-241
[3]王卫兵,刘克刚,朱秋萍.用FPGA的电子密码锁.电子技术,2005,(01):
26-28
[4]赵益丹,徐晓林,周振峰.电子密码锁的系统原理、设计程序及流程图.嘉兴学院学报,2003,15(S1):
103-105
附录
源程序:
1.键盘输入去抖电路的VHDL源程序
--DCFQ.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDCFQIS
PORT(CLK,CLRN,PRN,D:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
ENDENTITYDCFQ;
ARCHITECTUREARTOFDCFQIS
PROCESS(CLK,CLRN,PRN)
IFCLRN='
0'
ANDPRN='
Q<
='
;
ELSIFCLRN='
ELSIFCLK'
EVENTANDCLK='
=D;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
--DEBOUNCING.VHD
LIBRARYALTERA;
USEALTERA.MAXPLUS2.ALL;
ENTITYDEBOUNCINGIS
PORT(D_IN,CLK:
DD1,DD0,QQ1,QQ0:
OUTSTD_LOGIC;
D_OUT,D_OUT1:
OUTSTD_LOGIC);
ENDENTITYDEBOUNCING;
ARCHITECTUREARTOFDEBOUNCINGIS
COMPONENTDCFQIS
ENDCOMPONENTDCFQ;
SIGNALVCC,INV_D:
SIGNALQ0,Q1:
SIGNALD1,D0:
VCC<
='
;
INV_D<
=NOTD_IN;
U1:
DCFQPORTMAP(CLK=>
CLK,CLRN=>
INV_D,PRN=>
VCC,D=>
VCC,Q=>
Q0);
U2:
Q0,PRN=>
Q1);
PROCESS(CLK)
IFCLK'
D0<
=NOTQ1;
D1<
=D0;
ENDPROCESS;
DD0<
DD1<
=D1;
QQ1<
=Q1;
QQ0<
=Q0;
D_OUT<
=NOT(D1ANDNOTD0);
D_OUT1<
=NOTQ1;
ENDARC