基于VHDL的电子密码锁的设计(1)

合集下载

彭胜-基于VHDL的电子密码锁设计与实现正文

彭胜-基于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的电子密码锁的设计(1)

基于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语言的电子密码锁v1.0

基于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的电子密码锁的设计论文

摘要FPGA/VHDL是近几年集成电路中发展最快的产品。

由于FPGA性能的高速发展以及设计人员自身能力的提高,可编程逻辑器件供应商将进一步扩大可编程芯片的领地,将复杂的专用芯片挤向高端和超复杂应用。

据IC Insights的数据显示,FPGA市场从1999年的29亿美元增长到去年的56亿美元,几乎翻了一番。

Matas预计这种高速增长局面以后很难出现,但可编程逻辑器件依然是集成电路中最具活力和前途的产业。

本文介绍的VHDL密码锁应具有如下功能:密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时开锁;当结果不同时不开锁。

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

关键词:VHDL,密码锁,矩阵目录摘要 (1)目录 (3)一、设计要求 (5)二电路组成 (5)三功能电路的设计 (7)1、总体设计框图 (7)2、键盘接口电路 (7)3.时序产生电路 (10)4.键盘扫描电路 (12)5.键盘消抖电路 (15)6.键盘译码电路 (19)7.按键存储电路 (26)(1)SISO—串行输入/串行输出 (26)(2)SIPO--串行输入/并行输出 (28)(3)PISO--并行输入/串行输出 (30)(4)PIPO--并行输入/并行输出 (32)8.密码设置和比较模块 (34)9.电锁控制电路设计 (36)(1)数字按键输入部分 (37)(2)功能键输入部分 (37)(3)三种工作模式 (38)附件1:程序清单 (39)一、设计要求设计一个简单的数字电子密码锁,密码为6位。

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

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

《基于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语言的电子密码锁设计组长:李柳 201254080308 组员:刘永兴 201254080201 邝七月 201254080209庄美琳 201254080303王常汉 201154080121系统的原理设计(1)数码输入:每按下一个数字键,就输入一个数值,并在显示器的最右方显示该数,同时将先前输入的数依次左移一位。

(2)数码清除:按下此键会清除前面所有的输入值,成为“0000”。

(3) 激活电锁:按下此键可将密码锁上锁。

(4) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。

作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。

作为电子密码锁的输入电路,可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。

虽然机械式键盘存在一些诸如机械产生的弹跳消除问题和机械部分的接触等问题,但是和触摸式的4×3键盘相比,机械式键盘具有低成本、可靠性高、构成电路简单、技术成熟和应用广泛等特点,因此将其应用到通用数字电子密码锁中还是比较适宜的。

本设计中采用一个4×3的通用数字机械键盘作为该设计的输入设备。

数字电子密码锁的显示信息电路可采用LED数码管显示和液晶屏幕显示两种。

液晶屏幕显示具有高速显示、高可靠性、易于扩展和升级等优点,但是普通液晶显示屏存在亮度低、对复杂环境的适应能力差等缺点,在低亮度的环境下还需要加入其他辅助的照明设备,驱动电路设计相对复杂,因此本设计的显示电路仍使用通用的LED数码管。

根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,密码锁结构框图如图4-1所示。

图4-1 密码锁结构框图键盘:用户对系统输入密码,采用4×3数字机械式键盘实现显示器:用来显示输入的密码,采用4个LED数码管实现时钟脉冲器:用来产生方波信号CPLD控制部分:核心部分,实现分频、内部逻辑、数字比较、数据存储、译码等功能整个电子密码锁系统的总体组成框图如图4-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端口为数码管位选选择端口。

基于VHDL语言的8位数字密码锁设计

基于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如下图BCD 七段译码显示电路显示模块图3.1上图为单脉冲控制输入,当M给一上升沿信号将在PUL输出一位与之对应的高或低电平。

四位串行输入并行输出寄存器如下图3.2图3.2上图为4为串行输入并行输出寄存器,它由4个D触发组成,当reset为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位。

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

《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语言设计此电子密码锁。

用一片FBDA芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。

这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性和保密性。

另外,采用可编程逻辑器件开发的数字系统,方便地升级和改进。

3.1 系统总框图本系统的硬件部分主要由密码锁控制电路、密码锁显示电路、LED显示电路、报警电路、密码更改与设置电路组成。

整体系统框图如下图2.1所示。

密码锁总框图3.2密码锁的内部结构及主要功能3.2.1密码锁的主要功能密码锁控制器的主要功能有:(1)密码输入:有二个按键来控制(分别代表0和1),每按下一个键,要求在数码管上显示,并依次左移。

(2)密码校验:如果有按键按下,直到松开该按键;红绿灯指示门的状态,也就是密码校验结果,如果密码校验正确,绿亮起,否则如果密码校验错误红灯亮,并凤鸣器响,表明密码错误。

(3)错误报警:密码输入错误开始报警。

(4)密码修改:输入密码正确后4秒内按按键输入要设置和更改的密码,按按键确认密码设置与更改,则密码设置成功4 系统硬件电路4.1 密码锁的显示模块段数码管是电子开发过程中常用的输出显示设备。

在本设计中使用的是8个四位一体、共阴极型七段数码管。

其单个静态数码管如下图所示。

由于七段数码管公共端连接到GND(共阴极型),当数码管的中的一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相反。

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

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

4.2 密码锁控制模块该模块的作用是将输入的密码(暂时寄存于ACC中)跟已经存储的密码(REG中的密码信息)进行对比,如果一样,则密码锁开锁。

而在通过密码验证后可以按按键设定密码。

在这里值得注意的是有一个密码“0000”为开始密码,如果改名密码了但是又忘记了密码,重新下载之后的初始密码只要输入的密码为“0000”则都可通过密码锁。

模块lock是整个设计的核心,它实现密码锁的逻辑功能。

在任何时候按动密码初始化按键内密码设置为程序初始化密码值(在本模块程序中此值为“0000”代码为4位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯(緑灯)亮。

否则,系统进入“错误”状态,并发出报警信号。

串行数字锁的报警方式是点亮指示灯(红灯),并使喇叭鸣叫,直到按下复位开关,报警才停止。

此时,数字锁又自动进入等待下一次开锁的状态。

该4位串行电子密码锁设置4位二进制密码,要求锁内给定的密码是可调的,且设置方便,保密性好。

其具体操作分为输入密码和修改密码两部分4.2.1输入密码密码输入值的比较主要有两部分,密码位数和内容,任何一个条件不满足,都不能打开锁。

若锁内密码为“0000” , key2和key1置低电平,分别表示输入“1” 和“0” 。

输入密码前先进行复位操作,再按着从密码最低位到最高位的顺序依次正确输入0000,会在数码管逐一显示。

经检验,输入的密码等于锁内预先设置的密码密码锁开启信号,锁开启。

同时,密码修改控制信号rw置低电平。

若在输入密码的过程中,4位二进制密码出现输入错误,那么锁不能开启,同时,指示灯红灯亮,发出报警信号。

直到按下复位开关,报警才停止。

此时,数字锁又自动进入等待下一次开锁的状态。

4.2.2修改密码为防止任意进行密码修改,必须在正确输入密码后,才能重新设置密码。

输入正确密码后,锁打开,同时,密码修改控制信号按键rw置低电平,就可直接进行修改密码的操作。

修改密码实质就是用输入的新密码去取代原来的旧密码,按确定按键ok,存储新密码时.5 VHDL程序设计密码锁控制器的各个功能模块都是通过VHDL语言来完成的。

本设计由密码锁显示显示模块、分频模块、密码输入及校验模块、报警模块、密码更改与设置模块几部分组成,各模块分工合作,最后达到密码锁控制器设计的要求。

表4-1 程序的管脚分配表VHDL程序总代码libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entity lock isport(key1,key2:instd_logic;clk,start,ok,reset,rw,clr: in std_logic;red,green,beep:outstd_logic:='1';dig:outstd_logic_vector(7 downto 0);seg:outstd_logic_vector(7 downto 0));end lock;architecture rt1 of lock issignalkeyin,password:std_logic_vector(3 downto 0):="0000"; signal open1:std_logic:='0';signal beep1:std_logic:='1';signala,shuru:std_logic;signal count: std_logic_vector(2 downto 0):="000";signal temp: std_logic_vector(1 downto 0):="00";process(clk)variable m:integer range 0 to 10;beginifclk'event and clk='1'thenif m=9 thenm:=0;a<='1';elsem:=m+1;a<='0';end if;end if;end process;process(clk,start,ok,clr,rw,reset)beginifclk'event and clk='1'thenif reset='0' thenred<='1';green<='1';beep1<='1';open1<='0';keyin<="0000";shuru<='0';count<= "000";end if;if start='0' thenshuru<='1';end if;ifrw='0' and open1='1'thenshuru<='1';count<="000";end if;if clr='0' thenkeyin<="0000";count<="000";shuru<='1';elsif a='1' and shuru='1' thenif key1='0' thenkeyin<=keyin(2 downto 0)&'0';elsif key2='0' thenkeyin<=keyin(2 downto 0)&'1';if count="011" thenshuru<='0';count<=count+1;elsecount<=count+1;end if;end if;if ok='0'and open1='0' thenif (keyin=password)thenred<='1';green<='0';open1<='1';elsered<='0';green<='1';beep1<='0';open1<='0'; end if;end if;if ok='0'and open1='1'thenpassword<=keyin;end if;end if;end process;process(clk,start,ok,clr,rw,reset)variable g:integer range 0 to 49999999; beginifclk'event and clk='1'thenif g=49999999 theng:=0;elseg:=g+1;end if;if g<=24999999 and beep1='0' thenbeep<='0';elsebeep<='1';end if;end if;end process;process(clk)variable n:integer range 0 to 50000; beginifclk'event and clk='1'thenif n=49999 thenn:=0;if temp="11"thentemp<="00";elsetemp<=temp+1;end if;elsen:=n+1;end if;if count="001" thencase temp iswhen"00" => dig<="01111111" ;ifkeyin(0)='0'then seg<="11000000"; elseseg<="11111001";end if;when others =>seg<="11111111" ; end case ;elsif count="010" thencase temp iswhen"00" => dig<="01111111" ;ifkeyin(1)='0'then seg<="11000000"; elseseg<="11111001";end if;when"01" => dig<="10111111" ; ifkeyin(0)='0'then seg<="11000000"; elseseg<="11111001";end if;when others =>seg<="11111111" ;end case ;elsif count="011" thencase temp iswhen"00" => dig<="01111111" ;ifkeyin(2)='0'then seg<="11000000"; elseseg<="11111001";end if;when"01" => dig<="10111111" ; ifkeyin(1)='0'then seg<="11000000"; elseseg<="11111001";end if;when"10" => dig<="11011111" ; ifkeyin(0)='0'then seg<="11000000"; elseseg<="11111001";end if;when others =>seg<="11111111" ; end case ;elsif count="100" thencase temp iswhen"00" => dig<="01111111" ;ifkeyin(3)='0'then seg<="11000000"; elseseg<="11111001";end if;when"01" => dig<="10111111" ;ifkeyin(2)='0'then seg<="11000000"; elseseg<="11111001";end if;when"10" => dig<="11011111" ; ifkeyin(1)='0'then seg<="11000000"; elseseg<="11111001";end if;when"11" => dig<="11101111" ; ifkeyin(0)='0'then seg<="11000000"; elseseg<="11111001";end if;when others =>null;end case ;elsedig<="11111111" ;seg<="11111111";end if;end if;end process ;end rt1;6 系统仿真当各个模块分别编译成功后,则创建一个个元件符号。

相关文档
最新文档