vhdl编写密码锁

合集下载

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 数字密码锁的实现

vhdl 数字密码锁的实现

vhdl实现数字密码锁密码锁应具有如下功能:密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时Q=1,LT绿灯亮,并开锁;当结果不同时Q=0,LF红灯亮,不开锁。

用户需要修改密码时,先开锁,再按“设定密码”,清除预先存入的密码,通过键盘输入新的2位十进制码,按“确定”完成。

本次设计采用“自上而下”的设计方法,系统按照逻辑功能划分为两个大的模块:控制部分和处理部分。

根据上节的系统分析,这两个大的模块可分为几个小的功能模块。

其中处理部分包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。

密码锁控制电路包括按键数据的缓冲存储电路,密码的清楚、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。

键盘输入去抖电路的VHDL源程序DCFQ.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DCFQ ISPORT(CLK,CLRN,PRN,D:IN STD_LOGIC);Q:OUT STD_LOGIC);END ENTITY DCFQ;ARCHITECTURE ART OF DCFQ ISBEGINPROCESS (CLK,CLRN,PRN)BEGINIF CLRN=’0’AND PRN=’1’THENQ<=’0’;ELSIF CLRN=’1’AND PRN=’0’THENQ<=’1’;ELSIF CLK’EVENT AND CLK=’1’THENQ<=D;END IF;END PROCESS;END ARCHITECTURE ART;--DEBOUNCING.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY ALTERA;USE ALTER.MAXPLUS2.ALL;ENTITY DEBOUCING ISPORT(D_IN,CLK:IN STD_LOGIC;DD1,DD0,QQ1,QQ0:OUT_LOGIC;D_OUT,D_OUT1:OUT STD_LOGIC);END ENTITY DEBOUNCING;ARCHITECTURE ART OF DEBOUNCING ISCOMPONENT DCFQ ISPORT(CLK,CLRN,PRN,D:IN STD_LOGIC;Q:OUT STD_LOGIC);END COMPONENT DCFQ;SIGNAL VCC,INV_D:STD_LOGIC;SIGNAL Q0,Q1:STD_LOGIC;SIGNAL D1,D0:STD_LOGIC;BEGINVCC<=’1’;INV_D<=NOT D_IN;U1:CFQ PORT MAP(CLK=>CLK,CLRN=>INV_D,PRN=>VCC,D=>VCC,Q=>Q0);U2:CFQ PORT MAP(CLK=>CLK,CLRN=>Q0,PRN=>VCC,D=>VCC,D=>VCC,Q=>Q1); PROCESS (CLK)BEGINIF CLK’EVENT AND CLK=’1’THEND0<=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 ARCHITECTURE ART--密码锁输入电路--KEYBOARD.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSINGNED.ALL;ENTITY KEYBOARD ISPORT(CLK_1K:IN STD_LOGIC;KEY_IN:IN STD_LOGIC_VECTOR(2 DOWNTO 0);CLK_SACN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);DATA_N:OUT STD_LOGIC_VECTOR(3 DOWNTO );DATA_F:OUT STD_LOGIC_VECTOR(3 DOWNTO );FLAG_N:OUT STD_LOGIC;FLAG_F:OUT STD_LOGIC;CLK_CTR:OUT STD_LOGIC;CLK_DEBOUNCE:OUT STD_LOGIC);END ENTITY KEYBOATD;ARCHITECTURE ART OF KEYBOARD ISCOMPONENT DEBOUNGING ISPORT(D_IN:IN STD_LOGIC;CLK: IN STD_LOGIC;D_OUT:OUT STD_LOGIC);END COMPONENT DEBOUNGING;SIGNAL CLK:STD_LOGIC;SIGNAL C_KEYBOARD:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL C_DEBOUNCE:STD_LOGIC;SIGNAL C:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL N,F:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FN,FF:STD_LOGIC;SIGNAL SEL:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN--内部连接DATA_N<=N;DATA_F<=F;FLAN_N<=FN;FLAN_F<=FF;CLK_CLR<=CLK;--扫描信号发生器COUNTER:BLOCK ISSIGNAL Q:STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL SEL: STD_LOGIC_ VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK_1K) ISBEGINIF CLK_1K’EVENT AND CLK_1K=’1’THENQ<=Q+1;ENDIF;C_DEBOUNCE<=Q(2);C_KEYBOARD<=Q(6 DOWNTO 5);--产生键扫描信号--C_DEBOUNCE<=Q(1);--C_KEYBOARD<=Q(5 DOWNTO 4);CLK<=Q(0);END PROCESS;CLK_DEBOUNG<=C_DEBOUNCE;SEL<=“1110”WHEN C_KEYBOARD=0 ELSE“1101”WHEN C_KEYBOARD=1 ELSE“1011”WHEN C_KEYBOARD=2 ELSE“0111”WHEN C_KEYBOARD=3 ELSE“1111”CLK_SCAN<=SEL;END BLOCK COUNTER;--键盘去抖DEBOUNUING :BLOCK ISBEGINU1: DEBOUNCING PORT MAP (D_IN=>KEY_IN(0),D_OUT=>C(0), CLK=>C_DEBOUNCE);U2: DEBOUNCING PORT MAP (D_IN=>KEY_IN(1),D_OUT=>C(1), CLK=>C_DEBOUNCE);U3: DEBOUNCING PORT MAP (D_IN=>KEY_IN(2),D_OUT=>C(2), CLK=>C_DEBOUNCE);END BLOCK DEBOUNUING;--键盘译码KEY_DECODER:BLOCKSIGNAL Z:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINZ<=C_KEYBOARD&CIF CLK’EVENT AND CLK=’1’ THENCASE Z ISWHEN“11101”=>N<=“0000”;0WHEN“00011”=>N<=“0001”;1WHEN“00101”=>N<=“0010”;2WHEN“11101”=>N<=“0000”;3WHEN“01011”=>N<=“0100”;4WHEN“01101”=>N<=“0101”;5WHEN“01110”=>N<=“0110”;6WHEN“10101”=>N<=“0111”;7WHEN“10110”=>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”;WHEN“11110”=>F<=“0001”;WHEN OTHERS =>F<=“1000”;END CASE;END IF;END PROCESS;FN<=NOT(N(3) AND N(2) AND N(1) AND N(0);FF<=F(2) OR F(0);END BLOCK KEY_DECODER;END ARCHITECTURE ART;--密码控制电路的VHDL源程序--CTRL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSINGED.ALL;ENTITY CTRL ISPORT(DATA_N:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DATA_F:IN STD_LOGIC_VECTOR(3 DOWNTO 0);FLAG_N:IN STD_LOGIC;FLAG_F:IN STD_LOGIC;CLK: IN STD_LOGIC;ENLOCK: OUT STD_LOGIC;DATA_BCD: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTTY CTRL;ARCHITECTURE ART OF CTRL ISSIGNAL ACC,REG:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL NC,REG:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL RR2,CLR,BB,QA,QB:STD_LOGIC;SIGNAL R1,R0:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLK’EVENT AND CLK=’1’THENR1<=R0;R0<=FLAG_F;END IF;RR2<=R1 AND NOT R0;CLR<=RR2;END PROCESS;--按键输入数据的存储、清零进程KEYIN_PROCESS:BLOCK ISSIGNAL RST ,D0,D1:STD_LOGIC;BEGINRST<=RR2;PROCESS(FLAG_N,RST)ISBEGINIF RST =’1’ THENACC<=“00000000”;NC<=“000”;ELSEIF FLAG_N’EVENT AND FLAG_N=’1’ THENIF NC<4 THENACC<=ACC(11 DOWNTO 0)&DATA_N;NC<=NC+1;END IF;END IF;END IF;END PROCESS;END BLOCK KEYIN_PROCESS;--上锁、开锁控制LOCK_PROCESS:BLOCK ISBEGINPROCESS(CLK,DATA_F)ISBEGINIF(CLK’EVENT AND CLK=’1’)THEN IF NC=4 THENIF DATA_F(2)=’1’THENREG<=ACC;QA<=’1’;QB<=’0’;ELSIF DATA_F(0)=’1’THENIF REG=ACC THENQA<=’0’;QB<=’1’;END IF;ELSIF ACC=”10001000”QA<=’0’;QB<=’1’;END IF;END IF;END IF;END PROCESS;END BLOCK LOCK_PROCESS;ENLOCK<=QA AND NOT QB;DATA_BCD<=ACC;END ARCHITETURE ART;。

密码锁的VHDL初步实现

密码锁的VHDL初步实现

电子锁的VHDL初步实现一、功能描述密码锁共2种状态①安锁状态:摁下SETUP 设置密码再摁SETUP确定密码②开锁状态:摁下START 输入密码摁下OPEN确定密码并开锁输出共2种状态:①密码正确:A灯亮,B灯不亮,蜂鸣器不叫。

②密码错误:A灯不亮,B灯亮,蜂鸣器鸣叫。

此时无法通过SETUP和START来改变原始密码和输入密码来改变输出。

必须通过RESET键才能让两键重新恢复作用。

二、原理简述三、实验电路模式选择选择模式6,即1,2两键可用于输入2个4位2进制密码,3~7键可用于产生持续的高电平或低电平,分别设置为SETUP,START,OPEN和RESET四个键,即VHDL硬件描述中使用高电平有效来驱动。

7段LED管7,8用于显示对应2,1两键的十六进制输入值。

LED灯1和2用于表示LEDA和LEDB。

四、源代码及设计思路顶层文件结构图:①开锁控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CTRL ISPORT(KEY_IN,FD_IN:IN STD_LOGIC;OUTPUT: OUT STD_LOGIC);END CTRL;ARCHITECTURE BEHAV OF CTRL ISBEGINPROCESS(KEY_IN,FD_IN)VARIABLE OUT_TEMP: STD_LOGIC;BEGINIF KEY_IN = '1' THEN OUT_TEMP := '1';ELSE OUT_TEMP := FD_IN;END IF;OUTPUT <= OUT_TEMP;END PROCESS;END BEHAV;模块设计思路:当RESET键置高电平时,应当输出高电平;当RESET键为低电平时,输出取决于反馈信号输入FD_IN的值。

此设计中默认高电平1为LED亮,又反馈信号为LED信号取反,可知有效的反馈信号应为FD_IN =’0’,并且此时应当锁死与门,故输出为0。

VHDL密码锁(6位串行输入).doc

VHDL密码锁(6位串行输入).doc

VHDL密码锁(6位串行输入)《电子设计自动化》课程设计题目:数字密码锁电路(1.1)院(系)信息科学与工程学院专业 15通信工程届别班级学号姓名任课老师数字密码锁电路,难度系数1.1实验要求设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。

本设计的各个模块由相应的VHDL程序具体实现,并在Quartus Ⅱ9.0环境下进行了整体电路的模拟仿真,最终实现“密码锁设计”的要求。

实验设计要求6位串行输入,并且由于实验板输入键位的有限,还同时增加了输入密码与设置密码键位的重叠,使密码锁电路输入输出形成一个反馈,通过对输出的判断,让电路自动识别输入的数字是设置的密码还是输入的密码。

在程序初始载入实验板时,还要让密码锁的初始设置密码和输入密码相同,从而达到能够初始设置密码的逻辑要求。

同时因为实验板输出的LED灯有限,还要求设计的密码锁电路的显示能够在输入密码、设置密码和倒计时之间灵活智能选择,从而达到满足使用的要求。

密码锁在输入三次错误密码后需要开始一个一刻钟即900秒的倒计时,则需要设计一个逻辑电路使电路能够在输入和错误倒计时之间自由变化。

此为本实验设计的主要难点和创新。

目录1.系统设计 (4)2.单元电路设计 (7)3.软件设计 (12)4.系统测试 (23)5.结论 (24)6.参考文献 (24)7.附录 (25)8.其他 (26)系统设计设计要求:设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。

系统设计方案:先设计1.0难度的密码锁,此时不需要一刻钟计时模块。

该电路首先需要一个输入模块,由于实验板的限制,安排两个键位作为输入,分别实现6个密码位的选择和对确定位密码的输入,所以在输入模块之前,还需要通过计数器来分别得到两个输入;之后设计一个密码合成及选择模块,将得到的6个4位的密码相加得到一个24位的密码,方便之后的比较,同时需要在输入模块添加一个选择,分别确定此时的输入信息是设置密码还是输入密码;将得到的24位设置密码和输入密码分别放到一个确认模块,起到输入确认并且使初始信息清零的作用;最后将两个24位数据放入比较模块,确定密码锁的状态,状态的显示由LED灯实现;输出显示LED模块从输入模块之前接出,显示当前电路的输入;同时,在计数器之前需要加入消抖模块,使实验板能够稳定输入;在LED模块之前需要添加译码器,以输出正确显示。

《基于VHDL语言和FPGA的电子密码锁》范文

《基于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密码锁

vhdl密码锁

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

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

再按SETUP键,密码有效。

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

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

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

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

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

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

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

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

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

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

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

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

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

若输入密码正确,则A灯亮;否则B灯亮。

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

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

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

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

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

VHDL专题—电子密码锁

VHDL专题—电子密码锁

VHDL专题--------电子密码锁一、设计要求:设计一个简单的数字电子密码锁,密码为4位。

功能:1、密码输入:每按下一个键,要求在数码管上显示,并依次左移;2、密码清除:清除密码输入,并将输入置为”0000”;3、密码修改:将当前输入设为新的密码;4、上锁和开锁。

二、电路组成:为达到以上功能,可将电子密码锁分为以下几个模块:1、键盘接口电路:键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储。

2、电锁控制电路:数字按键输入、存储及清除。

功能按键的设计。

密码清除、修改与存储。

电锁的激活与解除。

3、输出显示电路BCD译码、动态扫描电路。

三、功能电路的设计:1、键盘接口电路:矩阵式键盘工作原理:矩阵式键盘是一种常见的输入装置,在计算机、电话、手机、微波炉等各工电子产品中被广泛应用。

如图所示为一3×4矩阵式键盘。

矩阵式键盘以行、列形式排列,图中为4行3列,键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0的状态,键盘的扫描可以以行扫或列扫方式进行,图中为行扫方式,KEYR3—KEYR0为扫描信号,其中的某一位为0即扫描其中的一行,具体见表1-1.12键盘扫描信号KEYR3与第一行相连,KEYR2与第二行相连,依此类推。

很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。

在扫描的过程中,当有键按下时,对应的键位就为逻辑0状态,从而从KEYC2..0读出的键值相应列为0.具体情况如表1-2所示:若从KEYC2..0读出的值全为1时,表示没有键被按下,则不进行按键的处理。

如果的键被按下,则将KEYC2..0读出的送至键盘译码电路进行译码。

表1-2 键盘扫描与其对应的键值的关系时序产生电路:在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。

本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。

基于VHDL的电子密码锁

基于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端口为数码管位选选择端口。

基于-VerilogHDL的数字密码锁的设计

基于-VerilogHDL的数字密码锁的设计

基于Verilog HDL的数字密码锁设计是一种常见的数字电路设计项目,它可以帮助学生理解数字逻辑电路和Verilog HDL的应用。

下面将详细介绍数字密码锁的设计方案。

一、系统结构设计数字密码锁主要由数字键盘、数码管显示、密码比对模块和控制逻辑组成。

数字键盘用于输入密码,数码管显示用于显示密码输入状态和开锁结果,密码比对模块用于比对输入的密码和预设的密码是否一致,控制逻辑用于控制整个系统的运行。

二、硬件设计1. 数字键盘:数字键盘采用矩阵式键盘,通过扫描按键来获取用户输入的密码。

2. 数码管显示:数码管用于显示密码输入状态,例如显示“请输入密码”、“密码正确”或“密码错误”等信息。

3. 密码比对模块:密码比对模块接收输入的密码和预设的密码,在Verilog HDL中实现密码比对逻辑。

4. 控制逻辑:控制逻辑用于控制密码输入、比对和显示的流程,以及控制门锁的开关。

三、Verilog HDL设计1. 数字键盘输入模块:编写Verilog HDL代码来接收数字键盘输入的密码。

2. 密码比对模块:编写Verilog HDL代码来比对输入的密码和预设的密码,输出比对结果。

3. 数码管控制模块:编写Verilog HDL代码来控制数码管的显示,根据密码比对结果显示相应的信息。

四、系统功能设计1. 密码输入功能:用户通过数字键盘输入密码。

2. 密码比对功能:系统对输入的密码进行比对,判断密码是否正确。

3. 显示功能:数码管显示密码输入状态和开锁结果。

五、仿真与综合完成Verilog HDL代码设计后,进行仿真验证,确保系统能够正常工作。

然后进行综合和布局布线,生成FPGA可编程文件。

六、总结与展望通过数字密码锁的设计,学生可以深入理解数字逻辑电路、Verilog HDL语言的应用,并且掌握数字密码锁系统的设计原理。

未来,可以进一步优化系统功能,增加更多的安全性和便利性功能,提升系统的性能和可靠性。

vhdl密码锁

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电子密码锁课程设计

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 密码锁

北京邮电大学数字电路与逻辑设计实验密码锁实验任务与要求设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。

基本要求:1、密码设置:通过键盘进行4位数字密码设定输入,在数码管上显示所输入数字。

通过密码设置确定键(BTN 键)进行锁定。

2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。

输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或l ed 闪烁报警。

3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。

闭锁状态下不能清除密码。

4、用点阵显示开锁和闭锁状态。

提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。

2、密码锁的密码位数(4~6 位)可调。

3、自拟其它功能。

二、系统设计设计思路本设计按照不同功能将具体实现分为不同模块,分别是时钟分频,防抖动,数码管扫描与显示,报警模块,密码验证模块,点阵显示模块,键盘输入模块以及功能键模块。

总体框图分块设计时钟模块:密码锁的工作时钟由外部晶振提供,时钟频率为50Mhz。

对CLK进行分频输出三路时钟CLK1Khz,CLK1,CLK2,频率分别为1Khz,5hz,1hz。

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

当数码管的中的一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

在键盘获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。

VHDL密码锁实验报告

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课程设计

电子密码锁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语言的电子密码锁设计说明书

基于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数字密码锁课程设计

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语言的电子密码锁的设计(交)
摘要
EDA技术的应用引起了电子产品系统开发的革命性变革。利用先进的EDA工具,基于硬件描述语言,可以进行系统级数字逻辑电路的设计。本文简述了VHDL语言的功能及其特点,并以4位串行手机键盘电子密码锁设计为例,介绍了一种在QuartusⅡ6.0开发软件下,基于VHDL硬件描述语言的复杂可编程逻辑器件(CPLD)的新型电子密码锁设计方法,阐述了其工作原理和软硬件设计方法。该密码锁通过扫描电路、键盘译码电路、弹跳消除电路、控制电路和七段译码电路等实现了密码输入、数码清除、密码激活、电锁解除、密码更改和误码报警等功能。本论文对该密码锁的程序进行了功能和时序仿真,结果表明该密码锁的功能满足设计要求,能够实现正常开锁、上锁和修改密码。该密码锁体积小、功耗低、易于维护和升级,有很好的市场前景。
1133cpld工作原理1234fpga工作原理1441系统设计要求1442系统设计方案14421密码锁输入电路的设计17422密码锁控制电路的设计23423密码锁显示电路的设计2443密码锁的整体组装设计25目录iv2651键盘输入去抖电路的vhdl源程序2852密码锁输入电路的vhdl源程序3153密码锁控制电路的vhdl源程序3654密码锁显示电路的vhdl源程序4261系统仿真分析42611键盘输入去抖电路的仿真42612密码锁输入电路的仿真42613密码锁控制电路的仿真43614密码锁显示电路的仿真4562系统硬件验证48参考文献49致谢引言11课题背景自古以来锁具都是人们心目中的铁将军随着社会物质财富的日益增长和人们生活水平的不断提高人们对它要求也越来越高即要安全可靠又要使用方便
本课题要完成的主要任务是基于VHDL语言的电子密码锁的设计和具体的实现,重点完成各个模块的设计,并保证整个系统的稳定性、可靠性和扩展性,充分考虑后续阶段的开发。

基于vhdl密码锁设计说明书

基于vhdl密码锁设计说明书

基于FPGA的数字密码器设计(黑体小三,1.5倍行距,段后1行,新起一页,居中)4.1数字密码器总体设计(黑体四号,1.5倍行距,段前0.5行)4.1.1 设计要求(黑体小四,1.5倍行距,段前0.5行)1)密码预先在内部设置,可以设置任意位密码,这里采用6位十进制数字作为密码;2)密码输入正确后,密码器将启动开启装置。

这里密码器只接受前6位密码输入,并以按键音提示,多余位数的密码输入将不起作用;3)允许密码输入错误的最大次数为三次, 密码错误次数超过三次则进入死锁状态, 并发出警报;4)报警后,内部人员可以通过按键SETUP使密码器回到初始等待状态;5)密码器具有外接键盘,可以用来输入密码和操作指令;4.1.2设计思路(黑体小四,1.5倍行距,段前0.5行)先对数字密码器进行顶层设计并写出相应的VHDL程序,然后将数字密码器划分为分频模块、消抖同步模块、使能电路模块、密码预置模块、编码模块、比较模块、计数器选择模块、数码管显示译码模块、指示电路模块、数码管扫描模块、误码模块和控制器模块12个部分,将各个模块一一实现。

顶层设计中各个模块是作为元件来引用的,因此这里需要将各个模块设计成独立设计实体的具体形式,这样便可以在顶层设计来引用这些模块了。

4.1.3 数字密码器的基本原理(黑体小四,1.5倍行距,段前0.5行)首先,密码器通过外接键盘输入数字密码,然后密码需要经过10线至4线编码器变成BCD码;接下来通过4位比较器与存储在系统中的预置密码进行比较,同时将输入的密码通过数码管扫描模块和数码管显示译码模块显示出来;最后将比较的结果DEP送到控制器模块中。

本次设计中的密码是串行输入的,每次分别与一个预置码比较。

可见,6个十进制的密码分别有24个端口送入,因此需要使用一个数据选择器来进行选择。

这里,数据选择器是一个4位的六选一数据选择器,它的两位选择信号是由一个模6的计数器来给出的,计数器的控制信号是由控制信号RESET和时钟信号CNP是由控制模块来提供的。

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

process(Clk2Hz,R39; or Error_Flag<='0') then
Error_Count<="000";
elsif(Clk2Hz'event and Clk2Hz='1' and Error_Flag<='1') then
Error_Count<=Error_Count+1;
entity exp19 is
port( Clk : in std_logic; --时钟信号
Rst : in std_logic; --复位信号
Kr : in std_logic_vector(3 downto 0); --键盘行
Kc : buffer std_logic_vector(3 downto 0); --键盘列
begin
if(Rst='0' or push_num=0) then --复位时,全灭
buff1<=15;
buff2<=15;
buff3<=15;
buff4<=15;
buff5<=15;
elsif(Clk1KHz'event and Clk1KHz='1') then
begin
if(Clk2Hz'event and Clk2Hz='1') then
Clk1Hz<=not Clk1Hz;
end if;
end process;
process(Clk1KHz) --扫描键盘
begin
if(Clk1KHz'event and Clk1KHz='1') then
buff5<=buff6;
end if;
end if;
end process;
process(Clk1KHz,Rst) -- 获取键值
begin
if(Rst='0' or push_num=6) then --全灭
buff6<=15;
elsif(Clk1KHz'event and Clk1KHz='1') then
begin
if(Rst='0') then
push_num<=0;
elsif(Clk1KHz'event and Clk1KHz='1') then
if(push_num=6) then
push_num<=0;
elsif(kflag1='0' and kflag2='1') then
if(Kr="1111") then
kflag1<='0';
kcount<=kcount+1;
if(kcount=0) then
kc<="1110";
elsif(kcount=1) then
kc<="1101";
elsif(kcount=2) then
kc<="1011";
Error_Num<=0;
end if;
elsif(Error_Count=4) then
Error_Flag<='0';
elsif(Error_Flag='1') then
Door<=not Error_Count(0);
end if;
end if;
end process;
signal push_num : integer range 0 to 15; --按键次数
signal Disp_Temp : integer range 0 to 15;
signal Disp_Decode : std_logic_vector(7 downto 0);
signal SEC1,SEC10 : integer range 0 to 9;
signal keyr,keyc : std_logic_vector(3 downto 0);
signal kcount : std_logic_vector(2 downto 0);
signal kflag1,kflag2 : std_logic;
signal buff1,buff2,buff3,buff4,buff5,buff6 : integer range 0 to 15;
if(Clk_Count2<1000) then
Clk_Count2<=Clk_Count2+1;
else
Clk_Count2<="0000000001";
end if;
end if;
end process;
Clk2Hz<=Clk_Count2(9);
process(Clk2Hz)
用VHDL设计4位数字密码锁
悬赏分:5 | 提问时间:2010-7-14 16:06 | 提问者:海梦寻
用VHDL进行小型数字系统的设计,利用EDA开发工具上机模拟;
基本功能:
(1) 密码输入:输入4位由0和1组成的密码,分别对应LED1——LED4灯,若输入为1,则对应的灯亮。
(2) 复位:设定一个按键,按下该按键则消除之前输入的密码,重新输入。
else
kc<="0111";
end if;
else
kflag1<='1';
keyr<=Kr;
keyc<=Kc;
end if;
kflag2<=kflag1;
end if;
end process;
KEY_State<=kflag1;
process(Clk1KHz,Rst) --扫描键盘
if(kflag1='1' and kflag2='0' and (((keyr="1110" or keyr="1011")and keyc/="0111")or keyr="1101")) then
buff1<=buff2;
buff2<=buff3;
buff3<=buff4;
buff4<=buff5;
end if;
end process;
process(Clk) --报警声音分频
begin
if(Clk'event and Clk='1') then
Music_Count<=Music_Count+1;
end if;
end process;
process(Clk) --超出错误次数,开始报警
begin
if(Error_Num>=3) then
if(Clk1Hz='1') then
SPK<=Music_Count(2);
else
SPK<=Music_Count(1);
end if;
end if;
end process;
process(Clk1KHz,Rst) --显示右移
(3) 检测密码:设定一个按键,输入完4位密码后,按下按键检测所输入的密码,若所输入的密码与设定密码一致,LED5就亮,否则LED5不亮。
扩展功能:
(1) 报警:若连续3次输入密码都错误,则LED6亮,且锁定系统20秒。
(2) 延时:设定一个时间10秒来让用户输入密码,若10秒内不能完成密码输入,则执行复位功能。
SPK : out std_logic; --扬声器输出
KEY_State : out std_logic; --按键指示
Door : buffer std_logic; --门状态
Display : out std_logic_vector(7 downto 0); --七段码管显示
Door<='1';
else
Door<='0';
end if;
elsif(push_num=6 and Error_Num<3) then
if(Door='0') then
Error_Flag<='1';
Error_Num<=Error_Num+1;
else
Error_Flag<='0';
elsif(Clk1KHz'event and Clk1KHz='1') then
if(push_num=5 and Error_Num<3) then
--修改此处的值可修改门的密码,此处密码为123456
if(buff1=1 and buff2=2 and buff3=3 and buff4=4 and buff5=5 and buff6=6) then
SEG_SEL : buffer std_logic_vector(2 downto 0)); --七段码管片选
end exp19;
--------------------------------------------------------------------
相关文档
最新文档