基于VHDL的数字式电子密码锁设计汇总.docx
《基于VHDL的数字式电子密码锁设计汇总.docx》由会员分享,可在线阅读,更多相关《基于VHDL的数字式电子密码锁设计汇总.docx(18页珍藏版)》请在冰豆网上搜索。
基于VHDL的数字式电子密码锁设计汇总
安徽大学江淮学院
本科毕业论文(设计)
(内封面)
题目:
基于VHDL的数字式电子密码锁
学生姓名:
刘玲玲 学号:
J20134025
院(系):
理工部专业:
电子信息工程
入学时间:
二O一三年九月
导师姓名:
程鸿 职称/学位:
副教授/博士
基于VHDL的数字式电子密码锁设计
摘要
本次设计运用的方法是数字系统设计中的自顶向下,是将电子密码锁的总体设计细化成许多个小模块,其中主要的模块包含了三个,分别为电子密码锁的输入模块、控制模块以及显示模块。
此外多加了一个报警模块作为辅助功能,提示输入了错误密码。
各个模块是由对应的VHDL程序来实现,并通过MAX+PLUSII仿真验证其正确与否。
数字密码锁可以检查4位十进制密码,具备显示密码输入,密码删除,更改,错误报警等功能。
同时这种密码锁的体积小,操作方便,实用性强。
关键字:
电子密码锁;模块;硬件描述语言
DesignoftheDigitalElectronicPasswordLockBasedonVHDL
Abstract
Thisdesignmethodisthetop-downdesignofdigitalsystem,dividedthepasswordlockintomultiplesmallmodule,itincludesthreemainmodule,respectively,thepasswordinputmodule,controlmoduleanddisplaymodule.Inadditionto,addanalarmmoduleastheauxiliaryfunctiontotellpeoplethattheyenterthewrongpassword.ThepasswordmoduleconsistsofthehomologousVHDLprogramtocompileit.Incordtotellifitistrue,wecanuseMAX+PLUSII.Thedigitalpasswordlockcancheck4decimalnumberpassword,itbeequippedwithpasswordinput,removethepassword,changethewrongpasswordandalarmingfunctions.What’smore,ithassmallsize,easytooperation,highpracticability.
Keywords:
passwordclock;modular;hardwaredescriptionlanguage
目录
第一章绪论1
1.1研究意义1
1.2研究现状及发展趋势1
1.3本文的主要内容和组织结构2
第二章基于VHDL语言及开发环境2
2.1VHDL简介2
2.2开发环境MAX+PLUSⅡ3
第三章基于VHDL的数字式电子密码锁实现4
3.1系统总结构图设计4
3.2各模块VHDL语言描述及讲解5
3.3系统仿真13
第四章结束语15
主要参考文献16
致谢17
基于VHDL的数字式电子密码锁设计
第一章绪论
1.1研究意义
随着当今世界的发展,人们的生活水平越来越高,家庭安全问题受到了足够的重视。
比较传统的机械锁虽然价格便宜,安全性能却很低,门锁被撬事件经常出现。
而如今通过电路控制锁体设计而成的新式电子密码锁,通过触摸键盘按键输入密码来开锁,操作简单。
这种输入采用键盘触摸式的电子密码锁,具有保密性高,使用的灵活性好,安全系数高,无活动零件,不容易受到磨损,使用的时间长等特点,因此也被很多用户所亲昵。
为满足人们方便、安全等各方面的需求,各类有特色的电子密码锁设计成功并被人们使用。
但这类产品只能适用于保密并且个人使用的房间、橱柜、箱子等,因为不能实现远程控制,只针对声音或指纹、特定有效卡有效。
而卡片式IC卡也有容易丢失等特点,加之其成本高,在一定程度上制约了此类产品的普及和推广。
数字电子密码锁发挥防盗员的作用正在被认真对待。
现今大多基于数字电路设计的密码锁,设计思路简单且易于实现,可是不便的是电路中使用的过多元器件的组合影响了这类密码锁的流行和普及。
而卡式IC卡也容易丢失等特点,加之其成本高,在一定程度上制约了此类产品的普及和推广。
而今VHDL语言仍被很多公司采用,它具有广泛的适用范围、描述能力强、抽象能力强等特色,因此遇到元器件太多的设计时,便可选择VHDL来建立模型。
使用VHDL可以高效易于设计,以满足数字电子密码锁的各种要求,并且易于使用,根据人们的需求可以更改密码锁定的位数,提高锁的可靠性和安全性,并可制成ASIC芯片,这是高度自动化的设计过程。
并且在设计了程序之后,可以将MAX+PLUSII软件仿真模拟在正确的原理下。
1.2研究现状及发展趋势
20世纪80年代以来,随着电子锁专用电子线路的出现,电子锁的实用性得到提高,体积变小。
对于安全性能要求较高的地方可以使用,但是成本较高,同时还需要有电源供电才能工作,使用的局限性使之难以普及,所以对它的研究改进发展的相对缓慢。
2006年曹建国,王威,把ISE作为开发工具,讨论了基于VHDL语言设计数字电子密码锁的原理和方法,ModelsimSE作为仿真工具[1]。
2008年陈华丽,何颜平介绍运用VHDL技术设计数字密码锁的过程,以及在QuartusII环境下进行仿真的方法[2];2010年韩团军使用开发工具FPGA,运用了MAXPLUII仿真软件完成了密码锁的设计[3];2013年徐大诏把VHDL语言作为主要表达方式,最后实现了一种基于有限状态机完成主控功能的电子密码锁[4]。
当前,在西方发达国家,电子密码锁设计的水平较高,品种也较丰富,智能门禁系统中已广泛使用数字式电子密码锁,经过许多更为可靠、更为安全的技术帮助了人们防止盗贼。
不过,我国国内电子锁锁整体设计水平仍处于国际70年左右,相对来说还比较落后,成品设计成本依然较高,市场更多的还是键钮电子密码锁。
卡片类和按键类的电子锁借鉴了西方国家的先进技术,市场上这类电子锁在国内被几个工厂生产供应着。
虽然国内自发研制的密码锁使用率还不是很高,很普及,市场结构还未形成,但很多企业也采取积极的措施和态度引进世界上先进的技术,发展前景也是十分可观的。
1.3本文的主要内容和组织结构
基于VHDL的数字式电子密码锁,使用自顶向下的方法和VHDL语言实现。
具体结构如下:
第一章绪论介绍了研究意义及研究现状和发展趋势;第二章简单介绍了VHDL语言及MAX+PLUSⅡ开发软件;第三章分模块讲解及各模块实现的VHDL语言描述,以及各模块编译仿真图;第四章对本论文的设计总结与展望。
第2章VHDL语言及开发环境
2.1VHDL简介
VHDL诞生于1982年,它的英文全称即Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguag。
到1987年底,美国国防部和TEEE认定了VHDL作为标准硬件描述语言。
由于IEEE发布了IEEE-1076(简称87版)的VHDL标准版,已经有EDA公司宣布了自己的设计工具和VHDL接口,推出了属于自己的VHDL设计环境。
自那时以来,大部分电子设计领域就开始采用VHDL,原来的非标准硬件描述语言已逐渐被取代。
1993年,IEEE又提高了抽象层次以及加强了硬件的描述能力,进而增添了VHDL的内容,并对其作了修改。
从而公布了VHDL的新版本,即IEEE标准的1076-1993版本,(简称93版)。
如今,IEEE推出的VHDL语言和Verilog在电子工程的领域已经是实际上通用的硬件描述语言了,并且获得了不少公司的支持。
有些专家认为,VHDL语言将在电子工程领域发挥着更加重要的作用。
利用VHDL完成数字系统设计的益处是不同方面的。
(1)VHDL语言已成为工程设计的最佳选择,因为与其他硬件描述语言相比,VHDL的行为描述能力要更高。
为了能够在不需要清楚器件内部构造的情况下,进而设计出比较复杂的系统,从逻辑行为上对其进行描述,那么较强的行为描述能力就更是不能忽视。
(2)VHDL可以用来检验所设计的任何系统所具备的功能可行性,不论复杂程度,因为它含有大量的仿真语句和库函数。
(3)VHDL语言具备细化设计比较大规模的系统以及能随时调用已有设计的特点,这是由它的程序结构和行为描述能力所决定的。
为了高速、高效的实现市场需求的大规模系统,必要时需要很多人或者不同的代发组同时进行来完成任务。
(4)通过VHDL独立而正确的设计,使用EDA工具将能够优化和逻辑综合,而且还可以将VHDL设计描述进一步生成门级网表。
(5)设计者能够在不了解硬件内部结构,也不用知道设计实现的最终器件是哪些的情况下来进行独立的设计,对于设计的描述,VHDL具有其相对的独立性。
2.2开发环境MAX+PLUSⅡ
Altera公司是世界上最大的可编程逻辑器件供应商之一,它采用了新的逻辑结构和先进的技术,该器件可以实现最高的性能和集成度,同时还引入了具有MAX+PLUSⅡ的现代设计软件Altera公司的第三代PLD可编程逻辑开发软件。
在这样的设计环境中,通过编译器的内部组件,程序设计输入,AlteraCPLD设计人员可以自由操作。
MAXPLUSII提供了一套全面的逻辑设计特性,包括原理图,程序编译和模块设计输入,编译,逻辑综合,仿真,时序分析和器件编程等诸多功能。
特别是在原理图输入等方面,MAX+PLUSⅡ被认为是最容易使用和最友好的PLD软件。
MAX+PLUSII可以开发除APEX20K以外的任何CPLD/FPGA。
MAX+PLUSⅡ设计软件拥有很多独特的方面:
(1)开放式的界面。
(2)设计和结构无关:
MAX+PLUSⅡ支持Altera的Classic,ACEX1K,MAX3000,MAX5000,MAX7000,MAX9000,FLEX6000,FLEX8000和FLEX10K等不同的可编程逻辑器件,可高达25万门,并提供了一个真正的与结构无关的可编程逻辑开发环境。
而为了减轻用户在设计过程中的负担,MAX+PLUSⅡ编译器也具有强大的逻辑综合和优化功能。
(3)可以运行在各种平台上:
MAX+PLUSⅡ软件不仅在基于PC的WindowsNT4.0,Windows98,Windows2000操作系统运行,而在SunSPARCstations中,HP9000系列700/800,IBMRISC系统/6000等工作平台运行。
(4)完全集成:
MAX+PLUSⅡ软件设计输入,编译,测试功能完全包含在可编程逻辑开发工具中,使设计可以更快速的调试,从而缩短开发周期。
(5)模块化工具:
设计者根据需要能够拣选各种设计输入、编辑、校验及器件编程工具,从而形成具有用户自己独特的开发环境,如果有必要,可以在原有的功能基础上增添新的功能。
因为MAX+PLUSⅡ支持多种设备,设计者可以开发新的结构而不必学习新的开发工具。
(6)支持邮件描述语言(HDL):
MAX+PLUSⅡ软件支持各类HDL的设计输入,包含标准的VHDL、VerilogHDL及Altera公司自身所推出的硬件描述语言AHDL。
(7)MegaCore功能:
MegaCore是一个HDL网表文件,通过先前的验证提供,以完成复杂的系统级功能。
它是为ACEX1K,MAX7000,MAX9000,FLEX6000,FLEX8000和FLEX10K设计的。
用户可以从Altera公司购买这些MegaCore,直接使用它们可以降低任务的强渡,使设计人员能够改进设计,投入更多的精力和时间,从而完成最终的产品。
(8)OpenCore特征:
MAX+PLUSⅡ软件拥有开放性内核的特征,设计者若是在购买产品之前需要对自己的设计评估一下,OpenCore可供其评估。
同时,MAX+PLUSⅡ具有多种输入方式,包括:
图形设计输入,文本编辑器输入,波形输入,混合输入。
第三章基于VHDL的数字式电子密码锁实现
3.1系统总结构图设计
本次设计采用键盘输入,输入密码值范围为0~9,*键为上锁键,#键为开锁键并且可清除密码。
键盘译码功能表如下所示,便于仿真时检查对照其正确性。
图1为系统总结构图,图中有四个模块,其中主要模块为密码锁输入模块即KEYBOARD,输入模块包含时序产生、键盘扫描、键盘弹跳消除、键盘译码等功能;密码锁控制模块即CTRL,控制模块包含密码变更、清除、激活电锁、密码核对解锁等功能;密码锁显示模块即DECL7S,显示模块主要将待显示数据的BCD码转换成数码器的七段显示编码,四位密码锁需要四个数码管分别对应输入密码的BCD码;另外包含报警模块即CR_DRIVER,连接蜂鸣器密码连续输错两次会报警。
表1:
键盘译码功能表
图1:
系统总结构设计原理图
3.2主要模块VHDL语言实现
3.2.1输入模块
密码锁输入电路程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYKEYBOARDIS
PORT(CLK_1K:
INSTD_LOGIC;
KEY_IN:
INSTD_LOGIC_VECTOR(2DOWNTO0);
CLK_SCAN:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
DATA_N:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
DATA_F:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
FLAG_N:
OUTSTD_LOGIC;
FLAG_F:
OUTSTD_LOGIC;
CLK_CTR:
OUTSTD_LOGIC;
KEY_SOUND:
OUTSTD_LOGIC;
CLK_SOUND:
OUTSTD_LOGIC);
ENDENTITYKEYBOARD;
ARCHITECTUREARTOFKEYBOARDIS
COMPONENTDEBOUNCINGIS
PORT(D_IN:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
D_OUT:
OUTSTD_LOGIC);
ENDCOMPONENTDEBOUNCING;
SIGNALCLK:
STD_LOGIC;
SIGNALC_KEYBOARD:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALC_DEBOUNCE:
STD_LOGIC;
SIGNALC_SOUND:
STD_LOGIC;
SIGNALC:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALN,F:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALFN,FF,CC:
STD_LOGIC;
SIGNALSEL:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
DATA_N<=N;
DATA_F<=F;
FLAG_N<=FN;
FLAG_F<=FF;
CLK_CTR<=CLK;
CLK_SOUND<=C_SOUND;
KEY_SOUND<=CC;
COUNTER:
BLOCKIS
SIGNALQ:
STD_LOGIC_VECTOR(5DOWNTO0);
SIGNALSEL:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK_1K)IS
BEGIN
IFCLK_1K'EVENTANDCLK_1K='1'THEN
Q<=Q+1;
ENDIF;
C_DEBOUNCE<=Q
(1);
C_KEYBOARD<=Q(5DOWNTO4);
C_SOUND<=Q
(2);
CLK<=Q(0);
ENDPROCESS;
SEL<="1110"WHENC_KEYBOARD=0ELSE
"1101"WHENC_KEYBOARD=1ELSE
"1011"WHENC_KEYBOARD=2ELSE
"0111"WHENC_KEYBOARD=3ELSE
"1111";
CLK_SCAN<=SEL;
ENDBLOCKCOUNTER;
DEBOUNUING:
BLOCKIS
BEGIN
U1:
DEBOUNCINGPORTMAP(D_IN=>KEY_IN(0),D_OUT=>C(0),
CLK=>C_DEBOUNCE);
U2:
DEBOUNCINGPORTMAP(D_IN=>KEY_IN
(1),D_OUT=>C
(1),
CLK=>C_DEBOUNCE);
U3:
DEBOUNCINGPORTMAP(D_IN=>KEY_IN
(2),D_OUT=>C
(2),
CLK=>C_DEBOUNCE);
CC<=NOT(C
(2)ANDC
(1)ANDC(0));
ENDBLOCKDEBOUNUING;
KEY_DECODER:
BLOCK
SIGNALZ:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
Z<=C_KEYBOARD&C;
IFCLK'EVENTANDCLK='1'THEN
CASEZIS
WHEN"11101"=>N<="0000";
WHEN"00011"=>N<="0001";
WHEN"00101"=>N<="0010";
WHEN"00110"=>N<="0011";
WHEN"01011"=>N<="0100";
WHEN"01101"=>N<="0101";
WHEN"01110"=>N<="0110";
WHEN"10011"=>N<="0111";
WHEN"10101"=>N<="1000";
WHEN"10110"=>N<="1001";
WHENOTHERS=>N<="1111";
ENDCASE;
ENDIF;
IFCLK'EVENTANDCLK='1'THEN
CASEZIS
WHEN"11011"=>F<="0100";
WHEN"11110"=>F<="0001";
WHENOTHERS=>F<="1010";
ENDCASE;
ENDIF;
ENDPROCESS;
FN<=NOT(N(3)ANDN
(2)ANDN
(1)ANDN(0));
FF<=F
(2)ORF(0);
ENDBLOCKKEY_DECODER;
ENDARCHITECTUREART;
基于以上程序编译形成模块如下:
图2:
输入模块框图
CLK_1K为1kHZ时钟输入信号,KEY_IN为3*4矩阵式键盘上列向的值,它与扫描信号CLK_SCAN对应组成一个相对应的输出的数字。
对应于密码值输出的DATA_N是其FLAG_N,当有一个数字输入时显示为高电平。
DATA_N为密码值输出,与之对应的FLAG_N,当有密码输入是显示为高电平。
DATA_F为功能键输出,与之对应的FALAG_F,当有功能键输入时其显示为高电平。
CLK_CTR为控制模块时钟输入信号,KEY_SOUND为连接报警模块的按键音。
3.2.2控制模块
控制电路程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCTRLIS
PORT(DATA_N:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DATA_F:
INSTD_LOGIC_VECTOR(3DOWNTO0);
FLAG_N:
INSTD_LOGIC;
FLAG_F:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
ALARM:
OUTSTD_LOGIC;
ENLOCK:
OUTSTD_LOGIC;
DATA_BCD:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDENTITYCTRL;
ARCHITECTUREARTOFCTRLIS
SIGNALACC,REG:
STD_LOGIC_VECTOR(15DOWNTO0);
SIGNALNC,SS:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALRR2,CLR,BB,QA,QB,SD:
STD_LOGIC;
SIGNALR1,R0:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
R1<=R0;R0<=FLAG_F;
ENDIF;
RR2<=R1ANDNOTR0;
CLR<=RR2;
ENDPROCESS;
KEYIN_PROCESS:
BLOCKIS
SIGNALRST,D0,D1:
STD_LOGIC;
BEGIN
RST<=RR2;
PROCESS(FLAG_N,RST)IS
BEGIN
IFRST='1'THEN
ACC<="0000000000000000";
NC<="000";
ELSE
IFFLAG_N'EVENTANDFLAG_N='1'THEN
IFNC<4THEN
ACC<=ACC(11DOWNTO0)&DATA_N;
NC<=NC+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDBLOCKKEYIN_PROCESS;
LOCK_PROCESS:
BLOCKIS
BEGIN
PROCESS(CLK,DATA_F)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFNC=4THEN
IFDATA_F="0100"THEN
REG<=ACC;
QA<='1';QB<='0';
ELSIFDATA_F="0001"THEN
IFREG=ACCTHEN
QA<='0';QB<='1';
SD<='0';
ELSESS<=SS+1;
IFSS=2THEN
SD<='1';
ENDIF;
ENDIF;
ELSIFACC="1000100010001000"THEN
QA<='0';QB<='1';
S