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

VHDL语言及应用课程设计论文----VHDL平台下密码锁的设计学院:电子信息学院专业:学号:姓名:指导老师:团队成员:完成日期:目录一. 引言-----------------------------------------------------------1二. 实验目的-------------------------------------------------------1三. 实验任务与要求-------------------------------------------------1四. 设计原理及工作流程---------------------------------------------2密码锁设计原理--------------------------------------------------2密码锁系统框图--------------------------------------------------2密码锁设计提示--------------------------------------------------2五. 密码锁的顶层设计源程序-----------------------------------------3六. 密码锁各功能模块源程序及其仿真分析-----------------------------5密码设定锁存器源程序及其仿真分析--------------------------------5密码输入锁存器源程序及其仿真分析--------------------------------6开锁控制系统源程序及其仿真分析----------------------------------8比较器源程序及其仿真分析----------------------------------------9LED显示源程序及其仿真分析--------------------------------------11顶层源文件的仿真分析-------------------------------------------12七. 密码锁设计源程序的下载调试------------------------------------13电路结构-------------------------------------------------------13管脚分配-------------------------------------------------------14程序下载调试过程-----------------------------------------------14八. 实验分析与总结------------------------------------------------15九. 组内分工------------------------------------------------------16十. 参考文献------------------------------------------------------16一. 引言随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
vhdl密码锁

Vhdl短学期实验——密码锁设计小组成员:04008230 李黎04008228 陈宗渊04008211 周炳宇页脚内容1一、课题描述:用于模仿密码锁的工作过程。
完成密码锁的核心控制功能。
二、功能要求:设计一个密码锁,平时处于等待状态。
管理员可以设置或更该密码。
如果不预置密码,密码缺省为“999999”。
用户如果需要开锁,按相应的按键进入输入密码状态,输入6位密码,按下确定键后,若密码正确,锁打开,若密码错误,将提示密码错误,要求重新输入,三次输入都错误,将发出报警信号。
报警后,只有管理员作相应的处理才能停止报警。
用户输入密码时,若输入错误,在按下确定键之前,可以通过按取消键重新输入。
正确开锁后,用户处理完毕后,按下确定键,系统回到等待状态。
系统操作过程中,只要密码锁没有打开,如果60秒没有对系统操作,系统回到等待状态。
注意:输入按键信号时必须一个按键一个按键输入,不得6个按键一起输入。
三、设计流程:1.结构框图:页脚内容2页脚内容3①按键输入;②复位(设置缺省密码);③等待状态④工作状态⑤修改密码⑥提醒错误及报警⑦开锁⑧恢复等待2.模块设计:★控制模块:实现输入输出,实现等待工作的转换,实现开锁及报警;★比较模块:比较输入密码与正确密码★寄存模块:存放密码★计数及使能模块:(1)输入个数为6,多于无效自动忽略;(2)60s的空闲时间,无操作返回等待;(3)错误次数为3页脚内容4(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);页脚内容5end ctrl;architecture ctrl_behave of ctrl issignal sec : integer range 0 to 60;beginprocess(clk)beginif (clk'event and clk='1') thenif (vers='1') thenenable<='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;页脚内容6if (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页脚内容7( 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;页脚内容8beginprocess(clk)beginif (clk'event and clk='1') thenif (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';页脚内容9elsealarm<='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;页脚内容10vering<='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;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;页脚内容11entity 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;页脚内容12signal 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";页脚内容13cd6<="1001";end if;if (change='1') thenchanging<='1';end if;if (changing='1') thenif (ready='1') thenif (result='1') thencd1<=dt1;cd2<=dt2;cd3<=dt3;cd4<=dt4;cd5<=dt5;cd6<=dt6;wting<='1';end if;changing<='0';页脚内容14end 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;页脚内容15entity 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 isbeginprocess(clk)beginif (clk'event and clk='0') thena(3)<=a3;a(2)<=a2;页脚内容16a(1)<=a1;a(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;页脚内容17ok : 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;页脚内容18if (count=0) thendt1<=a;elsif (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;页脚内容19if (cancel='1') thencount<=0;dt1<="1111";dt2<="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') thenif (cready='1') then页脚内容20ready<='1';elseready<='0';end if;end if;end if;end process;end keyin_behave;‘※各个模块与设计存在出入,但基本要求都达到,主要是小组分工时,没有能完全按照模块分块设计※计数器模块分散开没有单独形成模块※具体信号意义见仿真页脚内容21Block图:页脚内容22五、仿真:Reset:重置(缺省)A:输入k:判断有效输入OK:确认Cancel:取消Ver:进入工作(比较)Change:修改密码Clk:时钟信号Result:开锁En-out:使能Wrong:报错Alarm:报警Stopalarm:停止操作(管理员使用)1.验证缺省密码为999999(reset键);页脚内容242.验证输入错误取消输入,重新输入(cancel键);3.验证60秒无操作自动返回等待界面(en-out和result归零);页脚内容254.验证有效按键“k”,只有k为高电平有效;5.验证用户操作完成,再次按ok键,自动返回等待键;页脚内容266.验证输入密码错误发出提示信号,连续三次输入错误,发出报警信号,只有按下stopalarm才能停止。
verilog的密码锁课程设计

verilog的密码锁课程设计一、课程目标知识目标:1. 学生理解Verilog硬件描述语言的基本语法和结构;2. 学生掌握用Verilog设计简单的数字电路,特别是组合逻辑和时序逻辑;3. 学生能够描述密码锁的工作原理及其在数字系统中的应用;4. 学生了解基本的硬件仿真概念,并能运用到密码锁的设计中。
技能目标:1. 学生能够运用Verilog编写代码实现一个简单的密码锁电路;2. 学生能够通过仿真软件验证密码锁设计的正确性和功能;3. 学生能够对密码锁进行测试,并分析结果,进行故障诊断和修正;4. 学生具备团队协作能力,能在小组内有效沟通,共同完成密码锁的设计。
情感态度价值观目标:1. 学生培养对数字电路设计和硬件描述语言的兴趣,激发创新意识和探索精神;2. 学生通过实践活动,培养耐心、细致和严谨的科学态度;3. 学生在学习过程中,强化安全意识,了解密码学在实际生活中的重要意义;4. 学生通过小组合作,培养团队精神,学会尊重他人意见,共同进步。
课程性质:本课程属于实践性较强的课程,结合理论知识与实际操作,使学生在实践中掌握Verilog语言及数字电路设计。
学生特点:学生具备一定的数字电路基础,对编程和设计有一定的兴趣,喜欢动手实践。
教学要求:注重理论与实践相结合,强调学生动手能力,通过项目驱动教学,使学生能将所学知识运用到实际中。
同时,注重培养学生的团队协作能力和解决问题的能力。
二、教学内容1. Verilog基础知识回顾:包括数据类型、运算符、控制语句等,确保学生具备基本的编程能力。
(对应教材第2章)2. 数字电路设计基础:复习组合逻辑和时序逻辑设计原理,理解触发器、计数器等基本电路的工作原理。
(对应教材第3章)3. 密码锁原理讲解:介绍密码锁的构成、工作原理及其在现实生活中的应用。
(对应教材第5章)4. Verilog设计密码锁:教授如何运用Verilog语言编写密码锁代码,包括密码比对、锁的控制逻辑等。
基于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为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位。
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. 课程设计与实践:安排课程设计任务,指导学生分组进行电子密码锁的设计、编程、仿真和调试,培养学生实践能力和团队协作精神。
EDA课程设计(基于VHDL语言的8位数字密码锁设计)

东华理工大学机械与电子工程学院基于VHDL语言的8位数字密码锁设计一、摘要:数字控制的电子密码锁已经广泛应用在办公室、公司、宾馆、小区住宅等场所。
EDA技术的应用引起了电子产品系统开发的革命性变革。
利用先进的EDA工具,基于硬件描述语言,可以进行系统级数字逻辑电路的设计。
本文简述了VHDL语言的功能及其特点,并以8位串行数字锁设计为例,介绍了在QUARTUS II 6.0开发软件下,利用VHDL硬件描述语言设计数字逻辑电路的过程和方法。
关键词: QUARTUS II 6.0 EDA 电子密码锁(电子设计自动化) VHDL语言语言设计串行密码锁硬件描述语言数字逻辑电路Based on VHDL language 8 digits combination lock design Digital control of electronic locks has widely used in office, companies, hotels, residential area and etc.EDA technology application caused a electronic product development system of the revolutionary transformation. Using advanced EDA tools, hardware based description language, can undertake system in digital logic circuit design. This paper describes the function and characteristics of VHDL language, and eight serial number lock design as an example, this paper introduces QUARTUS II 6.0 software development in of VHDLhardware design of digital logic circuit process and method.Keywords: QUARTUS II 6.0, EDA (electronic design automation), electronic locks and VHDL language, language design, serial, locks and hardware description language, digital logic circuit二、引言:电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁密码,更新或配制钥匙里开锁密码。
基于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语言的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为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位。
3.1.3程序的输入在文本区内输入程序,程序如下:单脉冲信号控制puls.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY puls ISPORT (PUL,M:IN STD_LOGIC;Q:OUT STD_LOGIC);END puls;ARCHITECTURE BEHA VE OF puls ISSIGNAL TEMP:STD_LOGIC;BEGINPROCESS(M)BEGINIF M'EVENT AND M='1' THENIF PUL='1' THENTEMP<='1';ELSE TEMP<='0';END IF;END IF;END PROCESS;Q<=TEMP;END BEHA VE;4位串行输入并行输出寄存器shifter.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shifter ISPORT(din:IN STD_LOGIC;reset,CLK: IN STD_LOGIC;qout: buffer STD_LOGIC_VECTOR(0 TO 3));END shifter;ARCHITECTURE act OF shifter ISBEGINPROCESS(CLK)V ARIABLE q:STD_LOGIC_VECTOR(0 TO 3);BEGINIF reset='0' THENq:=(others=>'0');ELSEif clk'event and clk='1' thenq(3):=q(2);q(2):=q(1);q(1):=q(0);q(0):=din;END IF;END IF;qout<=q;END PROCESS;END architecture act;3.2 控制模块3.2.1功能介绍开锁时输入密码后,拨动RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出LOCKOPEN灯灭,LOCKCLOSE灯亮,表示开锁成功。
当密码输入错误时,LOCKOPEN灯亮,LOCKCLOSE灯灭,表示开锁失败。
当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。
按下REST可清除前面的输入值,清除为“888”。
3.2.2控制模块与仿真图形输入译码器图3.3,如下图图3.3上图为译码器将4位二值代码转化成BCD码从“0000”~“1001”表示0~9。
表3-1输入译码的真值表输入输出D C B A Y1 Y2 Y3 Y4 字形0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 1 10 0 1 0 0 0 1 0 20 0 1 1 0 0 1 1 30 1 0 0 0 1 0 0 40 1 0 1 0 1 0 1 50 1 1 0 0 1 1 0 60 1 1 1 0 1 1 1 71 0 0 0 1 0 0 0 81 0 0 1 1 0 0 1 9表3-1总功能控制模块图3.4,如下图图3.4当CHANGE为高电平且rt为低电平时开始输入密码这时lockopen为高电平,而lockclose为低电平,当rt为高电平,change为低电平时开始检测密码,如上图开始密码为“108”当再次出现“108”时lockopen为高电平,而lockclose 为低电平,当密码错误时lockopen为低电平,而lockclose为高电平。
4选1选择器与扫描器图3.5,如下图图3.5如上图多路选择器可以从多组数据来源中选取一组送入目的地,在本设计中利用多路选择器做扫描电路来分别驱动输出装置,可以将低成本消耗,如上图当输入“819”时,在时钟地控制下qout将输出“819”,而与之对应的sel扫描对应的数码管。
在文本区内输入程序,程序如下:输入译码器KEY.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY KEY ISPORT(clk:IN STD_LOGIC;data:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);q1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY KEY;ARCHITECTURE ART OF KEY ISBEGINPROCESS(clk,data)ISBEGINIF clk'EVENT AND clk='1' THENCASE data ISWHEN "0000"=>q<="0000";q1<="0000";WHEN "0001"=>q<="0001";q1<="0001";WHEN "0010"=>q<="0010";q1<="0010";WHEN "0011"=>q<="0011";q1<="0011";WHEN "0100"=>q<="0100";q1<="0100";WHEN "0101"=>q<="0101";q1<="0101";WHEN "0110"=>q<="0110";q1<="0110";WHEN "0111"=>q<="0111";q1<="0111";WHEN "1000"=>q<="1000";q1<="1000";WHEN "1001"=>q<="1001";q1<="1001";WHEN OTHERS=>q<="0000";q1<="0000";END CASE;END IF;END PROCESS;END ARCHITECTURE ART;总功能控制模块Eleclock.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Eleclock ISPORT(NB:IN STD_LOGIC_VECTOR(3 DOWNTO 0); NS:IN STD_LOGIC_VECTOR(3 DOWNTO 0); NG:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK:IN STD_LOGIC;CHANGE,RT: IN STD_LOGIC;DB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); LOCKOPEN,LOCKCLOSE:OUT STD_LOGIC);END ENTITY Eleclock;ARCHITECTURE ART OF Eleclock IS COMPONENT Key ISPORT(CLK:IN STD_LOGIC;DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);Q1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT Key;SIGNAL ENABLE,C0,C1,S,ENABLE1:STD_LOGIC;SIGNAL TB,TS,TG,D_B,D_S,D_G:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINENABLE<=CHANGE AND(NOT RT);ENABLE1<=RT AND(NOT CHANGE);U0:KEY PORT MAP(CLK=>CLK,DATA=>NB,Q=>DB,Q1=>D_B);U1:KEY PORT MAP(CLK=>CLK,DATA=>NS,Q=>DS,Q1=>D_S);U2:KEY PORT MAP(CLK=>CLK,DATA=>NG,Q=>DG,Q1=>D_G); PROCESS(CLK,D_B,D_S,D_G) ISBEGINIF CLK'EVENT AND CLK='1' THENIF ENABLE='1' THENTB<=D_B;TS<=D_S;TG<=D_G;END IF;IF ENABLE1='1' THENIF ( TB<=D_B AND TS<=D_S AND TG<=D_G) THENLOCKOPEN<='1';LOCKCLOSE<='0';ELSELOCKOPEN<='0';LOCKCLOSE<='1';END IF;END IF;END IF;END PROCESS;END ARCHITECTURE ART;4选1选择器与扫描器sel.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sel ISPORT(QIN1,QIN2,QIN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK,RST:IN STD_LOGIC;QOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);sel:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END sel;ARCHITECTURE ART OF sel ISBEGINPROCESS(CLK,RST)V ARIABLE CNT:INTEGER RANGE 0 TO 2; BEGINIF (RST='0') THENCNT:=0;sel <="00000000";QOUT<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF CNT=2 THENCNT:=0;ELSECNT:=CNT+1;END IF;CASE CNT ISWHEN 0=>QOUT<=QIN1;sel <="11111110";WHEN 1=>QOUT<=QIN2;sel<="11111101";WHEN 2=>QOUT<=QIN3;sel<="11111011";WHEN OTHERS=>QOUT<="0000";sel<="11111111";END CASE;END IF;END PROCESS;END ARCHITECTURE ART;3.3 显示模块3.3.1功能介绍将密码用BCD七段数码管显示显示模块与仿真波形图3.6,如下图图3.6上图将BCD码转化到七段译码电路上表3-2 BCD-七段数码管的真值表输入输出D C B A Y1 Y2 Y3 Y4 Y5 Y6 Y7字形0 0 0 0 1 1 1 1 1 1 0 00 0 0 1 0 1 1 0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 2 0 0 1 1 0 1 1 1 0 0 1 3 0 1 0 0 0 1 1 0 0 1 1 4 0 1 0 1 1 0 1 1 0 1 1 5 0 1 1 0 1 0 1 1 1 1 1 60 1 1 1 1 1 1 0 0 0 0 71 0 0 0 1 1 1 1 1 1 1 8 1 0 0 1 1 1 1 0 0 1 1 9表3-2在文本区内输入程序,程序如下:Seg7.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY Seg7 ISPORT(num:IN STD_LOGIC_VECTOR(3 DOWNTO 0);led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END Seg7;ARCHITECTURE ACT OF Seg7 ISBEGINLED<="1111110"WHEN num="0000"ELSE"0110000"WHEN num ="0001"ELSE"1101101"WHEN num ="0010"ELSE"1111001"WHEN num ="0011"ELSE"0110011"WHEN num ="0100"ELSE"1011011"WHEN num ="0101"ELSE"1011111"WHEN num ="0110"ELSE"1110000"WHEN num ="0111"ELSE"1111111"WHEN num ="1000"ELSE"1111011"WHEN num ="1001"ELSE"1110111"WHEN num ="1010"ELSE"0011111"WHEN num ="1011"ELSE"1001110"WHEN num ="1100"ELSE"0111101"WHEN num ="1101"ELSE"1001111"WHEN num ="1110"ELSE"1000111"WHEN num ="1111";END ACT;4 总体设计电路图4.1功能介绍将各个模块连接在一起实现。