基于VHDL 4位电子密码锁的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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输出一个上升沿

相关文档
最新文档