电子密码锁实验报告.docx
- 文档编号:23250152
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:22
- 大小:1.28MB
电子密码锁实验报告.docx
《电子密码锁实验报告.docx》由会员分享,可在线阅读,更多相关《电子密码锁实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
电子密码锁实验报告
EDA技术课程设计
课题:
电子密码锁
系别:
电气与电子工程系
专业:
电子信息工程
姓名:
学号:
指导教师:
2012年6月日
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、课程设计评分
成绩:
2012年6月日
目录
一、设计目的1
二、设计要求1
三、总体设计方案要求1
1、设计的总体原理1
2、设计内容2
四、EDA设计程序分析2
1、密码锁输入、比对模块2
(1)、复位2
(2)、密码设置3
(3)、密码输入3
(4)、设置密码数据转换4
(5)、输入密码数据转换5
(6)、密码比对6
2、报警模块6
(1)、复位6
(2)、计数6
(3)、计数器控制报警7
五、EDA总设计程序7
六、程序仿真波形图及相应硬件仿真分析12
1、给出软件实现步骤12
2、给出软件实现步骤12
3、程序仿真波形图分析及对应的硬件仿真13
七、设计总结16
八、参考文献17
九、设计生成的电路18
一、设计目的
这次课程设计主要是培养我们的实际动手能力及对EDA这门课程的深入的理解,增强我们对EDA程序设计流程的掌握。
这个课题还要求我们掌握计数器的设计,步进式寄存器的设计方法。
二、设计要求
1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;
2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;
3、从第一个按钮触动后的40秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续报警信号,手动停止报警信号。
三、总体设计方案要求
1.设计的总体原理
要实现一个电子密码锁系统,整个系统主要由密码设置/输入部分和输入密码与设置密码比对部分以及计数报警部分和数码显示部分组成。
首先实现单个部分的功能,然后再通过调用、嵌套的方式实现对整个系统的设计。
原理框图如下:
2.设计内容
电子密码锁主要模块有二个,包括密码锁模块和计数报警模块。
密码锁输入、比对模块:
包括复位部分、密码设置/输入部分(步进式输入)、秒计数部分、数码显示部分、复位部分、数码显示部分。
通过VHDL语言编程仿真,各个部分通过进程内顺序执行构成密码锁模块。
计数报警模块:
通过计数器控制扬声器报警,密码锁自锁。
四、EDA设计程序分析
architecturebehaveoflockis
signaljudge,m,r,daoshi,shuru:
std_logic;
BEGIN
process(rst,en1,en3,int1)
VARIABLEq1,q2,q3,q4,d,k1,k2,k3,k4:
std_logic_vector(3downto0);
VARIABLEa,g:
integerrange0to5;
VARIABLEb,c,z,e,f,h,n,j:
integerrange0to15;
begin
shuru<=daoshi;
密码锁输入、比对模块:
(1)if(rst="0000")then
g:
=0;a:
=0;led_r<="1011";judge<='0';f:
=0;h:
=0;n:
=0;j:
=0;r<='0';tishi<="0000";
复位:
当复位时led_r<="1011"即数码显示为b(即密码锁处于关锁状态);judge<='0'即开/关计数器的使能控制清零;f:
=0;h:
=0;n:
=0;j:
=0;r<='0'即输入密码清零;tishi<="0000"即提示密码设置成功的数码管显示0;
(2)elsif(en1'EVENTANDen1='1')then
if(en3='1')then——设置/输入密码使能控制
a:
=a+1;d:
=int1;
ifa=5then
a:
=0;tishi<="0000";
endif;
endif;
caseais
when1=>q1:
=d;
when2=>q2:
=d;
when3=>q3:
=d;
when4=>q4:
=d;tishi<="0001";
whenothers=>null;
endcase;
密码设置:
上升沿来到时候,若设置/输入密码使能控制即en3='1',则a进行自加一,且将int1即输入数据赋予d。
通过case…when语句实现步进式密码设置存储。
当第四位密码设置完成后,数码管显示1,提示密码设置完成(即tishi<=”0001”)。
(3)if(en3='0')then
ifshuru='0'then
g:
=g+1;d:
=int1;
ifg=5then
g:
=0;
endif;
endif;
endif;
casegis
when1=>k1:
=d;judge<='1';r<='1';
when2=>k2:
=d;
when3=>k3:
=d;
when4=>k4:
=d;
whenothers=>null;
endcase;
密码输入:
上升沿到来,当设置/输入密码使能控制即en3='0',且输入控制即shuru='0'(若shuru='1'则密码锁不能再输入密码,即自锁),g自加一且将int1即输入数据赋予d。
通过case…when语句实现步进式密码输入存储。
同时当g为一即输入第一位密码时,启动计数器开始计时即judge<='1',并执行r<='1'(r与计数器一同控制报警)。
(4)ifg=4then
foriinq1'rangeloop
if(q1(i)='1')then
b:
=2*b+1;
else
b:
=2*b;
endif;
endloop;
foriinq2'rangeloop
if(q2(i)='1')then
c:
=2*c+1;
else
c:
=2*c;
endif;
endloop;
foriinq3'rangeloop
if(q3(i)='1')then
z:
=2*z+1;
else
z:
=2*z;
endif;
endloop;
foriinq4'rangeloop
if(q4(i)='1')then
e:
=2*e+1;
else
e:
=2*e;
endif;
endloop;
设置密码数据转换:
当g=4即密码输入完成后,通过loop语句将设置密码数据由二进制转换为十进制。
(5)foriink1'rangeloop
if(k1(i)='1')then
f:
=2*f+1;
else
f:
=2*f;
endif;
endloop;
foriink2'rangeloop
if(k2(i)='1')then
h:
=2*h+1;
else
h:
=2*h;
endif;
endloop;
foriink3'rangeloop
if(k3(i)='1')then
n:
=2*n+1;
else
n:
=2*n;
endif;
endloop;
foriink4'rangeloop
if(k4(i)='1')then
j:
=2*j+1;
else
j:
=2*j;
endif;
endloop;
endif;
endif;
输入密码数据转换:
当g=4即密码输入完成后,通过loop语句将输入密码数据由二进制转换为十进制。
(6)if(b=fandc=handz=nande=jandg=4)then
led_r<="1010";r<='0';
else
led_r<="1011";
endif;
密码比对:
将输入密码与设置密码进行比对,若b=fandc=handz=nande=jandg=4即密码输入完成且正确,则led_r<="1010"即开锁;若不满足b=fandc=handz=nande=jandg=4条件即密码输入错误,则led_r<="1011"即仍处于关锁状态。
endprocess;
报警模块:
process(judge,clk,rst,r,clk1)
VARIABLEtemp1:
INTEGER;
BEGIN
daoshi<='0';
(1)IF(rst="0000")THENtemp1:
=0;
复位:
复位时,令计数器归零即temp1:
=0。
(2)ELSIF(clk'EVENTANDclk='1')THEN
IF(judge='1')THEN
temp1:
=temp1+1;
IF(temp1=40)THEN
temp1:
=40;
endif;
endif;
endif;
计数:
在密码锁模块中的密码输入部分,当输入第一位密码时令judge<='1',这样便在此处启动了计数器即judge='1'。
(3)if(temp1>=40andr='1')then
speaker<=clk1;daoshi<='1';
endif;
计数器控制报警:
当计数器temp1=40且r='1'(即输入第一位密码后,40秒密码锁仍处于关锁状态),此时启动报警。
同时将daoshi<='1',使密码锁关锁,不可再输入密码。
endprocess;
endbehave;
五、EDA总设计程序
将上述两个模块通过对信号、变量的设置完成相互调用,即构成总设计程序。
如下:
总程序(前面的分模块、分不分程序省略,下面只写了原件例化得程序)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitylockis
port(clk,clk1:
instd_logic;
int1,rst:
instd_logic_vector(3downto0);
en1,en3:
instd_logic;
led_r,tishi:
outstd_logic_vector(3downto0);
speaker:
outstd_logic);
endlock;
architecturebehaveoflockis
signaljudge,m,r,daoshi,shuru:
std_logic;
BEGIN
process(rst,en1,en3,int1)
VARIABLEq1,q2,q3,q4,d,k1,k2,k3,k4:
std_logic_vector(3downto0);
VARIABLEa,g:
integerrange0to5;
VARIABLEb,c,z,e,f,h,n,j:
integerrange0to15;
begin
shuru<=daoshi;
if(rst="0000")then
g:
=0;a:
=0;led_r<="1011";judge<='0';f:
=0;h:
=0;n:
=0;j:
=0;r<='0';tishi<="0000";
elsif(en1'EVENTANDen1='1')then
if(en3='1')then
a:
=a+1;d:
=int1;
ifa=5then
a:
=0;tishi<="0000";
endif;
endif;
caseais
when1=>q1:
=d;
when2=>q2:
=d;
when3=>q3:
=d;
when4=>q4:
=d;tishi<="0001";
whenothers=>null;
endcase;
if(en3='0')then
ifshuru<='0'then
g:
=g+1;d:
=int1;
ifg=5then
g:
=0;
endif;
endif;
endif;
casegis
when1=>k1:
=d;judge<='1';r<='1';
when2=>k2:
=d;
when3=>k3:
=d;
when4=>k4:
=d;
whenothers=>null;
endcase;
ifg=4then
foriinq1'rangeloop
if(q1(i)='1')then
b:
=2*b+1;
else
b:
=2*b;
endif;
endloop;
foriinq2'rangeloop
if(q2(i)='1')then
c:
=2*c+1;
else
c:
=2*c;
endif;
endloop;
foriinq3'rangeloop
if(q3(i)='1')then
z:
=2*z+1;
else
z:
=2*z;
endif;
endloop;
foriinq4'rangeloop
if(q4(i)='1')then
e:
=2*e+1;
else
e:
=2*e;
endif;
endloop;
foriink1'rangeloop
if(k1(i)='1')then
f:
=2*f+1;
else
f:
=2*f;
endif;
endloop;
foriink2'rangeloop
if(k2(i)='1')then
h:
=2*h+1;
else
h:
=2*h;
endif;
endloop;
foriink3'rangeloop
if(k3(i)='1')then
n:
=2*n+1;
else
n:
=2*n;
endif;
endloop;
foriink4'rangeloop
if(k4(i)='1')then
j:
=2*j+1;
else
j:
=2*j;
endif;
endloop;
endif;
endif;
if(b=fandc=handz=nande=jandg=4)then
led_r<="1010";r<='0';
else
led_r<="1011";
endif;
endprocess;
process(judge,clk,rst,r,clk1)
VARIABLEtemp1:
INTEGER;
BEGIN
daoshi<='0';
IF(rst="0000")THENtemp1:
=0;
ELSIF(clk'EVENTANDclk='1')THEN
IF(judge='1')THEN
temp1:
=temp1+1;
IF(temp1=40)THEN
temp1:
=40;
endif;
endif;
endif;
if(temp1>=40andr='1')then
speaker<=clk1;daoshi<='1';
endif;
endprocess;
endbehave;
六、程序仿真波形图及相应硬件仿真分析
1、给出软件实现步骤
实验步骤:
⑴打开QuartusⅡ9.0软件,建立进程,进程的名字和程序的名字相同;
⑵打开新建选择VHDLFile,然后把程序输入进去;
⑶保存文件点击软件页面上方的编译按键进行编译;
⑷编译成功后,进行软件仿真,点击File选择VectorWaveformFile,然后点击鼠标右键选insetnodeorbus键,把脚码输入进去,再进行脚码设定;
⑸然后保存,点击Assigment中的settings选择时序仿真,进行程序的时序仿真;
2、给出硬件实现步骤
实验步骤:
⑴打开QuartusⅡ9.0软件,建立进程,进程的名字和程序的名字相同;
⑵打开新建选择VHDLFile,然后把程序输入进去;
⑶保存文件点击软件页面上方的编译按键进行编译;
⑷编译成功后,进行软件仿真,点击File选择VectorWaveformFile,然后点击鼠标右键选insetnodeorbus键,把脚码输入进去,再进行脚码设定;
⑸然后保存,点击Assigment中的settings选择时序仿真,进行程序的时序仿真;
⑹时序仿真成功后,点击上方AssigmentEditor键进行脚码锁定;脚码锁定中我们用了模式八。
3、程序仿真波形图分析及对应的硬件仿真
3
程序仿真波形图分析:
在这个程序中当设置密码完成后,tishi="0001"。
当输入密码正确时,led_r<="1010"即数码管显示A,speaker='0'。
其相应的硬件仿真如下:
数码显示管7为tishi,此时为一,表示密码设置完成;数码显示管8为led_r,此时为A,表示密码输入正确。
程序仿真波形图分析:
在这个程序中,设置密码完成时,tishi="0001"。
当输入密码错误时,led_r<="1011"即数码管显示b,speaker='clk1'即实现报警。
其相应的硬件仿真如下:
输入密码错误,数码显示管8显示b。
程序仿真波形图分析:
在这个程序中。
当在规定时间内,密码未输入完,则led_r<="1011"即数码管显示b,同时speaker<=clk1报警。
其相应的硬件仿真如下:
此时,密码锁已变为自锁状态,超出规定时间,即使密码输入正确也不能打开密码锁。
七、设计总结
在这次设计过程中,我们在老师的指导下对VHDL这门课程逐步加深了了解,但是在设计中遇到一些问题:
1输入数据寄存问题;
2步进式输入数据问题;
3输入数据比对问题。
在程序设计方面的问题在我们查阅资料,跟同学讨论、请教后,均得到了解决:
1通过输入寄存在变量中;
2通过case...when语句实现了步进式输入数据;
3通过二进制到十进制的转化后,解决寄存数据的比对问题。
其实电子密码锁的设计并不困难,用了主要便是进行步进式4位密码修改、存储以及比对,还有调用计数器,从第一个按钮触动后40秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续的报警信号。
经过这次课程设计,我学到了很多。
在跟同学相互讨论、请教学习后,实现了软件的仿真,并成功进行了硬件功能。
同时通过两周的学习,我对EDA实验的兴趣也在不断提升,通过亲自设计实践,让我学到了很多课本上没有的知识。
八、参考文献
[1]潘松、黄继业,EDA技术与VHDL[M],北京:
清华大学出版社,2005
[2]潘松,EDA技术实用教程[M],北京:
科学出版社,2002
[3]谭京生,EDA技术及应用[M],西安:
西安电子科技大学出版社,2001
[4]徐志军,CPLD/FPGA的开发与应用[M],北京:
电子工业出版社,2001
[5](美)MarkD.Birnbaum,电子设计自动化基础(英文影印版)[M],北京:
机械工业出版社,2005
[6]朱正伟,EDA技术与应用[M],北京:
清华大学出版社,2005
[7]王金明,数字系统设计与VerilogHDL[M],北京:
电子工业出版社,2000
[8]潘松,VHDL实用教程[M],成都:
电子科技大学出版社,2001
[9]周祖成,电子设计硬件描述语言VHDL[M],北京:
北京学苑出版社,2000
[10]侯伯亭,VHDL硬件描述语言与数字逻辑电路设计[M],西安:
西安电子科技大学出版社,2001
[11]边计年、薛宏熙,用VHDL设计电子线路[M],北京:
清华大学出版社,2000
[12]任爱锋,基于FPGA的嵌入式系统设计[M],西安:
西安电子科技大学出版社,2004
九、设计生成的电路图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁 实验 报告