EDA密码锁课程设计.docx
- 文档编号:11345839
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:19
- 大小:252.10KB
EDA密码锁课程设计.docx
《EDA密码锁课程设计.docx》由会员分享,可在线阅读,更多相关《EDA密码锁课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
EDA密码锁课程设计
EDA课程设计实验报告
专业:
集成电路设计与集成系统
目录
摘要3
一、设计要求3
1.1基本要求…………………………………………………………………..…3
二、系统方案设计3
2.1系统功能概述…………………………………………………………….….3
2.2系统结构图………………………….……………………………….………4
三、功能模块…………………….……….……………………4
3.1、输入模块…………………………………………………….…4、5、6、7
3.2、移位寄存器模块…………………………………….……………..…7、8
3.3、密码管理模块…………………………………………...…..8、9、10、11
3.4、密码验证模块……………………………………………11、12、13、14
3.4、报警模块………………………………………………………14、15、16
四、总体设计电路图………….………………………………16
4.1、系统原理图………………………………………………………………16
4.2、波形功能仿真结果………………………………………………..…..…17
4.3、波形时序仿真结果………………………………………………..…..…17
五、设计心得体会…………………………………………………17
六、参考文献………………………………………………………17
摘要
随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。
电子密码锁应用范围广,早已成为当今人们生活中不可缺少的电子产品。
一、设计要求:
1.1、8位二进制,串行输入;有开锁和错误指示(LED)
二、系统方案设计:
2.1、系统功能概述
我们本次设计是一个具有较高安全性和较低成本的电子密码锁,其可以实现以以下功能:
(1)数码输入:
由于我们实验箱的按键有限,我们只设计了4个密码输入键分别为K1
(1)、K2
(2)、K3(3)、K4(4)。
每按下一个数字键,就立刻输入一个相应的数值,并在数码管上显示出该数值,同时将先前输入的数据依序左移一个数字位置。
(2)数码清除clr:
按下此键可以清除前面所有的输入值,清除成为“0000”。
(3)密码更改set:
按下此键时可以对密码进行更改。
(4)密码确认enter2:
按下此键可将输入的四位密码送往系统。
(5)修改密码确认:
确定修改好密码后,按下此键可确定修改好的密码。
2.2、系统结构图
三、功能模块
3.1、输入模块
1)、功能介绍
由于实验箱按键的限制我们选择了模式3,模式3的8个按键均是琴键(可以手动控制脉冲宽度),我们采用按键做为系统时钟,即每按下K1-K4其中一个按键产生一个时钟,对应输出1、2、3、4,经过移位寄存器后依次显示在数码管上。
2)、输入模块与波形仿真
功能仿真波形:
时序仿真波形:
3)、VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityxianshiis
port(
k1,k2,k3,k4,clr:
instd_logic;
dout:
outstd_logic_vector(3downto0);
clk1:
outstd_logic);
endxianshi;
architectureoneofxianshiis
signalq:
std_logic_vector(3downto0);
begin
process(k1,k2,k3,k4,clr)
begin
ifclr='1'then
q<="0000";
else
clk1<=(k1ork2ork3ork4)after5ns;
ifk1='1'then
q<="0001";
elsifk2='1'then
q<="0010";
elsifk3='1'then
q<="0011";
elsifk4='1'then
q<="0100";
else
q<="0000";
endif;
endif;
endprocess;
dout<=q;
endone;
由上述仿真波形可及VHDL语言可以看出当按下K1键时输出1,当按下K2键时输出2,当按下K3键时输出3,当按下K4键时输出4,当按下clr键时系统清0。
K1、K2、K3、K4键每按下一次系统产生一个clk1,作为后续电路的时钟。
当按下K1的时候输出端输出相应的数值即:
0001。
输出到后续模块。
同理当按下K2、k3、k4时分别输出相应的数值(0010、0011、0100)到后续模块。
3.2、移位寄存器模块
1)、功能介绍
移位寄存器模块的输出端接4个数码管。
当输入第一个数值时,在最后一个数码管上显示出相应的数,当下一个数值输入时系统将产生一个上升沿,使前面输入的数据自动左移一位,同时新输入的数据显示在最后一个数码管上,依次显示完四个数据,从而确定要输入的密码。
每当按下clr键时系统自动清零。
2)、移位寄存器模块与仿真波形
功能仿真波形:
时序仿真波形:
3)、VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyiweiis
port(
clk2,clr:
instd_logic;
dout:
instd_logic_vector(3downto0);
data_out:
outstd_logic_vector(15downto0)
);
endyiwei;
architectureoneofyiweiis
signalq:
std_logic_vector(15downto0);
begin
process(clk2,dout,clr)
begin
ifclr='1'then
q<="0000000000000000";
elsifclk2'eventandclk2='1'then
q(15downto4)<=q(11downto0);
q(3downto0)<=dout;
endif;
endprocess;
data_out<=q;
endone;
由上述仿真波形和VHDL语言可以看出每当一个时钟信号的上升沿到来时输入的四位二进制数据赋给中间信号的低四位同时原先信号的低十二位赋给高十二位即实现数据移位功能。
每当清零键clr变为高电平时系统自动清零一次,使输出全部归零。
3.3、密码管理模块
1)、功能介绍
该模块有储存密码锁的初始密码同时实现修改密码的功能,将存储的密码输出给后面的密码验证模块,从而为整个密码锁系统提供密码。
当修改密码控制端输入修改相应的修改密码信号时,开始执行修改密码的功能。
密码管理模块开始存储相应的输入密码数据,当修改密码功能结束时,密码管理模块将存储的密码数据发送到输出端,输出相应的新的密码。
2)、密码管理模块与波形仿真:
功能仿真波形:
时序仿真波形:
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitygaimimais
port(clk1,clr,enter1,set:
instd_logic;
din:
instd_logic_vector(3downto0);
dout1:
outstd_logic_vector(15downto0));
endgaimima;
architectureoneofgaimimais
typestateis(st0,st1,st2,st3,st4);
signald:
std_logic_vector(15downto0):
="0001000100010001";
signalcurrent_state,next_state:
state;
begin
reg:
process(clk1,clr)
begin
ifclr='1'thencurrent_state<=st0;
elsifclk1='1'andclk1'eventthencurrent_state<=next_state;
endif;
endprocess;
com:
process(current_state,din,enter1,set)
variabled1:
std_logic_vector(15downto0);
begin
ifset='1'then
casecurrent_stateis
whenst0=>d1(15downto12):
=din;next_state<=st1;
whenst1=>d1(11downto8):
=din;next_state<=st2;
whenst2=>d1(7downto4):
=din;next_state<=st3;
whenst3=>d1(3downto0):
=din;next_state<=st4;
whenst4=>next_state<=st0;
ifenter1='1'thend<=d1;
endif;
whenothers=>next_state<=st0;
endcase;
elsifset='0'then
casecurrent_stateis
whenst0=>next_state<=st0;
whenothers=>next_state<=st0;
endcase;
endif;
endprocess;
dout1<=d;
endone;
由上述的波形仿真图和VHDL语言,该模块用状态机编写,初始密码为0001000100010001即初始密码为1111。
当时钟clk1每产生一次上升沿时,状态机的次态转换到现态,当清零信号clr为高电平时,状态机的状态回复到初始状态。
当修改密码控制端set为高电平时,该模块开始实行修改密码的功能,变量d1开始存储输入的四位二进制密码数据,当数据输入结束时,按下确定键enter1,从而把变量d1存储好新的密码赋值给信号d,从而在最后的输出端输出对应的新密码。
如上述的语言,初始状态为st0,当输入第一组密码时,即输入第一个四位二进制数时,将输入的数赋值给d1的15到12位,同时状态机转到下一个状态st1,当第二组密码输入时,将输入的数赋值给d1的11到8位,同时状态机转到下一个状态st2,依次类推,当最后一组数据输入时,将输入的数赋值给d1的最后四位,同时状态机转到st4,当enter1为高电平时,将d1赋值给信号d,最后赋值给输出。
当set为低电平时,状态机一直维持状态零,等待高电平时,来实行改密码的改密码的功能。
3.4、密码验证模块
1)、功能介绍
密码验证模块是检验输入的密码与密码管理模块中存储的密码是否一致,当输入的密码与存储的密码不一致时,即密码错误,则输出错误信号,当密码正确时,输出对应的正确信号。
当输入清零信号时,清除前面输入的密码,重新等待输入密码。
2)、验证密码模块与仿真波形
功能仿真:
时序仿真:
VHDL代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyanzhengmmis
port(clk1,clr,enter2,set:
instd_logic;
din:
instd_logic_vector(3downto0);
d:
instd_logic_vector(15downto0);
ab:
outstd_logic_vector(3downto0));
endyanzhengmm;
architectureoneofyanzhengmmis
typestateis(st0,st1,st2,st3,st4);
signalcurrent_state,next_state:
state;
signalq:
std_logic_vector(15downto0);
begin
q<=d;
reg:
process(clk1,clr)
begin
ifclr='1'thencurrent_state<=st0;
elsifclk1='1'andclk1'eventthencurrent_state<=next_state;
endif;
endprocess;
com:
process(current_state,din,enter2,set)
begin
ifset='1'then
casecurrent_stateis
whenst0=>next_state<=st0;
whenothers=>next_state<=st0;
endcase;
elsifset='0'then
casecurrent_stateis
whenst0=>ifdin=q(15downto12)thennext_state<=st1;
elsenext_state<=st0;
endif;ab<="1011";
whenst1=>ifdin=q(11downto8)thennext_state<=st2;
elsenext_state<=st0;
endif;ab<="1011";
whenst2=>ifdin=q(7downto4)thennext_state<=st3;
elsenext_state<=st0;
endif;ab<="1011";
whenst3=>ifdin=q(3downto0)thennext_state<=st4;
elsenext_state<=st0;
endif;ab<="1011";
whenst4=>ifdin=q(15downto12)thennext_state<=st1;
elsenext_state<=st0;
endif;
ifenter2'eventandenter2='1'then
ab<="1010";
endif;
whenothers=>next_state<=st0;ab<="1011";
endcase;
endif;
endprocess;
endone;
如上的波形仿真图形和VHDL语言,该模块是用状态机来编写的。
与密码管理模块类似,当时钟clk1每产生一次上升沿时,状态机的次态转换到现态,当清零信号clr为高电平时,状态机的状态回复到初始状态。
为了与前面的密码管理模块分开,使系统处于改密码状态时,不进行密码验证,避免错误输出,在该模块也加入set功能键,当set为低电平时,密码验证模块开始检验输入的密码是否正确,当set为高电平时,该模块的状态机一直处于初始状态,等待set为高电平时,再开始检验密码。
由该模块语言和密码管理模块语言可知,功能键set将两个模块的功能分割开,不同时进行。
3.4、报警模块
1)、功能介绍
报警模块的功能是:
当密码连续输错两次时,报警模块输出高电平,该高电平和外部时钟经过一个与门后接蜂鸣器。
使得系统发出报警指示。
只有输入正确的密码,系统才停止报警。
2)报警模块与仿真波形
功能仿真波形:
时序仿真波形:
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybaois
port(
clk:
instd_logic;
en:
instd_logic_vector(3downto0);
bao:
outstd_logic
);
endbao;
architectureoneofbaois
begin
process(clk,en)
variabledd:
integer:
=0;
begin
ifclk'eventandclk='1'then
dd:
=dd+1;
endif;
ifen="1010"then
dd:
=0;
endif;
ifdd>1thenbao<='1';
elsebao<='0';
endif;
endprocess;
endone;
如上述波形仿真结果和VHDL语言采用enter2作为该模块时钟,通过统计按下enter2的次数来确定总输出bao是高电平还是低电平。
该系统的总输出再与系统时钟连接,判断是否发出报警。
四、总体设计电路图
1)、系统原理图
波形功能仿真结果:
波形时序仿真结果:
五、设计心得体会
通过这次EDA课程设计使我们受益颇多,不仅巩固了我们的所学知识,让我们对VHDL语言有了深层次的了解,并且让我们学到了很多新知识。
网上虽然有很多相关语言但大都不符合我们的设计要求,因此我们只能自己动手编写。
在整个设计过程中我们遇到了许多的挫折和困难,但经过我们细致耐心的调试最终还是顺利完成了此次设计,并且在原有功能要求上添加了一些新功能,达到了我们预期的目的。
总之通过此次课程设计增强了我们的动手实践能力,也让我们知道了理论联系实际的重要性。
六、参考文献
【1】、曹昕燕周凤臣聂春燕《EDA技术实验与课程设计》清华大学出版社
【2】、廖超平邓力主缟《EDA技术》北京理工大学出版社
【3】、邹其洪主编《EDA技术实验教程》中国电力出版社
【4】、李秀霞李兴保王心水编著《电子系统EDA设计实训》北京航空航天大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 密码锁 课程设计