基于VHDL 4位电子密码锁的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学本科实验报告题目:基于VHDL 4位电子密码锁的设计
课程名称:数字电路课程设计
学院(系):电子信息与电气工程
专业:电子英强
班级:
学生姓名:
学号:
完成日期:2013.7.8
成绩:
2013 年7 月08 日
题目:基于VHDL 4位电子密码锁的设计
1 设计要求
○1电子密码锁为4位8421BCD码,多于4位,密码只取前4位。
○2在输入密码错误,给出一个错误信号,有三次输入机会,若三次密码都输入错误,则给出一个报警信号,此后只能由密码管理员取消报警信号。
○3在输入密码正确的情况下,可以再次设定密码。
○4每次输入一个密码,将显示在7段数码管上,并依次左移。
○5每次输入密码的时候,按取消(cancel)键可以取消这次密码的输入,课重新输入4位密码。
2 设计分析及系统方案设计
在实验室DE2开发板的条件下,考虑到key键只有4个,可以用switch开关来实现密码输入模块,用switch[9]~switch[0] 来实现数字9~0的输入,并通过译码模块将其转化为8421BCD码,由8421BCD码来驱动7段数码管作为密码锁的显示模块。每按一个键,产生一个上升沿,给4个数码管做时钟,实现没输入一个数左移一位的效果。
为了实现密码输入多于4位,可以构造一个模为4的计数器来控制只取前4位密码。共有三次输入密码的机会,可以构造一个模为3的计数器来控制。
密码比较模块:当按下确定键(yes)键,则将输入的密码和内置密码进行比较。密码输入模块:当输入密码正确时,再输入密码,利用重置密码键(set_psw)直接将其赋值给内置的密码psw即可实现。
LED显示模块,用来显示密码输入的正确与否。若输入密码与内置密码一致,则锁打开,输出一个高电平给LEDG,绿灯亮,密码错误则输出一个高电平给LEDR,红灯亮。
综合上述分析,本系统的硬件部分主要由密码锁输入译码模块、密码锁显示模块、密码锁控制模块、密码比较和重置模块和LED显示模块五个部分组成。
3系统以及模块硬件电路设计
说明:
1. 密码锁显示模块:段数码管是电子开发过程中常用的输出显示设备。在本设计中使用的是4个四位一体、共阳极型七段数码管。其单个静态数码管如右图所示。
2.密码输入和译码模块:
用switch[9]~[0]实现数字9到0的输入。
clk Clk_in
分频
器
密码锁输入和
译码
start reset
Num[9]
至
Num[0]
Out0
Out1
Out2
Out3 q(4 downto 0)
Cancel
Out_q(15 downto 0)
Psw(15 downto 0)
DE2开发板上使用的元件的管脚编号如下: 端口名 FPGA 管脚 说明
alarm pin_af23 报警信号,红灯亮 cancel pin_v1 取消密码输入 clk pin_n2 50MHz 时钟 correct pin_ae22 密码正确,绿灯亮 num[0] pin_n25 输入数字0到9
num[1] pin_n26 num[2] pin_p25 num[3] pin_ae14 num[4] pin_af14 num[5] pin_ad13 num[6] pin_ac13 num[7] pin_c13 num[8] pin_b13 num[9] pin_a13 out0[0] pin_af10 u0数码管 out0[1] pin_ab12 out0[2] pin_ac12 out0[3] pin_ad11 out0[4]
pin_ae11
Correct
Out_error
alarm
yes
密码比较和重置
Set_psw
4 系统的VHDL设计
说明
1.分频模块,即做一个模5000的计数器,从而将50MHz的时钟转化为
10000Hz的时钟。
2.密码锁输入和译码,显示模块。switch[9]~switch[0]模拟数字9~0的输入,
例如switch[9]为高电平,而其他为低电平,则通过程序译码为9,同时产生一个clock时钟上升沿,由于人操作的时间必定大于0.00001s(即10000Hz 的时钟周期),所以在下次按键是,clock已经回到低电平,此后再按键clock 又产生一个上升沿。由此构造的clock时钟可以为左移寄存器当时钟。
3.密码显示模块:switch改变一次,即每输入一个数,译码产生一个四位的
BCD码,来驱动数码管。并随着clock上升沿,依次左移显示。
4.密码比较和重置模块:在输入了4位密码后,16位BCD码已经保存在out_q
里,通过与内置密码比较即可。
数码管的真值表(0代表亮,1代表不亮)
VHDL源代码
○1.主程序coded_lock代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity coded_lock is
port(clk: in std_logic;
start:in std_logic;
reset:in std_logic;
num:in std_logic_vector(9 downto 0);
out3,out2,out1,out0:out std_logic_vector(6 downto 0);
correct: buffer std_logic;
yes:in std_logic;
--admin:in std_logic;
set_psw:std_logic;
alarm: out std_logic;
cancel: in std_logic;
out_error: buffer std_logic);
end;
architecture behave of coded_lock is
--******************************************************************* component decoder is --显示译码器的元件例化port(qq:in std_logic_vector(3 downto 0);
result: out std_logic_vector(6 downto 0));
end component;
--******************************************************************* signal out_q: std_logic_vector(15 downto 0):="1111111111111111"; --out_q为4位密码锁的8421BCD码
signal q:std_logic_vector(3 downto 0);
--输入一个9~0的数字,q为其8421BCD码
signal clock : std_logic:='0';
--每按一次键,clock输出一个上升沿