您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于VHDL 的数字密码锁设计

基于VHDL 的数字密码锁设计

来源:华佗小知识
张佳骏《基于VHDL的电子密码锁设计与实现》第1页共33页1引言

电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。目前设计密码锁的方法很多,例如用传统的PCB板设计、用PLC设计或者用单片机设计。而用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。

本设计在Max+plusⅡ的环境中进行,用Al2tera公司ACEX1K系列的EP1K30TC14423来实现。ACEX1K是Altera公司着眼于通信、音频处理及类似场合的应用而推出的FPGA器件芯片系列,其典型门数为10万门,是当今Altera多种产品中应用前景最好的器件系列之一。

EDA技术设计电子系统具有用软件的方式设计硬件;设计过程中可用有关软件进行各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计成本低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。

用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由3个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。

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

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

(3)七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。

张佳骏《基于VHDL的电子密码锁设计与实现》第2页共33页1.1设计背景随着社会的发展和人们生活水平的提高,人们的安全意识也逐步加强。传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现保密防盗这一问题变的尤其的突出,密码锁以其安全性高、成本低、功耗低、易操作等优点受到越来越多人的欢迎。

基于VHDL语言的电子密码锁是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。它是解决重要部门出入口实现安全防范管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。

在数字技术网络技术飞速发展的今天,电子密码锁技术得到了迅猛的发展。它早已超越了单纯的门道及钥匙管理,逐渐发展成为一套完整的出入管理系统

[1]。它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。在

该系统的基础上增加相应的辅助设备可以进行电梯控制、车辆进出控制,物业消防监控、餐饮收费、私家车库管理等,真正实现区域内一卡智能管理。

目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。在实际应用中,由于程序容易跑飞,系统的可靠性能较差[2]。基于VHDL语言的电子密码锁已经是现代生活中经常用到的工具之一,用于各类保险柜、房门、防盗门等等。用电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。

1.2设计目的

电子杂志、报刊经常刊登有密码开关、密码锁这样的电路,大多数是使用常用的数字电路,如CD4017,然后通过不同的连接方式实现密码控制功能。这种电路的特点就是密码修改只能通过改变电路的连接来实现,密码很容易被破解,电路复杂,故障率高。本制作是针对这些电路而设计的,将以往的以单片机实现设计改为可编程器件FPGA利用VHDL编程实现电子密码锁的设计。这种设计移动方便。基于FPGA的电子密码锁具有保密强、灵活性高、适用范围广等特点,它在键盘上输入,与打电话差不多,因而易于掌握,其突出优点是“密码”是记在

张佳骏《基于VHDL的电子密码锁设计与实现》第3页共33页被授权人脑子里的数字和字符,既准确又可靠,不会丢失(除了忘记),难以被窃(除非自己泄露)。但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成保密性不足。当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。因此,为了发扬优点、克服弱点,本设计采用“任意设定数字密码”技术使得被授权人可以根据自己的需要或喜好设定密码,常用常新,在输入密码的过程中,当用户键入错误密码时,系统就会报警,由扬声器发出5秒报警声,当连续三次出现密码错误时,则系统会长时间报警不止,这时必须按复位方可停止。

本设计的电子密码锁的特点是:体积小、功耗低、价格便宜、安全可靠,维护和升级都十分方便,具有较好的应用前景。它与传统锁具的不同之处在于:它与可编程逻辑器件实现系统的设计,应用简洁清晰的VHDL语言实现设计编程思想,能够实现适时、智能控制管理功能,特别是在系统的扩展上有很好的优势。

1.3设计内容

本次课程设计成功地设计了一个简单的数字电子密码锁,密码为4位。将电子密码锁分为以下几个模块:方波生成模块、消抖同步模块、密码锁逻辑控制模块和密码锁显示模块,实现了以下功能:

(1)密码输入:每按下一个键,要求在数码管上显示,并依次左移;(2)密码清除:清除密码输入,并将输入置为”8888”;(3)密码修改:将当前输入设为新的密码;(4)上锁和开锁

张佳骏《基于VHDL的电子密码锁设计与实现》第4页共33页2设计的基础依据

2.1EDA简介

EDA是电子设计自动化(ElectronicDesignAutomation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(HardwareDescriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。

硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。

张佳骏《基于VHDL的电子密码锁设计与实现》第5页共33页2.2VHDL2.2.1VHDL语言简介

目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上而下地逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件,实现电子设计自动化。其中电子设计自动化EDA(即ElectronicDesignAutomation)VHDL(VHSIC的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。

HardwareDescriptionLanguage)是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在20世纪80年代开发的HDL,现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点[2]。

VHDL主要用于描述数字系统的结构、行为和功能,其程序结构特点是将一个电路模块或一个系统分成端口和内部功能算法实现两部分。对于一个电路模块或者数字系统而言,定义了外部端口后,一旦内部功能算法完成后,其他系统可以直接依据外部端口调用该电路模块或数字系统,而不必知道其内部结构和算法。VHDL的特点使得电子系统新的设计方法——“自顶向下”设计方法更加容易实现[14]。可以先对整个系统进行方案设计,按功能划分成若干单元模块,然后对每个单元模块进一步细分,直到简单实现的单元电路。

2.2.2VHDL语言的特点

VHDL语言主要用于描述数字系统的结构、行为、功能和接口,其具有以下特点:

(1)作为HDL的第一个国际标准,VHDL具有很强的可移植性;(2)具有丰富的模拟仿真语句和库函数;

(3)VHDL有良好的可读性,接近高级语言,容易理解;(4)系统设计与硬件结构无关;(5)支持模块化设计;

(6)用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。

张佳骏《基于VHDL的电子密码锁设计与实现》第6页共33页2.2.3VHDL语言的优点

与其他硬件描述语言相比,VHDL语言有如下优越之处[15]:

(1)VHDL语言支持自上而下(TopDown)和基于库(LibraryBase)的设计方法,还支持同步电路、异步电路、FPGA以及其他随机电路的设计;(2)VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用,还可以自定义数据类型,给编程人员带来较大的自由和方便;(3)VHDL对设计的描述具有相对性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么;

(4)VHDL具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编写如何测试相量便可以进行源代码级的调试,而且设计者可以非常方便地比较各种方案之间的可行性及其优劣,不需做任何实际的电路实验;(5)VHDL语言可以与工艺无关编程;(6)VHDL语言标准、规范,易于共享和复用。

2.2.4VHDL语言的基本结构

VHDL有五大元素组成,即实体、结构体、配置、程序包和库[16]。具体说明如下:(1)实体(ENTITY)

程序是设计的基本模块和初级单元,在分层设计中,顶层有顶层实体,含在顶层实体中的较低层的描述为底层实体.配置把顶层实体和底层实体连接起来.实体说明语句仅对本实体与外部电路接口进行描述.(2)结构体(ARCHITECTURE)

结构体也叫构造体,描述了实体的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。

(3)配置(CONFIGURATION)

配制用于将元件实例与实体-结构成对绑定,决定了哪个结构体于实体关联。(4)程序包(PACKAGE)

张佳骏《基于VHDL的电子密码锁设计与实现》第7页共33页程序包是经常使用的数据类型和子程序的集合,可以认为是VHDL的工具箱,主要对程序包中的常量、数据类型和子程序进行格式描述,类似于C语言中的头文件。

(5)库(LIBRARY)

库具体对程序包声明的数据类型和子程序进行功能说明。

2.2.5VHDL语言的应用

硬件描述语言已成为当今以及未来电子设计自动化(EDA)解决方案的核心,特别是对于深亚微米复杂数字系统的设计,硬件描述语言具有独特的作用。VHDL在数字电子电路的设计中具有硬件描述能力强、设计方法灵活等优点[6]。利用硬件描述语言VHDL,数字电路系统可从系统行为级、寄存器传输级和门级三个不同层次进行设计,即上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接着,再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具,把网表转换为要实现的具体电路布线结构。目前,这种高层次设计(highleveldesign)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。VHDL的应用已成为当今以及未来EDA解决方案的核心,而且是复杂数字系统设计的核心。

张佳骏《基于VHDL的电子密码锁设计与实现》第8页共33页3基于VHDL的电子密码锁设计过程

3.1设计规划

电子密码锁的结构如图3-1所示,由时钟脉冲发生器、按键、指示灯和控制部分等组成。开关的消抖动电路放在控制部分考虑,时钟输入端CLK由外部时钟脉冲发生器的输出提供。设计中的指示灯就是发光二极管,共计10个,用来指示系统的工作状态。其中8个为一组,用来显示已经输入密码的个数,剩余两个,一个为开锁绿色指示灯LT;另一个为报警红色指示灯LF。控制部分是VHDL语言设计的核心部分,主要由方波生成模块FEN、消抖同模XIAOPRO、反向器模块INV1和密码锁逻辑控制模块CENTRE这4个模块构成,可以完成密码的修改、设定及非法入侵报警、驱动外围电路等功能。

图3.1电子密码锁结构

主程序作为整个系统中最重要的部分,设计相当繁琐,而且还承担着其它子程序的连接任务,所以显得尤为重要,如果这个部分出了问题那整个系统将会瘫痪。此电子密码锁系统的主程序需要的标准程序包:USEIEEE.STD_LOGIC_11.ALL;

USEIEEE.STD_LOGIC_ARITH.ALLUSEIEEE.STD_LOGIC_UN-

图3.2DEBOLNCING模块原件例化张佳骏《基于VHDL的电子密码锁设计与实现》第9页共33页模块内部信号:CLK:时钟脉冲输入端口VCC:模块内部信号,控制清零Q0:寄存D触发器处理过的信号Q1:与Q0信号做差分处理D1:模块内部信号D0:模块内部信号

QQ0,QQ1D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出端口(删除无影响)。DEBOUNCING模块主要程序如下:

U1:DCFQPORTMAP(CLK=>CLKCLRN=>INV_DPRN=>VCCD=>VCCQ=>Q0);

U2:DCFQPORTMAP(CLK=>CLKCLRN=>Q0PRN=>VCCD=>VCCQ=>Q1);PROCESS(CLK)BEGIN

IFCLK'EVENTANDCLK='1'THEND0<=NOTQ1;D1<=D0;ENDIF

ENDPROCESS;

DD0<=D0;DD1<=D1;QQ1<=Q1QQ0<=Q0;D_OUT<=NOT(D1ANDNOTD0);D_OUT1<=NOTQ1;ENDARCHITECTUREART;

这段程序的作用就是通过对信号的分频处理,从而将按键产生的不规则信号转换为便于识别的按键信号,达到消除抖动的目的。

张佳骏《基于VHDL的电子密码锁设计与实现》第10页共33页3.2各模块原理及程序电子密码锁的核心部分是控制器,该部分的输入输出信号已有明确的定义如表3.1所示:知道了输入输出后,就可以进行设计了。该电子密码锁设置8位二进制密码,其功能特点为:

表3-1电子密码锁控制器输入输出信号定义(1)采用串行数据输入,可实现启闭开关、指示灯提示和报警等功能;(2)采用消抖模块,以避免开关的震颤影响;

(3)开锁者只有在正确输入密码后才能重新设置新的密码,以防止非管理员对密码进行任意的修改];(4)可初始化密码。

数字系统的层次化设计,一般都要经过4个阶段:设计输入、编译、仿真验证、下载器件。本设计采用的是自下而上的设计方法,逐层完成相应的描述、编译、仿真与验证,即先建立一些低层次的设计,再将它们组合在一起,最后形成一个单一的顶层设计文件。Max+plusⅡ软件有多种输入方式,主要有:各种文本输入、原理图输入和波形输入。对于不同层次的模块,应采用不同的输入方式进行描述。由于VHDL擅长描述模块的逻辑功能,而原理图擅长描述硬件连接关系,所以在底层设计中,对底层所有模块使用VHDL语言进行描述,在顶层设计中,使用原理图输入方法。

密码锁控制电路主要程序:KEYIN_PROCESS:BLOCKIS

SIGNALRST,D0,D1,STD_LOGIC;

张佳骏《基于VHDL的电子密码锁设计与实现》第11页共33页BEGINRST<=RR2;

PROCESSFLAG_NRSTISBEGIN

IFRST='1'THEN

ACC<="0000000000000000"--CLEARINPUTNC<="000";ELSE

IFFLAG_N'EVENTANDFLAG_N='1'THENIFNC<4THEN

ACC<=ACC11DOWNTO0&DATA_N;NC<=NC+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;

ENDBLOCKKEYIN_PROCESS;

以上程序的作用是清除、暂存按键输入数据,每输入一个数字在数码管显示时都左移一位,直到输入位数达到4位,4位以后不再显示。LOCK_PROCESS;BLOCKISBEGIN

PROCESS(CLKDATA_F)ISBEGIN

IF(CLK'EVENTANDCLK='1')THENFNC=4THEN

IFDATA_F2='1'THEN--上锁控制信号有效REG<=ACC;--密码存储QA<='1';QB<='0';

本设计主要包括方波生成模块、消抖同步模块、密码锁逻辑控制模块和密码锁显示模块,下面分别加以介绍。

张佳骏《基于VHDL的电子密码锁设计与实现》第12页共33页3.2.1方波生成模块

方波生成模块FEN分频产生占空比为1:100的方波,用于消除抖动。分频电路的输入时钟CLK是由外部时钟提供的,外部时钟周期取200ns。FEN模块程序如下:LIBRARYIEEE;

USEIEEE.std_logic_11.ALL;ENTITYfenISPORT(clk:instd_logic;clk1:outstd_logic);ENDfen;

ARCHITECTUREfen_arcOFfenISBEGINPROCESS(clk)

VARIABLEcnt:integerrange0to99;BEGIN

IFclk!eventANDclk=!1!THENIFcnt=99THENcnt:=0;clk1<=!1!;ELSEcnt:=cnt+1;clk1<=!0!;ENDIF;ENDIF;ENDPROCESS;ENDfen_arc;

张佳骏《基于VHDL的电子密码锁设计与实现》第13页共33页3.2.2消抖同步模块

键盘的输入电路部分又分为键盘去抖电路和密码锁输入电路,下面先介绍键盘去抖电路部分。键盘消抖部分是由两个小的模块集成为一个去抖电路的,所以在此分开介绍此两个模块。(1)DCFQ模块模块外部信号端口:

CLK:时钟脉冲输入端口,为电路提供原始始终信号CLRM:清零信号输入端口PRN:置位信号输入端口Q:信号输出端口DCFQ模块的主要程序

IFCLRN='0'ANDPRN='1'THENQ<='0';

LSIFCLRN='1'ANDPRN='0'THENQ<='1';

ELSIFCLK'EVENTANDCLK='1'THENQ<=D;ENDIF;

此段程序作用是判断输入信号是否有效,如有效则输出,无效清零。(2)DEBOUNCING模块a.模块外部信号端口:D-IN:信号输入端口FLAG_N:数字输出标志FLAG_F:功能输出标志

CLK_CTR:控制电路工作时钟信号

CLK_DEBOUNCE:去抖电路工作时钟信号(仿真时用)b.模块内部信号:CLK:电路工作时钟脉冲

C_KEYBOARD:键扫信号“00-01-10-11”寄存器

张佳骏《基于VHDL的电子密码锁设计与实现》第14页共33页C_DEBOUNCE:去抖时钟信号C:键盘输入去抖后的寄存器

N,F:数字、功能按键译码值的寄存器

FN,FF:数字、功能按键标志值数字、功能按键SEL:模块内部信号Z:按键位置信号

对于K1和K0信号,它们分别代表1和0的按键开关,可以直接送入密码锁逻辑控制模块CEN2TRE。但由于它们是由按键产生的,其产生时刻和持续时间长短是随机的,并且存在因开关簧片反弹引起的电平抖动现象。因此,必须在每个开关后面安排一个消抖和同步化电路模块XIAOPRO,目的是保证系统能捕捉到输入脉冲,同时,保证每按一次键只形成一个宽度固定的脉冲[3]。在XIAOPRO模块中,因为变量的赋值是直接的,立即生效的,它在某一时刻仅包含一个值,而信号的赋值是有一定附加时延的,故当时钟脉冲下降沿到来时,变量tmp2和tmp3在赋值语句执行后立即分别得到新值:tmp1的值和tmp2的非值,而输入信号a经过一定时延赋值给信号tmp1,实现了消除抖动并且同步的功能。用来描述输入消抖同步电路功能的VHDL语言程序如下:LIBRARYIEEE;

USEIEEE.std_logic_11.ALL;ENTITYxiaoproISPORT(a,clk1:instd_logic;b:outstd_logic);ENDxiaopro;

ARCHITECTURExiao_arcOFxiaoproISSIGNALtmp1:std_logic;BEGIN

PROCESS(clk1,a)

VARIABLEtmp3,tmp2:std_logic;BEGIN

IFclk1!eventANDclk1=!0!THEN

张佳骏《基于VHDL的电子密码锁设计与实现》第15页共33页tmp1<=a;tmp2:=tmp1;tmp3:=nottmp2;ENDIF;

b<=tmp1ANDtmp3ANDclk1;ENDPROCESS;ENDxiao_arc;

3.3密码锁逻辑控制模块

密码锁控制电路组成:

ELSIFDATA_F(0)='1'THEN--开锁控制信号有效IFREG=ACCTHEN--密码核对QA<='0'QB<='1';ENDIF;

ELSIFACC="1000100010001000"THENQA<='0';QB<='1';ENDIF;

这段程序的作用是在按下*键时将输入的密码(暂时寄存于ACC中)跟已经存储的密码(REG中的密码信息)进行对比,如果一样,则密码锁开锁。而在通过密码验证后可以按#键重新设定密码。在这里值得注意的是有一个密码“8888”作为万用密码,也就是不论当前密码是什么,只要输入的密码为“8888”则都可通过密码锁。

模块CENTRE是整个设计的核心,它实现密码锁的逻辑功能。管理员有权在任何时候按动密码初始化按键LC,此时锁内密码设置为程序初始化密码值(在本模块程序中此值为10010101)。开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯LT。否则,系统进入“错误”状态,并发出报警信号。串行数字锁的报警方式是点亮指示灯LF,并使喇叭鸣叫,直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开锁的状态。该8位串行电子密码锁设置8位二

张佳骏《基于VHDL的电子密码锁设计与实现》第16页共33页进制密码,要求锁内给定的密码是可调的,且设置方便,保密性好。其具体操作分为输入密码和修改密码两部分。

(1)输入密码密码锁输入电路:

图3.3密码锁输入电路原件例化1)模块外部信号端口CLK-1K:时钟脉冲输入端口KEY-IN:按键输入端口

CLK_SCAN:键盘扫描序列仿真时用DATA_N:数字输出端口DATA_F:功能输出端口FLAG_N:数字输入标志FLAG_F:功能输入标志

EMLOCK:密码锁控制信号输出端口DATA-BCD:按键显示输出端口2)模块内部信号ACC:暂存键盘输入信息REG:密码存储位置RR2:寄存器清零信号

R1,R0:模块内部信号,二者差分生成清零信号NC:移位寄存器

QA,QB:上锁、解锁控制信号

密码输入值的比较主要有两部分,密码位数和内容,任何一个条件不满足,

张佳骏《基于VHDL的电子密码锁设计与实现》第17页共33页都不能打开锁。若锁内密码为“10010101”,K1和K0置低电平,分别表示输入“1”和“0”。输入密码前先进行复位操作,再按着从密码最低位到最高位的顺序依次正确输入10101001。若采用共阴极LED接法,当输入第0位“1”后,八个二极管中相对应的二极管点亮(此时二极管指示灯lamp=“10000000”,输入密码信号shift=“10000000”),接着输入第1位“0”(此时lamp

=“11000000”,shift=“01000000”)……依照顺序,将8位二进制密码全部正确输入完毕后(此时amp=“11111111”,shift=“10010101”),经检验,输入的密码shift等于锁内预先设置的密码lock,密码锁开启信号LT置高电平,锁开启。同时,密码修改控制信号LA置高电平。若在输入密码的过程中,8位二进制密码出现一位或多位输入错误,那么锁不能开启,同时Alm置高电平,指示灯LF亮,发出报警信号,通知管理员。直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开锁的状态。

密码锁输入电路主要程序:KEY_DECODER:BLOCK

SIGNALZ:STD_LOGIC_VECTOR(4DOWNTO0)--按键位置BEGIN

PROCESS(CLK)BEGIN

Z<=C_KEYBOARD&C;

IFCLK'EVENTANDCLK='1'THENCASEZIS

WHEN"11101"=>N<="0000";--0WHEN"00011"=>N<="0001";--1WHEN"00101"=>N<="0010";--2WHEN"00110"=>N<="0011";--3WHEN"01011"=>N<="0100";--4WHEN"01101"=>N<="0101";--5WHEN"01110"=>N<="0110";--6WHEN"10011"=>N<="0111";--7

张佳骏《基于VHDL的电子密码锁设计与实现》第18页共33页WHEN"10101"=>N<="1000";--8WHEN"10110"=>N<="1001";--9WHENOTHERS=>N<="1111";ENDCASE;ENDIF;

IFCLK'EVENTANDCLK='1'THENCASEZIS

WHEN"11011"=>F<="0100";--*_LOCKWHEN"11110"=>F<="0001";--#_UNLOCKWHENOTHERS=>F<="1000";ENDCASE;ENDIF;ENDPROCESS;

这段程序的作用是通过按键产生的信号进行译码,判断按键是数字还是上锁、解锁控制信号。(2)修改密码

为防止非管理员任意进行密码修改,必须在正确输入密码后,才能重新设置密码。输入正确密码后,锁打开,同时,密码修改控制信号LA置高电平,就可直接进行修改密码的操作。修改密码实质就是用输入的新密码去取代原来的旧密码。存储新密码时,输入一位密码,密码位数加1。若采用共阴极LED接法,与输出引脚lamp相接的发光二极管由亮变暗。当输入8位密码后,8只发光二极管全变暗。此时给CLK一个低电平,新密码产生。

3.4密码锁显示模块

密码锁显示电路:

张佳骏《基于VHDL的电子密码锁设计与实现》第19页共33页图3.4密码锁显示电路原件例化模块外部信号端口

DATA-BCD:密码信号输入端口BLOCK:密码锁状态信号显示灯

张佳骏《基于VHDL的电子密码锁设计与实现》第20页共33页4系统仿真

当各个模块分别编译成功后,则创建一个个元件符号。再用图形编辑器将各元件模块组装起来,这就是本设计中最顶层的图形设计文件。顶层图形设计文件lock.gdf如图4-1所示,这个结构框图说明了整个系统的外部输入和输出情况。为了获得与目标器件对应的、精确的时序仿真文件,在对文件编译前必须选定最后实现本设计项目的目标器件,在Max+plusⅡ环境中我们选Altera公司的FPGA,然后选择用于编程的目标芯片:选择菜单“Assign”→“Device”,窗口中的DeviceFamily是器件序列栏,先在此栏中选择ACEX1K。为了选择EP1K30TC14423器件,应将此栏下方标有“ShowonlyFastestSpeedGrades”的勾消去,以便显示出所有速度级别的器件。完成器件选择后,按OK,就可以进行编译了。

图4.1顶层图形设计文件编译成功后进行仿真。首先建立波形文件。波形文件lock.scf建好并存盘后,选择菜单“Max+plusⅡ”→“simulator”,启动仿真操作,结束后观察仿真波形。本设计中,仿真波形如图4-2~图4-4所示。当给初始密码输入信号LC一个低电平时,就将程序预先设定的密码(“10010101”)装入lock中,lock的值变为95。按下CLR后,系统复位,处于输入密码状态。输入的开锁密码串行顺序装入shift中,并用lamp显示输入密码的位数。密码输入完毕后,比较输入的密

张佳骏《基于VHDL的电子密码锁设计与实现》第21页共33页码shift是否等于预先设定的密码lock,若相等,锁开启。在图4-2中可以看到,shift等于lock(“95”),8位密码输入正确,开锁指示灯亮,可以开锁。由图4-3可以看到,输入密码shift(“AA”)不等于设定密码lock(“95”),报警指示灯亮,Alm变为高电平,输出报警信号。由图4-4可以看出,当给load一个低电平后,就可以进行修改密码的操作了。将8位新密码(“55”)输入完,新密码就自动装入load中,load值变成“55”,密码修改完毕。

图4.2输入正确密码波形图4.3输入错误密码波形张佳骏《基于VHDL的电子密码锁设计与实现》第22页共33页图4.4修改密码波形仿真结束后,就可以将设计文件编程下载到芯片中去。连接硬件系统后,选择“Max+plusⅡ”→“programmer”菜单,调出编程器(programmer)窗口。一切就绪后,按下编程器窗口中的“program”按钮,设计的内容就下载到FPGA芯片EP1K30TC14423中去了。经实际电路测试验证,达到了设计的要求。

张佳骏《基于VHDL的电子密码锁设计与实现》第23页共33页5结束语

本文设计的基于VHDL语言的串行电子密码锁系统,硬件电路简单,微功耗,同时也提高了系统的可靠性和精度。锁的密码是可调的,且设置方便。锁内设置的密码值可以选取00至FF中任一个,共计28种。本设计占用芯片资源少,可在此基础上变二进制输入为十进制输入,或外加LED七段显示等一些外围电路,以设计更大的系统。

在FPGA中,不同电路系统的设计往往采用自顶向下的设计方法,亦即将一个大的系统分解成单元电路。在每个单元电路的设计完成后,采用专门的仿真工具进行功能仿真是很有必要的,可节省不少设计时间。

对于这一整个电子密码锁系统,设计的程序已经基本实现了预期的所有功能,充分利用了EDA设计中的优点,将各模块以文件顶层设计的方式让所有子程序串联在了一起,通过满足某个条件而实现相关功能.显然这个系统的设计已经完成,也基本达到了作为数字密码锁的绝大部分功能。

张佳骏《基于VHDL的电子密码锁设计与实现》第24页共33页致谢

在这次课程设计的撰写过程中,我得到了许多人的帮助。

首先我要感谢黄敏老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。

其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做课程设计的环境。

张佳骏《基于VHDL的电子密码锁设计与实现》第25页共33页参考文献

[1]阎石主编,《数字电子技术基础》,高等教育出版社,1998

[2]谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001[3]廖裕评等主编,《CPLD数字电路设计——使用MAX+plusⅡ入门篇》,清华大学出版社,2001

[4]冯涛等主编,《可编程逻辑器件开发技术:MAX+plusⅡ入门与提高》,人民

邮电出版社,2002

[5]杨崇志,《特殊新型电子元件手册》,辽宁科学技术出版社,1999[6]彭介华,《电子技术课程设计指导》高等教育出版社.2000年出版.

[7]MarkZwolinski,DigitalSystemDesignwithVHDL,电子工业出版社,2002[8]AlanB.MarcovitzIntroductiontologicDesign,电子工业出版社,2002

张佳骏《基于VHDL的电子密码锁设计与实现》第26页共33页附录:程序清单

程序名:四位电子密码锁程序作者:张佳骏

--*********************************************LIBRARYIEEE;

USEIEEE.STD_LOGIC_11.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;LIBRARYaltera;USEaltera.maxplus2.ALL;

--*********************************************ENTITYelec_lockISPORT(CLK_4M

:IN

STD_LOGIC;

--systemoriginalclock4M

CLK_SCAN:OUTSTD_LOGIC_VECTOR(3downto0);--scan

sequence

KEY_INcode

FLAG_NUMB:OUTSTD_LOGIC;FLAG_FUNC:OUTSTD_LOGIC;LED_COM:

OUTSTD_LOGIC;

--forLP-2900only--**

--1:LOCK,

:IN

STD_LOGIC_VECTOR(2downto0);--KEYINbutton

CLEAR:OUTSTD_LOGIC;ENLOCK:OUTSTD_LOGIC;0:UNLOCK

NUMB_CNT:OUTSTD_LOGIC_VECTOR(2DOWNTO0);BCD_CODE:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

SELOUT:OUTSTD_LOGIC_VECTOR(1DOWNTO0);--FITTOLP-2900SEGOUT

:OUTSTD_LOGIC_VECTOR(6DOWNTO0)--SEG7Display

张佳骏《基于VHDL的电子密码锁设计与实现》第27页共33页);

ENDelec_lock;

--*********************************************ARCHITECTUREaOFelec_lockIScomponentdebouncingport(d_in

clk

:INSTD_LOGIC;:INSTD_LOGIC;

d_out:OUTSTD_LOGIC);

endcomponent;

SIGNALCLK:STD_LOGIC;

SIGNALCLK_KEYBOARD:STD_LOGIC_VECTOR(1downto0);SIGNALCLK_DEBOUNCE:STD_LOGIC;

SIGNALCLK_DISPLAY:STD_LOGIC_VECTOR(1downto0);SIGNALCSIGNALNSIGNALFSIGNALFNSIGNALFFSIGNALSEL

:STD_LOGIC_VECTOR(2downto0);:STD_LOGIC_VECTOR(3downto0);:STD_LOGIC_VECTOR(3downto0);:STD_LOGIC;:STD_LOGIC;

:STD_LOGIC_VECTOR(3downto0);STD_LOGIC_VECTOR(3downto0);STD_LOGIC_VECTOR(3downto0);

SIGNALOUT_NUMB:SIGNALOUT_FUNC:

SIGNALACC:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALREG:STD_LOGIC_VECTOR(15DOWNTO0);SIGNALRR2:STD_LOGIC;

--**RR2=Clear

SIGNALQA,QB,BB:STD_LOGIC;

SIGNALNC:STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALDB:STD_LOGIC_VECTOR(3DOWNTO0);--NumberTODisplaySIGNALSEG:STD_LOGIC_VECTOR(6DOWNTO0);--SEG7DisplaySignalBEGIN

张佳骏《基于VHDL的电子密码锁设计与实现》第28页共33页--*******************************************--CONNECTIONOUT_NUMB<=N;OUT_FUNC<=F;FLAG_NUMB<=FNFLAG_FUNC<=FF

;;

CLK_DEBOUNCE<=CLK;NUMB_CNT<=NC;

SEGOUT(6DOWNTO0)<=SEG;SELOUT<=CLK_DISPLAY;LED_COM<='1';

--ForLP-2900only

--SevenSegmentDisplay

--*********************************************--scansignalgeneratorcounter:block

SignalQ:STD_LOGIC_VECTOR(22DOWNTO0);

SignalS:STD_LOGIC_VECTOR(1DOWNTO0);--keyboardscanabout15Hz***SIGNALSEL:STD_LOGIC_VECTOR(3downto0);BEGIN

PROCESS(Clk_4M)Begin

IFCLK_4M'EventANDCLK_4M='1'thenQ<=Q+1;ENDIF;ENDPROCESS;

CLK<=Q(0);

--CLK=CLK_DEBOUNCE

--***00-01-10-11

CLK_KEYBOARD<=Q(5DOWNTO4);CLK_DISPLAY<=Q(5DOWNTO4);

--Togeneratekeyboardscansequence1110->1101->1011->0111

SEL<=

\"1110\"WHENCLK_KEYBOARD=0ELSE

张佳骏《基于VHDL的电子密码锁设计与实现》第29页共33页\"1101\"WHENCLK_KEYBOARD=1ELSE\"1011\"WHENCLK_KEYBOARD=2ELSE\"0111\";CLK_SCAN<=SEL;endblockcounter;

--*********************************************--debounuingcktdebounuing:blockbegin

U1:debouncingPORTMAP(

d_in=>key_in(0),d_out=>C(0),clk=>CLK);

U2:debouncingPORTMAP(

d_in=>key_in(1),d_out=>C(1)clk=>CLK);

U3:debouncingPORTMAP(

d_in=>key_in(2),d_out=>C(2)

,,

clk=>CLK

);

ENDblockdebounuing

;

--******************************************************--key_decoderkey_decoder:block

signalZ:std_logic_VECTOR(4downto0);

--KEYPOSITION

张佳骏《基于VHDL的电子密码锁设计与实现》第30页共33页SIGNALR1,R0:STD_LOGIC;begin

PROCESS(clk)begin

Z<=CLK_KEYBOARD&C;

IFCLK'EVENTANDCLK='1'THENcaseZis

when\"11101\"=>N<=\"0000\";--0when\"00011\"=>N<=\"0001\";--1when\"00101\"=>N<=\"0010\";--2when\"00110\"=>N<=\"0011\";--3when\"01011\"=>N<=\"0100\";--4when\"01101\"=>N<=\"0101\";--5when\"01110\"=>N<=\"0110\";--6when\"10011\"=>N<=\"0111\";--7when\"10101\"=>N<=\"1000\";--8when\"10110\"=>N<=\"1001\";--9whenothersendcase;ENDIF;

--****************************

IFCLK'EVENTANDCLK='1'THENcase

Zis

=>N<=\"1111\";

when\"11011\"=>F<=\"0100\";--*_LOCKwhen\"11110\"=>F<=\"0001\";--#_UNLOCKwhenothersendcase;ENDIF;endprocess;

=>F<=\"1000\";

张佳骏《基于VHDL的电子密码锁设计与实现》第31页共33页FN<=FF<=

NOT(N(3)ANDN(2)ANDN(1)ANDN(0));

(NOTF(3)ANDF(2)ANDNOTF(1)ANDNOTF(0))OR(NOT

ANDNOTF(1)ANDF(0));--TogenerateclearsignalforACCPROCESS(CLK)BEGIN

IFCLK'EVENTANDCLK='1'THENR1<=R0;R0<=FF;ENDIF;

RR2<=R1ANDNOTR0;CLEAR<=RR2;ENDPROCESS;endblockkey_decoder;

--*****************************************************--KEYIN///BACK///ALLCLEARKEYIN_PROCESS:BLOCK

SIGNALRST,D0,D1:STD_LOGIC;BEGIN

PROCESS(CLK,FN,RST)BEGIN

IFRST='1'THEN

ACC<=\"0000000000000000\";NC<=\"000\";ELSEIF

FN'EVENTANDFN='1'THEN

--CLEARINPUT

IFNC<4THEN

ACC<=ACC(11DOWNTO0)&N;BB<='0';NC<=NC+1;

张佳骏《基于VHDL的电子密码锁设计与实现》第32页共33页ELSE

BB<='1';ENDIF;ENDIF;ENDIF;ENDPROCESS;RST<=

RR2;

ENDBLOCKKEYIN_PROCESS;

--*********************************************LOCK_PROCESS:BLOCKBEGIN

PROCESS(CLK,F)BEGIN

IF(CLK'EVENTANDCLK='1')THENIFNC=4THEN

IFF(2)='1'THEN--LOCKREG<=ACC;QA<='1';QB<='0';ELSIFF(0)='1'THENIF

REG=ACCTHEN

--UNLOCK

--CHECKPINCODE

QB<='1';QA<='0';ENDIF;

ELSIFACC=\"0010010110000000\"THEN--Toset\"2580\"istheUniversal.pinnumberQB<='1';QA<='0';ENDIF;

ENDIF;ENDIF;ENDPROCESS;

张佳骏《基于VHDL的电子密码锁设计与实现》第33页共33页ENDBLOCKLOCK_PROCESS;ENLOCK<=QAANDNOTQB;BCD_CODE<=ACC;

--**********************************************MULTIPLEXER:BLOCKBEGIN

DB<=ACC(15DOWNTO12)WHENCLK_DISPLAY=0ELSE

ACC(11DOWNTO8)WHENCLK_DISPLAY=1ELSEACC(7ACC(3\"1111\";

EndBlockMULTIPLEXER;

--**********************************************SEVEN_SEGMENT:BlockBegin--gfedcbaSEG<=

\"0111111\"WHENDB=0ELSE

--BinaryCode->Segment7Code

DOWNTO4)WHENCLK_DISPLAY=2ELSEDOWNTO0)WHENCLK_DISPLAY=3ELSE

\"0000110\"WHENDB=1ELSE\"1011011\"WHENDB=2ELSE\"1001111\"WHENDB=3ELSE\"1100110\"WHENDB=4ELSE\"1101101\"WHENDB=5ELSE\"1111101\"WHENDB=6ELSE\"0000111\"WHENDB=7ELSE\"1111111\"WHENDB=8ELSE\"1101111\"WHENDB=9ELSE\"1111111\";

EndBlockSEVEN_SEGMENT;ENDa;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务