基于VHDL4位电子密码锁的设计.docx
- 文档编号:2176047
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:18
- 大小:192.21KB
基于VHDL4位电子密码锁的设计.docx
《基于VHDL4位电子密码锁的设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL4位电子密码锁的设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于VHDL4位电子密码锁的设计
基于VHDL-4位电子密码锁的设计
大连理工大学本科实验报告
题目:
基于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显示模块五个部分组成。
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<="0010";clock<='1';
when"0000000010"=>q<=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL4 电子 密码锁 设计