LIBRARY IEEE; ---顶层文件
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mimasuo1 IS
PORT(
mima1: IN STD_LOGIC;--输入密码
CLK1: IN STD_LOGIC;--位移 键4
CLK11: IN STD_LOGIC;
D1: IN STD_LOGIC;--清0密码 键5
F1: IN STD_LOGIC;--更换密码 键6
E1: IN STD_LOGIC;--开锁 键7
G1: IN STD_LOGIC; --上锁 键8
xianshi1: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--输出输入的密码
panduan1: OUT STD_LOGIC; --密码锁情况
baojing1: OUT STD_LOGIC --密码错误警报
);
END ENTITY mimasuo1;
ARCHITECTURE ma1 OF mimasuo1 IS
COMPONENT mimasuo2 IS--输入密码
PORT(
mima2 :IN STD_LOGIC; --电平发生变化
CLK2 : IN STD_LOGIC; --位移
D2 :IN STD_LOGIC; --清0按键
mima_reg2:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END COMPONENT mimasuo2;
COMPONENT mimasuo4 IS--解锁、上锁
PORT(
mima_reg4 :IN STD_LOGIC_VECTOR(15 DOWNTO 0);--输入密码
E4 : IN STD_LOGIC;--开锁 键7
G4 : IN STD_LOGIC;--上锁 键8
Q4 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--用户设置密码
panduan4 :OUT STD_LOGIC--密码锁情况
);
END COMPONENT mimasuo4;
COMPONENT mimasuo6 IS --更换密码
PORT(
mima_reg6 :IN STD_LOGIC_VECTOR(15 DOWNTO 0);--输入密码
F6: IN STD_LOGIC;--更换密码 键6
Q6 : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--用户设置密码
);
END COMPONENT mimasuo6;
COMPONENT mimasuo7 IS
PORT(
E7 : IN STD_LOGIC;
panduan7 : IN STD_LOGIC;
CLK7 :IN STD_LOGIC;
baojing7 : OUT STD_LOGIC
);
END COMPONENT mimasuo7;
SIGNAL mima_reg1:STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL Q1:STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL S1:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL panduan11:STD_LOGIC;
BEGIN
U1:mimasuo2
PORT MAP(mima2=>mima1,CLK2=>CLK1,D2=>D1,mima_reg2=>mima_reg1);
U3:mimasuo4
PORT MAP(mima_reg4=>mima_reg1,E4=>E1,Q4=>Q1,G4=>G1,panduan4=>panduan11);
U5:mimasuo6
PORT MAP(mima_reg6=>mima_reg1,F6=>F1,Q6=>Q1);
U6:mimasuo7
PORT MAP(E7=>E1,panduan7=>panduan11,CLK7=>CLK11,baojing7=>baojing1);
panduan1<=panduan11;
xianshi1<=mima_reg1;
END ARCHITECTURE ma1;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mimasuo2 IS --输入密码
PORT(
mima2 :IN STD_LOGIC;
CLK2: IN STD_LOGIC;
D2 :IN STD_LOGIC;
mima_reg2: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END ENTITY mimasuo2;
ARCHITECTURE ma1 OF mimasuo2 IS
SIGNAL mima_reg11: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL mima_reg22: STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
PROCESS(mima2)
VARIABLE Q1: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
BEGIN
IF CLK2='1' THEN
Q1:=(OTHERS=>'0');
ELSE
IF mima2'EVENT AND mima2='1' THEN
IF Q1<9 THEN
Q1:=Q1+1;
ELSIF Q1=9 THEN
Q1:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF D2='1' THEN
Q1:=(OTHERS=>'0');
END IF;
mima_reg11<=Q1;
END PROCESS;
PROCESS(CLK2)
VARIABLE S222:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
mima_reg22(3 DOWNTO 0)<=mima_reg11;
IF S222<3 THEN
IF CLK2'EVENT AND CLK2='1' THEN
mima_reg22(15 DOWNTO 4)<=mima_reg22(11 DOWNTO 0);
S222:=S222+1;
END IF;
END IF;
IF D2='1' THEN
mima_reg22<=(OTHERS=>'0');
S222:=(OTHERS=>'0');
END IF;
END PROCESS;
mima_reg2<=mima_reg22;
END ARCHITECTURE ma1;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mimasuo4 IS --解锁、上锁
PORT(
mima_reg4 :IN STD_LOGIC_VECTOR(15 DOWNTO 0);
E4 : IN STD_LOGIC;
G4 : IN STD_LOGIC;
Q4 : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
panduan4 :OUT STD_LOGIC
);
END ENTITY mimasuo4;
ARCHITECTURE ma3 OF mimasuo4 IS
BEGIN
PROCESS(E4,G4)
VARIABLE S41:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
IF E4='1' THEN-- 开锁,万能密码是6752
IF mima_reg4= Q4 OR mima_reg4= "0110011101010010" THEN -- 6752的二进制表示
panduan4<= '1'; -- 密码正确
ELSE
panduan4<='0'; -- 密码错误
END IF;
ELSIF G4='1' THEN
panduan4<='0';
END IF;
END PROCESS;
END ARCHITECTURE ma3;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mimasuo6 IS --更换密码
PORT(
mima_reg6 :IN STD_LOGIC_VECTOR(15 DOWNTO 0);
F6: IN STD_LOGIC;
Q6 : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END ENTITY mimasuo6;
ARCHITECTURE ma6 OF mimasuo6 IS
BEGIN
PROCESS(F6)
BEGIN
IF F6 ='1' THEN
Q6<=mima_reg6;
END IF;
END PROCESS;
END ARCHITECTURE ma6;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY mimasuo7 IS
PORT(
E7 : IN STD_LOGIC;
panduan7 : IN STD_LOGIC;
CLK7 :IN STD_LOGIC;
baojing7 : OUT STD_LOGIC
);
END ENTITY mimasuo7;
ARCHITECTURE ma7 OF mimasuo7 IS
SIGNAL baojing71:STD_LOGIC;
SIGNAL FULL :STD_LOGIC;
BEGIN
PROCESS(E7)
VARIABLE S7:STD_LOGIC;
VARIABLE R7:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
IF panduan7<='0' AND (E7='1' AND E7'EVENT) THEN
S7:='1';
IF S7='1' THEN
IF R7<3 THEN
R7:=R7+1;
S7:='0';
END IF;
IF R7=3 THEN
baojing71<='1';
END IF;
END IF;
END IF;
IF panduan7='1' THEN
baojing71<='0';
R7:=(OTHERS=>'0');
END IF;
END PROCESS;
PROCESS(CLK7) ---蜂鸣器进程
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF baojing71='1'THEN
IF CLK7'EVENT AND CLK7='1' THEN
IF CNT8="11111111" THEN
CNT8:="00111000";
FULL<='1';
ELSE
CNT8:=CNT8+1;
FULL<='0';
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(FULL)
VARIABLE CNT2:STD_LOGIC;
BEGIN
IF baojing71='1' THEN
IF FULL'EVENT AND FULL='1' THEN
CNT2:=NOT CNT2;
IF CNT2='1' THEN
baojing7<='1';
ELSE
baojing7<='0';
END IF;
END IF;
END IF;
END PROCESS;
END ARCHITECTURE ma7;
代码如有问题欢迎指正