VHDL设计电子密码锁(元件例化)

本文详细描述了一个使用Verilog编写的密码锁系统,包括输入密码、位移、清零、更换和开/上锁功能,以及错误检测机制。各组件如mimasuo2、mimasuo4和mimasuo7分别负责不同的逻辑处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

代码如有问题欢迎指正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值