EDA课设电子密码锁Word文件下载.docx
《EDA课设电子密码锁Word文件下载.docx》由会员分享,可在线阅读,更多相关《EDA课设电子密码锁Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
保密性强,防盗性能好,可以不用钥匙,只要记住密码即可开锁。
所以,具有防盗报警功能的数字密码锁代替安全性较差的机械锁已经成为必然趋势。
DXDiTa9E3d
2设计原理
2.1设计要求
本系统是基于EDA作为开发工具,VHDL语言为硬件描述语言,QuartusⅡ作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,初步实现了设计目标。
本系统具体采用元件例化的方法将各个工作模块连接在一起,实现系统完整的功能。
数字密码锁的系统结构框图如图1所示。
RTCrpUDGiT
设计一个电子密码锁,实现密码的输入、更改、上锁等功能;
密码输入:
开锁代码为二进制数,当输入的密码时,显示器上将显示该数值;
密码上锁:
当按下上锁键后,密码锁将被上锁;
密码更改:
当按下密码更改键后,密码锁将被重置为新密码;
密码解除:
当按下解锁键后,如果密码正确,密码锁将被打开。
5PCzVD7HxA
2.2设计方案
根据“自顶而上”的设计方法,将系统顶层实体划分为若干模块,然后按功能分为若干模块,然后对每一模块进一步细分,直至得到简单易实现的子模块。
jLBHrnAILg
控制器是整个系统的功能核心,接受按键和其他模块传来的信号,再根据系统功能产生相应的控制信号送到相关的模块,输出钥匙信号和报警信号。
xHAQX74J0X
键盘输入密码给比较器和寄存器。
并提供密码脉冲信号给控制器;
比较器用来比较输出和寄存器输出数据是否相等,输出送给控制器;
寄存器在校验密码时,输出密码以供比较,在修改密码时,保存新密码。
钥匙信号控制锁打开、关闭,报警信号可以接LED及其他安防设备。
LDAYtRyKfE
按“安锁”键,将锁闭合;
开锁时先按“输入密码”,再按“确认”;
若输入密码内容有误,报警;
只有在开锁状态下才可以设置新密码,按“修改密码”输入新密码,按“确认”。
Zzz6ZB2Ltk
此次设计用拨码开关的高低电平来实现二进制输入。
3仿真分析
3.1QuartusII仿真软件
QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL<
AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
dvzfvkwMI1
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
rqyn14ZNXI
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
EmxvxOtOco
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统<
SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
SixE2yXPq5
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
6ewMyirQFL
QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;
kavU42VRUs
LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;
y6v3ALoS89
功能强大的逻辑综合工具;
完备的电路功能仿真与时序逻辑仿真工具;
定时/时序分析与关键路径延时分析;
可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;
支持软件源文件的添加和创建,并将它们链接起来生成编程文件;
使用组合编译方式可一次完成整体设计流程;
可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;
能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
3.2整体波形仿真
在数字密码锁代码编写完成后,用QuartusII对其进行编译并仿真,整个系统的仿真波形如图2所示。
可以看到,系统的初始密码为“000”,按“输入密码”键(start>
后,“钥匙信号”(key>
变为高电平,再按“确认”键(enter>
,此时系统为开锁状态;
M2ub6vSTnP
在此状态下,按“修改密码”键(ps_ch>
,输入新密码“111”,再按“确认”键(enter>
;
按“安锁”键(lock>
,锁闭合(key变为低电平>
再按“输入密码”键(start>
,此时输入密码“000”,然后按“确认”键(enter>
,系统报警(warn>
,因为新密码已变为“111”;
0YujCfmUCw
再次按“输入密码”键(start>
,此时输入密码“111”,“钥匙信号”(key>
变为高电平,报警信号(warn>
变为低电平,然后按“确认”键(enter>
。
eUts8ZQVRd
图3-1数字密码锁整体仿真波形
3.3模块波形仿真
3.3.1寄存器模块波形仿真
图3是寄存器模块的仿真波形。
m的初始值为000。
当en=1时,寄存器将data_in的数据赋给m,当en=0时,寄存器将m的数据赋给data_out。
sQsAEJkW5T
图3-2寄存器模块波形仿真
3.3.2控制器模块波形仿真
图4是控制器模块的仿真波形。
按“输入密码”键(start>
,再使“确认”键(enter>
、“比较信号”键分别为高电平有效,“钥匙信号”(key>
变为高电平,系统处于开锁状态;
,计数器时钟信号(cnt_clk>
有效计数,按“安锁”键(lock>
,锁闭合,钥匙信号(key变为低电平>
使“确认”键(enter>
为高电平、“比较信号”键为低电平,这时再按“输入密码”键(start>
,钥匙信号(key变为低电平>
GMsIasNXkA
图3-3控制器模块波形仿真
3.3.3比较器模块波形仿真
图5是比较器模块的仿真波形。
在数字密码锁中,比较器模块的功能是将输入数据与寄存器数据进行比较,结果送入控制器模块。
比较器的具体工作原理是:
当a和b相等时,c输出为1,不相等时为0。
TIrRGchYzg
图3-4比较器模块波形仿真
3.4实验箱下载验证
根据程序的要求对应好管脚,下载到实验箱,通过拨码开关输入密码,将其显示在数码管上,将钥匙信号,报警信号连LED灯,若系统的初始密码为“000”,按“输入密码”键(start>
灯不亮,再按“确认”键(enter>
,(key>
灯亮状态。
7EqZcWLZNX
,锁闭合(key灯不亮>
灯亮,因为新密码已变为“111”。
lzq7IGf02E
,此时输入密码“111”,然后按“确认”键(enter>
,<
key)灯亮。
zvpgeqJ1hk
4设计总结
使用VHDL语言设计电路,思路简单,功能明了使用QuartusII软件设计电路不仅可以进行逻辑仿真,还可以进行时序仿真。
使用可编程逻辑器件不仅省去了电路制作的麻烦,还可以反复多次进行硬件实验,非常方便的修改设计,且设计的电路保密性很强。
总之,采用EDA技术使得复杂的电子系统设计变得简单容易,可大大提高了设计效率。
NrpoJac3v1
本文以现场可编程逻辑器件(FPGA>
为主要表达方式,以QuartusⅡ开发软件和开发系统为设计工具设计了一种具有密码输入、密码修改、报警、密码设置等功能的电子密码锁。
同时阐述电子密码锁的工作原理和软硬件实现方法。
由于本设计中的FPGA芯片体积小,功耗低,价格便宜,安全可靠,稍加修改就可以改变密码的位数,而且维护和升级比较方便,很容易做成ASIC芯片,因而具有较好的应用前1nowfTG4KI
本次课设,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。
fjnFLDa5Zo
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
tfnNhnE6e5
5参考文献
[1]孟庆海,张洲.《VHDL基础及经典实例开发》.西安交通大学出版社,2008
[2]李洋.《EDA技术》<
第2版).机械工业出版社,2009
[3]VolneiA.pedroni《CircuitDesignwithVHDL》.电子工业出版社,2008HbmVN777sL
[4]谭会生《EDA技术综合应用实例与分析》.西安电子科技出版社,2003
[5]潘松,黄继业.《EDA技术实用教程》.科学出版社,2018
附录
源程序:
-------------------控制模块-----------------------
libraryieee。
useieee.std_logic_1164.all。
entitycontrolis
port(clk,lock,start,ps_ch,enter,yes:
instd_logic。
warn,key,wr,en:
outstd_logic>
endcontrol。
architecturebhvofcontrolis
typestateis(inlock,input,right1,wrong,unlock,change,alarm>
V7l4jRB8Hs
signalps,ns:
state。
begin
process(clk>
begin
ifclk'
eventandclk='
1'
then
ps<
=ns。
endif。
endprocess。
process(ps,lock,start,ps_ch,enter,yes>
casepsis
wheninlock=>
key<
='
0'
en<
warn<
wr<
if(start='
>
thenns<
=input。
elsens<
=inlock。
wheninput=>
if(yes='
=right1。
=wrong。
whenright1=>
ifenter='
thenns<
=unlock。
whenwrong=>
=alarm。
whenunlock=>
iflock='
elsifps_ch='
=change。
whenalarm=>
whenchange=>
endcase。
endbhv。
-----------------寄存器模块--------------------
entityregis
port(clk,wr,en:
data_in:
instd_logic_vector(2downto0>
data_out:
outstd_logic_vector(2downto0>
endreg。
architecturebhvofregis
variablem:
std_logic_vector(2downto0>
then
ifen='
andwr='
thenm:
=data_in。
ifwr='
anden='
thendata_out<
=m。
--------------比较器模块-----------------------
entitycmpis
port(a,b:
c:
end。
architecturebhvofcmpis
c<
whena=belse
'
endcmp。
-----------编码器模块-------------------------
entityais
port(a,b,c,clk:
digit1,digit2,digit3:
outstd_logic_vector(3downto0>
83lcPA59W9
enda。
architectureaofais
process(clk>
variabletemp1:
std_logic。
variabletemp2:
variabletemp3:
temp1:
=a。
temp2:
=b。
temp3:
=c。
casetemp1is
when'
=>
digit1<
="
0000"
0001"
endcase。
casetemp2is
digit2<
casetemp3is
digit3<
endprocess。
------------------顶层文件---------------------
entitye_lockis
port(clk,lock,start,ps_ch,enter:
key_in:
warn,key:
outstd_logic。
digit3,digit2,digit1:
mZkklkzaaP
ende。
architecturebhvofe_lockis
componentcontrolis
endcomponent。
componentregis
componentcmpis
componentais
port(a,b,c:
AVktR43bpw
signald,e,g:
signalf:
u1:
controlportmap(clk=>
clk,lock=>
lock,start=>
start,ORjBnOwcEd
ps_ch=>
ps_ch,enter=>
enter,yes=>
g,key=>
key,
warn=>
warn,wr=>
d,en=>
e>
u2:
regportmap(clk=>
clk,wr=>
e,data_in=>
key_in,data_out=>
f>
2MiJTy0dTT
u3:
cmpportmap(a=>
key_in,b=>
f,c=>
g>
u4:
aportmap(key_in(0>
key_in(1>
key_in(2>
digit1,digit2,digit3>
gIiSpiue7A