VHDL专题--电子密码锁的设计
vhdl密码锁
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输出。
基于VHDL的电子密码锁[优质文档]
华南师范大学课程设计实验报告课程名称:可编程数字系统设计课程设计题目:电子密码锁*名:**学院:物理与电信工程学院专业:理综一班年级:2011学号:20112600104一、设计原理用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个部分组成:数字密码按键输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。
可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。
(1)密码锁输入电路包括时序产生电路、键盘检测电路、键盘消抖电路等几个小的功能电路。
(2)密码锁控制电路包括按键数据存储电路,恢复出厂密码、两次正确输入后可修改密码、密码核对,多次错误报警,清屏等几个小的功能电路。
(3)八段数码管显示电路主要将待显示数据的BCD码转换成数码器的八段显示驱动编码。
二、系统分析本次课程设计成功地设计了一个简单的数字电子密码锁,密码为 4 位。
将电子密码锁分为以下几个模块:按键消抖模块、密码锁逻辑控制模块和密码锁显示模块,实现了以下功能:(1)密码输入:KEY1按下一次,数码管上显示数字加一,相应位置输入密码加一(2)位置选择:KEY2按下一次,数码管选择位左移一位(3)密码确认:KEY3按下一次,比较外部输入密码与原密码,正确LED长亮,错误LED变暗,同时显示密码置0;(4)密码修改:正确输入两次密码后,按下KEY4一次,将当前输入设为新的密码;(5)清屏:KEY5按下一次,外部输入置0;(6)恢复出厂设置:连续按下KEY5三次后恢复出厂密码“1234”;三、程序设计1由于程序稍显庞大,故采取分层次设计的方法,顶层采用画图法设计,底层采用VHDL 语言进行设计。
顶层电路图如图1所示图1Xiao_dou模块为按键消抖模块,main为密码锁控制模块,yima为数码管显示译码模块。
Set_shuma端口为数码管段选端口,用于选择数码管。
Led端口为led灯端口,key1,key2,key3,key4,key5为五个按键接口,show_shuma端口为数码管位选选择端口。
基于VHDL的电子密码锁的设计(1)
《E D A仿真与实践实习》学院:信息科学与工程学院课题名称:硬件描述语言设计——基于VHDL的电子密码锁的设计班级:学生:学号:指导教师:1 引言在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
基于EDA技术设计的电子密码锁。
以其价格便宜、使用方便、安全性高、成本低、功耗低、易操作等优点,受到了人们的普遍关注。
而以可编程逻辑器件(FBDA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QuartusⅡ5.1开发软件等为设计工具设计的电子密码锁,由于其能够实现密码输入、密码校验、密码设置和更改等功能,因此,能够满足社会对安全防盗的需求。
本设计的各个模块由相应的VHDL程序具体实现,并在QuartusⅡ5.1环境下进行了整体电路的模拟仿真,最终实现“密码锁控制器设计”的要求。
2 设计内容和要求2.1 设计内容:题目:电子密码锁内容:设计一个4位串行数字锁。
(1)开锁代码为4位二进制,当输入代码的位数与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮一个指示灯。
否则进入“错误”状态,并发出报警信号。
(2)锁内的密码可调,且预置方便,保密性好。
(3)串行数字锁的报警由点亮一个灯,直到按下复位开关,报警才停下。
此时,数字锁又自动等待下一个开锁状态。
要求:(1)通过查阅相关技术资料,详细描述电子密码锁的基本原理。
(2)编写电子密码锁的Verilog HDL或VHDL程序,并仿真编译下载验证。
(3)给出完整的系统顶层模块图与波形仿真图。
3 设计分案密码锁控制器是硬件与软件的结合。
根据设计要求,决定以FBDA芯片和VHDL语言设计此电子密码锁。
《基于VHDL语言和FPGA的电子密码锁》范文
《基于VHDL语言和FPGA的电子密码锁》篇一一、引言随着科技的发展,电子密码锁已逐渐取代传统的锁具,成为了安全领域的重要组成部分。
而作为电子密码锁核心技术之一的FPGA(现场可编程门阵列)技术,以及VHDL语言编程的灵活性,更是对密码锁设计起到了重要的推动作用。
本文旨在详细探讨基于VHDL语言和FPGA的电子密码锁的设计与实现。
二、VHDL语言与FPGA概述VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述电子系统的结构和行为。
而FPGA则是一种可编程逻辑器件,其内部由许多可配置的逻辑单元组成,通过编程可以实现各种复杂的数字电路功能。
将VHDL语言与FPGA相结合,可以实现电子密码锁的高效、灵活和可定制的设计。
三、电子密码锁的设计要求在基于VHDL语言和FPGA的电子密码锁设计中,首先需要明确设计要求。
这些要求包括:高安全性、易于使用、良好的扩展性以及低成本等。
此外,密码锁应能抵抗各种常见的攻击方式,如暴力破解等。
四、基于VHDL的密码锁设计与实现基于VHDL语言的电子密码锁设计主要分为几个模块:密码输入模块、解码模块、控制模块和输出模块等。
密码输入模块负责接收用户输入的密码;解码模块对输入的密码进行解码,判断其是否正确;控制模块根据解码结果控制输出模块的开关状态;而整个系统则由FPGA实现。
在VHDL编程中,需要详细描述各个模块的功能、接口以及它们之间的通信方式。
例如,密码输入模块应能接收一定长度的密码输入,并将其传递给解码模块。
解码模块则根据预设的算法对密码进行解码,并将结果传递给控制模块。
控制模块根据解码结果控制输出模块的开关状态,以实现密码锁的开启或关闭。
五、FPGA的实现与优化在FPGA上实现电子密码锁时,需要利用FPGA的编程工具进行编程和配置。
首先,将VHDL代码编译成可在FPGA上运行的二进制代码;然后,将二进制代码下载到FPGA中,实现对电子密码锁的硬件配置。
VHDL电子密码锁
设计一个6位并行(或串行)电子密码锁,要求当输入的密码与锁内的密码一致时,,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码可由用户自行设置。
设计要求:1分析设计任务,拟定多种设计方案,根据实验条件,选定其中一种方案绘制系统框图和设计流程。
2设计相关电路并编写VHDL程序。
3对设计电路进行功能仿真,分析仿真波形。
4对设计电路要进行编程下载,记录结果。
5撰写设计报告一份。
设计方案(1)采用文本输入法,用一个源程序控制整个电路,然后利用顶层文件将它们综合起来,最终使其具有电子密码锁的功能。
(2)采用文本和原理图两种方法设计,密码锁的主体部分(包括密码设置、密码修改、密码检测、开锁电路、执行电路等部分。
)用文本设计法完成,当主体部分完成后,将其打包后,再用原理图输入法使各个部分综合起来。
由以上两种方案分析,方案(1)全部采用文本输入法,在顶层设计中比较杂,一旦出现错误,将不易更改,程序调试耗时会比较长。
方案(2)采用了文本和原理图两种方法进行设计,主体部分完成后,再用另一种方法设计译码部分,最后两部分综合,调试起来会比较方便。
综合以上原因,从实现难易,误差大小以及最终结果等各方面考虑,选择方案(2)来完成该实验。
根据方案(2)中密码锁的实现原理,本次设计方案可分为三个模块来实现其功能,即消抖电路、消抖同步电路、核心电路几个单元,在核心电路中又包括密码设置电路、密码输入电路、密码锁控制电路和密码锁显示电路四部分组成。
控制部分还需包含密码修改、密码检测、开锁电路、执行电路等部分。
分别用VHDL对其进行编程,实现消抖电路、消抖同步电路、核心电路等。
然后对其打包后,利用原理图输入法使各个部分综合起来。
系统结构消除抖动模块Library ieee;Use ieee.std_logic_1164.all; Entity fen isPort(clk:in std_logic;Cp :out std_logic);End fen;Architecture fen_arc of fen is BeginProcess(clk)Variable cnt:integer range 0 to 999; BeginIf clk'event and clk='1'thenIf cnt=9 thenCnt:=0;Cp<='1';ElseCnt:=cnt+1;Cp<='0';End if;End if;End process;End fen_arc;消抖同步模块library ieee;use ieee.std_logic_1164.all;entity xiaopro isport(a,clk2:in std_logic;b:out std_logic);end xiaopro;architecture xiao_arc of xiaopro is signal tmp1:std_logic;beginprocess(clk2,a)variable tmp3,tmp2:std_logic;beginif clk2'event and clk2='0'thentmp1<=a;tmp2:=tmp1;tmp3:=not tmp2;end if;b<=tmp1 and tmp3 and clk2;end process;end xiao_arc;逻辑功能模块Library ieee;Use ieee.std_logic_1164.all;Entity cornaa2 isPort(clk,k1,k0,clr,load:in std_logic;lt:inout std_logic;lamp:out std_logic_vector(5 downto 0);lf,alm:out std_logic);end cornaa2;architecture corn_arc of cornaa2 issignal shift,lock:std_logic_vector(5 downto 0); signal lam:std_logic_vector(5 downto 0); signal la:std_logic;beginprocess(clk,clr)beginIf clr='0'thenla<='0';elsif clk'event and clk='1' thenif load='0' thenla<='1';end if;end if;end process;process(clk,clr)variable a:integer range 0 to 6;beginIf clr='0' thenlam<="111111";Shift<="000000";a:=0;lt<='1';lf<='1';alm<='0';Elsif clk'event and clk='1'thenif la='1' thenif k1='0'thenlock<='1'&lock(5 downto 1);lam<='0'&lam(5 downto 1);elsif k0='0'thenlock<='0'&lock(5 downto 1);Lam<='0'&lam(5 downto 1);end if;elsif lt='1' thenif a/=6 thenif k1='0' thenShift<='1'&shift(5 downto 1);lam<='0'&lam(5 downto 1);a:=a+1;elsif k0='0' thenShift<='0'&shift(5 downto 1);lam<='0'&lam(5 downto 1);a:=a+1;end if;elsea:=0;if shift=lock thenlt<='0';elself<='0';alm<='1';end if;end if;end if;end if;end process;lamp<=lam;end corn_arc;密码锁的原理图。
VHDL课程设计—数字密码锁电路
VHDL课程设计——数字密码锁班级:计052—2班学号:200525502204姓名:杨彦涛指导老师:沈春华日期:2007-1一、设计要求设计一个简易的数字密码锁,该锁应在收到3位与规定码相符的十进制数码时打开,使相应的指示灯点亮;若收到的代码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。
二、系统功能描述1、系统接通电源后,首先按动setup键后方投入运行。
运行时标志开门的指示灯和报警灯、铃皆不工作,系统处于安锁状态。
2、开锁代码是3位十进制数,可以通过系统预先设定。
开锁时输入代码不足三位或超过三位均不能开锁。
3、开锁程序由设计者确定,用户必须严格执行所规定的程序,方可开锁。
4、开锁代码和程序正确,表示数字锁打开的指示灯亮。
5、允许用户在开锁过程中有1次错误(输入代码错误或开锁程序错误),只要出错,表示错误的指示灯必定点亮。
如果有2次错误,则报警器——喇叭名叫,以示情况异常。
6、开锁程序为:(1)按启动键(start)启动开锁程序,此时系统内部分处于初始状态。
(2)依次键入十进制码。
(3)按开门键(open)准备开门。
若按上述程序执行且拨号正确,则开门继电器工作,lock=1;若密码输入错误或未按上述程序执行,则按动开门键(open)后报警灯亮,红灯亮。
(4)开锁事务处理完毕后,应将门关上,按set键,使系统重新进入安锁状态。
(若在报警,按set或start均不起作用,应另用一内部的I_setup键才能使系统进入安锁状态)。
(5)若按错号码,可在按confirm键之前按start键重新启动开锁程序。
7、号码0-9,start,open,setcode,confirm均用按键产生。
8、alarm表示警报,red表示红灯,lock表示开锁信号。
三、密码锁控制器的MDS图及其功能说明。
当系统处于s0状态时,为安锁状态按start 进入开锁程序s2,输入代码确定,按open 进入s2状态,如果输入正确,进入s3状态并输出gree=1; .此时按setup 可以重新进入安锁状态。
vhdl密码锁
vhdl密码锁密码锁设计⼀、课题描述:⽤于模仿密码锁的⼯作过程。
完成密码锁的核⼼控制功能。
⼆、功能要求:设计⼀个密码锁,平时处于等待状态。
管理员可以设置或更该密码。
如果不预置密码,密码缺省为“999999”。
⽤户如果需要开锁,按相应的按键进⼊输⼊密码状态,输⼊6位密码,按下确定键后,若密码正确,锁打开,若密码错误,将提⽰密码错误,要求重新输⼊,三次输⼊都错误,将发出报警信号。
报警后,只有管理员作相应的处理才能停⽌报警。
⽤户输⼊密码时,若输⼊错误,在按下确定键之前,可以通过按取消键重新输⼊。
正确开锁后,⽤户处理完毕后,按下确定键,系统回到等待状态。
系统操作过程中,只要密码锁没有打开,如果60秒没有对系统操作,系统回到等待状态。
注意:输⼊按键信号时必须⼀个按键⼀个按键输⼊,不得6个按键⼀起输⼊。
三、设计流程:1.结构框图:①按键输⼊;②复位(设置缺省密码);③等待状态④⼯作状态⑤修改密码⑥提醒错误及报警⑦开锁⑧恢复等待2.模块设计:★控制模块:实现输⼊输出,实现等待⼯作的转换,实现开锁及报警;★⽐较模块:⽐较输⼊密码与正确密码★寄存模块:存放密码★计数及使能模块:(1)输⼊个数为6,多于⽆效⾃动忽略;(2)60s的空闲时间,⽆操作返回等待;(3)错误次数为3(4)进⼊⼯作状态,是能段即打开,直到进⼊等待。
四、具体实现:★控制模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ctrl isport( change,vers,keysign : in std_logic;ok,cancel : in std_logic;clk : in std_logic;result : in std_logic;wt : in std_logic;enable : out std_logic);end ctrl;architecture ctrl_behave of ctrl issignal sec : integer range 0 to 60;beginprocess(clk)beginenable<='1';end if;if (wt='1' and result='1') thenenable<='0';sec<=0;end if;if (change='0' and vers='0' and keysign='0' and ok='0' and cancel='0') then sec<=sec+1; if (sec=59) thenenable<='0';sec<=0;end if;elsesec<=0;end if;end if;end process;end ctrl_behave;★⽐较模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ver isport( dt1,dt2,dt3,dt4,dt5,dt6 : in std_logic_vector(3 downto 0); cd1,cd2,cd3,cd4,cd5,cd6 : in std_logic_vector(3 downto 0); vers : in std_logic;ready : in std_logic;clk : in std_logic;stopalarm : in std_logic;en : in std_logic;result : out std_logic;wrong : out std_logic;alarm : out std_logic);end ver;architecture ver_behave of ver issignal alarmnum : integer range 0 to 3;signal vering : std_logic;signal wronging : std_logic;beginprocess(clk)beginif (en='0') thenresult<='0';end if;if (stopalarm='1') thenalarmnum<=0;end if;if (wronging='1') thenwronging<='0';vering<='1';end if;if (alarmnum<3) thenalarm<='0';elsealarm<='1';end if;if (vers='1') thenvering<='1';end if;if (vering='1') thenif (ready='1') thenif (cd1=dt1 and cd2=dt2 and cd3=dt3 and cd4=dt4 and cd5=dt5 and cd6=dt6) then result<='1';elseresult<='0';wronging<='1';if (alarmnum<3) thenalarmnum<=alarmnum+1;end if;end if;vering<='0';end if;end if;elsif (clk'event and clk='0') thenif (wronging='1') thenwrong<='1';elsif (wronging='0') thenwrong<='0';end if;end if;end process;end ver_behave;★寄存模块:library ieee;entity code isport( dt1,dt2,dt3,dt4,dt5,dt6 : in std_logic_vector(3 downto 0);change : in std_logic;ready : in std_logic;ok : in std_logic;clk : in std_logic;result : in std_logic;reset : in std_logic;wt : out std_logic;cd1,cd2,cd3,cd4,cd5,cd6 : out std_logic_vector(3 downto 0) ); end code;architecture code_behave of code issignal alarmnum : integer range 0 to 3;signal changing : std_logic;signal changed : std_logic;signal wting : std_logic;beginprocess(clk)beginif (clk'event and clk='1') thenif (ok='1' and changing='0' and result='1') thenwting<='1';elsewting<='0';end if;if (reset='1') thencd1<="1001";cd2<="1001";cd3<="1001";cd4<="1001";cd5<="1001";cd6<="1001";end if;if (change='1') thenchanging<='1';end if;if (changing='1') thenif (ready='1') thenif (result='1') thencd1<=dt1;cd2<=dt2;end if;changing<='0';end if;end if;elsif (clk'event and clk='0') thenif (wting='1') thenwt<='1';elsewt<='0';end if;end if;end process;end code_behave;★计数及使能模块:1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyboard isport( a3,a2,a1,a0 : in std_logic;a : out std_logic_vector(3 downto 0);k : in std_logic;keysign : out std_logic;clk : in std_logic);end keyboard;architecture keyboard_behave of keyboard is beginprocess(clk)beginif (clk'event and clk='0') thena(0)<=a0;keysign<=k;end if;end process;end keyboard_behave;2library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyin isport( en : in std_logic;clk : in std_logic;a : in std_logic_vector(3 downto 0);keysign : in std_logic;ok : in std_logic;cancel : in std_logic;ver : in std_logic;ready : out std_logic;dt1,dt2,dt3,dt4,dt5,dt6 : out std_logic_vector(3 downto 0) ); end keyin;architecture keyin_behave of keyin issignal count : integer range 0 to 7;signal cready : std_logic;beginprocess(en,clk,keysign)beginif (en='1') thenif (clk'event and clk='1') thenif (keysign='1' and count<6) thencount<=count+1;if (count=0) thenelsif (count=1) thendt2<=a;elsif (count=2) thendt3<=a;elsif (count=3) thendt4<=a;elsif (count=4) thendt5<=a;elsif (count=5) thendt6<=a;end if;end if;if (ver='1') thencount<=0;end if;if (cancel='1') thendt2<="1111";dt3<="1111";dt4<="1111";dt5<="1111";dt6<="1111";end if;if (ok='1') thencount<=0;cready<='1';elsecready<='0';end if;elsif (clk'event and clk='0') then if (cready='1') thenready<='1';elseready<='0';end if;end if;end process;end keyin_behave;‘※各个模块与设计存在出⼊,但基本要求都达到,主要是⼩组分⼯时,没有能完全按照模块分块设计※计数器模块分散开没有单独形成模块※具体信号意义见仿真Block图:五、仿真:Reset:重置(缺省)A:输⼊k:判断有效输⼊OK:确认Cancel:取消Ver:进⼊⼯作(⽐较)Change:修改密码Clk:时钟信号Result:开锁En-out:使能Wrong:报错Alarm:报警Stopalarm:停⽌操作(管理员使⽤)1.验证缺省密码为999999(reset键);2.验证输⼊错误取消输⼊,重新输⼊(cancel键);3.验证60秒⽆操作⾃动返回等待界⾯(en-out和result归零);4.验证有效按键“k”,只有k为⾼电平有效;5.验证⽤户操作完成,再次按ok键,⾃动返回等待键;6.验证输⼊密码错误发出提⽰信号,连续三次输⼊错误,发出报警信号,只有按下stopalarm才能停⽌。
VHDL电子密码锁课程设计
VHDL电子密码锁课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本语法和程序结构,掌握利用VHDL进行数字电路设计的基本方法。
2. 学生能够描述电子密码锁的工作原理,了解其电路组成和功能模块。
3. 学生能够运用所学知识,设计并实现一个简单的电子密码锁程序。
技能目标:1. 学生能够运用VHDL语言进行代码编写,培养编程实践能力。
2. 学生通过课程设计,提高问题分析、解决能力,培养创新思维和团队协作能力。
3. 学生能够运用仿真软件对设计的电子密码锁进行功能验证,提高实际操作能力。
情感态度价值观目标:1. 学生通过课程学习,培养对电子技术和数字电路设计的兴趣,提高学习积极性。
2. 学生在课程实践中,树立正确的工程观念,认识到技术发展对社会进步的重要性。
3. 学生在团队协作中,学会尊重他人、沟通协作,培养良好的团队合作精神。
本课程旨在帮助学生将理论知识与实践相结合,通过电子密码锁的设计与实现,提高学生的编程能力、问题解决能力和团队协作能力,培养学生对电子技术的兴趣和正确价值观。
二、教学内容1. VHDL语言基础:包括VHDL的基本语法、数据类型、运算符、信号与变量、进程和顺序语句等,对应教材第1-3章内容。
2. 数字电路设计方法:介绍组合逻辑电路和时序逻辑电路的设计方法,包括触发器、计数器等基本电路的设计,对应教材第4-5章内容。
3. 电子密码锁原理:分析电子密码锁的工作原理,包括密码设置、验证机制和开锁逻辑等,对应教材第6章实例分析部分。
4. VHDL代码编写:根据电子密码锁的原理,指导学生进行VHDL代码编写,实现密码设置、验证和开锁功能,对应教材第7章编程实践部分。
5. 功能仿真与验证:教授学生使用仿真软件进行电子密码锁的功能验证,确保设计的正确性,对应教材第8章仿真技术部分。
6. 课程设计与实践:安排课程设计任务,指导学生分组进行电子密码锁的设计、编程、仿真和调试,培养学生实践能力和团队协作精神。
基于VHDL的多功能电子密码锁设计
学位论文诚信声明书本人郑重声明:所呈交的学位论文(设计)是我个人在导师指导下进行的研究(设计)工作及取得的研究(设计)成果。
除了文中加以标注和致谢的地方外,论文(设计)中不包含其他人或集体已经公开发表或撰写过的研究(设计)成果,也不包含本人或其他人在其它单位已申请学位或为其他用途使用过的成果。
与我一同工作的同志对本研究(设计)所做的任何贡献均已在论文中做了明确的说明并表示了致谢。
申请学位论文(设计)与资料若有不实之处,本人愿承担一切相关责任。
学位论文(设计)作者签名:日期:学位论文知识产权声明书本人完全了解学校有关保护知识产权的规定,即:在校期间所做论文(设计)工作的知识产权属西安科技大学所有。
学校有权保留并向国家有关部门或机构送交论文的复印件和电子版。
本人允许论文(设计)被查阅和借阅;学校可以公布本学位论文(设计)的全部或部分内容并将有关内容编入有关数据库进行检索,可以采用影印、缩印或其它复制手段保存和汇编本学位论文。
保密论文待解密后适用本声明。
学位论文(设计)作者签名:指导教师签名:年月日论文题目:基于VHDL的多功能电子密码锁设计专业:本科生:(签名)___________指导教师:(签名)___________摘要随着社会的发展,安全防盗受到人们的重视。
而锁一直都是人们的防盗首选。
首先需能防盗且要实用方便。
在现今社会技术环境下电子密码锁已成一种趋势。
本设计采用FPGA 设计一个具有6位密码的电子密码锁并具有火灾报警和数字时钟功能。
论文的硬件部分以EP1C3T144C8芯片为核心的开发板、4*4矩阵键盘、数码管、发光二极管、蜂鸣器等组成。
软件以VHDL语言为基础在FPGA平台上设计。
电子密码锁由分频模块、消抖模块、键盘扫描模块、密码控制模块、密码显示模块组成,实现了密码清除、密码修改、暗文输入、明文输入、上锁、解锁、错误报警的功能;火灾报警模块具有温度显示、报警功能;数字时钟模块显示时钟并可调。
VHDL密码锁实验报告
华南师大学实验报告学生: 小澎学号: ***********_专业: 通信工程年级班级: 11级电通6C课程名称: 可编程数字系统实验项目: VHDL设计一密码锁试验时间: 2013年05月18日****: **一、课程设计目的熟悉EDA工具,掌握用VHDL语言进行数字系统设计的基本方法和流程,提高工程设计实践能力。
二、设计任务设计一密码锁,用VHDL语言描述,用QuartusII工具编译和综合,并在实验板上实现,撰写实验报告。
数字锁即电子密码锁,锁有预置密码,如果输入代码与锁密码一致,锁被打开;否则,应封闭开锁电路,若多次输入错误密码,应发出报警信号。
三、功能要求与技术指标本设计设计一个4 位数字锁,并验证其操作。
1、基本功能:(1 )开锁密码为 4 位十进制数,通过按钮输入密码,输入的密码在4个数码管上显示,若与锁预置的密码一致,输出开锁信号(以点亮一个LED灯表示开锁)。
(2)按钮开关输入须消抖处理。
2、扩展功能:(1)用户可以设置锁的密码;(2)若输入密码三次不正确,输出报警信号,报警信号可以通过闪烁LED或某个数码管上小数点指示。
(3)设置一个复位按键,忘记密码后可通过该复位按键恢复出厂原始密码,如原始密码为“1234”;(4)其它实用功能。
四、设计原理在数字电路设计中,自顶向下设计方法的主要思想是对数字系统进行划分,将复杂的设计原理简化为相对简单的模块设计,不同的模块用来完成数字系统中某一部分的具体功能。
此密码锁的设计可以分为以下几个模块:密码锁原理框图五、系统分析1、根据原理框图:系统大致可分为时钟模块,显示模块,控制模块。
时钟模块:密码锁的工作时钟由外部晶振提供,时钟频率为50Mhz。
对CLK进行分频输出三路时钟CLK1Khz,CLK1,CLK2,频率分别为1Khz,5hz,1hz。
由此,时钟分频模块原理框图如下:显示模块:数码管动态扫描模块以及数码管显示模块的时钟频率分别由CLK1Khz 和CLK提供。
电子密码锁vhdl课程设计
电子密码锁vhdl课程设计一、课程目标知识目标:1. 学生理解VHDL语言的基本结构和编程原理;2. 学生掌握利用VHDL进行电子密码锁设计的方法;3. 学生了解电子密码锁的工作原理及其在现实生活中的应用。
技能目标:1. 学生能够运用VHDL语言编写简单的程序;2. 学生能够独立完成电子密码锁的VHDL代码编写、仿真与验证;3. 学生具备分析电子密码锁程序问题及优化代码的能力。
情感态度价值观目标:1. 学生培养对电子信息技术领域的兴趣和热情;2. 学生形成良好的编程习惯,注重团队协作,善于沟通交流;3. 学生认识到电子密码锁在保护信息安全中的重要性,增强信息安全意识。
课程性质:本课程为实践性课程,以项目为导向,结合理论知识与实际操作,培养学生的编程能力和实际应用能力。
学生特点:学生为高年级电子信息技术专业,具备一定的电子基础和编程能力,对实际应用有较高的兴趣。
教学要求:教师需注重理论与实践相结合,引导学生主动参与,鼓励学生思考、提问、实践,提高学生的综合运用能力。
同时,关注学生的个体差异,给予个性化指导,确保每个学生都能达到课程目标。
通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。
二、教学内容1. VHDL语言基础:回顾VHDL的基本语法、数据类型、运算符、信号与变量等基础知识,确保学生掌握VHDL编程的基本框架。
相关教材章节:第一章至第三章2. 电子密码锁原理:讲解电子密码锁的工作原理、基本构成和设计方法,使学生了解电子密码锁在实际应用中的技术要求。
相关教材章节:第六章3. VHDL编程实践:a) 电子密码锁的VHDL代码编写:引导学生根据电子密码锁原理,编写相应的VHDL代码;b) 代码仿真与验证:教授学生如何使用仿真工具进行代码测试,确保程序的正确性和可靠性。
相关教材章节:第四章、第五章4. 程序优化与调试:分析电子密码锁程序中可能存在的问题,教授学生如何对程序进行优化和调试。
基于VHDL的电子密码锁设计
中图分 类号 :P 9 T31
文献标识 码 : B
文章 编号 :6 1 72(0 090 1.3 17 - 9. 1).130 4 2
Ab t c: o gwi ed v lp n f  ̄c o i c n lg , lcrn cp s wo dlc a etef c o f sr tAln t t e eo me t e t nct h oo y ee t i a s r kh v m d no a hh o r e o o h i
ue e D vl met iiF G t mu t n ols X L SI, ip s od ok a elh8 u s t Ad e p n k P A,e i li o iMA P U t s a w r c sl i c- E h e o ts h s ao t I h s l h t lg e 1
r 、 elw ott elw o rls eo eains l h rcei is n n i t c s、 p we st p rt i ec aa trs e ds o . y t h o h o o h o mp t a o
Ke wo d : DA;M AXP US I ;VHDL;P swo d1  ̄k y rs E L I as r xc .
基
于
< 工 0
r
的 电
子
D s g f E e t o i a s o d L c a e n V D e i n o l c r n c P s w r ok B s d o H L
密
码
锁
韩团军
H r un n a aj t T u ( 陕西理工学院, 陕西 汉 中 7 30 ) 2 00 (h nx iesy f ehooy hax azo g 2 00 S ani vri T c lg,S ani nhn 30 ) Un to n H 7
基于vhdl语言的电子密码锁设计说明书
EDA技术课程设计论文题目基于VHDL语言的电子密码锁设计课程名称 EDA技术实训院(系)电子通信工程学院专业班级学生姓名学号设计地点 EDA实验室指导教师设计起止时间: 年月日至年月日目录1 绪论 (3)1.1电子密码锁的功能要求 (3)1.2总体模块设 (3)1.3顶层文件设计 (4)2 各功能模块的具体实现 (5)2.1拨码输入模块 (5)2.2寄存器 (6)2.3密码比较模块 (8)2.4显示模块 (10)3 系统仿真 (15)4 硬件测试 (16)5实践心得及体会 (17)绪论1.1电子密码锁的功能要求1、设计六位密码(每位均可以是0~9任意数字)的电子密码锁,用四个拨码开关(k1~k4)输入,并通过七段数码管显示输入密码。
2、密码验证:按键设置验证开始,输入密码后, 密码正确时开锁,绿灯亮,红灯灭,表示开锁成功;当密码输入错误时,绿灯灭,红灯亮,表示开锁失败。
3、密码更改:密码验证正确后可以更改,并设置按键控制更改密码功能。
4、密码清除:密码输入过程中可以清除,并重新输入。
5、初始密码:预设初始密码为123456。
1.2总体模块设计通过拨码输入密码,送到密码校验电路,如果校验正确开锁,并执行显示在LED灯上,同时密码校验正确可以进行密码修改。
图11.3顶层文件设计本设计采用EDA技术和VHDL语言设计了一种按键输入密码并数码管回显,当输入正确密码时轰动绿灯亮、红灯熄灭表示开锁,而当输入错误密码时,红灯亮、绿灯熄灭表示关锁。
根据系统设计要求,系统设计采用自顶向下的设计方法。
顶层设计采用原理图设计方式,系统的整体组装设计原理图如图2所示。
它由拨码输入、寄存器、密码比较和显示灯四个模块组成。
其顶层文件设计如图:图2各功能模块的具体实现2.1拨码输入模块1、拨码输入模块包括设置密码并读取、输入密码、系统复位功能。
该模块中我们设置了6个按键,各个按键的功能分别为:按键1、2、3、4分别对应4位二进制密码输入、键5为密码确认键、键6为系统复位和密码读取按键。
VHDL数字密码锁课程设计
VHDL数字密码锁课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本语法和程序结构,掌握数字密码锁的基本原理。
2. 学生能运用VHDL语言编写与数字密码锁相关的程序代码,实现基本功能。
3. 学生了解数字密码锁在实际工程中的应用,理解其重要性。
技能目标:1. 学生能运用所学知识,设计并实现一个简单的数字密码锁系统。
2. 学生通过实际操作,提高编程能力,培养解决实际问题的能力。
3. 学生能通过小组合作,提高团队协作和沟通能力。
情感态度价值观目标:1. 学生培养对电子设计及其编程的兴趣,激发创新意识。
2. 学生认识到科技发展对社会的重要性,增强社会责任感。
3. 学生在团队合作中,学会尊重他人,培养良好的沟通和协作精神。
课程性质:本课程为实践性课程,以培养学生的动手能力和实际编程技能为主。
学生特点:学生具备一定的电子基础和编程能力,对新鲜事物充满好奇心。
教学要求:教师需引导学生将理论知识与实际应用相结合,注重培养学生的实践能力和团队合作精神。
在教学过程中,将目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 数字密码锁原理介绍:包括密码锁的工作机制、安全性分析等。
相关教材章节:第五章“数字密码锁设计原理”2. VHDL语言基础:回顾VHDL的基本语法、程序结构、数据类型和运算符等。
相关教材章节:第三章“VHDL语言基础”3. VHDL编程实践:a) 设计数字密码锁的实体和端口b) 编写行为描述和结构描述代码c) 仿真与调试相关教材章节:第四章“VHDL编程实例”和第六章“数字密码锁设计实例”4. 数字密码锁功能模块设计:a) 密码设置与修改b) 密码验证c) 锁定与解锁功能相关教材章节:第六章“数字密码锁功能模块设计”5. 数字密码锁系统集成与测试:a) 将各功能模块整合到一起,实现完整密码锁系统b) 进行系统测试,验证系统功能及性能相关教材章节:第七章“数字密码锁系统集成与测试”6. 课程项目实践:分组进行数字密码锁项目设计,培养学生的团队合作能力和实际操作技能。
一种基于VHDL的电子密码锁的设计与实现
一种基于VHDL的电子密码锁的设计与实现阐述了一种基于VHDL设计一种数字电子密码锁的原理和方法,所用EDA开发工具为ISE,仿真工具是Modelsim SE该密码锁具有高安全性、低成本、低功耗、操作简单等特点。
随着社会的发展和人们生活水平的提高,人们的安全意识也逐步加强。
密码锁以其安全性高、成本低、功耗低、易操作等优点受到越来越多人的欢迎。
VHDL语言描述能力强,覆盖面广,抽象能力强,所以采用VHDL建立硬件模型。
Modelsim是业界最优秀的HDL语言仿真调试环境,提供最佳的仿真性能和调试特性,已经成为众多FPGA(Field Programable Gate Array)和ASIC(Application Specific Integrated Circuit)厂商首选的仿真调试工具。
一、功能描述密码锁的设计主要达到以下五个功能:(1)数码输入:按下一个数字键,其对应的数字就显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。
此处密码设定为4位,在实际中为了增加安全性,可以设置为更多位。
(2)数码清除:当按下清除键时,清除前面输人的所有值,并显示为“0000”。
(3)密码激活:按下此键,将前面输入的四位数字设为密码,密码锁上锁。
4)密码更改:将输人的值作为新的密码。
5)电锁解除:按下电锁解除键,系统会将输人与密码进行检查核对,如果正确,电锁开启,否则打不开锁。
二、设计思路电子密码锁主要由数字密码输入电路、密码锁控制电路和密码锁显示电路三部分组成。
原理如图1所示,key board为键盘输入电路,ctrl为密码锁控制电路,采用七段数码管显示。
在keyboard模块中,elk为系统原始时钟脉冲,key-in为按键输入信号,elkscan是键盘扫描序列,仿真时用;data-n为数字输出,data-f为功能输出,flag-n为数字输出标志,flag-f为功能输出标志,elk-ctr为控制电路时钟信号,enlock为上锁信号,data-bed(15:0)是4位十进制数码的bcd码形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL 专题--------电子密码锁一、设计要求:设计一个简单的数字电子密码锁,密码为4位。
功能:1、 密码输入:每按下一个键,要求在数码管上显示,并依次左移;2、 密码清除:清除密码输入,并将输入置为”0000”;3、 密码修改:将当前输入设为新的密码;4、 上锁和开锁。
二、 电路组成:为达到以上功能,可将电子密码锁分为以下几个模块: 1、键盘接口电路: 键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储。
2、电锁控制电路: 数字按键输入、存储及清除。
功能按键的设计。
密码清除、修改与存储。
电锁的激活与解除。
3、输出显示电路BCD 译码、动态扫描电路。
三、功能电路的设计:1、键盘接口电路:矩阵式键盘工作原理: 矩阵式键盘是一种常见的输入装置,在计算机、电话、手机、微波炉等各工电子产品中被广泛应用。
如图所示为一3×4矩阵式键盘。
矩阵式键盘以行、列形式排列,图中为4行3列,键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0的状态,键盘的扫描可以以行扫或列扫方式进行,图中为行扫方式,KEYR3—KEYR0为扫描信号,其中的某一位为0即扫描其中的一行,具体见表1-1. 键盘扫描信号KEYR3与第一行相连,KEYR2与第二行相连,依此类推。
很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。
在扫描的过程中,当有键按下时,对应的键位就为逻辑0状态,从而从KEYC2..0读出的键值相应列为0.具体情况如表1-2所示: 若从KEYC2..0读出的值全为1时,表示没有键被按下,则不进行按键的处理。
如果的键被按下,则将KEYC2..0读出的送至键盘译码电路进行译码。
表1-2 键盘扫描与其对应的键值的关系时序产生电路: 在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。
本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。
Ø 时序产生电路举例:有如下VHDL 程序,请分析其输出结果: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ;ENTITY free_counter IS PORT ( CLK : IN STD_LOGIC ;CLK_A : OUT STD_LOGIC ; CLK_B : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ) ;END free_counter ;ARCHITECTURE a OF free_counter ISSIGNAL Q : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINPROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= Q + 1; END IF;END PROCESS;KEYR3..0 KEYC2..0 对应的按键011 1 101 2 0111110 3 0114 1015 10111106011 7 101 8 1101 110 9 011 0101 *1110 110 #CLK_A <= Q(1) ;CLK_B <= Q(4 DOWNTO 3) ;END a ;分析:首选信号Q建立一个9位自由计数器,对输入主时钟进行降频处理;使用CLK_A<=Q(1)语句,取得一个脉冲波形,对主时钟进行2分频,其值为0、1、0、1。
;使用CLK_B<=Q(4 DOWNTO 3)语句,取得一脉冲序列,依次为00、01、10、11、00.。
;Ø键盘扫描电路:目标:提供键盘扫描信号,即表1-1中的KEYR3..0,变化顺序依次为0111、1011、1101、1110.。
依次重复出现。
程序清单:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL ;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;ENTITY scan ISPORT (CLK : IN STD_LOGIC ;CLK_SCAN : OUT STD_LOGIC_VECTOR (3 downto 0));END scan ;ARCHITECTURE a OF scan ISSignal S : STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL Q: STD_LOGIC_VECTOE(3 DOWNTO 0);BeginPROCESS (Clk)BeginIF CLK'Event AND CLK='1' thenQ <= Q+1;S :=Q(3 DOWNTO 2);END IF;END PROCESS;---排错!SCAN_OUT<= "1110" WHEN S=0 ELSE"1101" WHEN S=1 ELSE"1011" WHEN S=2 ELSE"0111" WHEN S=3 ELSE"1111";END a ;说明:程序中,S信号是用来产生扫描信号的四个状态,Q是为了对输入主时钟进行降频处理。
Ø键盘消抖电路:因为按键大多是机械式开关,在开关切换的瞬间会在接解点出现来回弹跳的现象,其现象可用图1-2表示:由图可见,虽然只是按了一次键,实际产生的按键信号却不只跳动一次,经过取样信号的检查后,将会造成误码判,认为是按了两次键。
如果调整取样频率,可以发现抖现象得到了改善。
按键信号取样信号取样结果调整取样频率后的情况如下:Ø程序清单:LIBRARY ieee;USE ieee.std_logic_1164.ALL;LIBRARY altera;USE altera.maxplus2.ALL;ENTITY debouncing ISPORT(d_in, clk : IN STD_LOGIC;dd1, dd0, qq1, qq0 : OUT STD_LOGIC ;d_out,d_out1 : OUT STD_LOGIC);END debouncing ;ARCHITECTURE a OF debouncing ISsignal vcc, inv_d : std_logic ;signal q0, q1 : std_logic ;signal d1, d0 : std_logic ;BEGINvcc <= '1' ;inv_d <= not d_in ;dff1 : dff PORT MAP (d =>vcc , q => q0 , clk => clk, clrn => inv_d , prn => vcc);dff2 : dff PORT MAP (d =>vcc , q => q1, clk => clk, clrn => q0 , prn => vcc);process (clk) begin if clk'event and clk='1' then d0 <= not q1; d1 <= d0; end if ; end process ;dd0 <= d0; dd1 <= d1; qq1 <= q1; qq0 <= q0; d_out <= not (d1 and not d0);d_out1 <= not q1 ;END a;Ø 键盘译码电路从前面所述的键盘扫描电路的输出可以看出,扫描得到的信号规律性不强,例如数字键主要用来输入数字,但键盘扫描输出无法拿来直接使用,必须对其进行译码才能使用。
如表所示,只要使用case …when 或when … else 语句,便可完成设计。
键盘译码程序清单:LIBRARY ieee;USEieee.std_logic_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ;--****************************************************** ENTITY KEYBOARD_DEC1 IS PORT ( clk : IN STD_LOGIC ; CLK_KEYBOARD : IN STD_LOGIC_VECTOR (1 downto 0);C: IN STD_LOGIC_VECTOR (2 downto 0); --key code after debounceKEYR3..0KEYC2..0 对应的按键译码输出 功能 011 1 0001 数码输入 101 2 0010 数码输入 0111110 3 0011 数码输入 0114 0100 数码输入 1015 0101 数码输入 1011110 6 0110 数码输入 0117 0111 数码输入 101 8 1000 数码输入 1101110 9 1001 数码输入 0110 0100 激活电锁 101 * 0000 数码输入1110110#0001out_numb : OUT STD_LOGIC_VECTOR(3 downto 0); -- for numb. keyout_func : OUT STD_LOGIC_VECTOR(3 downto 0); -- for func. keyflag_numb : OUT STD_LOGIC ; --flag for numb. keyflag_func : OUT STD_LOGIC --flag for func. key );END KEYBOARD_DEC1 ;--******************************************************ARCHITECTURE a OF KEYBOARD_DEC1 ISsignal FF : std_logic ; --FLAG OF FUNC.signal FN : std_logic ; --FLAG OF NUMB.signal Z : std_logic_VECTOR(4 downto 0) ; --SCAN CODEsignal F : std_logic_VECTOR(3 downto 0) ; --FOR FUNC. CODEsignal N : std_logic_VECTOR(3 downto 0) ; --FOR NUMB. CODEBEGINPROCESS(clk)beginZ <= CLK_KEYBOARD & C ;IF CLK'EVENT AND CLK = '1' THENcase Z iswhen "11101" => N <= "0000" ;--0when "00011" => N <= "0001" ;--1when "00101" => N <= "0010" ;--2when "00110" => N <= "0011" ;--3when "01011" => N <= "0100" ;--4when "01101" => N <= "0101" ;--5when "01110" => N <= "0110" ;--6when "10011" => N <= "0111" ;--7when "10101" => N <= "1000" ;--8when "10110" => N <= "1001" ;--9when others => N <= "1111" ;end case ;END IF ;--****************************IF CLK'EVENT AND CLK = '1' THENcase Z iswhen "11011" => F <= "0100" ;--*_LOCKwhen "11110" => F <= "0001" ;--#_UNLOCKwhen others => F <= "1000" ;end case ;END IF ;end process ;FN <= NOT ( N(3) AND N(2) AND N(1) AND N(0) ) ;FF <= ( NOT F(3) AND F(2) AND NOT F(1) AND NOT F(0)) OR (NOT F(3) AND NOT F(2) AND NOT F(1) AND F(0) ) ;--CONNECTIONFLAG_NUMB <= FN ;FLAG_FUNC <= FF ;OUT_NUMB <= N ;OUT_FUNC <= F ;END a;说明:1、键盘译码电路除了负责将键盘送出的数据进行译码外,另外就是在译码的同时,必须判别所按下的是数字键还是功能键。