- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
摘要
FPGA/VHDL是近几年集成电路中发展最快的产品。由于FPGA性能的高速发展以及设计人员自身能力的提高,可编程逻辑器件供应商将进一步扩大可编程芯片的领地,将复杂的专用芯片挤向高端和超复杂应用。据ICInsights的数据显示,FPGA市场从1999年的29亿美元增长到去年的56亿美元,几乎翻了一番。Matas预计这种高速增长局面以后很难出现,但可编程逻辑器件依然是集成电路中最具活力和前途的产业。
本文介绍的VHDL密码锁应具有如下功能:密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时开锁;当结果不同时不开锁。用户需要修改密码时,先开锁,再按“设定密码”,清除预先存入的密码,通过键盘输入新的2位十进制码,按“确定”完成。
关键词:VHDL,密码锁,矩阵
目录
TOC\o1-3\h\z\u摘要 1
目录 2
一、设计要求 3
二电路组成 3
三功能电路的设计 4
1、总体设计框图 4
2、键盘接口电路 4
3.时序产生电路 6
4.键盘扫描电路 7
5.键盘消抖电路 8
6.键盘译码电路 10
7.按键存储电路 13
(1)SISO—串行输入/串行输出 14
(2)SIPO--串行输入/并行输出 15
(3)PISO--并行输入/串行输出 16
(4)PIPO--并行输入/并行输出 17
8.密码设置和比较模块 18
9.电锁控制电路设计 19
(1)数字按键输入部分 19
(2)功能键输入部分 19
(3)三种工作模式 19
附件1:程序清单 20
一、设计要求
设计一个简单的数字电子密码锁,密码为6位。
功能
1、密码输入:每按下一个键,要求在数码管上显示,并依次左移;
2、密码清除:清除密码输入,并将输入置为”000000
3、密码修改:将当前输入设为新的密码;
4、上锁和开锁。
二电路组成
为达到以上功能,可将电子密码锁分为以下几个模块:
1、键盘接口电路
键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储。
2、电锁控制电路:
数字按键输入、存储及清除。
功能按键的设计。
密码清除、修改与存储。
电锁的激活与解除。
3、输出显示电路
BCD译码、动态扫描电路。
三功能电路的设计
1、总体设计框图
2、键盘接口电路
矩阵式键盘工作原理:
矩阵式键盘是一种常见的输入装置,在计算机、电话、手机、微波炉等各工电子产品中被广泛应用。如图所示为一3×4矩阵式键盘。矩阵式键盘以行、列形式排列,图中为4行3列,键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0的状态,键盘的扫描可以以行扫或列扫方式进行,图中为行扫方式,KEYR3—KEYR0为扫描信号,其中的某一位为0即扫描其中的一行,具体见表1-1.
键盘扫描信号KEYR3与第一行相连,KEYR2与第二行相连,依此类推。很显然,扫描信号的变化顺序为:0111、1011、1101、1110,周而复始。在扫描的过程中,当有键按下时,对应的键位就为逻辑0状态,从而从KEYC2..0读出的键值相应列为0.具体情况如表1-2所示:
若从KEYC2..0读出的值全为1时,表示没有键被按下,则不进行按键的处理。如果的键被按下,则将KEYC2..0读出的送至键盘译码电路进行译码。
表1-2键盘扫描与其对应的键值的关系时序产生电路:
时序电路的产生:
在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。
3.时序产生电路
有如下VHDL程序,请分析其输出结果:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfree_counterIS
PORT(
CLK:INSTD_LOGIC;
CLK_A:OUTSTD_LOGIC;
CLK_B:OUTSTD_LOGIC_VECTOR(1DOWNTO0)
);
ENDfree_counter;
ARCHITECTUREaOFfree_counterIS
SIGNALQ:STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLKEVENTANDCLK=1
文档评论(0)