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 的数字密码锁设计
1引言电子密码锁的使用表达了人们消费水平、保安意识和科技水平的提高,而且防止了携带甚至丧失钥匙的麻烦。
目前设计密码锁的方法很多,例如用传统的PCB 板设计、用PLC 设计或者用单片机设计。
而用V HDL 可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程到达高度自动化。
本设计在Max + plus Ⅱ的环境中进展,用Al2tera 公司ACEX 1 K系列的EP1 K30 TC14423 来实现。
ACEX 1 K是Altera 公司着眼于通信、音频处理及类似场合的应用而推出的FPGA 器件芯片系列,其典型门数为10 万门,是当今Altera 多种产品中应用前景最好的器件系列之一。
EDA 技术设计电子系统具有用软件的方式设计硬件;设计过程中可用有关软件进展各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计本钱低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。
用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个局部组成:数字密码输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。
可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。
〔1〕密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
〔2〕密码锁控制电路包括按键数据的缓冲存储电路,密码的去除、变更、存储、激活电锁电路〔存放器去除信号发生电路〕,密码核对〔数值比拟电路〕,解锁电路〔开/关门锁电路〕等几个小的功能电路。
〔3〕七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。
1.1设计背景随着社会的开展和人们生活水平的提高,人们的平安意识也逐步加强。
传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现XX防盗这一问题变的尤其的突出,密码锁以其平安性高、本钱低、功耗低、易操作等优点受到越来越多人的欢送。
彭胜-基于VHDL的电子密码锁设计与实现正文
1 引言电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。
目前设计密码锁的方法很多,例如用传统的PCB 板设计、用PLC 设计或者用单片机设计。
而用V HDL 可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。
本设计在Max + plus Ⅱ的环境中进行,用Al2tera 公司ACEX 1 K系列的EP1 K30 TC14423 来实现。
ACEX 1 K是Altera 公司着眼于通信、音频处理及类似场合的应用而推出的FPGA 器件芯片系列,其典型门数为10 万门,是当今Altera 多种产品中应用前景最好的器件系列之一。
EDA 技术设计电子系统具有用软件的方式设计硬件;设计过程中可用有关软件进行各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计成本低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。
用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由3 个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。
可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。
(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。
(2)密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。
(3)七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。
1.1 课题背景随着社会的发展和人们生活水平的提高,人们的安全意识也逐步加强。
传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现保密防盗这一问题变的尤其的突出,密码锁以其安全性高、成本低、功耗低、易操作等优点受到越来越多人的欢迎。
基于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语言的电子密码锁v1.0
成绩题目基于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、拨码输入模块包括设置密码并读取、输入密码、系统复位功能。
密码锁的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密码锁
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课程设计——数字密码锁班级:计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专题--------电子密码锁一、设计要求:设计一个简单的数字电子密码锁,密码为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密码锁密码锁设计⼀、课题描述:⽤于模仿密码锁的⼯作过程。
完成密码锁的核⼼控制功能。
⼆、功能要求:设计⼀个密码锁,平时处于等待状态。
管理员可以设置或更该密码。
如果不预置密码,密码缺省为“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密码锁(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);如果连续输错三次,则一刻钟内不能再开锁。
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密码锁实验报告
华南师大学实验报告学生: 小澎学号: ***********_专业: 通信工程年级班级: 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的电子密码锁的设计与实现
5
6
7
8
9
3
0
#
由于机械键盘易产生抖动 ,在键按下和放开 的瞬间 ,因触点的接触和释放会产生多次通断不 定的抖动 ,如果不加干预 ,会产生多次识别·为了 消除抖动 ,设计中采用延时的软件方法消除抖动 , 若采样信号检测到输入由“1”变到“0”或由“0”变 为“1”,先延时 100 ms ,仍旧检测到是“0”或“1”, 则说明按键状态确实发生了变化 ,否则当作抖动 处理 ,不予理会·对于持续按住某个键不放时 ,需 先消除抖动 ,并累计时间 ,超时后作持续处理·
第18卷第4期 2006 年 8 月
沈阳大学学报 J OU RNAL OF SHEN YAN G UN IV ERSIT Y
文章编号 : 100829225 (2006) 0420077203
Vol118 ,No . 4 Aug. 2 0 0 6
一种基于 VHDL 的电子密码锁的设计与实现
曹建国 , 王 威 , 王 丹
图 1 密码锁顶层原理图
密码输入一般采用机械式和触摸式两种键盘· 机械式 3 ×4 键盘虽然易产生抖动 、磨损等问题 , 但具有电路结构简单 、成本低 、可靠性高 、技术成 熟 、应用广泛等优点 ,在密码锁的设计过程中经常 被采用 ,如图 2 所示·
2 设计思路
电子密码锁主要由数字密码输入电路 、密码 锁控制电路和密码锁显示电路三部分组成·原理
为数字输出标志 ,flag - f 为功能输出标志 ,clk - ct r 为控制电路时钟信号 ,enlock 为上锁信号 , data bcd (15∶0) 是 4 位十进制数码的 bcd 码形式·
1 功能描述
密码锁的设计主要达到以下五个功能 : (1) 数码输入 :按下一个数字键 ,其对应的数 字就显示在最右边的数码管上 ,同时将先前输入 的所有数字向左移动一位·此处密码设定为 4 位 , 在实际中为了增加安全性 ,可以设置为更多位· (2) 数码清除 :当按下清除键时 ,清除前面输 入的所有值 ,并显示为“0000”· (3) 密码激活 :按下此键 ,将前面输入的四位 数字设为密码 ,密码锁上锁· (4) 密码更改 :将输入的值作为新的密码· (5) 电锁解除 :按下电锁解除键 ,系统会将输 入与密码进行检查核对 ,如果正确 ,电锁开启 ,否 则打不开锁·
一种基于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码形式。
基于VHDL语言的8位数字密码锁设计
EDA 课程设计报告书课题名称 基于VHDL 语言的8位数字密码锁设计 姓 名 学 号 院、系、部 专 业 指导教师2016年6月20日※※※※※※※※※ ※※ ※※ ※※※※※※※※※※※2014级学生EDA 课程设计基于VHDL语言的8位数字密码锁设计1 设计目的(1)熟悉集成电路的引脚安排。
(2)掌握各芯片的逻辑功能及使用方法。
(3)了解面包板结构及其接线方法。
(4)了解电子密码锁的组成及工作原理。
(5)熟悉电子密码锁的设计与制作。
2设计方案电子密码锁,主要由三部分组成:密码输入电路、密码锁控制电路和密码锁显示电路。
作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。
拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。
数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。
液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED 数码管。
根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。
整个密码锁系统的总体总体框图如图2.1所示。
图2.1电子密码锁系统总体框图3功能模块3.1 输入模块3.1.1功能介绍输入时有三个拨码键控制输入,每个拨码各控制一位密码,对于其中一个拨码键每拨一次码按一次按键,表示输入一位,当输入四位时输出一位数,用“888”作为初始密码。
3.1.2输入模块与仿真图形单脉冲控制如图3.1如下图图3.1上图为单脉冲控制输入,当M给一上升沿信号将在PUL输出一位与之对应的高或低电平。
四位串行输入并行输出寄存器如下图3.2图3.2上图为4为串行输入并行输出寄存器,它由4个D触发组成,当reset为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位。
数字电子锁报告及VHDL源程序
一、系统功能概述数字密码锁实现:1、了不需要带钥匙,只要记住开锁密码即可开锁的功能。
2、在输入密码正确后,还可以修改密码。
3、在输入密码的过程中,不显示密码,只显示无规律的提示某位密码是否输入完毕,防止了密码的泄漏,大大加强了密码锁的保密性。
本演示系统实现了:1、输入密码正确后,正确小灯(led)亮,错误小灯(led1)不亮;2、正确修改密码后,正确小灯(led)不亮,错误小灯(led1)不亮;3、输入错误密码,正确小灯(led)不亮,错误小灯(led1)亮,并有1KHz闹铃声产生;4、按下reset后,密码归为初始密码。
开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯D3。
否则系统进入“错误”状态,并发出报警信号。
开锁程序由设计者确定,并锁内给定的密码是可调的,且预置方便,保密性好。
串行数字锁的报警方式是点亮指示灯D6,并使喇叭鸣叫来报警,报警动作直到按下复位开关,报警才停止。
此时,数字锁自动进入等待下一次开锁的状态。
二、系统组成以及系统各部分的设计1、系统结构描述要求:系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;(1)源代码;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code isport( c lk: in std_logic;--电路工作时的时钟信号clk1:in std_logic;--闹铃产生需要的时钟信号k: in std_logic;--高电平表示输入1led: out std_logic;--输入正确时亮led1:out std_logic;--输入错误时亮reset: in std_logic;-- 按下时复位want: in std_logic;--是否修改密码alarm: out std_logic;--输出闹铃声show: out std_logic_vector(3 downto 0));--提示作用end;architecture a of code issignal temp: std_logic_vector(3 downto 0);--输入一位加1signal code: std_logic_vector(7 downto 0);--储存密码signal getcode: std_logic_vector(7 downto 0);--储存修改后的密码signal counter: std_logic_vector(3 downto 0);--计数signal allow: std_logic;--是否允许修改密码signal ring:std_logic;--是否接通闹铃beginprocess(clk)beginif ring='1' thenalarm<=clk1;--闹铃接通elsealarm<='0';--闹铃截至end if;if reset='1' then--按下reset后,密码归为初始密码getcode<="00000000";--初始密码counter<="0000";--内部计数code<="11001000";--密码led<='0';led1<='0';allow<='0';elsif clk'event and clk='1' then--输入clk脉冲,则接收1位密码getcode<=getcode(6 downto 0)&k;--将这1位密码并入getcode中的最后一位if counter="1000" then--输入为8位数码时比较if code=getcode thenled<='1';--正确灯亮led1<='0';ring<='0';allow<='1';--允许修改密码elsif allow='1' and want='1' then--如果允许输入且想输入code<=getcode;--输入新密码led<='0';led1<='0';elseallow<='0';led<='0';led1<='1';--错误灯亮ring<='1';--闹铃响end if;counter<="0000";--重新计数elsecounter<=counter+1; --累加temp<=temp+1;--为防止泄露密码,特别设置end if;end if;show <= temp;end process;end;2、系统以及各个模块的仿真波形(1)错误输入密码时的仿真波形(2)输入正确密码时的仿真波形3、下载时选择的开发系统模式以及管脚定义表1 GW48-CK开发系统工作模式:5我设计的数字密码锁简单、实用,基本满足课程设计的要求,并且在单个模块运行状态下,可以实现所有的要求。
基于VHDL的数字密码锁设计
河南机电高等专科学校《职业技术培训》结课大作业基于VHDL的数字密码锁设计姓名:专业班级:学号:任课教师:时间:成绩:基于VHDL的数字密码锁设计医电08级1班任课教师:摘要:本文要紧介绍运用删,技术设计数字密码锁统分解为假设干子系统,而且进一步细划为假设干模块,然后用硬件描述语言VHDL来设计这些模块,而且别离进行软件和硬的仿真。
仿真结果说明:该数字密码锁能够校验3位十进制数密码,且能够预置密码,显示输入密码,具有输入错误指示有效指示等相应的状态指示。
该密码锁体积小,功耗低,操作简单,不怕掉电,保护和升级都十分方便,具有较好的应用前景。
关键词:QUARlrIIS II;VHDL;数字密码锁目录1. 概述 ....................................................................错误!未定义书签。
2. 设计要求 ............................................................错误!未定义书签。
3. 整体设计 ............................................................错误!未定义书签。
4. 各单元电路的设计和实现 ................................错误!未定义书签。
5. 功能仿真及其结果 ............................................错误!未定义书签。
6. 编译、下载及调试 ............................................错误!未定义书签。
7. 总结与展望 ........................................................错误!未定义书签。
参考文献..................................................................错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;。