VHDL课程设计—数字密码锁电路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL课程设计——
数字密码锁
班级:计052—2班
学号:200525502204
姓名:杨彦涛
指导老师:沈春华
日期:2007-1
一、设计要求
设计一个简易的数字密码锁,该锁应在收到3位与规定码相符的十进制数码时打开,使相应的指示灯点亮;若收到的代码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。
二、系统功能描述
1、系统接通电源后,首先按动setup键后方投入运行。
运行时标志开门的指示灯和报
警灯、铃皆不工作,系统处于安锁状态。
2、开锁代码是3位十进制数,可以通过系统预先设定。
开锁时输入代码不足三位或超
过三位均不能开锁。
3、开锁程序由设计者确定,用户必须严格执行所规定的程序,方可开锁。
4、开锁代码和程序正确,表示数字锁打开的指示灯亮。
5、允许用户在开锁过程中有1次错误(输入代码错误或开锁程序错误),只要出错,
表示错误的指示灯必定点亮。
如果有2次错误,则报警器——喇叭名叫,以示情况
异常。
6、开锁程序为:
(1)按启动键(start)启动开锁程序,此时系统内部分处于初始状态。
(2)依次键入十进制码。
(3)按开门键(open)准备开门。
若按上述程序执行且拨号正确,则开门继电器工作,lock=1;若密码输入
错误或未按上述程序执行,则按动开门键(open)后报警灯亮,红灯亮。
(4)开锁事务处理完毕后,应将门关上,按set键,使系统重新进入安锁状态。
(若在报警,按set或start均不起作用,应另用一内部的I_setup键才能使
系统进入安锁状态)。
(5)若按错号码,可在按confirm键之前按start键重新启动开锁程序。
7、号码0-9,start,open,setcode,confirm均用按键产生。
8、alarm表示警报,red表示红灯,lock表示开锁信号。
三、密码锁控制器的MDS图及其功能说明。
当系统处于s0状态时,为安锁状态按start 进入开锁程序s2,输入代码确定,按open 进入s2状态,如果输入正确,进入s3状态并输出gree=1; .此时按
setup 可以重新进入安锁状态。
如果输入有误则进入s4状态并输出red=1.此时按setup 可以重新进入安锁状态。
再按start 启动开锁程序,输入代码并确定,按open 进入s3状态,,如果输入正确,进入s4状态并输出gree=1; .此时按setup 可以重新进入安锁状态。
如果输入有误则进入s5状态并输出red=1,jbao=1; .此时按i_setup 可以重新进入安锁状态。
四,顶层电路结构图及源代码
1.元件例化后程序图30
i_setup
setup
start
open1
result
clk512
clk
en
gree
red
jbao
kaimen
KONGZHI
i_setup
setup
start
open1
result
clk512
clk
en
gree
red
jbao
kaimen
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity elock is
port(clk,i_setup,setup,setcode,start,confirm,olock, s0,s1,s2,s3,s4,s5,s6,s7,s8,s9:in std_logic;
alarm :buffer std_logic;
lock :out std_logic;
red :out std_logic);
end elock;
architecture one of elock is
component contr
port(clk :in std_logic;
i_setup:in std_logic;
setup :in std_logic;
start :in std_logic;
olock :in std_logic;
result :in std_logic;
alarm :buffer std_logic;
lock :out std_logic;
red :out std_logic);
end component;
component write
port(cp,reset:in std_logic;
start,setcode,confirm :in std_logic;
s0 :in std_logic;
s1 :in std_logic;
s2 :in std_logic;
s3 :in std_logic;
s4 :in std_logic;
s5 :in std_logic;
s6 :in std_logic;
s7 :in std_logic;
s8 :in std_logic;
s9 :in std_logic;
co :out std_logic;
co1,co2,co3:out std_logic_vector(0 to 3);
m1,m2,m3:out std_logic_vector(0 to 3)
);
end component;
component compare
port(co,con,reset :in std_logic;
s1,s2,s3:in std_logic_vector(0 to 3);
c1,c2,c3:in std_logic_vector(0 to 3);
result:out std_logic );
end component;
signal co,re : std_logic;
signal n1,n2,n3:std_logic_vector(0 to 3);
signal c1,c2,c3:std_logic_vector(0 to 3);
begin
u1:contr port map(clk,i_setup,setup,start,olock,re,alarm,lock,red); u2:write port map(clk,setup,start,setcode,confirm,
s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,co,n1,n2,n3,c1,c2,c3);
u3:compare port map(co,olock,setup,n1,n2,n3,c1,c2,c3,re);
end one;
2.用gdf图连接
四、主要功能模块设计说明及源程序。
1.控制器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mmtrol is
port(i_setup,setup,start,open1,result,clk512,clk:in std_logic;
en,gree,red,jbao,kaimen: out std_logic);
end mmtrol;
architecture mmtrol1 of mmtrol is
type stats is(s0,s1,s2,s3,s4,s5,s6);
signal current_state, next_state:stats;
begin
reg:process(clk)
begin
if(clk'event and clk='1') then
current_state<=next_state;
end if;
end process;
com:process(current_state,result,open1,setup,start,i_setup) begin
case current_state is
when s0=> en<='0';gree<='0';red<='0';jbao<='0';kaimen<='0';
if start='1' then next_state<=s1;
elsif open1='1' and start='0' then next_state<=s4;
else next_state<=s0;
end if;
when s1=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
if setup='1' then next_state<=s0;
elsif result='0' then next_state<=s6;
elsif result='1' then next_state<=s2;
else next_state<=s1;
end if;
when s2=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
if setup='1' then next_state<=s0;
elsif open1='1' then next_state<=s3;
else next_state<=s2;
end if;
when s3=>en<='1';gree<='1';red<='0';jbao<='0';kaimen<='1';
if setup='1' then next_state<=s0;
else next_state<=s3;
end if;
when s6=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
if setup='1' then next_state<=s0;
elsif start='1' then next_state<=s1;
elsif open1='1' then next_state<=s4;
else next_state<=s6;
end if;
when s4=>en<='1';gree<='0';red<='1';jbao<='0';kaimen<='0';
if setup='1' then next_state<=s0;
elsif result='0'and open1='1' then next_state<=s5;
elsif result='1' then next_state<=s2;
else next_state<=s4;
end if;
when s5=> en<='1';gree<='0';red<='1';kaimen<='0';
jbao<=clk512;
if i_setup='1' then next_state<=s0;
else next_state<=s5;
end if;
end case;
end process;
end mmtrol1;
2.编码器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bmq is
port(en,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9:in std_logic;
sor:out std_logic;
d0:out std_logic_vector(3 downto 0));
end;
architecture bmqx of bmq is
signal d:std_logic_vector(3 downto 0);
begin
sor<=en and (s0 or s1 or s2 or s3 or s4 or s5 or s6 or s7 or s8 or s9);
process
begin
if en='1' then
if s0='1' then
d<="0000";
elsif s1='1' then
d<="0001";
elsif s2='1' then
d<="0010";
elsif s3='1' then
d<="0011";
elsif s4='1' then
d<="0100";
elsif s5='1' then
d<="0101";
elsif s6='1' then
d<="0110";
elsif s7='1' then
d<="0111";
elsif s8='1' then
d<="1000";
elsif s9='1' then
d<="1001";
end if;
end if;
end process;
d0<=d;
end;
3.比较器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mbjq is
port( din: in std_logic_vector(3 to 0);
mm :in std_logic_vector(3 to 0);
bjout:out std_logic);
end mbjq;
architecture bjq1 of mbjq is
begin
process(din,mm)
begin
if din=mm then
bjout<='1';
else
bjout<='0';
end if;
end process;
end bjq1;
4选择器
library ieee;
use ieee.std_logic_1164.all;
entity xzql is
port(sel:in std_logic_vector(1 downto 0);
dout:out std_logic_vector(3 downto 0));
end xzql;
architecture xzqlx of xzql is
signal q:std_logic_vector(3 downto 0);
begin
process(sel)
begin
if sel="00"
then
q<="1001";
elsif sel="01"
then
q<="0000";
elsif sel="10"
then
q<="0101";
end if;
end process;
dout<=q;
end xzqlx;
六.总结及体会
首先,在这次课程设计过程中,我得到沈春华及实验室各位老师的帮助和指导,在此表示真心的感谢。
通过这次课程设计,我学到了许多知识。
我知道了实践是学习的最好途径,尤其是对于技术类的学科。
另外在设计过程中我明白做一件事情,过程比结果更可贵,正如这次课程设计每天都在进行,每天都在进展,却没一个确定的截止日期,只知道设计在进展,这种摸索着,寻找着,困惑着,顿悟着,惊喜着,虽然很短暂,但我觉得足够了。
这就是进步,就是创造。
希望以后能有更多的这种机会。