《VHDL课程设计 数字密码锁电路.doc》由会员分享,可在线阅读,更多相关《VHDL课程设计 数字密码锁电路.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 VHDL课程设计数字密码锁一、 设计要求设计一个简易的数字密码锁,该锁应在收到3位与规定码相符的十进制数码时翻开,使相应的指示灯点亮;假设收到的代码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。二、 系统功能描述1、 系统接通电源后,首先按动set键前方投入运行。运行时标志开门的指示灯和报警灯、铃皆不工作,系统处于安锁状态。2、 开锁代码是3位十进制数,是系统内部设定好的。代码缺乏3位或超出3位时均不能开锁。3、 开锁程序由设计者确定,用户必须严格执行所规定的程序,方可开锁。4、 开锁代码和程序正确,表示数字锁翻开的指示灯亮。5、 允许用户在开锁过程中有1次错误输入代码错误或开锁程序错
2、误,只要出错,表示错误的指示灯必定点亮。如果有2次错误,那么报警器喇叭名叫,以示情况异常。6、 开锁程序为:(1) 按启动键START启动开锁程序,此时系统内局部处于初始状态。(2) 依次键入3个十进制码。(3) 按开门键iopen准备开门。假设按上述程序执行且拨号正确,那么开门继电器工作,绿灯亮;假设密码输入错误或未按上述程序执行,那么按动开门键iopen后报警装置鸣叫单频,红灯亮。(4) 开锁事务处理完毕后,应将门关上,按set键,使系统重新进入安锁状态。假设在报警,按set或start均不起作用,应另用一内部的I_set键才能使系统进入安锁状态。(5) 假设按错号码,可在按iopen键之
3、前按start键重新启动开锁程序。7、 号码0-9,start,iopen均用按键产生。三、 密码锁控制器的MDS图及其功能说明。 Set=1 Set=1 Set=1St3St2St1St0 Start=1 result=1 iopen=1 Set=1 Result=0 iopen=1 St0:安锁状态St4 Result=1 St1: 接受密码状态 i_set=1 St2: 准备开锁状态 Result=0 St3: 开锁状态 iopen=1 St4:密码一次错误状态 St5:密码两次错误状态 St5 当系统处于st0状态时,为安锁状态;当按下start键之后进入st1状态,这时可以输入密码,
4、如果密码正确可进入st2状态,这是如果按下iopen键,进入st3状态,并且表示开门的指示灯和绿灯亮;如果在st1状态输入的密码错误并且按下了iopen键,进入st4状态,指示错误的红灯亮;这时,如果再输入一次错误密码那么进入st5状态,这时表示错误的红灯亮,并且报警器响,这时start,iopen,set键均不起作用,只有内部复位I_set起作用,使系统回到st0状态;如果在st4状态,按下set键可回到st0状态,重新输入密码。四、 顶层电路结构图五、 主要功能模块设计说明及源程序。1、 主控模块,是整个系统的控制器,用于控制各个状态之间的转换 其源代码为: library ieee;us
5、e ieee.std_logic_1164.all;Entity icontrol isport(i_set,set,start,iopen,result,clk1,clk:in std_logic; en,green,red,jibao:out std_logic);end icontrol;Architecture icontrol_1 of icontrol is type states is(st0,st1,st2,st3,st4,st5); signal st:states; signal sp:std_logic;begin process(i_set,set,start,iope
6、n,result,clk1,clk) begin if(i_set=1)then en=0;green=0;red=0;spen=0;green=0;red=0;sp=0; if(start=1)then st=st1; else sten=1;green=0;red=0;sp=0; if(result=1)then st=st2; elsif(iopen=1)then st=st4; elsif(set=1)then st=st0; else sten=1;green=0;red=0;sp=0; if(iopen=1)then st=st3; elsif(set=1)then st=st0;
7、 else sten=0;green=1;red=0;sp=0; if(set=1)then st=st0; else sten=1;green=0;red=1;sp=0; if(result=1)then st=st2; elsif(set=1)then st=st0; elsif(result=0 and iopen=1)then st=st5; else sten=0;green=0;red=1;sp=1; if(set=1)then st=st0; else stst=st0; end case; end if;end process; jibao=(sp and clk1);end
8、icontrol_1;2、 比拟器模块:将用户输入的密码与选择器选出的密码进行比拟,如果一样result为1,否那么为0。其源代码为:library ieee;use ieee.std_logic_1164.all;entity bjq isport(sel:in std_logic_vector(1 downto 0); din,mm:in std_logic_vector(3 downto 0); result:out std_logic);end bjq;Architecture bjq_1 of bjq isbegin process(sel) begin if(sel=01)then
9、 if(din=mm)then result=1; else result=0; end if; elsif(sel=10)then if(din=mm)then result=1; else result=0; end if; elsif(sel=11)then if(din=mm)then result=1; else result=0; end if; else result=0; end if; end process;end bjq_1;3、 编码器模块:将用户输入的10位2进制数编码.其源代码为:library ieee;use ieee.std_logic_1164.all;en
10、tity bmq isport(s :in std_logic_vector(9 downto 0); d1:out std_logic_vector(3 downto 0); en :in std_logic; sor:out std_logic);end bmq;Architecture bmq_1 of bmq is signal d0:std_logic_vector(3 downto 0); begin process(en,s) begin if(en=1)then if(s=0000000001)then d0=0000;sor=1; elsif(s=0000000010)the
11、n d0=0001;sor=1; elsif(s=0000000100)then d0=0010;sor=1; elsif(s=0000001000)then d0=0011;sor=1; elsif(s=0000010000)then d0=0100;sor=1; elsif(s=0000100000)then d0=0101;sor=1; elsif(s=0001000000)then d0=0110;sor=1; elsif(s=0010000000)then d0=0111;sor=1; elsif(s=0100000000)then d0=1000;sor=1; elsif(s=10
12、00000000)then d0=1001;sor=1; else d0=1111;sor=0; end if; else d0=1111;sor=0;end if;end process;d1=d0;end bmq_1;六、引脚锁定情况:clk 1 s0 28clk1 43 s1 29set 49 s2 30I_set 50 s3 35iopen 44 s4 36start 84 s5 37green 25 s6 38red 24 s7 39jibao 27 s8 47kaimen 23 s9 48七总结及体会 通过这次课程设计,我学到了许多知识。在设计过程中我遇到了一些问题,在同学的帮助和老师的指导下,使问题根本得以解决。自己设计的密码锁仍存在一些缺乏之处,我会在以后的学习中逐步改良。 在这次课程设计过程中,我得到王玲玲老师的耐心指导和悉心照顾,在此表示感谢。