VHDL密码锁(6位串行输入)

上传人:xmg****18 文档编号:120527486 上传时间:2020-02-07 格式:DOC 页数:38 大小:905KB
返回 下载 相关 举报
VHDL密码锁(6位串行输入)_第1页
第1页 / 共38页
VHDL密码锁(6位串行输入)_第2页
第2页 / 共38页
VHDL密码锁(6位串行输入)_第3页
第3页 / 共38页
VHDL密码锁(6位串行输入)_第4页
第4页 / 共38页
VHDL密码锁(6位串行输入)_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《VHDL密码锁(6位串行输入)》由会员分享,可在线阅读,更多相关《VHDL密码锁(6位串行输入)(38页珍藏版)》请在金锄头文库上搜索。

1、. . . . .电子设计自动化课程设计题目: 数字密码锁电路 (1.1) 院(系) 信息科学与工程学院 专 业 15通信工程 届 别 班 级 学 号 姓 名 任课老师 数字密码锁电路,难度系数1.1 实验要求设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。本设计的各个模块由相应的VHDL程序具体实现,并在Quartus9.0环境下进行了整体电路的模拟仿真,最终实现“密码锁设计”的要求。实验设计要求6位串行输入,并且由于实验板输入键位的有限,还同时增加了输入密码与设置密码键位的重叠,使密码锁电路输入输出形成一个反馈

2、,通过对输出的判断,让电路自动识别输入的数字是设置的密码还是输入的密码。在程序初始载入实验板时,还要让密码锁的初始设置密码和输入密码相同,从而达到能够初始设置密码的逻辑要求。同时因为实验板输出的LED灯有限,还要求设计的密码锁电路的显示能够在输入密码、设置密码和倒计时之间灵活智能选择,从而达到满足使用的要求。密码锁在输入三次错误密码后需要开始一个一刻钟即900秒的倒计时,则需要设计一个逻辑电路使电路能够在输入和错误倒计时之间自由变化。此为本实验设计的主要难点和创新。 目录1. 系统设计 .42. 单元电路设计 .73. 软件设计 .124. 系统测试 .235. 结论 .246. 参考文献 .

3、247. 附录 .258. 其他 .26 系统设计设计要求:设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。系统设计方案:先设计1.0难度的密码锁,此时不需要一刻钟计时模块。该电路首先需要一个输入模块,由于实验板的限制,安排两个键位作为输入,分别实现6个密码位的选择和对确定位密码的输入,所以在输入模块之前,还需要通过计数器来分别得到两个输入;之后设计一个密码合成及选择模块,将得到的6个4位的密码相加得到一个24位的密码,方便之后的比较,同时需要在输入模块添加一个选择,分别确定此时的输入信息是设置密码还是输入密码;将

4、得到的24位设置密码和输入密码分别放到一个确认模块,起到输入确认并且使初始信息清零的作用;最后将两个24位数据放入比较模块,确定密码锁的状态,状态的显示由LED灯实现;输出显示LED模块从输入模块之前接出,显示当前电路的输入;同时,在计数器之前需要加入消抖模块,使实验板能够稳定输入;在LED模块之前需要添加译码器,以输出正确显示。下图为1.0密码锁各个模块及接线。 完成1.0难度密码锁之后设计一个计数器,通过对密码输入确认和输出状态的计数,当输入错误达到三次时,开始一个一刻钟的计时,由另外一个计数器完成。该计数器的输入还需要一个50m分频模块,得到一个稳定的每秒输出一个电平跳变的输入;为了将9

5、00秒的计时显示到LED上,需要用除法器将计时的各个位拆分出来,再通过译码器显示到LED上。最后还需要一个输出选择模块,通过对3计数器的数据识别,选择当前LED输出的是900秒计时还是当前输入数据。下图为1.1难度密码锁最终的各个模块及接线。 其他方案:除上述方法外,还可以将比较器放在输出选择模块之前,这样能够让程序在开发板上仿真时,位选之后不会将上一位的输入连带到本位;如果去掉输入选择模块,可以增加一个输入为设置密码输入,即将输入密码和设置密码的输入分开;倒计时模块采用的是从900倒计时到0,即“1110000110”到“0000000000”,然后输出cout为1;该程序也可以从“0000

6、000000”累加到“1110000110”计数;单元电路设计消抖模块:消除按键难以避免的抖动,以得到稳定的输入;计数器:本实验分别用到了3进制、6进制和10进制的计数器,每计数到一定量时计数器清零并输出一个高电平; 密码合成及选择模块:将得到的6个4位的密码合成一个24位的密码并输出,方便之后的密码比较,密码合成通过&完成,通过对输出状态反馈(开锁输出1,锁存输出0)的识别,判断当前输入的数据是设置密码还是输入密码,作两个输出;确认模块:将得到的输入密码和设置密码确认输出到比较器,同时在程序载入实验板时,还未有输入的情况下,能够默认输入密码和设置密码都是24位0,使两者初始值相等(此时比较器

7、输出为1,反馈到该模块,输入的数据为设置密码),达到能设置密码的状态;比较模块:对得到的输入密码和设置密码进行比较,输出显示当前密码锁是锁存0还是开锁状态1;译码器:将得到的数据读取,使其输出的数据能够显示到LED上;LED:将6位密码显示在LED上;50m分频:每秒稳定输出一个电平跳变;输出选择:通过对3进制计数器的数据读取(输入错误三次输出cout为1,否则为0),选择输出是当前密码输入、设置密码输入还是900秒计时;除法器:将900秒计时的百位、十位和个位拆分出来,使其能通过译码器显示到LED上。(该模块主要通过lpm_divide和lpm_constant实现,900秒的计时数据分别除

8、常数100和10,再通过对商的后四位数据的读取得到各个位的大小)下图为除法器各模块及接线: LED第二位显示默认为0模块:将实验没有用到的led第二位显示输出默认为不显示;LED输出选择模块:选择led是显示倒计时还是此时输入密码软件设计软件:Quartus9.0(Cyclone EP2C5T144C8);硬件:对应的FPGA开发板程序清单1. 消抖模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY xiaodou IS PORT( K_IN,CLK:IN STD_LOGIC; K_

9、OUT:OUT STD_LOGIC);END;ARCHITECTURE one OF xiaodou ISSIGNAL K_PRE:STD_LOGIC;SIGNAL COUNT:INTEGER RANGE 0 TO 3999999;BEGIN PROCESS(CLK,K_IN) BEGIN IF CLKEVENT AND CLK=1 THEN IF K_IN=K_PRE THEN IF COUNT3999999 THEN COUNT=COUNT+1; ELSE COUNT=3999999; END IF; ELSE COUNT=0; END IF; K_PRE=K_IN; END IF; IF COUNT=3999999 THEN K_OUT0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能) IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号