基于VHDL 的数字密码锁设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1引言
电子密码锁的使用表达了人们消费水平、保安意识和科技水平的提高,而且防止了携带甚至丧失钥匙的麻烦。
目前设计密码锁的方法很多,例如用传统的PCB 板设计、用PLC 设计或者用单片机设计。
而用V HDL 可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程到达高度自动化。
本设计在Max + plus Ⅱ的环境中进展,用Al2tera 公司ACEX 1 K系列的EP1 K30 TC14423 来实现。
ACEX 1 K是Altera 公司着眼于通信、音频处理及类似场合的应用而推出的FPGA 器件芯片系列,其典型门数为10 万门,是当今Altera 多种产品中应用前景最好的器件系列之一。
EDA 技术设计电子系统具有用软件的方式设计硬件;设计过程中可用有关软件进展各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计本钱低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。
用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个局部组成:数字密码输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。
可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。
〔1〕密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
〔2〕密码锁控制电路包括按键数据的缓冲存储电路,密码的去除、变更、存储、激活电锁电路〔存放器去除信号发生电路〕,密码核对〔数值比拟电路〕,解锁电路〔开/关门锁电路〕等几个小的功能电路。
〔3〕七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。
1.1设计背景
随着社会的开展和人们生活水平的提高,人们的平安意识也逐步加强。
传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现XX防盗这一问题变的尤其的突出,密码锁以其平安性高、本钱低、功耗低、易操作等优点受到越来越多人的欢送。
基于VHDL语言的电子密码锁是新型现代化平安管理系统,它集微机自动识别技术和现代平安管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。
它是解决重要部门出入口实现平安防X管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。
在数字技术网络技术飞速开展的今天,电子密码锁技术得到了迅猛的开展。
它早已超越了单纯的门道及钥匙管理,逐渐开展成为一套完整的出入管理系统[1]。
它在工作环境平安、人事考勤管理等行政管理工作中发挥着巨大的作用。
在该系统的根底上增加相应的辅助设备可以进展电梯控制、车辆进出控制,物业消防监控、餐饮收费、私家车库管理等,真正实现区域内一卡智能管理。
目前使用的电子密码锁大局部是基于单片机技术, 以单片机为主要器件, 其编码器与解码器的生成为软件方式。
在实际应用中, 由于程序容易跑飞, 系统的可靠性能较差[2]。
基于VHDL语言的电子密码锁已经是现代生活中经常用到的工具之一,用于各类保险柜、房门、防盗门等等。
用电子密码锁代替传统的机械式密码锁,克制了机械式密码锁密码量少、平安性能差的缺点。
1.2设计目的
电子杂志、报刊经常登载有密码开关、密码锁这样的电路,大多数是使用常用的数字电路,如CD4017,然后通过不同的连接方式实现密码控制功能。
这种电路的特点就是密码修改只能通过改变电路的连接来实现,密码很容易被破解,电路复杂,故障率高。
本制作是针对这些电路而设计的,将以往的以单片机实现设计改为可编程器件FPGA利用VHDL编程实现电子密码锁的设计。
这种设计移动方便。
基于FPGA的电子密码锁具有XX强、灵活性高、适用X围广等特点,它在键盘上输入,与打差不多,因而易于掌握,其突出优点是“密码〞是
记在被授权人脑子里的数字和字符,既准确又可靠,不会丧失〔除了忘记〕,难以被窃〔除非自己泄露〕。
但是密码不能太简单,太简单了就容易被他人在键盘上试探出来,或者可能被旁观者窥测出来,造成XX性缺乏。
当然,密码又不能太复杂,太复杂了可能自己都糊涂了,或者输入密码操作成功率低,造成使用不便。
因此,为了发扬优点、克制弱点,本设计采用“任意设定数字密码〞技术使得被授权人可以根据自己的需要或喜好设定密码,常用常新,在输入密码的过程中,当用户键入错误密码时,系统就会报警,由扬声器发出5秒报警声,当连续三次出现密码错误时,那么系统会长时间报警不止,这时必须按复位方可停顿。
本设计的电子密码锁的特点是:体积小、功耗低、价格廉价、平安可靠,维护和升级都十分方便,具有较好的应用前景。
它与传统锁具的不同之处在于:它与可编程逻辑器件实现系统的设计,应用简洁清晰的VHDL语言实现设计编程思想,能够实现适时、智能控制管理功能,特别是在系统的扩展上有很好的优势。
1.3设计内容
本次课程设计成功地设计了一个简单的数字电子密码锁,密码为 4 位。
将电子密码锁分为以下几个模块:方波生成模块、消抖同步模块、密码锁逻辑控制模块和密码锁显示模块,实现了以下功能:
(1)密码输入:每按下一个键,要求在数码管上显示,并依次左移;
(2)密码去除:去除密码输入,并将输入置为〞8888”;
(3)密码修改:将当前输入设为新的密码;
(4)上锁和开锁
2 设计的根底依据
2.1 EDA简介
EDA是电子设计自动化〔Electronic Design Automation〕缩写,是90年代初从CAD〔计算机辅助设计〕、CAM〔计算机辅助制造〕、CAT〔计算机辅助测试〕和CAE〔计算机辅助工程〕的概念开展而来的。
EDA技术是以计算机为工具,根据硬件描述语言HDL〔Hardware Description language〕完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统工程的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进展编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件构造参数,它的功能就是将软件描述与给定的硬件构造用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。
适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。
适配所选定的目标器件〔FPGA/CPLD芯片〕必须属于在综合器中已指定的目标器件系列。
硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。
HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路构造和连接方式。
设计者可利用HDL程序来描述所希望的电路系统,规定器件构造特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部构造,并实现相应逻辑功能的的门级或更底层的构造网表文件或下载文件。
目前,就FPGA/CPLD开发来说,比拟常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。
2.2VHDL
2.2.1 VHDL语言简介
目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上而下地逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件,实现电子设计自动化。
其中电子设计自动化EDA (即Electronic Design Automation)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。
VHDL(VHSIC Hardware Description Language)是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在20 世纪80 年代开发的HDL ,现在已成为IEEE成认的标准硬件描述语言。
VHDL 支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点[2]。
VHDL 主要用于描述数字系统的构造、行为和功能,其程序构造特点是将一个电路模块或一个系统分成端口和内部功能算法实现两局部。
对于一个电路模块或者数字系统而言,定义了外部端口后,一旦内部功能算法完成后,其他系统可以直接依据外部端口调用该电路模块或数字系统,而不必知道其内部构造和算法。
VHDL 的特点使得电子系统新的设计方法——“自顶向下〞设计方法更加容易实现[14]。
可以先对整个系统进展方案设计,按功能划分成假设干单元模块,然后对每个单元模块进一步细分,直到简单实现的单元电路。
VHDL语言的特点
VHDL语言主要用于描述数字系统的构造、行为、功能和接口,其具有以下特点:
〔1〕作为HDL的第一个国际标准,VHDL具有很强的可移植性;
〔2〕具有丰富的模拟仿真语句和库函数;
〔3〕VHDL有良好的可读性,接近高级语言,容易理解;
〔4〕系统设计与硬件构造无关;
〔5〕支持模块化设计;
〔6〕用VHDL完成的一个确定设计,可以利用EDA工具自动地把VHDL描述转变成门电路级网表文件。
VHDL语言的优点
与其他硬件描述语言相比,VHDL语言有如下优越之处[15]:
〔1〕VHDL语言支持自上而下〔TopDown〕和基于库〔LibraryBase〕的设计方法,还支持同步电路、异步电路、FPGA以及其他随机电路的设计;
〔2〕VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和构造描述混合使用,还可以自定义数据类型,给编程人员带来较大的自由和方便;
〔3〕VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的构造,也不必关心最终设计实现的目标器件是什么;
〔4〕VHDL具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编写如何测试相量便可以进展源代码级的调试,而且设计者可以非常方便地比拟各种方案之间的可行性及其优劣,不需做任何实际的电路实验;
〔5〕VHDL语言可以与工艺无关编程;
〔6〕VHDL语言标准、标准,易于共享和复用。
VHDL语言的根本构造
VHDL有五大元素组成,即实体、构造体、配置、程序包和库[16]。
具体说明如下:〔1〕实体〔ENTITY〕
程序是设计的根本模块和初级单元,在分层设计中,顶层有顶层实体,含在顶层实体中的较低层的描述为底层实体.配置把顶层实体和底层实体连接起来.实体说明语句仅对本实体与外部电路接口进展描述.
〔2〕构造体〔ARCHITECTURE〕
构造体也叫构造体,描述了实体的构造、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。
〔3〕配置〔CONFIGURATION〕
配制用于将元件实例与实体-构造成对绑定,决定了哪个构造体于实体关联。
〔4〕程序包〔PACKAGE〕
程序包是经常使用的数据类型和子程序的集合,可以认为是VHDL的工具箱,主要对程序包中的常量、数据类型和子程序进展格式描述,类似于C语言中的头文件。
〔5〕库〔LIBRARY〕
库具体对程序包声明的数据类型和子程序进展功能说明。
VHDL语言的应用
硬件描述语言已成为当今以及未来电子设计自动化(EDA)解决方案的核心,特别是对于深亚微米复杂数字系统的设计,硬件描述语言具有独特的作用。
VHDL在数字电子电路的设计中具有硬件描述能力强、设计方法灵活等优点[6]。
利用硬件描述语言VHDL,数字电路系统可从系统行为级、存放器传输级和门级三个不同层次进展设计,即上层到下层〔从抽象到具体〕逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。
然后,利用电子设计自动化〔EDA〕工具,逐层进展仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。
接着,再用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具,把网表转换为要实现的具体电路布线构造。
目前,这种高层次设计(highleveldesign)的方法已被广泛采用。
据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进展设计。
VHDL 的应用已成为当今以及未来EDA解决方案的核心,而且是复杂数字系统设计的核心。
3 基于VHDL的电子密码锁设计过程
3.1设计规划
电子密码锁的构造如图3-1所示,由时钟脉冲发生器、按键、指示灯和控制局部等组成。
开关的消抖动电路放在控制局部考虑,时钟输入端CL K由外部时钟脉冲发生器的输出提供。
设计中的指示灯就是发光二极管,共计10 个,用来指示系统的工作状态。
其中8 个为一组,用来显示已经输入密码的个数,剩余两个,一个为开锁绿色指示灯L T ;另一个为报警红色指示灯L F。
控制局部是V HDL 语言设计的核心局部,主要由方波生成模块FEN、消抖同模XIAOPRO、反向器模块INV1 和密码锁逻辑控制模块CEN TRE 这 4 个模块构成,可以完成密码的修改、设定及非法入侵报警、驱动外围电路等功能。
图3.1 电子密码锁构造
主程序作为整个系统中最重要的局部,设计相当繁琐,而且还承当着其它子程序的连接任务,所以显得尤为重要,如果这个局部出了问题那整个系统将会瘫痪。
此电子密码锁系统的主程序需要的标准程序包:USE IEEE.STD_LOGIC _1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL USE IEEE.STD_LOGIC_UN-
图3.2 DEBOLNCING模块原件例化
模块内部信号:
CLK:时钟脉冲输入端口
VCC:模块内部信号,控制清零
Q0:存放D触发器处理过的信号
Q1:与Q0信号做差分处理
D1:模块内部信号
D0:模块内部信号
QQ0,QQ1 D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出端口〔删除无影响〕。
DEBOUNCING 模块主要程序如下:
U1:DCFQ PORT MAP〔CLK=>CLK CLRN=>INV_D PRN=>VCC D=>VCC Q=>Q0〕;
U2:DCFQ PORT MAP〔CLK =>CLK CLRN =>Q0 PRN =>VCC D=>VCC Q=>Q1〕;
PROCESS〔CLK〕
BEGIN
IF CLK'EVENT AND CLK='1'THEN
D0<=NOT Q1;
D1<=D0;
END IF
END PROCESS;
DD0<=D0;DD1<=D1;QQ1<=Q1 QQ0<=Q0;
D_OUT<=NOT〔D1 AND NOT D0〕;
D_OUT1<=NOTQ1;
END ARCHITECTURE ART;
这段程序的作用就是通过对信号的分频处理,从而将按键产生的不规那么信号转换为便于识别的按键信号,到达消除抖动的目的。
3.2 各模块原理及程序
电子密码锁的核心局部是控制器,该局部的输入输出信号已有明确的定义如表3.1所示:知道了输入输出后,就可以进展设计了。
该电子密码锁设置8 位二进制密码,其功能特点为:
表3-1 电子密码锁控制器输入输出信号定义
〔1〕采用串行数据输入,可实现启闭开关、指示灯提示和报警等功能;
〔2〕采用消抖模块,以防止开关的震颤影响;
〔3〕开锁者只有在正确输入密码后才能重新设置新的密码,以防止非管理员对密码进展任意的修改];
〔4〕可初始化密码。
数字系统的层次化设计,一般都要经过 4 个阶段:设计输入、编译、仿真验证、下载器件。
本设计采用的是自下而上的设计方法,逐层完成相应的描述、编译、仿真与验证,即先建立一些低层次的设计,再将它们组合在一起,最后形成一个单一的顶层设计文件。
Max + plus Ⅱ软件有多种输入方式,主要有:各种文本输入、原理图输入和波形输入。
对于不同层次的模块,应采用不同的输入方式进展描述。
由于V HDL 擅长描述模块的逻辑功能,而原理图擅长描述硬件连接关系,所以在底层设计中,对底层所有模块使用V HDL 语言进展描述,在顶层设计中,使用原理图输入方法。
密码锁控制电路主要程序:
KEYIN_PROCESS:BLOCK IS
SIGNAL RST,D0,D1 ,STD_LOGIC;
BEGIN
RST<=RR2;
PROCESS FLAG_N RST IS
BEGIN
IF RST='1'THEN
ACC<="0000000000000000"--CLEAR INPUT
NC<="000";
ELSE
IF FLAG_N'EVENT AND FLAG_N='1'THEN
IF NC<4 THEN
ACC<=ACC 11 DOWNTO 0 &DATA_N;
NC<=NC+1;
END IF;
END IF;
END IF;
END PROCESS;
END BLOCK KEYIN_PROCESS;
以上程序的作用是去除、暂存按键输入数据,每输入一个数字在数码管显示时都左移一位,直到输入位数到达 4 位,4位以后不再显示。
LOCK_PROCESS;BLOCK IS
BEGIN
PROCESS〔CLK DATA_F〕IS
BEGIN
IF〔CLK'EVENT AND CLK='1'〕THEN
F NC=4 THEN
IF DATA_F 2 ='1'THEN --上锁控制信号有效
REG<=ACC;--密码存储QA<='1';QB<='0';
本设计主要包括方波生成模块、消抖同步模块、密码锁逻辑控制模块和密码锁显示模块,下面分别加以介绍。
3.2.1方波生成模块
方波生成模块FEN 分频产生占空比为1:100的方波,用于消除抖动。
分频电路的输入时钟CL K是由外部时钟提供的,外部时钟周期取200ns。
FEN 模块程序如下:
L IBRARY IEEE;
USE IEEE. std_logic_1164. ALL ;
ENTITY fen IS
PORT(clk :in std_logic ;
clk1 :out std_logic) ;
END fen ;
ARCHITECTURE fen_arc OF fen IS
BEGIN
PROCESS(clk)
V ARIABL E cnt :integer range 0 to 99 ;
BEGIN
IF clk ! event AND clk = ! 1 ! THEN
IF cnt = 99 THEN
cnt : = 0 ;
clk1 < = ! 1 ! ;
ELSE
cnt : = cnt + 1 ;
clk1 < = ! 0 ! ;
END IF ;
END IF ;
END PROCESS ;
END fen_arc ;
3.2.2 消抖同步模块
键盘的输入电路局部又分为键盘去抖电路和密码锁输入电路,下面先介绍键
盘去抖电路局部。
键盘消抖局部是由两个小的模块集成为一个去抖电路的,所以在此分开介绍此两个模块。
(1)DCFQ模块
模块外部信号端口:
CLK:时钟脉冲输入端口,为电路提供原始始终信号
CLRM:清零信号输入端口
PRN:置位信号输入端口
Q:信号输出端口
DCFQ模块的主要程序
IF CLRN='0'AND PRN='1'THEN
Q<='0';
LSIF CLRN='1'AND PRN='0'THEN
Q<='1';
ELSIF CLK'EVENT AND CLK='1'THEN
Q<=D;
END IF;
此段程序作用是判断输入信号是否有效,如有效那么输出,无效清零。
(2)DEBOUNCING模块
a.模块外部信号端口:
D-IN:信号输入端口
FLAG_N:数字输出标志
FLAG_F:功能输出标志
CLK_CTR:控制电路工作时钟信号
CLK_DEBOUNCE:去抖电路工作时钟信号(仿真时用)
b.模块内部信号:
CLK:电路工作时钟脉冲
C_KEYBOARD:键扫信号“00-01-10-11”存放器
C_DEBOUNCE:去抖时钟信号
C:键盘输入去抖后的存放器
N, F:数字、功能按键译码值的存放器
FN,FF:数字、功能按键标志值数字、功能按键
SEL:模块内部信号
Z:按键位置信号
对于K1 和K0 信号,它们分别代表1 和0 的按键开关,可以直接送入密码锁逻辑控制模块CEN2TRE。
但由于它们是由按键产生的,其产生时刻和持续时间长短是随机的,并且存在因开关簧片反弹引起的电平抖动现象。
因此,必须在每个开关后面安排一个消抖和同步化电路模块XIAOPRO ,目的是保证系统能捕捉到输入脉冲,同时,保证每按一次键只形成一个宽度固定的脉冲[3 ]。
在XIAOPRO模块中,因为变量的赋值是直接的,立即生效的,它在某一时刻仅包含一个值,而信号的赋值是有一定附加时延的,故当时钟脉冲下降沿到来时,变量tmp2 和tmp3 在赋值语句执行后立即分别得到新值: tmp1 的值和tmp2 的非值,而输入信号a 经过一定时延赋值给信号tmp1 ,实现了消除抖动并且同步的功能。
用来描述输入消抖同步电路功能的V HDL 语言程序如下: L IBRARY IEEE;
USE IEEE. std_logic_1164. ALL ;
ENTITY xiaopro IS
PORT(a ,clk1 :in std_logic ;
b :out std_logic) ;
END xiaopro ;
ARCHITECTURE xiao_arc OF xiaopro IS
SIGNAL tmp1 : std_logic ;
BEGIN
PROCESS(clk1 ,a)
V ARIABL E tmp3 ,tmp2 : std_logic ;
BEGIN
IF clk1 ! event AND clk1 = ! 0 ! THEN
tmp1 < = a ;
tmp2 : = tmp1 ;
tmp3 : = not tmp2 ;
END IF ;
b < = tmp1 AND tmp3 AND clk1 ;
END PROCESS ;
END xiao_arc ;
3.3密码锁逻辑控制模块
密码锁控制电路组成:
ELSIF DATA_F〔0〕='1'THEN --开锁控制信号有效
IF REG=ACC THEN --密码核对
QA<='0'QB<='1';
END IF;
ELSIF ACC=""THEN
QA<='0';QB<='1';
END IF;
这段程序的作用是在按下*键时将输入的密码〔暂时存放于ACC中〕跟已经存储的密码〔REG中的密码信息〕进展比照,如果一样,那么密码锁开锁。
而在通过密码验证后可以按#键重新设定密码。
在这里值得注意的是有一个密码“8888〞作为万用密码,也就是不管当前密码是什么,只要输入的密码为“8888〞那么都可通过密码锁。
模块CEN TRE 是整个设计的核心,它实现密码锁的逻辑功能。
管理员有权在任何时候按动密码初始化按键LC ,此时锁内密码设置为程序初始化密码值(在本模块程序中此值为10010101) 。
开锁代码为8 位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯L T。
否那么,系统进入“错误〞状态,并发出报警信号。
串行数字锁的报警方式是点亮指示灯L F ,并使喇叭鸣叫,直到按下复位开关,报警才停顿。
此时,数字锁又自动进入等待下一次开锁的状态。
该8 位串行电子密码锁设置8 位二进制密码,要求锁内给定的密码是可调的,且设置方便,XX性好。
其具体操作分为输入密码和修改密码两局部。
(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:上锁、解锁控制信号
密码输入值的比拟主要有两局部,密码位数和内容,任何一个条件不满足,都不能翻开锁。
假设锁内密码为“10010101〞, K1 和K0 置低电平,分别表示输入“1〞和“0〞。
输入密码前先进展复位操作,再按着从密码最低位到最高位的顺序依次正确输入 1 01 0 1 0 0 1。
假设采用共阴极L ED 接法,当输入第0
位“1〞后,八个二极管中相对应的二极管点亮(此时二极管指示灯lamp
=“10000000〞,输入密码信号shif t =“10000000” ) ,接着输入第1 位“0”(此时lamp =“11000000” ,shif t =“01000000” ) …… 依照顺序,将8 位二进制密码全部正确输入完毕后(此时amp =“11111111” ,shif t =“10010101” ) ,经检验,输入的密码shif t 等于锁内预先设置的密码lock ,密码锁开启信号L T置高电平,锁开启。
同时,密码修改控制信号LA 置高电平。
假设在输入密码的过程中,8 位二进制密码出现一位或多位输入错误,那么锁不能开启,同时Alm置高电平,指示灯L F 亮,发出报警信号,通知管理员。
直到按下复位开关,报警才停顿。
此时,数字锁又自动进入等待下一次开锁的状态。
密码锁输入电路主要程序:
KEY_DECODER:BLOCK
SIGNALZ:STD_LOGIC_VECTOR〔4 DOWNTO 0〕--按键位置
BEGIN
PROCESS〔CLK〕
BEGIN
Z<=C_KEYBOARD &C;
IF CLK'EVENT AND CLK='1'THEN
CASE Z IS
WHEN"11101"=>N<="0000";--0
WHEN"00011"=>N<="0001";--1
WHEN"00101"=>N<="0010";--2
WHEN"00110"=>N<="0011";--3
WHEN"01011"=>N<="0100";--4
WHEN"01101"=>N<="0101";--5
WHEN"01110"=>N<="0110";--6
WHEN"10011"=>N<="0111";--7
WHEN"10101"=>N<="1000";--8
WHEN"10110"=>N<="1001";--9
WHEN OTHERS=>N<="1111";
END CASE;
END IF;
IF CLK'EVENT AND CLK='1'THEN
CASE Z IS
WHEN"11011"=>F<="0100";--* _LOCK
WHEN"11110"=>F<="0001";--#_UNLOCK
WHEN OTHERS=>F<="1000";
END CASE;
END IF;
END PROCESS;
这段程序的作用是通过按键产生的信号进展译码,判断按键是数字还是上锁、解锁控制信号。
(2)修改密码
为防止非管理员任意进展密码修改,必须在正确输入密码后,才能重新设置密码。
输入正确密码后,锁翻开,同时,密码修改控制信号LA 置高电平,就可直接进展修改密码的操作。
修改密码实质就是用输入的新密码去取代原来的旧密码。
存储新密码时,输入一位密码,密码位数加1。
假设采用共阴极L ED 接法,与输出引脚lamp 相接的发光二极管由亮变暗。
当输入8 位密码后,8 只发光二极管全变暗。
此时给CL K一个低电平,新密码产生。
3.4密码锁显示模块
密码锁显示电路:
图3.4 密码锁显示电路原件例化模块外部信号端口
DATA-BCD:密码信号输入端口
BLOCK:密码锁状态信号显示灯
4 系统仿真
当各个模块分别编译成功后,那么创立一个个元件符号。
再用图形编辑器将各元件模块组装起来,这就是本设计中最顶层的图形设计文件。
顶层图形设计文件lock. gdf 如图4-1所示,这个构造框图说明了整个系统的外部输入和输出情况。
为了获得与目标器件对应的、准确的时序仿真文件,在对文件编译前必须选定最后实现本设计工程的目标器件,在Max + plus Ⅱ环境中我们选Altera 公司的FPGA ,然后选择用于编程的目标芯片:选择菜单“Assign〞→ “Device〞,窗口中的Device Family 是器件序列栏,先在此栏中选择ACEX1 K。
为了选择EP1 K30 TC14423 器件,应将此栏下方标有“Showonly Fastest Speed Grades〞的勾消去,以便显示出所有速度级别的器件。
完成器件选择后,按O K,就可以进展编译了。
图4.1顶层图形设计文件
编译成功后进展仿真。
首先建立波形文件。
波形文件lock. scf 建好并存盘后,选择菜单“Max +plusⅡ〞→ “simulato r〞,启动仿真操作,完毕后观察仿真波形。
本设计中,仿真波形如图4-2~图4-4所示。
当给初始密码输入信号LC 一个低电平时,就将程序预先设定的密码( “10010101〞)装入lock 中,lock的值变为95。
按下CLR 后,系统复位,处于输入密码状态。
输入的开锁密码串行顺序装入shif t 中,并用lamp 显示输入密码的位数。
密码输入完毕后,比拟输入的密码shif t 是否等于预先设定的密码lock,假设相等,锁开启。
在图4-2中可以看到,shif t 等于lock ( “95〞) ,8 位密码输入正确,开锁指示灯亮,可以开锁。