基于VHDL 4位电子密码锁的设计优质文档.docx

上传人:b****5 文档编号:2855875 上传时间:2022-11-16 格式:DOCX 页数:18 大小:189.33KB
下载 相关 举报
基于VHDL 4位电子密码锁的设计优质文档.docx_第1页
第1页 / 共18页
基于VHDL 4位电子密码锁的设计优质文档.docx_第2页
第2页 / 共18页
基于VHDL 4位电子密码锁的设计优质文档.docx_第3页
第3页 / 共18页
基于VHDL 4位电子密码锁的设计优质文档.docx_第4页
第4页 / 共18页
基于VHDL 4位电子密码锁的设计优质文档.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于VHDL 4位电子密码锁的设计优质文档.docx

《基于VHDL 4位电子密码锁的设计优质文档.docx》由会员分享,可在线阅读,更多相关《基于VHDL 4位电子密码锁的设计优质文档.docx(18页珍藏版)》请在冰豆网上搜索。

基于VHDL 4位电子密码锁的设计优质文档.docx

基于VHDL4位电子密码锁的设计优质文档

大连理工大学本科实验报告

 

题目:

基于VHDL4位电子密码锁的设计

 

课程名称:

数字电路课程设计

学院(系):

电子信息与电气工程

专业:

电子英强

班级:

学生姓名:

学号:

完成日期:

2013.7.8

成绩:

 

2013年7月08日

题目:

基于VHDL4位电子密码锁的设计

1设计要求

电子密码锁为4位8421BCD码,多于4位,密码只取前4位。

在输入密码错误,给出一个错误信号,有三次输入机会,若三次密码都输入错误,则给出一个报警信号,此后只能由密码管理员取消报警信号。

在输入密码正确的情况下,可以再次设定密码。

每次输入一个密码,将显示在7段数码管上,并依次左移。

每次输入密码的时候,按取消(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显示模块五个部分组成。

LED显示模块

密码锁比较和重置

密码锁显示模块

密码锁输入译码

 

 

3系统以及模块硬件电路设计

说明:

1.密码锁显示模块:

段数码管是电子开发过程中常用的输出显示设备。

在本设计中使用的是4个四位一体、共阳极型七段数码管。

其单个静态数码管如右图所示。

2.密码输入和译码模块:

用switch[9]~[0]实现数字9到0的输入。

 

 

 

reset

start

q(4downto0)

clkClk_in

Num[9]

Num[0]

 

Cancel

yes

Correct

Out_error

alarm

Out_q(15downto0)

 

Psw(15downto0)

Set_psw

 

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

out0[5]

pin_v14

out0[6]

pin_v13

out1[0]

pin_v20

u1数码管

out1[1]

pin_v21

out1[2]

pin_w21

out1[3]

pin_y22

out1[4]

pin_aa24

out1[5]

pin_aa23

out1[6]

pin_ab24

out2[0]

pin_ab23

u2数码管

out2[1]

pin_v22

out2[2]

pin_ac25

out2[3]

pin_ac26

out2[4]

pin_ab26

out2[5]

pin_ab25

out2[6]

pin_y24

out3[0]

pin_y23

u3数码管

out3[1]

pin_aa25

out3[2]

pin_aa26

out3[3]

pin_y26

out3[4]

pin_y25

out3[5]

pin_u22

out3[6]

pin_w24

out_error

pin_ae23

密码错,红灯亮

reset

pin_v2

管理员权限,为0时取消报警信号

set_psw

pin_n23

设置密码

start

pin_u4

开始输入密码信号

yes

pin_g26

确定信号

 

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代表不亮)

0

1

2

3

4

5

6

0000

0

0

0

0

0

0

1

0001

1

0

0

1

1

1

1

0010

0

0

1

0

0

1

0

0011

0

0

0

0

1

1

0

0100

1

0

0

1

1

0

0

0101

0

1

0

0

1

0

0

0110

0

1

0

0

0

0

0

0111

0

0

0

1

1

1

1

1000

0

0

0

0

0

0

0

1001

0

0

0

0

1

0

0

 

VHDL源代码

.主程序coded_lock代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycoded_lockis

port(clk:

instd_logic;

start:

instd_logic;

reset:

instd_logic;

num:

instd_logic_vector(9downto0);

out3,out2,out1,out0:

outstd_logic_vector(6downto0);

correct:

bufferstd_logic;

yes:

instd_logic;

--admin:

instd_logic;

set_psw:

std_logic;

alarm:

outstd_logic;

cancel:

instd_logic;

out_error:

bufferstd_logic);

end;

 

architecturebehaveofcoded_lockis

--*******************************************************************

componentdecoderis--显示译码器的元件例化

port(qq:

instd_logic_vector(3downto0);

result:

outstd_logic_vector(6downto0));

endcomponent;

--*******************************************************************

signalout_q:

std_logic_vector(15downto0):

="1111111111111111";

--out_q为4位密码锁的8421BCD码

signalq:

std_logic_vector(3downto0);

--输入一个9~0的数字,q为其8421BCD码

signalclock:

std_logic:

='0';

--每按一次键,clock输出一个上升沿

signalcounter:

integerrange0to2:

=0;

--模为3的计数器

signalcnt4:

integerrange0to4:

=0;

--模为5的计数器

signalenable:

std_logic:

='1';

--当输错3次密码,则此使能端为0,使无法译码

signalpsw:

std_logic_vector(15downto0):

="1001100001110110";

--默认密码为9876

signalclk_in:

std_logic;

--5000分频之后的时钟

begin

--*******************************************************************process(clk_in,start,reset,enable)

begin

ifreset='0'then

clock<='0';

elsifrising_edge(clk_in)then

ifstart='1'andenable='1'then

casenumis--按个键,clock来一个上升沿

when"1000000000"=>q<="1001";clock<='1';

when"0100000000"=>q<="1000";clock<='1';

when"0010000000"=>q<="0111";clock<='1';

when"0001000000"=>q<="0110";clock<='1';

when"0000100000"=>q<="0101";clock<='1';

when"0000010000"=>q<="0100";clock<='1';

when"0000001000"=>q<="0011";clock<='1';

when"0000000100"=>q

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1