基于VHDL的电子密码锁方案设计书1.docx

上传人:b****0 文档编号:399009 上传时间:2022-10-09 格式:DOCX 页数:13 大小:94.47KB
下载 相关 举报
基于VHDL的电子密码锁方案设计书1.docx_第1页
第1页 / 共13页
基于VHDL的电子密码锁方案设计书1.docx_第2页
第2页 / 共13页
基于VHDL的电子密码锁方案设计书1.docx_第3页
第3页 / 共13页
基于VHDL的电子密码锁方案设计书1.docx_第4页
第4页 / 共13页
基于VHDL的电子密码锁方案设计书1.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于VHDL的电子密码锁方案设计书1.docx

《基于VHDL的电子密码锁方案设计书1.docx》由会员分享,可在线阅读,更多相关《基于VHDL的电子密码锁方案设计书1.docx(13页珍藏版)》请在冰豆网上搜索。

基于VHDL的电子密码锁方案设计书1.docx

基于VHDL的电子密码锁方案设计书1

学院:

信息科学与工程学院

课题名称:

硬件描述语言设计

——基于VHDL的电子密码锁的设计

班级:

学生:

学号:

指导教师:

1引言

在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。

若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。

随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。

为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。

基于EDA技术设计的电子密码锁。

以其价格便宜、使用方便、安全性高、成本低、功耗低、易操作等优点,受到了人们的普遍关注。

而以可编程逻辑器件(FBDA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QuartusⅡ5.1开发软件等为设计工具设计的电子密码锁,由于其能够实现密码输入、密码校验、密码设置和更改等功能,因此,能够满足社会对安全防盗的需求。

本设计的各个模块由相应的VHDL程序具体实现,并在QuartusⅡ5.1环境下进行了整体电路的模拟仿真,最终实现“密码锁控制器设计”的要求。

2设计内容和要求

2.1设计内容:

题目:

电子密码锁

内容:

设计一个4位串行数字锁。

(1)开锁代码为4位二进制,当输入代码的位数与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮一个指示灯。

否则进入“错误”状态,并发出报警信号。

(2)锁内的密码可调,且预置方便,保密性好。

(3)串行数字锁的报警由点亮一个灯,直到按下复位开关,报警才停下。

此时,数字锁又自动等待下一个开锁状态。

要求:

(1)通过查阅相关技术资料,详细描述电子密码锁的基本原理。

(2)编写电子密码锁的VerilogHDL或VHDL程序,并仿真编译下载验证。

(3)给出完整的系统顶层模块图与波形仿真图。

 

3设计分案

密码锁控制器是硬件与软件的结合。

根据设计要求,决定以FBDA芯片和VHDL语言设计此电子密码锁。

用一片FBDA芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。

这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性和保密性。

另外,采用可编程逻辑器件开发的数字系统,方便地升级和改进。

3.1系统总框图

本系统的硬件部分主要由密码锁控制电路、密码锁显示电路、LED显示电路、报警电路、密码更改与设置电路组成。

整体系统框图如下图2.1所示。

密码锁总框图

3.2密码锁的内部结构及主要功能

3.2.1密码锁的主要功能

密码锁控制器的主要功能有:

(1)密码输入:

有二个按键来控制(分别代表0和1),每按下一个键,要求在数码管上显示,并依次左移。

(2)密码校验:

如果有按键按下,直到松开该按键;红绿灯指示门的状态,也就是密码校验结果,如果密码校验正确,绿亮起,否则如果密码校验错误红灯亮,并凤鸣器响,表明密码错误。

(3)错误报警:

密码输入错误开始报警。

(4)密码修改:

输入密码正确后4秒内按按键输入要设置和更改的密码,按按键确认密码设置与更改,则密码设置成功

4系统硬件电路

4.1密码锁的显示模块

段数码管是电子开发过程中常用的输出显示设备。

在本设计中使用的是

8个四位一体、共阴极型七段数码管。

其单个静态数码管如下图所示。

由于七段数码管公共端连接到GND(共阴极型),当数码管的中的一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相反。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

4.2密码锁控制模块

该模块的作用是将输入的密码(暂时寄存于ACC中)跟已经存储的密码(REG中的密码信息)进行对比,如果一样,则密码锁开锁。

而在通过密码验证后可以按按键设定密码。

在这里值得注意的是有一个密码“0000”为开始密码,如果改名密码了但是又忘记了密码,重新下载之后的初始密码只要输入的密码为“0000”则都可通过密码锁。

模块lock是整个设计的核心,它实现密码锁的逻辑功能。

在任何时候按动密码初始化按键内密码设置为程序初始化密码值(在本模块程序中此值为“0000”代码为4位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯(緑灯)亮。

否则,系统进入“错误”状态,并发出报警信号。

串行数字锁的报警方式是点亮指示灯(红灯),并使喇叭鸣叫,直到按下复位开关,报警才停止。

此时,数字锁又自动进入等待下一次开锁的状态。

该4位串行电子密码锁设置4位二进制密码,要求锁内给定的密码是可调的,且设置方便,保密性好。

其具体操作分为输入密码和修改密码两部分

4.2.1输入密码

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

若锁内密码为“0000”,key2和key1置低电平,分别表示输入“1”和“0”。

输入密码前先进行复位操作,再按着从密码最低位到最高位的顺序依次正确输入0000,会在数码管逐一显示。

经检验,输入的密码等于锁内预先设置的密码密码锁开启信号,锁开启。

同时,密码修改控制信号rw置低电平。

若在输入密码的过程中,4位二进制密码出现输入错误,那么锁不能开启,同时,指示灯红灯亮,发出报警信号。

直到按下复位开关,报警才停止。

此时,数字锁又自动进入等待下一次开锁的状态。

4.2.2修改密码

为防止任意进行密码修改,必须在正确输入密码后,才能重新设置密码。

输入正确密码后,锁打开,同时,密码修改控制信号按键rw置低电平,就可直接进行修改密码的操作。

修改密码实质就是用输入的新密码去取代原来的旧密码,按确定按键ok,存储新密码时.

5VHDL程序设计

密码锁控制器的各个功能模块都是通过VHDL语言来完成的。

本设计由密码锁显示显示模块、分频模块、密码输入及校验模块、报警模块、密码更改与设置模块几部分组成,各模块分工合作,最后达到密码锁控制器设计的要求。

表4-1程序的管脚分配表

端口名

对应FBGA管脚

说明

clk

P2

时钟为50Hz

Key1

AC23

按下按键代表为“0”

Key2

AB21

按下按键代表为“1”

start

Y14

开始输入密码

ok

AA13

确定输入密码

reset

AC15

复位

rw

V23

该密码

clr

U23

清零

red

M19

密码错误红灯亮

green

T22

密码正确緑灯亮

beep

A14

蜂鸣器

Seg[7..0]

D16,D17,G13,D15,C15,C16,G15,J13

代表数码管的片内显示

Dig[7..0]

E15,K18,E22,C17,H15,K16,H12,D18

代表数码管的片外显示

VHDL程序总代码

 

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitylockis

port(

key1,key2:

instd_logic;

clk,start,ok,reset,rw,clr:

instd_logic;

red,green,beep:

outstd_logic:

='1';

dig:

outstd_logic_vector(7downto0);

seg:

outstd_logic_vector(7downto0)

);

endlock;

architecturert1oflockis

signalkeyin,password:

std_logic_vector(3downto0):

="0000";

signalopen1:

std_logic:

='0';

signalbeep1:

std_logic:

='1';

signala,shuru:

std_logic;

signalcount:

std_logic_vector(2downto0):

="000";

signaltemp:

std_logic_vector(1downto0):

="00";

begin

process(clk)

variablem:

integerrange0to10;

begin

ifclk'eventandclk='1'then

ifm=9then

m:

=0;

a<='1';

else

m:

=m+1;

a<='0';

endif;

endif;

endprocess;

process(clk,start,ok,clr,rw,reset)

begin

ifclk'eventandclk='1'then

ifreset='0'then

red<='1';green<='1';beep1<='1';open1<='0';keyin<="0000";shuru<='0';count<="000";

endif;

ifstart='0'then

shuru<='1';

endif;

ifrw='0'andopen1='1'then

shuru<='1';count<="000";

endif;

ifclr='0'then

keyin<="0000";count<="000";shuru<='1';

elsifa='1'andshuru='1'then

ifkey1='0'then

keyin<=keyin(2downto0)&'0';

elsifkey2='0'then

keyin<=keyin(2downto0)&'1';

endif;

ifcount="011"then

shuru<='0';

count<=count+1;

else

count<=count+1;

endif;

endif;

ifok='0'andopen1='0'then

if(keyin=password)then

red<='1';green<='0';open1<='1';

else

red<='0';green<='1';beep1<='0';open1<='0';

endif;

endif;

ifok='0'andopen1='1'then

password<=keyin;

endif;

endif;

endprocess;

process(clk,start,ok,clr,rw,reset)

variableg:

integerrange0to49999999;

begin

ifclk'eventandclk='1'then

ifg=49999999then

g:

=0;

else

g:

=g+1;

endif;

ifg<=24999999andbeep1='0'then

beep<='0';

else

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1