VHDL课程设计 数字密码锁电路.doc
VHDL课程设计数字密码锁一、 设计要求设计一个简易的数字密码锁,该锁应在收到3位与规定码相符的十进制数码时翻开,使相应的指示灯点亮;假设收到的代码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。二、 系统功能描述1、 系统接通电源后,首先按动set键前方投入运行。运行时标志开门的指示灯和报警灯、铃皆不工作,系统处于安锁状态。2、 开锁代码是3位十进制数,是系统内部设定好的。代码缺乏3位或超出3位时均不能开锁。3、 开锁程序由设计者确定,用户必须严格执行所规定的程序,方可开锁。4、 开锁代码和程序正确,表示数字锁翻开的指示灯亮。5、 允许用户在开锁过程中有1次错误输入代码错误或开锁程序错误,只要出错,表示错误的指示灯必定点亮。如果有2次错误,那么报警器喇叭名叫,以示情况异常。6、 开锁程序为:(1) 按启动键START启动开锁程序,此时系统内局部处于初始状态。(2) 依次键入3个十进制码。(3) 按开门键iopen准备开门。假设按上述程序执行且拨号正确,那么开门继电器工作,绿灯亮;假设密码输入错误或未按上述程序执行,那么按动开门键iopen后报警装置鸣叫单频,红灯亮。(4) 开锁事务处理完毕后,应将门关上,按set键,使系统重新进入安锁状态。假设在报警,按set或start均不起作用,应另用一内部的I_set键才能使系统进入安锁状态。(5) 假设按错号码,可在按iopen键之前按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状态,这时可以输入密码,如果密码正确可进入st2状态,这是如果按下iopen键,进入st3状态,并且表示开门的指示灯和绿灯亮;如果在st1状态输入的密码错误并且按下了iopen键,进入st4状态,指示错误的红灯亮;这时,如果再输入一次错误密码那么进入st5状态,这时表示错误的红灯亮,并且报警器响,这时start,iopen,set键均不起作用,只有内部复位I_set起作用,使系统回到st0状态;如果在st4状态,按下set键可回到st0状态,重新输入密码。四、 顶层电路结构图五、 主要功能模块设计说明及源程序。1、 主控模块,是整个系统的控制器,用于控制各个状态之间的转换 其源代码为: library ieee;use 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,iopen,result,clk1,clk) begin if(i_set='1')then en<='0'green<='0'red<='0'sp<='0' elsif(clk'event and clk='1') then case st is when st0=>en<='0'green<='0'red<='0'sp<='0' if(start='1')then st<=st1; else st<=st0; end if; when st1=>en<='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 st<=st1; end if; when st2=>en<='1'green<='0'red<='0'sp<='0' if(iopen='1')then st<=st3; elsif(set='1')then st<=st0; else st<=st2; end if; when st3=>en<='0'green<='1'red<='0'sp<='0' if(set='1')then st<=st0; else st<=st3; end if; when st4=>en<='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 st<=st4; end if; when st5=>en<='0'green<='0'red<='1'sp<='1' if(set='1')then st<=st0; else st<=st5; end if; when others=>st<=st0; end case; end if;end process; jibao<=(sp and clk1);end 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 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;entity 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")then 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="1000000000")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七总结及体会 通过这次课程设计,我学到了许多知识。在设计过程中我遇到了一些问题,在同学的帮助和老师的指导下,使问题根本得以解决。自己设计的密码锁仍存在一些缺乏之处,我会在以后的学习中逐步改良。 在这次课程设计过程中,我得到王玲玲老师的耐心指导和悉心照顾,在此表示感谢。