电子教材-基于VHDL语言的智能密码锁设计

基于VHDL语言的智能密码锁设计胡红艳李旭华湖南建材高等专科学校,电气与信息工程系,421008摘 要 本文介绍一种利用 EDA技术和VHDL 语言,在MAX+PLUSⅡ环境下,设计了一种新型的智能密码锁。

它体积小、功耗低、价格便宜、安全可靠,维护和升级都十分方便,具有较好的应用前景。

关键词 数字密码锁EDA VHDL MAX+ PLUSⅡ中图分类号:文献标识码:BA Digital PasswordLock Designed by VHDLHu Hong-Yan Li Xiu-Hua(Electric and Information Engineering Department of Hunan Building Materials College,HengYang 421008,China)Abstract This paper introduces a new type digital pasword lock is designed with EDA technology and VHDL language. This new digital password lock has beter application prospect , becauseof smal volume , lowpower , lowprice , securityand easy maintenanceand upgrade.Keywords Digital pasword lock EDA VHDL MAX+ PLUSⅡ随着社会物质财富的日益增长,安全防盗已成为全社会问题。

人们对锁的要求越来越高,既要安全可靠地防盗,又要使用方便。

弹子锁由于结构上的局限已难以满足当前社会管理和防盗要求,特别是在人员经常变动的公共场所,如办公室、宾馆等地方。

电子密码锁由于其自身的优势,越来越受到人们的青睐,但是目前使用的电子密码锁大部分是基于单片机用分离元件实现的,其成本较高且可靠性得不保证。

本文采用先进的EDA 技术,利用 MAX +PLUXⅡ工作平台和 VHDL 语言,设计了一种新型的智能密码锁。

该密码锁具有密码预置和误码报警等功能,用一片 FPGA 芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。

采用这种器件开发的数字系统,其升级与改进极其方便。

1、智能密码锁的设计要求该密码锁的密码由六位十进制数字组成,初始设定“000000”。

可由用户任意设置密码,密码输入正确时开锁,连续三次输入错误密码时系统报警。

2、智能密码锁的总体结构智能密码锁的系统结构框图由图1所示,它分成两大部分:控制器和处理器。

整个系统的输入信号只有一个时钟脉冲CP ,输出信号有锁开信号OPEN 和报警信号ALERT。

控制器中的所有按键按下时均为低电平,即低电平有效。

RESET 为“密码设定”信号,CLR 为“清零”信号,OK 为“确定”信号, TRY 为“开锁”信号,CNT 表示上一位密码正确时,控制器给出的可进行下一位二进制密码比较的信号,OPEN 为控制器给出的锁开信号, ERROR 为控制器给出的密码错误信号。

处理器中有三个计数器,计数器C1用来记录输入的二进制密码比较到了第几位,计数器C2 用来记录输入的密码有几次错误,计数器C3 用来记录键入的是第几位十进制密码。

密码锁可通过键盘设置6位十位进制数密码,按“确定”按键OK= 1 后,通过BCD 编码器图1 智能密码锁的系统结构框图变成24位二进制数存入寄存器1 ;开锁时也通过键盘输入6位十进制数密码,按“确定”按键后,通过BCD 编码器变成24位二进制数存入寄存器2 。

经过两个24选1 数据选择器,将寄存器2中的输入密码与寄存器1中设置的密码逐位进行比较,当对应位数相同时,数值比较器的输出B = 1 然后进行下一位比较,否则B= 0 ,密码错误信号ERROR = 1 ,由计算器C2 记录密码错误次数,比较到哪位。

用记算器C1 的输出又作为24 选1 数据选择器位选线,当输入到寄存器2中的24位二进制密码与寄存器1 中设定的24位二进制密码完全相同,比较结束,位数比较器输出M= 1 ,这时,如果按开锁按键TRY = 1 ,密码锁就会打开OPEN = 1 ,如果开锁时三次密码输入不对,则报警。

3、控制器模块是整个系统的控制核心 ,负责接收其模块传来的输入信号 ,再根据系统的功能产生相应的控制信号送到相关的模块。

下面主要介绍控制器的设计过程:3. 1 智能密码锁的控制模块的简单工作原理控制器实际上是一个有限状态机,图2为它的状态流程图。

它一共有六个状态: 准备状态S0、密码输入状态S1、密码设置状态S2、确认状态S3、开锁状态S4和报警状态S5。

24242424准备状态S0:系统开锁、报警或上电后进入准备状态,这时系统不接收除READY信号外的任何输入信号。

密码输入状态S1:在该状态下,如果按下“READY”则保持该状态不变;如果按下“OK”和“OPEN”则转到报警状态;如果有数据输入,则控制器输入一个DATA- IN 信号,输出RD 和CNP1 信号,从RAM中读取密码进行比较,同时使计数器加1 ;检查计数是否计数到100 ,若CNTe1 有效,表示已经接收到四个正确的密码,可以转入下一个状态,否则返回本状态,继续接收其它密码。

检查Dep信号状态,Dep=1则密码正确,进入确认状态,反之则输出CNP2 信号进入报警状态;如果仍然有数据输入,则说明输入密码错误,则输出CNP2 信号进入报警状态。

密码设置状态S2:在确认状态下按“SET”键进入该状态,EN 信号有效。

该状态首先由控制器发RESET-CNT信号;检查是否有数据输入,如果没有则等待;若有数据输入,控制器则输出WR 和CNP1 信号,向RAM发出信号,并使计数器加1 ,检查计数器是否计数到100 ,若CNTe1 有效,表示已经接收到四个正确的密码,进入确认状态,否则返回本状态,继续接收其它密码。

确认状态S3:输入密码正确后进入该状态。

密码输入得到确认才可以进入开锁状态,密码设置完毕后,只有得到确认才可生效,并返回准备状态。

开锁状态S4:输入密码确认后进入该状态,此时按“OPEN”键,控制器便发出SLT信号开锁并返回到准备状态。

报警状态S5:每次进入该状态首先检查计数器2 是否计数到11。

若输入错误密码达到三次,则CNTe2 有效,控制器输出SLB 信号,报警电路报警;若输入错误次数不超过三次,则CNTe2无效,返回到输入密码状态3. 2 控制器的软件设计控制器的软件设计主要依据图2 的状态流程图。

S0、S1、S2、S3、S4、S5为状态机的六个状态,控制部分的 VHDL 源码如下:LIBRARY IEEE;USE IEEE. STD- LOGIC -1164.ALL ;USE WORK. STATE- PACE. ALL;ENTITY control ISPORT(CP,CLK,B,M,RESET,TRY,OK:IN STD- LOGIC;OPEN,ERROR :OUT STD-LOGIC) ;END control;ARCHITECTURE behav OF control isTYPE STATE IS (S0,S1 ,S2,S3,S4,S5) ;SIGNAL CURRENT_ STATE,NEXT_STATE: STATES;BEGINCOM1:PROCESS(CRRRENT_STATE,STATUS)BEGINWAIT UNTIAL CLK’EVENT AND CLK=‘1’;RESET < = ‘1’;CASE CURRENT- STATE ISwhen S0 = >READY < =’1’; EN< = ’1’;RESET-CNT< =’1’;if(READY = ‘0’) then curent- state < = S0;elsecurent- state < =S1;…因源程序较长, 故程序略…END IF ;END CASE ;END PROCESS ;END behav ;4 仿真及硬件测试该密码锁利用MAX PLUS Ⅱ工作平台进行编译和综合仿真,图3为此程序序部分仿真波形。

将程序下载到FLEX10K 芯片中,同时在杭州康芯生产的型号为GW48-GK的EDA实验箱上进行硬件验证。

经实验验证,该密码锁达到了设计要求。

本文提出的智能密码锁由于采用VHDL 语言设计,用一片FPGA 实现,因而体积小,功耗低,稍加修改就可以改变密码的位数和输入密码的次数,而升级和维护都很方便,而且容易做成 ASIC 芯片,具有较好的应用前景。

但由于结构还比较简单,有待进一步完善。

参考文献:1 王锁平编著.电子设计自动化(EDA )教程.电子科技大学出版社. 2000 .32 潘松等编著.EDA 技术实用教程.科学出版社.2002.103 潘松等编著. VHDL 实用教程.电子科技大学出版社.2002.64 戈素贞等. 采用EDA 技术实现4位十进制数字密码锁.山西电子技术.2002.12,16~205 刘钰等.一种用VHDL 语言设计的数字密码锁.信息技术与信息化.2004.4, 37~40作者简介:胡红艳(1966-),女,湖南衡南人,湖南建材高等专科学校工程师Email: hongyanhu_66@邮政编码: 421008通信地址: 湖南建材高等专科学校电信系 湖南衡阳市雷公塘14号。

合集下载

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四位密码锁课程设计EDA

VHDL四位密码锁课程设计EDA

电子与信息工程学院EDA课程设计报告(2011 —2012 学年第一学期)课程名称:EDA课程设计与实现班级:电子0903学号:姓名:指导教师:陈智萍2011年09月一、目的1.掌握VHDL语言的使用,学会用VHDL语言来编程解决实际问题;2.学会使用EDA开发软件设计小型综合电路,掌握仿真的技巧;3.学会应用开发系统实现硬件电路,检验电路的功能。

二、内容和要求用VHDL语言设计一个密码锁,用波形仿真验证其功能后,实现到GW48实验系统。

功能描述:用于模仿密码锁的工作过程。

完成密码锁的核心控制功能。

功能要求:设计一个密码锁,平时处于等待状态。

管理员可以设置或更改密码。

如果不预置密码,密码缺省为“1234”。

用户如果需要开锁,按相应的按键进入输入密码状态,输入4位密码,按下确定键后,若密码正确,锁打开;若密码错误,将提示密码错误,要求重新输入,三次输入都错误,将发出报警信号。

报警后,只有管理员作相应的处理才能停止报警。

用户输入密码时,若输入错误,在按下确定键之前,可以通过按取消键重新输入。

正确开锁后,用户处理完毕后,按下确定键,系统回到等待状态。

系统操作过程中,只要密码锁没有打开,如果60秒没有对系统操作,系统回到等待状态。

要求密码在输入过程中被依次显示,即先输入的为密码的第一位,总是显示在最左边。

用两个发光二极管模拟显示,其中一个显示当前的工作模式,灭表示用户模式,亮表示管理员模式;另外一个指示锁的状态,灭表示锁处于锁定,亮表示锁被开启。

注意:用两个按键实现密码输入,Key1选择输入的是第几位密码,KEY2输入密码数字。

功能描述:初始状态:初次使用密码锁时,要先用Reset键初始化。

初始状态下,用户密码为“1234”,管理员密码为“0000”。

用户开锁:默认情况下,密码锁处于用户使用状态。

如果当前为管理员状态,则按下user键回到用户状态。

用户开锁时,输入四位数用户密码,可以从out_code6的输出状态确定密码输入状态。

VHDL设计电子密码锁

VHDL设计电子密码锁
( 五) 可移植性好,VHDL 语言是一种标准语言, 易于共享,复用移植,VHDL 的 设 计 可 以 被 不 同 的 EDA 工具支持。
( 六) 上市时间快,成本低。VHDL 语言描述快 捷,修改方 便,使 产 品 设 计 的 前 期 风 险 投 资 降 到 最 低,提高产品上市的速度,同时节省了人力。
三、电子密码锁的设计( 键盘和显示电路) 电子密码锁的设计将分成三个部分,键盘接口 电路的设计、密码锁的控制电路设计、输出七段显示 电路的设计。 ( 一) 键盘接口的设计 键盘上的每一个按键其实是一个开关电路,当 某键被按下时,该按键的接点会呈现逻辑 0 的状态, 反之,未被按下时则呈现逻辑 1 状态。扫描信号由 KY3 ~ KY0 进入键盘,变化顺序为 1110 →1101 → 1011 →0111→1110 的状态。每次扫描一排,依次的 周而复始。 若从 KX2 ~ KX0 读出皆为 1 时,代表该列没有 按键按下,则不进行按键编码的动作,反之,有按键 按下时,应将 KX2 ~ KX0 读出值送至译码电路. 且 将编码结果存储于寄存器中。 1. 时序产生电路———是用一个自由计数器来产 生各种需要的频率。 2. 键盘扫描电路———提供键盘扫描信号。 3. 弹跳消除电路———按键抖动会引起一次按键 被误读多次,为了避免这种情况的发生,该电路可以 在键闭合 稳 定 时 读 取 按 键 的 状 态,确 保 键 的 一 次 闭合。 4. 键盘译码电路———除了负责将键盘送出的数 据进行译码之外,另一任务是在译码同时,判断按下 的键盘是数字见还是功能键。 5. 键盘存储电路———因为次扫描会产生新的按 键数据,可能会覆盖前面数据,所以需要一个按键存 储电路,用移动寄存器构成。
一、引言 随着生产和科学技术的发展,复杂的逻辑系统 越来越广泛地运用于科学和工程实践当中。那么这 样一来,必然要求整个电路从设计规模和复杂程度 上有一个大幅度的提高而封装尺寸则尽量要求做到 微小化。为此,生产商必须采用少量的 IC 器件和面 积尽可能小的 PCB 板来研制高集成化的复杂系统。 但是,从设计的角度来看,以往采用的那种电原理图 的设计输入的门级描述方法却严重制约了产品的开 发能力。随着半导体技术的不断进步,现代电子产 品的复杂度也在日益加大,一个电子系统可能由数 万个中小规模通用集成电路构成,这就带来了体积 大、功耗大、可靠性差的问题,解决这一问题的有效 方法就 是 采 用 ASIC ( Application Specific Integrated Circuits) 芯片进行设计。 二、VHDL 的特点 可编程 ASIC 也称为可编程逻辑器件( Programmable Logic Device) 。可编程逻辑器件是 70 年代发 展起来的一种新型逻辑器件,当初主要用以解决数 字系统中各类存储问题,发展至今已经成为实现数 字系统的一种重要手段。可编程逻辑器件实现了设 计阶段的硬件仿真( Emulation) ,使得微电子设计实 现了早期集成和软硬件联合验证。设计者可以快速 地创建一个芯片设计的硬件模型,利用仿真软件将

基于VHDL语言的智能密码锁设计

基于VHDL语言的智能密码锁设计

基于VHDL语言的智能密码锁设计
胡红艳;李旭华
【期刊名称】《微计算机信息》
【年(卷),期】2006(022)014
【摘要】本文介绍一种利用EDA技术和VHDL语言,在MAX+PLUSⅡ环境下,设计了一种新型的智能密码锁.它体积小、功耗低、价格便宜、安全可靠,维护和升级都十分方便,具有较好的应用前景.
【总页数】3页(P248-249,102)
【作者】胡红艳;李旭华
【作者单位】421008,湖南建材高等专科学校电气与信息工程系;421008,湖南建材高等专科学校电气与信息工程系
【正文语种】中文
【中图分类】TQ050.3
【相关文献】
1.基于VHDL语言的双六位数字密码锁设计 [J], 孟海斌
2.基于VHDL语言的智能拨号报警器的设计 [J], 刘桂华;马建国
3.基于VHDL语言有限状态机的电子密码锁设计 [J], 徐大诏
4.基于VHDL语言的智能密码锁设计 [J], 胡红艳;李旭华
5.基于VHDL语言的串行密码锁设计 [J], 尤国平;陈新;林伟;黄世震
因版权原因,仅展示原文概要,查看原文内容请购买。

基于VHDL语言有限状态机的电子密码锁设计

基于VHDL语言有限状态机的电子密码锁设计

设计 , 按功能划分为若干模块, 然后对每一个模块进 一步细分, 直 至得 到简单 易实现 的子模块 ,最后分别对各个子模块进行 V HDL建模 。所设计的 电子密码锁 F P G A 内部系统结构框 图 如图 1 所示 。系统主要 由 6个模块构成 , 分别是控制模块、 计 数器模块 、 寄存器模块 、 比较模块 、 编码模块和显示模块 。
・密码脉冲 ( p s i ) 作为计数 时钟 , 计数
值 输 出作 为 寄 存 器 的地 址 , 当 计 数器 计 到 4时 , 计 数 器计 满 信 号c i n = l , 如 果 通 过 比较模 块 比较 密 码 正 确 的 话 , 则 进 入 密码 初 验正确状态 , 如果密码错误 , 则进入密码初验错误状态; 在 密
2 . 1控 制模 块 的设计 与 实现
控 制模 块是整个系统的核心,其主 要作 用是接 收按键 和 其 他模块传 递来的信 号,然后 根据 系统的功能产 生相 应的控 制 信号并送 到相 关的模块 ,同时控制钥匙信 号 ( 开锁或上锁) 和报警信号。控制模块采用有限状态机进行设计,根据系统
还包括无线二维码识别器、教学网络服务平台的设计及各部 件之间的多种无线通信对接、 音视频互动输 出等 , 并且学习平 台的有效利用还离不开二维码教学资源的制作及相应网络资
源的建设 。
[ 4 ] 徐凯, 钱燕, 魏宗群, 蔡俊 , 仇捷. 基于 T MS 3 2 0 D M3 6 5的 3 G 实时视频传输 系统 设计 与实现[ J ] . 浙江农业科学, 2 0 1 2 基金项 目: 淮安信息职业技术学院科研基 金项 目“ 基于物联网 的互动学习平 台研 发( 课题编号: h x y q 2 0 1 3 0 1 3 ) ” 研 究成果 。 作者简介: 龚佑红 ( 1 9 8 0 . ) , 女, 湖北公安人, 硕士 , 讲师 , 工程

(完整word版)vhdl 密码锁

(完整word版)vhdl 密码锁

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

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

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

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

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

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

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

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

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

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

3、自拟其它功能。

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

总体框图时钟分频器防抖动密码锁控制器键盘输入功能键矩阵显示数码管显示与扫描报警系统bt catledrow,ledcolledclk clk1clk2col分块设计时钟模块:密码锁的工作时钟由外部晶振提供,时钟频率为50Mhz。

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

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

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

反之则不亮。

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

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

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

设计一个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密码锁设计

基于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是由控制模块来提供的。

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才能停⽌。

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