EDA课程设计报告电子密码锁设计.docx
《EDA课程设计报告电子密码锁设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告电子密码锁设计.docx(18页珍藏版)》请在冰豆网上搜索。
![EDA课程设计报告电子密码锁设计.docx](https://file1.bdocx.com/fileroot1/2023-1/8/248a0a3c-1d90-4e0e-b520-0a0c5aa1a926/248a0a3c-1d90-4e0e-b520-0a0c5aa1a9261.gif)
EDA课程设计报告电子密码锁设计
成绩
第1章概述
在当今社会中,人们对于隐私的保护和对物品安全的重视程度与日俱增。
因此,使用了现代电子技术的电子密码锁便有了广泛的应用前景。
本次所设计的电子密码锁,能够实现该六位十进制并行密码保护,当输入的密码与锁内密码一致时,绿灯亮,开锁,当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码锁的密码可由用户自行设置,如果用户忘记密码,可以用初始密码来重新设置密码。
为人们的财产、信息安全提供了可靠地保障。
本次设计基于VHDL语言,对并行六位电子密码锁进行设计,并对设计过程进行了详细描述。
电子密码锁在对财产安全保护等方面都有着重要作用应用前景非常广泛。
开锁代码为六位十进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯。
否则,系统进入“错误”状态。
开锁程序由设计者确定,并要求锁内给定的密码是可调的且预置方便、保密性好。
在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。
讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。
第2章设计要求
本设计名称为基于VHDL语言的电子密码锁,用四个模块,分别为时序控制模块、输入模块、控制模块、显示模块,来控制密码的输入、验证、修改与显示。
设计所要实现的功能为:
1、数码输入:
设计六位密码的电子密码锁,用四个拨码开关(key1~key4)输入,并通过七段数码管显示输入密码。
2、密码验证:
输入密码后,密码正确时开锁,绿灯亮,红灯灭,表示开锁成功。
3、错误显示:
当密码输入错误时,绿灯灭,红灯亮,表示开锁失败。
4、更改密码:
设置更改密码功能
5、密码清除:
密码输入过程中可以清除,并重新输入。
6、预设初始密码为学号后六位。
设置按键还原初始密码。
第3章总体框图
1)设计方案:
电子密码锁,主要由四部分组成:
时序控制电路、密码输入电路、密码锁控制电路和密码锁显示电路。
时序控制电路来控制整个系统的运行时序,使其不会发生混乱。
作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。
拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码来作为该设计的输入设备。
密码锁的输入电路由拨码输入、计数器、译码器组成。
密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。
数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。
液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。
根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。
整个密码锁系统的总体框图如图所示。
第4章功能模块
4.1输入模块
1)功能介绍
输入时有四个拨码键控制输入,每四个拨码来控制一位密码,再设一个拨码键a,每拨一次此按码键a,表示输入一位密码,在用计数器来计数,每输入一位密码时计数一次,并输出一位密码。
由于是拨码输入,加上消抖电路,使输入更加稳定。
2)输入模块与仿真图形
拨码与按键输入如下图
上图为拨码输入,当a给一个上升沿信号,在qout输出一个密码。
计数器如下图
上图为计数器,没输入一个密码计数一次。
消抖电路如下图
3)程序的输入
在文本区内输入程序,程序如下:
拨码与按键输入
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmimasuoIS
PORT(key0,key1,key2,key3,ret,a:
INSTD_LOGIC;
qout:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYmimasuo;
ARCHITECTUREoneOFmimasuoIS
BEGIN
PROCESS(a)
VARIABLEq:
STD_LOGIC_VECTOR(0TO3);
BEGIN
IFret='1'THEN
q:
=(others=>'0');
ELSE
ifa'eventanda='1'then
q(3):
=key3;
q
(2):
=key2;
q
(1):
=key1;
q(0):
=key0;
ENDIF;
ENDIF;
qout<=q;
ENDPROCESS;
endARCHITECTUREone;
计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_unsigned.all;
ENTITYcnt4IS
PORT(a:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_vector(0to2));
ENDcnt4;
ARCHITECTUREBEHAVEOFcnt4IS
SIGNALq1:
STD_LOGIC_vector(0to2);
BEGIN
PROCESS(a)
BEGIN
ifa'eventanda='1'thenq1<=q1+1;
ifq1="110"thenq1<="001";
endif;
endif;
ENDPROCESS;
Q<=q1;
ENDBEHAVE;
4.2控制模块
1)功能介绍
开锁时,用四个拨码键来输入密码,计数器来计数密码的个数,将输入的密码与用户密码在比较器里进行比较,当输入的密码与开始时寄存在寄存器B中的密码一样时,则开锁,绿灯亮led1为高电平,红灯灭led2为低电平,当密码输入错时,绿灯灭led1为低电平,红灯亮led2为高电平。
当修改密码时,在寄存器B中,使key6键为高电平,即可在输入端就能输入要修改的密码。
按ret键可清除输入时输错的密码。
初始密码,可以在第一次输入时,按key6键,来存储密码。
2)控制模块与仿真图形
寄存器A如下图:
上图为寄存器A,存储每次输入的密码。
在文本区内输入程序,程序如下:
寄存器A
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
entitydff1is
port(clk:
instd_logic;
key6:
instd_logic;
j:
instd_logic_vector(0to2);
d:
inSTD_LOGIC_vector(0to3);
q0:
outSTD_LOGIC_vector(0to3);
q1:
outSTD_LOGIC_vector(0to3);
q2:
outSTD_LOGIC_vector(0to3);
q3:
outSTD_LOGIC_vector(0to3);
q4:
outSTD_LOGIC_vector(0to3);
q5:
outSTD_LOGIC_vector(0to3));
endentitydff1;
ARCHITECTUREoneOFdff1IS
begin
process(j,clk)
begin
ifclk'eventandclk='1'andkey6='0'then
casejis
when"001"=>q0<=d;
when"010"=>q1<=d;
when"011"=>q2<=d;
when"100"=>q3<=d;
when"101"=>q4<=d;
when"110"=>q5<=d;
whenothers=>null;
endcase;
endif;
endprocess;
endone;
寄存器B如下图:
上图为寄存器B,存储设置的用户密码,当key6为高电平时,可以来修改密码。
在文本区内输入程序,程序如下:
寄存器B
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
entitydff02is
port(clk:
instd_logic;
key6:
instd_logic;
j:
instd_logic_vector(0to2);
d:
inSTD_LOGIC_vector(0to3);
q0:
outSTD_LOGIC_vector(0to3);
q1:
outSTD_LOGIC_vector(0to3);
q2:
outSTD_LOGIC_vector(0to3);
q3:
outSTD_LOGIC_vector(0to3);
q4:
outSTD_LOGIC_vector(0to3);
q5:
outSTD_LOGIC_vector(0to3));
endentitydff02;
ARCHITECTUREoneOFdff02IS
begin
process(j,clk)
begin
ifclk'eventandclk='1'andkey6='1'then
casejis
when"001"=>q0<=d;
when"010"=>q1<=d;
when"011"=>q2<=d;
when"100"=>q3<=d;
when"101"=>q4<=d;
when"110"=>q5<=d;
whenothers=>null;
endcase;
endif;
endprocess;
endone;
比较器如下图:
上图为密码输入正确、错误时的比较器,当ok键为高电平时,进行比较。
在文本区内输入程序,程序如下:
比较器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
entitybijiaois
port(ok:
instd_logic;
n0,n1,n2,n3,n4,n5,b0,b1,b2,b3,b4,b5:
inSTD_LOGIC_vector(0to3);
led1:
outstd_logic;
led2:
outstd_logic);
end;
ARCHITECTUREoneOFbijiaoIS
SIGNALQ1,Q2:
STD_LOGIC;
begin
process(n0,n1,n2,n3,n4,n5,b0,b1,b2,b3,b4,b5,ok)
begin
ifok='1'then
ifn0=b0andn1=b1andn2=b2andn3=b3andn4=b4andn5=b5then
Q1<='1';
Q2<='0';
ELSEQ1<='0';
Q2<='1';
ENDIF;
endif;
ENDPROCESS;
led1<=Q1;led2<=Q2;
ENDone;
六选一选择器如下图
上图为六选一选择器
在文本区内输入程序,程序如下:
六选一选择器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_unsigned.all;
ENTITYmux61aIS
PORT(q0,q1,q2,q3,q4,q5:
inSTD_LOGIC_vector(0to3);
j:
inSTD_LOGIC_vector(0to2);
led:
outstd_logic_vector(5downto0);
y:
outSTD_LOGIC_vector(0to3));
end;
ARCHITECTUREoneOFmux61aIS
begin
process(j)
begin
casejis
when"000"=>led<="011111";y<=q0;
when"001"=>led<="101111";y<=q1;
when"010"=>led<="110111";y<=q2;
when"011"=>led<="111011";y<=q3;
when"100"=>led<="111101";y<=q4;
when"101"=>led<="111110";y<=q5;
whenothers=>null;
endcase;
endprocess;
endone;
4.3显示模块
1)功能介绍
将密码用BCD七段数码管显示
2)显示模块与仿真波形图,如下图
上图将BCD码转化到七段译码电路上
在文本区内输入程序,程序如下:
七段译码器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdecl7sIS
PORT(a:
instd_logic_vector(0to3);
led7s:
outstd_logic_vector(0to6));
end;
ARCHITECTUREoneOFdecl7sIS
BEGIN
PROCESS(a)
begin
caseais
when"0000"=>led7s<="1000000";
when"0001"=>led7s<="1111001";
when"0010"=>led7s<="0100100";
when"0011"=>led7s<="0110000";
when"0100"=>led7s<="0011001";
when"0101"=>led7s<="0010010";
when"0110"=>led7s<="0000010";
when"0111"=>led7s<="1111000";
when"1000"=>led7s<="0000000";
when"1001"=>led7s<="0010000";
whenothers=>null;
endcase;
endprocess;
end;
第5章总体设计电路图
1)功能介绍
将各个模块连接在一起实现。
2)顶层文件如下:
3)波形仿真如下:
当key6为高电平时输入密码进如寄存器A,存储密码,当key6为低电平时,输入密码进入寄存器B,当寄存器B中的输入密码与寄存器A相同时为“104205”led1为高电平、led2为低电平,密码锁开锁。
设计正确。
第6章设计心得体会
通过这次设计,使我对EDA产生了浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
在当所有子模块都编写好了,连在一起时,运行时,我遇到了很大的麻烦,一直被时序问题所困扰,不能仿真出结果,在试验箱里也不能显示密码。
当解决了这个问题时,我特别的高兴。
当连接到试验箱上显示时,由于没有加消抖电路,所以在试验箱上显示很不稳定,所以在设计时应加上消抖电路,让输入、输出更稳定。
其次,在进行引脚连接时一定要细心,有些引脚不能使用,并且在拨码输入时要注意四个拨码的高地位,我因为没注意使得开始时一直不能得到正确的结果。
这次EDA课程设计历时三个星期,在整整三个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的学以致用,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到的问题,反映出来我的许多不足之处,我以后要努力克服缺点。
总的来说,这次设计的密码锁还是比较成功的,在设计中遇到了很多问题,最后在同学和老师的辛勤的指导下外加上自己的努力,终于都得到了解决,因此很有成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。