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

上传人:b****7 文档编号:15522896 上传时间:2023-07-05 格式:DOCX 页数:14 大小:82.76KB
下载 相关 举报
基于VHDL的电子密码锁方案设计书1.docx_第1页
第1页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第2页
第2页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第3页
第3页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第4页
第4页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第5页
第5页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第6页
第6页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第7页
第7页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第8页
第8页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第9页
第9页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第10页
第10页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第11页
第11页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第12页
第12页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第13页
第13页 / 共14页
基于VHDL的电子密码锁方案设计书1.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

基于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

beep<='1'。

endif。

endif。

endprocess。

process(clk)

variablen:

integerrange0to50000。

begin

ifclk'eventandclk='1'then

ifn=49999then

n:

=0。

iftemp="11"then

temp<="00"。

else

temp<=temp+1。

endif。

else

n:

=n+1。

endif。

ifcount="001"then

casetempis

when"00"=>dig<="01111111"。

ifkeyin(0)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

whenothers=>seg<="11111111"。

endcase。

elsifcount="010"then

casetempis

when"00"=>dig<="01111111"。

ifkeyin

(1)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"01"=>dig<="10111111"。

ifkeyin(0)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

whenothers=>seg<="11111111"。

endcase。

elsifcount="011"then

casetempis

when"00"=>dig<="01111111"。

ifkeyin

(2)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"01"=>dig<="10111111"。

ifkeyin

(1)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"10"=>dig<="11011111"。

ifkeyin(0)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

whenothers=>seg<="11111111"。

endcase。

elsifcount="100"then

casetempis

when"00"=>dig<="01111111"。

ifkeyin(3)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"01"=>dig<="10111111"。

ifkeyin

(2)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"10"=>dig<="11011111"。

ifkeyin

(1)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

when"11"=>dig<="11101111"。

ifkeyin(0)='0'thenseg<="11000000"。

elseseg<="11111001"。

endif。

whenothers=>null。

endcase。

else

dig<="11111111"。

seg<="11111111"。

endif。

endif。

endprocess。

endrt1。

6系统仿真

当各个模块分别编译成功后,则创建一个个元件符号。

再用图形编辑器将各元件模块组装起来,这就是本设计中最顶层的图形设计文件。

顶层图形设计文件lock.gdf如图所示,这个结构框图说明了整个系统的外部输入和输出情况。

为了获得与目标器件对应的、精确的时序仿真文件译了。

编译成功后进行仿真。

首先建立波形文件。

波形文件lock.scf建好并存盘后,选择菜单“new”→“VectorWaveformFile”,启动仿真操作,结束后观察仿真波形。

本设计中,仿真波形如图所示。

当给初始密码输入信号LC一个低电平时,就将程序预先设定的密码(“0000”)装入lock中。

按下reset后,系统复位,处于输入密码状态。

输入的开锁密码串行顺序装入,。

密码输入完毕后,比较输入的密码是否等于预先设定的密码,若相等,锁开启。

如图所示

 

7总结

这次密码锁的设计过程表明,用VHDL可以快速、灵活地设计出符合要求的密码锁控制器,而且操作简单。

可以实现密码输入、密码校验、密码设置和更改等功能。

设计过程能够在设计完成后在QuartusⅡ环境下进行电路的模拟仿真,反馈结果可以验证程序设计的可行性与可靠性。

本密码锁控制器设置的是4位密码,在系统复位后,输入一个完整的密码串,输入完后,系统会进行比对,如果发现密码吻合,则开门,否则要求用户继续输入,如果输入的密码串都是错误的,则系统报警,直到输入正确的密码,报警声停止。

这样的设计可以很好的满足人们的日常需求。

同时,密码锁还具有密码修改功能,方便操作,使得密码锁的使用更加安全、便捷。

在软件、硬件设计和仿真过程中间我们也遇到不少问题,但最终还是把它们解决了,使得设计符合要求。

除了自己思考设计之外,这与和同学的同心协力的合作与讨论是分不开的的。

相互的探讨使得我们的思路更加开阔,解决问题的办法也更多。

总之,此次课程设计让我收益良多,同时因为有了实践操作,对《EDA技术及VerilongHDL》课程所学内容也有了更深的记忆和理解,对EDA技术额能够更好的掌握和应用了

致谢

在这次实习能够顺利完成的过程中,我得到了许多人的帮助。

首先我要感谢陈小琴老师等老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。

在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。

其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。

同时也感谢学院为我提供良好的做课程设计的环境。

参考文献

【1】陈龙,黄继业,潘松,主编《EDA技术与VerilogHDL》清华大学出版社

【2】阎石主编《数字电子技术基础》,高等教育出版社,1998

【3】夏宇闻主编《Verilog数字系统设计教程》,北京航空航天大学出版

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2