基于FPGA的电子密码锁设计.doc

上传人:飞****9 文档编号:136863084 上传时间:2020-07-03 格式:DOC 页数:7 大小:214.50KB
返回 下载 相关 举报
基于FPGA的电子密码锁设计.doc_第1页
第1页 / 共7页
基于FPGA的电子密码锁设计.doc_第2页
第2页 / 共7页
基于FPGA的电子密码锁设计.doc_第3页
第3页 / 共7页
基于FPGA的电子密码锁设计.doc_第4页
第4页 / 共7页
基于FPGA的电子密码锁设计.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《基于FPGA的电子密码锁设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA的电子密码锁设计.doc(7页珍藏版)》请在金锄头文库上搜索。

1、一、前言电子密码锁的使用体现了人们的消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。目前设计密码锁的方法很多,例如传统的PCB板设计、用PLC设计或者单片机设计等等。而用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法。VHDL是一种符合IEEE标准的硬件描述语言,其最大的特点是借鉴高级程序语言的功能特性,对电路的行为与结构进行高度的抽象化、规范化的形式描述,并对设计的不同层次、不同领域的模拟验证与综合优化等处理,使设计过程延到高度自动化。二、方案设计 密码锁的的构成主要由密码输入、密码设置、比较控制和报警部分组成,此外密码锁必须能够保存已设置的密

2、码,因而需要一个寄存器来保存密码,同时由于控制电路和报警电路要用到不同的时钟,因而需要一个时序产生电路来生成需要的不同信号,采用分频方法实现。 根据密码锁的电路特点,选用的是实验箱的模式6电路,根据电路功能,在这里设计的密码锁以4位2进制代码作为密码的电子密码锁。其原理框图如下所示: 报警电路时序产生电路比较控制密码输入开锁信号寄存器(保存设置的密码)密码设置图一、电子密码锁原理框图三、功能模块的实现1、时序电路 在密码锁的电路中,输入计时、报警计时需要的1HZ的时钟脉冲信号,而驱动蜂鸣器工作需要的很高频率的脉冲信号,因而这里采用输入一个高频脉冲(1024HZ)信号来驱动蜂鸣器,采用分频的方法

3、得到1HZ的计时脉冲,程序如下:process(clk_1k) variable cnt1:integer:=0;beginif rising_edge(clk_1k) thenif cnt1=512 thenclk_1=not clk_1;cnt1:=0;else cnt1:=cnt1+1;end if;end if;end process;程序说明:clk_1k为输入的1024HZ高频脉冲,cnt为分频得到的1HZ计时脉冲。2、密码设置为了安全性,密码锁必须能够重复的设定密码,在设定密码锁后,应该设置一个寄存器来存储设定的密码,程序如下:process(rst,password,enter

4、_p) is beginif rst=0 thenif enter_p=1 thenram=password;en1=1;end if;end if;end process;程序说明:rst低电平时所有的模块复位,只有密码设置模块工作;password为设置密码时的输入端,ram就是存储密码的寄存器;enter_p为在这里为密码设置使能端,高电平有效。 密码设置的仿真波形如下图,由图中可以清楚地看到在enter_p高电平时寄存器ram中得到了输入的密码1001。 图二、密码设置仿真波形3、 密码输入 密码输入部分要求在密码开始输入时进行计时,超时了要求报警,因此在 密码输入时设置一个计时使能信

5、号en2,密码开始输入时使能信号en2有效,控制电路的计时器开始计时;而且在密码确认键按下之前,电路不能对输入密码和已设置密码进行比较,因此需要设置一个寄存器,来存储输入的数据,当确认键按下时,就将寄存器里的数据送给控制部分进行比较。程序如下: process(rst,enter_c,en1,code) begin if rst=1 thenif en1=1 thenif enter_c=1 thencode_tmp=code;en2=1;end if; else code_tmp=0000;en2=0;end if; else code_tmp=0000;en2=0;end if;end p

6、rocess; 程序说明: rst置高,设置密码模块不工作,其他部分正常工作,en1为高时代表密码设置完毕,密码锁开始工作;enter_c是密码输入使能信号,高电平时表示开始密码输入,此时code_tmp中开始存储输入的数据,计时使能信号en2也变成高电平。 密码输入仿真波形如下,由图中可清楚的看到在enter_c为高时,寄存器code_tmp中存储了输入的数据code(系统仿真时有10ns的延时)。 图三、密码输入仿真波形4、 控制部分此部分是密码锁设计的核心模块,它实现密码锁的逻辑功能。开锁代码为4位二进制数,当输入代码的位数和位值与锁内设置的密码一致,且在规定时间内开锁,方可打开,并且点

7、亮开锁指示灯led_g;否则,系统进入“错误”状态,并且发出警报。警报的方式为蜂鸣器发出警报,指示灯led_r闪烁。直到30秒过后或者按下复位键,经行下一次密码输入。模块源程序:process(rst,clk_1,en2) variable lock:std_logic:=0;variable cnt3:integer:=0;beginif rst=0 thenlock:=0;cnt3:=0;sp_en=0;led_g=0;led_r=0;elseif rising_edge(clk_1) thenif lock=0 thenif en2=1 thenif cnt3=5 thensp_en=1

8、;led_g=0;led_r=1;cnt3:=0;lock:=1;else if code_en=1 then if ram=code_tmp thensp_en=0;led_g=1;led_r=0;lock:=1; else sp_en=1; led_g=0;led_r0 thenif cnt4=31 thencnt4:=0;tmp_en1:=0;else cnt4:=cnt4+1; tmp_en1:=1;end if;end if;end if;else tmp_en1:=0;cnt4:=1;end if;speaker=tmp_en1 and clk_1k;led_f=tmp_en1 a

9、nd clk_1; end process;程序说明:Cnt4是一个30进制计数器,对报警时间进行计时。 Sp_en是控制电路发出的报警信号。四、 软件仿真将完整的程序在Quartus软件下进行编译,通过之后进行波形仿真,观察仿真波形看是否实现了密码锁的逻辑功能,下面是在密码输入正确、密码输入超时和密码输入错误时的仿真波形图。图四、密码输入正确仿真波形 如图所示,首先在rst为0时将密码设为1001,然后输入密码1001,当确认键code_en按下时,系统判断密码正确,输出一个开锁信号,开锁指示灯led_g点亮。图五、密码输入错误仿真波形 如图,密码设置仍然为1001,但输入一个错误的密码10

10、00,当密码确认按下时,系统发出错误警报,蜂鸣器Speaker发出响声,报警灯led_f闪烁。图六、出入超时仿真波形 如图,密码设置不变,依旧是1001,但是密码输入按键enter_c按下,输入密码后不按下确认键,五秒过后,系统判断密码输入超时,此时输出超时警报,蜂鸣器报警,led_g点亮,led_f闪烁。五、 心得体会这次的课程设计安排在了假期以后,上学期的VHDL语言已经有些生疏了,这给编程带来了一些难度,但是经过复习还是重新熟悉了编程的方法和技巧。在写程序的时候有时候不注意仿真,犯了想当然的毛病,认为程序会实现想象中的逻辑功能,但实际不然,所以在编程过程中,不能单凭想象来做,必须写完一部分后就进行一次仿真,及时发现问题,及时改正,避免可在写完程序之后才发现错误,这时再修改就会很麻烦了。这次的课程设计标题是密码锁设计,通过在查阅资料的过程中了解了电子密码锁的发展前景和FPGA的广泛应用,在日常生活中会有许多的电子设备都与FPGA有关,因此学好EDA技术对自己的以后的发展会有很大的帮助。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号