基于VHDL的电子密码锁的设计(1)_第1页
基于VHDL的电子密码锁的设计(1)_第2页
基于VHDL的电子密码锁的设计(1)_第3页
基于VHDL的电子密码锁的设计(1)_第4页
基于VHDL的电子密码锁的设计(1)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA仿真与实践实习学院:信息科学与工程学院课题名称:硬件描述语言设计苴千 基JVHDL勺电子密码锁的设计班级:学生:学号:指导教师:1 引言在日常的生活和工作中 , 住宅与部门的安全防范、单位的文件档 案、财务报表以及一些个人资料的保存多以加锁的办法来解决。 若使 用传统的机械式钥匙开锁,人们常需携带多把钥匙 , 使用极不方便 , 且钥匙丢失后安全性即大打折扣。 随着科学技术的不断发展, 人们对 日常生活中的安全保险器件的要求越来越高。 为满足人们对锁的使用 要求,增加其安全性,用密码代替钥匙的密码锁应运而生。基于 EDA 技术设计的电子密码锁。以其价格便宜、使用方便、 安全性高、成本低、功

2、耗低、易操作等优点,受到了人们的普遍关注。 而以可编程逻辑器件(FBDA为设计载体,以硬件描述语言(VHDL为主 要表达方式,以QuartuS H 5开发软件等为设计工具设计的电子密码 锁,由于其能够实现密码输入、密码校验、密码设置和更改等功能, 因此,能够满足社会对安全防盗的需求。本 设 计 的 各 个模块 由相 应的 VHDL 程 序具 体 实现 , 并 在 QuartuS H 5.环1 境下进行了整体电路的模拟仿真,最终实现“密码锁 控制器设计”的要求。2 设计内容和要求2.1 设计内容:题目:电子密码锁内容:设计一个 4 位串行数字锁。(1) 开锁代码为 4 位二进制,当输入代码的位数

3、与锁内给定的密码一致, 且按规定程序开锁时,方可开锁,并点亮一个指示灯。否则进入“错 误”状态,并发出报警信号。(2) 锁内的密码可调,且预置方便,保密性好。(3) 串行数字锁的报警由点亮一个灯, 直到按下复位开关, 报警才停下 此时,数字锁又自动等待下一个开锁状态。要求:(1) 通过查阅相关技术资料,详细描述电子密码锁的基本原理。(2) 编写电子密码锁的Verilog HDL或 VHDLg序,并仿真编译下载验证。(3) 给出完整的系统顶层模块图与波形仿真图。3设计分案密码锁控制器是硬件与软件的结合。根据设计要求,决定以FBDA 芯片和VHDL语言设计此电子密码锁。用一片 FBDA芯片实现,从

4、而 大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。 这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性 和保密性。另外,采用可编程逻辑器件开发的数字系统,方便地升级 和改进。3.1系统总框图本系统的硬件部分主要由密码锁控制电路、 密码锁显示电路、LEDa示电路、 报警电路、密码更改与设置电路组成。整体系统框图如下图 2.1所示。密码锁总框图3.2密码锁的内部结构及主要功能3.2.1密码锁的主要功能密码锁控制器的主要功能有:(1) 密码输入:有二个按键来控制(分别代表O和1),每按下一个键,要求 在数码管上显示,并依次左移。(2) 密码校验:如果有按键按下,直到松开该按键

5、;红绿灯指示门的状态,也就是密码校验结果,如果密码校验正确,绿亮起,否则如果密码校验错误红灯 亮,并凤鸣器响,表明密码错误。(3) 错误报警:密码输入错误开始报警。(4)密码修改:输入密码正确后4秒内按按键输入要设置和更改的密码,按 按键确认密码设置与更改,则密码设置成功4系统硬件电路4.1密码锁的显示模块段数码管是电子开发过程中常用的输出 显示设备。在本设计中使用的是 8个四位一 体、共阴极型七段数码管。其单个静态数码 管如下图所示。由于七段数码管公共端连接到 GND (共 阴极型),当数码管的中的一个段被输入高 电平,则相应的这一段被点亮。反之则不亮。共阳极性的数码管与之相反。四位一体的七

6、段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码 管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由 各自的位选信号来控制,被选通的数码管显示数据,其余关闭。4.2密码锁控制模块该模块的作用是将输入的密码(暂时寄存于 ACC中)跟已经存储的密码(REG中的密码信息)进行对比,如果一样,则密码锁开锁。 而在通过密码验证后可以按按键设定密码。 在这里值得注意的是有一 个密码“ 0000”为开始密码,如果改名密码了但是又忘记了密码,重 新下载之后的初始密码只要输入的密码为“0000则都可通过密码锁。模块IoCk是整个设计的核心,它实现密码锁的逻辑

7、功能。在任何时候 按动密码初始化按键内密码设置为程序初始化密码值(在本模块程序 中此值为“0000”代码为4位二进制数,当输入代码的位数和位值 与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开 锁指示灯(緑灯)亮。否则,系统进入 错误”状态,并发出报警信号。 串行数字锁的报警方式是点亮指示灯(红灯),并使喇叭鸣叫,直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开 锁的状态。该4位串行电子密码锁设置 4位二进制密码,要求锁内 给定的密码是可调的,且设置方便,保密性好。其具体操作分为输入 密码和修改密码两部分4.2.1输入密码密码输入值的比较主要有两部分 ,密码位数和内

8、容,任何一个条件不满足,都不能打开锁。若锁内密码为“ 0000”,key和key1置低电平,分别表示输入“ 1 ”和“ 0”输入密码前先进行复位操作,再按着从密码最低位到最高位的顺序 依次正确输入0000,会在数码管逐一显示。经检验,输入的密码等于锁内预先设 置的密码密码锁开启信号,锁开启。同时,密码修改控制信号rw置低电平。若在输 入密码的过程中,4位二进制密码出现输入错误,那么锁不能开启,同时,指示 灯红灯 亮,发出报警信号。直到按下复位开关,报警才停止。此时,数字锁又 自动进入等待下一次开锁的状态。4.2.2修改密码为防止任意进行密码修改,必须在正确输入密码后,才能重新设置密码。输 入正

9、确密码后,锁打开,同时,密码修改控制信号按键rw置低电平,就可直接 进行修改密码的操作。修改密码实质就是用输入的新密码去取代原来的旧密码, 按确定按键ok,存储新密码时.5 VHDL程序设计密码锁控制器的各个功能模块都是通过 VHDL语言来完成的。本 设计由密码锁显示显示模块、分频模块、密码输入及校验模块、报警 模块、密码更改与设置模块几部分组成,各模块分工合作,最后达到 密码锁控制器设计的要求。表4-1程序的管脚分配表端口名对应FBGA管脚说明ClkP2时钟为50HzKeylAC23按下按键代表为“ 0 ”Key2AB21按下按键代表为“ 1 ”StartY14开始输入密码OkAA13确定输

10、入密码resetAC15复位rwV23该密码clrU23清零redM19密码错误红灯亮gree nT22密码正确緑灯亮beepA14蜂鸣器Seg7.0D16,D17,G13,D15,C15,C16,G15,J13代表数码管的片内显示Dig7.0E15,K18,E22,C17,H15,K16,H12,D18代表数码管的片外显示VHDl程序总代码Iibrary ieee;USe ieee.std_logic_1164.all;USe ieee.stdLlOgic_arith.all;USe ieee.std_logic_ Un Sig ned.all;en tity lock isport(key

11、1,key2:i n Stdo gic;clk,start,ok,reset,rw,clr: in stdo gic; red,gree n,beep:OUt std_logic:='1' dig:out Stdogic_vector(7 downto O); seg:out stdo gic_vector(7 dow nto O) );end lock;architecture rt1 of lock isSig nal keyi n,password:Stdo gic_vector(3 dow nto 0):="0000"Sig nal ope n1:s

12、td_logic:='0'Sig nal beep1:std_logic:='1'Sig nal a,shuru:std_logic;Sig nal count: stdo gic_vector(2 dow nto 0):="000"Signal temp: std_logic_vector(1 downto 0):="00"beg inprocess(clk)variable m:integer range 0 to 10;beginif clk'event and clk='1'thenif m

13、=9 thenm:=0;a<='1'elsem:=m+1;a<='0'end if;end if;end process; process(clk,start,ok,clr,rw,reset)beginif clk'event and clk='1'then if reset='0' thenred<='1'green<='1'beep1<='1'open1<='0'keyin<="0000"shu

14、ru<='0'count<="000Jend if; if start='0' then shuru<='1'end if;if rw='0' and open1='1'then shuru<='1'count<="000"end if;if clr='0' then keyin<="0000"count<="000"shuru<='1'elsif a

15、='1' and shuru='1' then if key1='0' then keyin<=keyin(2 downto 0)&'0'elsif key2='0' then keyin<=keyin(2 downto 0)&'1'end if;if count="011" thenshuru<='0' count<=count+1;else count<=count+1;end if;end if;if ok=&#

16、39;0'and open1='0' thenif (keyin=password)then red<='1'green<='0'open1<='1'else red<='0'green<='1'beep1<='0'open1<='0' end if; end if;if ok='0'and open1='1'thenpassword<=keyin;end if;end if;en

17、d process;process(clk,start,ok,clr,rw,reset)variable g:integer range 0 to 49999999;beginif clk'event and clk='1'thenif g=49999999 theng:=0;elseg:=g+1;end if;if g<=24999999 and beep1='0' thenbeep<='0'elsebeep<='1'end if;end process;process(clk)variable n:i

18、nteger range 0 to 50000;beginif clk'event and clk='1'thenif n=49999 thenn:=0;if temp="11"thentemp<="00"elsetemp<=temp+1;end if;elsen:=n+1;end if;if count="001" thencase temp is when "00" => dig<="01111111" ;if keyin(0)='0&

19、#39;then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111" ;end case ;elsif count="010" thencase temp is when "00" => dig<="01111111" ;if keyin(1)='0'then seg<="11000000" else s

20、eg<="11111001"end if;when "01" => dig<="10111111" ;if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111" ;end case ;elsif count="011" then case temp is when &quo

21、t;00" => dig<="01111111" ;if keyin(2)='0'then seg<="11000000" else seg<="11111001"end if;when "01" => dig<="10111111" ;if keyin(1)='0'then seg<="11000000" else seg<="11111001"end if; wh

22、en "10" => dig<="11011111" ;if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>seg<="11111111" ;end case ;elsif count="100" then case temp is when "00" => dig<="01111

23、111" ;if keyin(3)='0'then seg<="11000000"else seg<="11111001"end if;when "01" => dig<="10111111" ;if keyin(2)='0'then seg<="11000000" else seg<="11111001"end if; when "10" => dig<="

24、;11011111" ;if keyin(1)='0'then seg<="11000000" else seg<="11111001"end if; when "11" => dig<="11101111" ;if keyin(0)='0'then seg<="11000000" else seg<="11111001"end if; when others =>null;end case

25、;else dig<="11111111" ;seg<="11111111"end if;end PrOCeSS ;end rt1;6系统仿真当各个模块分别编译成功后,则创建一个个元件符号。再用图形 编辑器将各元件模块组装起来,这就是本设计中最顶层的图形设计 文件。顶层图形设计文件lock. gdf如图所示,这个结构框图说明了整 个系统的外部输入和输出情况。为了获得与目标器件对应的、精确的时序仿真文件译了 。幸 kdi!知 Gm4恥时 F*< 口H-叫-M-l0FsJ编译成功后进行仿真。首先建立波形文件。波形文件lock. SCf建 好并存盘后,选择菜单 "neW “VeCtOr WaVefOrm启动仿真操 作,结束后观察仿真波形。本设计中,仿真波形如图所示。当给初始 密码输入信号LC 一个低电平时,就将程序预先设定的密码(“0000” ) 装入lock中。按下reset后,系统复位,处于输入密码状态。输入 的开锁密码串行顺序装入,。密码输入完毕后,比较输入的密码是否 等于预先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论