vhdl密码锁

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VHDL实验报告
数字密码锁
专业:信息工程
学号:
姓名:
2020年12月
一、实验任务及设计要求
一、安锁状态
按下开关键SETUP,密码设置灯亮时,方可进行密码设置操作。

设置初始密码0~9(或二进制四位数),必要时能够改
换。

再按SETUP键,密码有效。

二、开锁状态
(1)按启动键(START)启动开锁程序,现在系统内部是初始状态。

(2)依次键入0~9(或二进制四位数)。

(3)按开门键(OPEN)预备开门。

假设按上述程序执行且拨号正确,那么开门指示灯A亮,假设按错密码或未按上述程序执行,那么按动开门键OPEN后,警报装置鸣叫,B灯亮。

(4)开锁处置事务完毕后,应将门关上,按SETUP键使系统从头进入安锁状态。

假设在报警状态,按SETUP键或START键不起作用,应按RESET键才能使系统进入安锁状态。

3、利用者如按错密码,可在按OPEN键之前,按RESET键从头启动开锁程序。

4、用层次化设计方式设计该电路,编写各个功能模块的程序。

5、仿真各功能模块,通过观看有关波形确认电路设计是不是
正确。

6、完成电路设计后,用实验系统下载验证设计的正确性。

二、系统结构
反馈信号
图一系统原理图
一、锁存器:用于实现设定密码(锁存器1)和输入密码锁存器2的存储。

二、比较器:用于将设定密码与输入密码相较较。

其中,CLK为外部输入的时钟信号。

假设输入密码正确,那么A灯亮;不然B灯亮。

同时比较器输出与CLK一样的信号,驱动蜂鸣器发出警报声。

3、开锁操纵器:当反馈信号下降沿来到时,开锁操纵输出低电平,用于在输入错误密码后,禁止再次安锁;当RESET脚位高电平常,开锁操纵输出高电平,打开与门,这时锁存器1使能端的转变受控于SETUP键,从头进入安锁状态。

4、LED显示:用于设定密码或输入密码的显示。

此项设计的目的是为了在下载演示时,能清楚地看到设置和输入的密码值。

二、硬件电路设计
一、设密码模块
设密码模块如以下图所示,包括复位键(RESET),密码设定选择键(SETUP),反馈信号(FD)和信号输出(CODE_OUT)和LED输出。

设密码模块要紧用于密码锁的复位和密码设定。

图二
设密码模块的程序设计:
library ieee;
use latch4 is
port(setup,oe,reset,fd:in std_logic;
code_in:in std_logic_vector(3 downto 0);
code_out:out std_logic_vector(3 downto 0);
led:out std_logic_vector(3 downto 0));
end entity;
architecture behav of latch4 is
signal temp_code:std_logic_vector(3 downto 0);
begin
process(setup,fd,oe)
variable temp_ena:std_logic;
variable ena:std_logic;
begin
if fd'event and fd='0' then
temp_ena:='1';
end if;
ena:=setup and (not temp_ena);
if reset='0' then
temp_ena:='0';
elsif ena='1' then
temp_code<=code_in;
end if;
if oe='1' then
code_out<=temp_code;
led<=temp_code;
end if;
end process;
end behav;
二、密码输入模块
密码设定输入模块要紧用于设密码时输入密码。

如图START确实是输入密码键,每当按下且是下降沿时,输出加1,输出是4位二进制,及是0~A。

SETUP键是前提条件,只有当他为高电平常START键才有效。

图三
密码设定输入模块的程序设计:
library ieee;
use latch4_2 is
port(start,fd,reset:in std_logic;
code_in:in std_logic_vector(3 downto 0);
code_out,led:out std_logic_vector(3 downto 0);
oe:in std_logic);
end entity;
architecture behav of latch4_2 is
signal temp_code:std_logic_vector(3 downto 0);
begin
process(start,fd,oe)
variable temp_ena:std_logic;
variable ena:std_logic;
begin
if fd'event and fd='0' then
temp_ena:='1';
end if;
ena:=start and (not temp_ena);
if reset='0' then
temp_ena:='0';
elsif ena='1' then
temp_code<=code_in;
end if;
if oe='1' then
code_out<=temp_code;
led<=temp_code;
end if;
end process;
end behav;
3、比较器模块
比较器模块是密码锁的要紧模块,CLK是时钟信号,要紧操纵蜂鸣器speaker蜂鸣的频率。

OPEN(ENA)键是开锁键,当按下该键且为下降沿触发时,比较器开始比较设定的密码和输入的密码,当输入的密码等于设定的密码时,A灯亮,当输入的密码不等于设定的密码时,B灯亮且蜂鸣器蜂鸣。

FD为反馈信号。

图四
比较器模块的程序设计:
library ieee;
use comp4 is
port(clr,ena,clk:in std_logic;
la,lb,sp,fd:out std_logic;
code1,code2:in std_logic_vector(3 downto 0));
end entity;
architecture behav of comp4 is
begin
process(clr,ena,code1,code2)
begin
if clr='0' then
la<='0';
lb<='0';
sp<='0';
fd<='1';
elsif ena='1' then
if code1=code2 then
la<='1';
lb<='0';
sp<='0';
fd<='1';
else
la<='0';
lb<='1';
sp<=clk;
fd<='0';
end if;
end if;
end process;
end behav;
4、数码管驱动模块
数码管驱动模块是七段译码器,将输入的四位二进制在数码管上以十六进制显示出来。

图五
数码管驱动模块的程序设计:
LIBRARY IEEE;
USE DecL7S IS
PORT (A :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END;
ARCHITECTURE one OF DecL7S IS
BEGIN
PROCESS(A)
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN "0000"=>LED7S<="00111111";
WHEN "0001"=>LED7S<="00000110";
WHEN "0010"=>LED7S<="01011011";
WHEN "0011"=>LED7S<="01001111";
WHEN "0100"=>LED7S<="01100110";
WHEN "0101"=>LED7S<="01101101";
WHEN "0110"=>LED7S<="01111101";
WHEN "0111"=>LED7S<="00000111";
WHEN "1000"=>LED7S<="01111111";
WHEN "1001"=>LED7S<="01101111";
WHEN "1010"=>LED7S<="01110111";
WHEN "1011"=>LED7S<="01111100";
WHEN "1100"=>LED7S<="00111001";
WHEN "1101"=>LED7S<="01011110";
WHEN "1110"=>LED7S<="01111001";
WHEN "1111"=>LED7S<="01110001";
WHEN OTHERS=>NULL;
END CASE ;
END PROCESS;
END;
五、顶层文件
顶层文件如以下图:
图六仿真时序图:
图七
图8 结果分析:
由仿真时序图能够看出,当输入的密码不等于设定的密码时,如图8,A灯灭,B灯亮,蜂鸣器蜂鸣;当输入的密码等于设定的密码时,如图7,A灯亮,B灯灭,蜂鸣器不工作。

综上所述,所设计的系统完成了设计任务和要求。

三、实际测试
引脚对应
Setcode>chip=top; input Pin=17
inputcode>chip=top; input Pin=18
Setup>chip=top; input Pin=19
Start>chip=top; input Pin=21
open>chip=top; input Pin=22
reset>chip=top; input Pin=23
clk>chip=top; input Pin=83
louder>chip=top; output Pin=3
ledA>chip=top; output Pin=27
ledB>chip=top; output Pin=28
decl7s20>chip=top; output Pin=39
decl7s21>chip=top; output Pin=47
decl7s22>chip=top; output Pin=48
decl7s23>chip=top; output Pin=49
decl7s24>chip=top; output Pin=50
decl7s25>chip=top; output Pin=51
decl7s26>chip=top; output Pin=52
decl7s10>chip=top; output Pin=66
decl7s11>chip=top; output Pin=67
decl7s12>chip=top; output Pin=70
decl7s13>chip=top; output Pin=71
decl7s14>chip=top; output Pin=72
decl7s15>chip=top; output Pin=73
decl7s16>chip=top; output Pin=78
操作进程及实验现象
实验箱选择模式6,CLOCK0选择1Hz,将程序下载到实验箱中。

按键5为SETUP键,按下时能够设密码;键3为设密码键,每按下且为下降沿时加一,数码管显示设定的密码;按键6为START键,按下
时能够输密码;键4为输密码键,每按下且为下降沿时加一,数码管显示输入的密码;按键7为OPEN键,按下时,假设输入的密码不等于设定的密码时, A灯灭,B灯亮,蜂鸣器蜂鸣,假设输入的密码等于设定的密码时, A灯亮,B灯灭,蜂鸣器不工作。

按键8为复位键。

工作时维持复位键高电平,当密码犯错时,将复位键置于低电平,并切换为高电平,从头输入密码,led1显示为设定密码数字,led2为输入密码数字。

四、总结
通过本次VHDL实验设计,我对VHDL语言有了更进一步了解,本次实验我通过上网查阅资料,图书馆资料设计出了本次实验,也对max-plusⅡ软件利用有了进一步明白得。

相关文档
最新文档