数字电路与系统课程设计设计8位串行数字锁电路由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“简单数字电路课程设计”。
大连理工大学城市学院
大连理工大学城市学院
数字电路与系统课程设计
设计题目:设计
8位串行密码锁
8位串行数字锁电路
学 院:电子与自动化学院
专 业:
学 生:
同 组 人:
指导教师:
完成日期:2015年4月20日 大连理工大学城市学院
第一章 设计任务
1.1项目名称:设计8位串行数字锁电路
本项目的主要内容是设计并实现8位串行数字锁电路。该电路将所学的数字电路与系统大部分知识和VHDL语言结合。
1.2项目设计说明:本项目用来实现设计8位串行数字锁电路
1.2.1设计任务和要求
⑴开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开所指示灯LT。否则,系统进入“错误”状态,并发出报警信号。
⑵开锁程序由设计者确定,并要求锁内给定的密码是可调的,且预置方便,保密性好。
⑶串行数字锁的报警方式是点亮指示灯LF,并使喇叭名叫来报警,直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开锁的状态。1.2.2进度安排
第一次课:预答辩,制定计划分组 第二次课:详细设计 第三,四次课:设计,编程,调试 第五次课:程序测试机,硬件连续调试 第六次课:普通题检查 第七次课:答辩
8位串行密码锁 大连理工大学城市学院
第二章 需求分析
2.1设计原理
数字密码锁原理框图如图1所示。由时钟脉冲发生器、按键、指示灯和控制部分等组成。开关的消抖动电路放在控制部分考虑,时钟输入CLK由外部时钟脉冲发生器的输出提供。设计中的指示灯就是发光二极管,共计10个,用来指示系统的工作状态。其中8个为一组,用来显示已经输入密码的个数,剩余两个,一个为开锁绿色指示灯LT;另一个为报警红色指示灯LF。控制部分是VHDL语言设计的核心部分,主要由方波生成模块FEN、消抖同步模块XIAOPRO和密码锁逻辑控制模块CORNAA这4个模块构成,可以完成密码的修改、设定及非法入侵报警、驱动外围电路等功能。
2.2分解设计
本设计主要包括方波生成模块,消抖同步模块和密码锁逻辑控制模块方波生成模块FEN分频占空比为1:5000000的方波,用于
8位串行密码锁 大连理工大学城市学院
消除抖动。消抖同步模块实现了消除抖动并且同步的功能。密码锁逻辑控制模块是整个设计的核心,它实现密码锁的逻辑功能。
第三章系统功能模块设计
3.1系统流程图
8位串行密码锁
大连理工大学城市学院
3.2输入输出信号定义
表1 数字密码锁控制器输入输出信号定义
3.3模块功能
3.31模块一:方波生成模块
方波生成模块FEN分频占空比为1:5000000的方波,用于消除抖动。分频电路的输入时钟CLK是由外部时钟提供的,外部时钟周期取200ns。(程序见附录)3.32模块二:消抖同步模块
对于K1和K0信号,它们分别代表1和0的按键开关,可以直接送入密码锁逻辑控制模块CORNAA。但由于它们是由按键产生的,其产生时刻和持续时间长短是随机的,并且存在因开关簧片反弹引起的电平抖动现象.因此,必须在每个开关后面安排一个消抖和同步化电路模块XIAOPRO,目的是保证系统能捕捉到输入脉冲,同时,保证每按一次健只形成一个宽度固定的脉冲。在XIAOPRO模块中,因为变量的赋值是直接的,立即生效的,它在某一时刻仅包含一个值,而信号的赋值是有一个值,而信号的赋值是有一定附加时延的,故当时钟脉冲下降沿到来时,变量temp2和temp3在赋值语句执行后立即分别得到新8位串行密码锁 大连理工大学城市学院
值:tmp1的值和tmp2的非值,而输入信号a经过一定时延赋值给信号tmp1,实现了消除抖动并且同步的功能。(程序见附录)3.32模块三:密码锁逻辑控制模块
模块CORNAA是整个设计的核心,它实现密码锁的逻辑功能。开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯LT。否则,系统进入“错误”状态,并发出报警信号。串行数字锁的报警方式是点亮指示灯LF,并使喇叭鸣叫,直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开锁的状态。该8位串行电子密码锁设置8位二进制密码,要求锁内给定的密码是可调的,且设置方便,保密性好。其具体操作分为输入密码和修改密码两部分。
(1)输入密码
密码输入值的比较主要有两部分,密码位数和内容,任何一个条件不满足,都不能打开锁。若锁内密码为“00001111”,K1和K0置低电平,分别表示输入“1”和“0”。输入密码前先进行复位操作,再按着从密码最低位到最高位的顺序依次正确输入00001111。若采用共阴极LED接法,当输入第0位“0”后,八个二极管中相对应的二极管点亮(此时二极管指示灯lamp=“10000000”,输入密码信号shift=“10000000”),接着输入第1位“0”(此时lamp=“11000000”,shift=“01000000”)„„依照顺序,将8位二进制密码全部正确输入完毕后(此时lamp=“11111111”,shift=“00001111”),经检验,输入的密码shift等于锁内预先设置的密码8位串行密码锁 大连理工大学城市学院
lock,密码开锁信号LT置高电平,锁开启。同时,密码修改控制信号LA置高电平。
若在输入密码的过程中,8位二进制密码出现一位或多位输入错误,那么锁不能开启,同时ALM置高电平,指示灯LF亮,发出报警信号,通知管理员。直到按下复位开关,报警才停止。此时,数字锁又自动进入等待下一次开锁的状态。
(2)修改密码
为防止非管理员任意进行密码修改,必须在正确输入密码后,才能重新设置密码。输入正确密码后,锁打开,同时,密码修改控制信号LA置高电平,就可直接进行修改密码的操作。修改密码实质就是用输入的新密码去取代原来的旧密码,存储新密码时,输入一位密码,密码位数加1。若采用共阴极LED接法,与输出引脚lamp相接的发光二极管由亮变暗。当输入8位密码后,8只发光二极管全变暗。此时给CLK一个低电平,新密码产生。(程序见附录)
8位串行密码锁 大连理工大学城市学院
第四章 整体功能实现
4.1整体原理图设计
4.2程序编译与仿真
当各个模块分别编译成功后,则创建一个个元件符号。再用图形编辑器将各元件模块组装起来,如图4
8位串行密码锁 大连理工大学城市学院
第五章 调试并分析结果
编译成功后进行仿真。建立波形文件。仿真波形如图5~图6所示。开始时,先给系统清零,即使clr为0(按下KEY[3]),若设置密码则SW[17]开关拨下使load为低电平,此时通过按去抖开关KEY[0],KEY[1]进行密码设置0和1,每输入一位密码则数目管显示的数字加1直到输入第8位
设置密码:仿真图如下如所示。设置密码时将SW[17]拨下使load为低电平并且clr为高电平此时可以设置密码,由图可以看出设置的密码为00000111每设置一位密码数码管HEX5的七个引脚都随着y1[0~6]的变化而变化,进而显示出当前的位数。
设置密码仿真图
当输入密码时,开关拨上使load为高电平输入密码开始,此时通过按去抖开关KEY[0],KEY[1]进行密码设置0和1,每输入一位密码则数目管显示的数字加1直到输入第8位。系统自动将输入的密码与预设的密码进行比较如果相同则开锁。开锁成功仿真图如下如所8位串行密码锁 大连理工大学城市学院
示,此时设置的密码为00001111输入的密码为00001111,由图可以看每设置一位密码数码管HEX5的七个引脚都随着y1[0~6]的变化而变化,进而显示出当前的位数。此时clr为高电平load为低电平当密码输入完毕后将load变为高电平进行密码输入输入方法与设置密码相同没设置一位密码数码管HEX7的七个引脚都随着y0[0~6]的变化而变化,进而显示出当前的位数。当输完八位密码后系统将其与预先设置的密码进行对比,由于设置与输入的密码相同所以lt为高电平开锁,lf、alm为低电平没有反应。
密码正确开锁成功仿真图
仿真结束后, 就可以将设计文件编程下载到芯片中去。连接硬件系统后, 选择“ Max+ plusⅡ”→“programmer” 菜单, 调出编程器(programmer)窗口。一切就绪后, 按下编程器窗口中的“program”按钮, 设计的内容就下载到FPGA 芯片EP1K30TC144-3 中去了。经实际电路测试验正达到了设计的要求。
8位串行密码锁 大连理工大学城市学院
第六章 心得
在这个实验中,我们最终实现了8位串行数字锁电路,输入代码与锁内密码一致,锁被打开;否则,封闭开锁电路,发出报警信号并且密码可调的功能与要求。
通过这一课程设计使我们将课堂上的理论知识有了进步的了解,并增强了对VHDL语言的兴趣。但同时也暴露出我在知识上掌握不足等缺点:在实验中经常是一步做完不知道下一步改做些什么,在设计过程中也遇到了一些问题,但在我和同学共同努力下,查找相关资料,通过各种书籍和网上的知识,将问题一一解决。
刚开始时,我们遇到了很多问题,比如在实验定义上理解不透彻,读不懂语言程序,通过问老师和在网上查资料,对这些已经有了初步的掌握,对分频消抖等一些模块的定义更清晰。但是在最后下载到芯片时我们仍然遇到了问题,代表显示译码管的灯始终不亮,最后我们调节的分频的时间,对程序又做了更深一步的研究,才成功完成此次试验。我们在增长知识的同时增强解决问题和动手的能力。
在实验中我们遇到了很多问题,也得到了老师和同学的帮助,也知道了分工与合作的重要性。
8位串行密码锁 大连理工大学城市学院
附录:
程序一:方波模块
library ieee;
use ieee.std_logic_1164.all;
entity fen is
port(clk:in std_logic;
clk1:out std_logic);end fen;
architecture fen_arc of fen is
begin
proce(clk)
variable cnt:integer range 0 to499999;begin
if clk'event and clk='1'then
if cnt=499999 then
cnt:=0;
clk1
else
cnt:=cnt+1;
clk1
end if;
end if;
end proce;end fen_arc;模块二:消抖同步模块。
library ieee;
use ieee.std_logic_1164.all;entity xiaopro is
port(a,clk1:in std_logic;
b:out std_logic);8位串行密码锁 大连理工大学城市学院
end xiaopro;
architecture xiao_arc of xiaopro is
signal tmp1:std_logic;begin
proce(clk1,a)
variable tmp3,tmp2:std_logic;
begin
if clk1'event and clk1='0'then
tmp1
tmp2:=tmp1;
tmp3:=not tmp2;
end if;
b
end proce;end xiao_arc;模块三:该模块是整个程序的核心,它实现密码锁的逻辑功能。
library ieee;
use ieee.std_logic_1164.all;entity cornaa is
port(clk,k1,k0,clr,load:in std_logic;
lt:inout std_logic;
lamp:out std_logic_vector(7 downto 0);
lf,alm:out std_logic);end cornaa;
architecture corn_arc of cornaa is
signal shift,lock:std_logic_vector(7 downto 0);
signal lam:std_logic_vector(7 downto 0);
signal la:std_logic;
begin
proce(clk,clr)
begin
if clr='0'then
la
elsif clk'event and clk='1'then
8位串行密码锁 大连理工大学城市学院
if load='0'then
la
end if;
end if;
end proce;
proce(clk,clr)
variable a:integer range 0 to 8;
begin
if clr='0'then
lam
shift
a:=0;
lt
lf
alm
elsif clk'event and clk='1' then
if lt='0'then
if a/=8 then
if k1='0'then
shift
lam
a:=a+1;
elsif k0='0'then
shift
lam
a:=a+1;
end if;
else
a:=0;
if shift=lock then
lt
elself
alm
end if;
end if;
elsif la='1'then
if k1='0'then
lock
lam
elsif k0='0'then
lock
lam
end if;
end if;
8位串行密码锁 大连理工大学城市学院
end if;
end proce;
lamp
8位串行密码锁