⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elevator.vhd

📁 基于Quartus II FPGA/CPLD数字系统设计实例(VHDL源代码文件)
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity elevator is 
port ( clk :in std_logic;-------时钟信号(频率为2Hz)
       full:in std_logic;-------超载
	   stop:in std_logic;-------关门中断
	   close:in std_logic;------提前关门
	   clr:in std_logic; -------清除报警信号
       up1,up2,up3,up4,up5:in std_logic; ------电梯外人的上升请求信号
       down2,down3,down4,down5,down6:in std_logic; -----电梯外人的下降请求信号
       k1,k2,k3,k4,k5,k6:in std_logic; ------------电梯内人的请求信号
       g1,g2,g3,g4,g5,g6:in std_logic; ------------到达楼层信号
       door:out std_logic_vector(1 downto 0);------电梯门控制信号
       led:out std_logic_vector(6 downto 0); ------电梯所在楼层显示
       ud:out std_logic;---------电梯运动方向显示
       alarm:out std_logic;------超载警告信号
       up,down:out std_logic);---电机控制信号(上升或者下降)
end ;
architecture one of elevator is
    signal clk1hz:std_logic;
	signal k11,k22,k33,k44,k55,k66:std_logic; --------电梯内人请求信号寄存信号
	signal up11,up22,up33,up44,up55:std_logic;--------电梯外人上升请求信号寄存信号
	signal down22,down33,down44,down55,down66:std_logic;----电梯外人下降请求信号寄存信号
	signal q1:integer range 0 to 6;  -----------------------关门延时计数器  
	signal kk,uu,dd,uu_dd:std_logic_vector(5 downto 0);-----电梯内外请求信号寄存器
	signal opendoor:std_logic;-----------开门使能信号
	signal updown:std_logic;-------------电梯运动方向信号寄存器
	signal en_up,en_down:std_logic;------预备上升、预备下降预操作使能信号
begin
      kk<=k66 & k55 & k44 & k33 & k22 & k11;---------电梯内人请求信号并置     
      uu<='0'& up55 & up44 & up33 & up22 & up1; -----电梯外人上升请求信号并置 
      dd<=down66 & down55 & down44 & down33 & down22 &'0'; -----电梯外人下降请求信号并置   
      uu_dd<=kk or uu or dd;  ------------------电梯内、外人请求信号进行综合
      ud<=updown;  -----------电梯运动状态显示         
process(clk)
begin
if clk'event and clk='1' then 
   if k1='1' then 
        k11<=k1; ------------------对电梯内人请求信号进行检测和寄存           
   elsif k2='1' then 
        k22<=k2;
   elsif k3='1' then 
        k33<=k3;
   elsif k4='1' then 
        k44<=k4;
   elsif k5='1' then 
        k55<=k5;
   elsif k6='1' then 
        k66<=k6;
   end if;
   if up1='1' then ------------对电梯外人上升请求信号进行检测和寄存
        up11<=up1; 
   elsif up2='1' then 
        up22<=up2;
   elsif up3='1' then 
		up33<=up3;
   elsif up4='1' then
		 up44<=up4;
   elsif up5='1' then 
		up55<=up5;
   end if; 
   if down2='1' then -------------对电梯外人下降请求信号进行检测和寄存
		down22<=down2;
   elsif down3='1' then 
		down33<=down3;
   elsif down4='1' then 
		down44<=down4;
   elsif down5='1' then
	    down55<=down5;
   elsif down6='1' then 
		down66<=down6;
   end if; 
---------------------------------------------------------------
   if clr='1' then q1<=0;alarm<='0'; ------------清除报警 
   elsif full='1' then  ------超载报警
		alarm<='1'; 
		q1<=0;
		door<="10";
   else alarm<='0';                           
        if opendoor='1' then  ---------开门操作
            door<="10";
			q1<=0;
			up<='0';
			down<='0';     
        elsif en_up='1' then --------------------------------上升预操作  
	          if stop='1' then -------关门中断
					door<="10";
					q1<=0;  
	          elsif close='1' then  --------------提前关门
					q1<=3; 
	          elsif q1=6 then ----关门完毕,电梯进入上升状态
					door<="00";
					updown<='1';
					up<='1'; 
					down<='0';
	          elsif q1>=3 then -----------电梯进入关门状态
					door<="01";
					q1<=q1+1;  
	          else q1<=q1+1;door<="10";  -------电梯进入等待状态
	          end if;
        elsif en_down='1' then  ------------------------------下降预操作
	          if stop='1' then 
					door<="10";
					q1<=0; 
	          elsif close='1' then 
					q1<=3;                       
	          elsif q1=6 then 
					door<="00";
					updown<='0';
					down<='1';   
					up<='0';
	          elsif q1>=3 then 
					door<="01";
					q1<=q1+1;           
	          else q1<=q1+1;door<="10";                   
	          end if;
        end if;    
---------------------------------------------------        
        if g1='1' then led<="1001111";------电梯到达1楼,数码管显示1  
	          if k11='1' or up11='1' then ----有当前层的请求,则电梯进入开门状态
					k11<='0'; 
					up11<='0';
					opendoor<='1';
	          elsif uu_dd>"000001" then ----有上升请求,则电梯进入预备上升状态
					en_up<='1'; 
					opendoor<='0'; 
	          elsif uu_dd="000000" then ----无请求时,电梯停在1楼待机 
	                 opendoor<='0';                                               
	          end if;   
        elsif g2='1' then led<="0010010"; ------------电梯到达2楼,数码管显示2
              if updown='1' then  ------------电梯前一运动状态位上升 
	              if k22='1' or up22='1' then ----有当前层的请求,则电梯进入开门状态
						k22<='0'; 
						up22<='0'; 
						opendoor<='1'; 
	              elsif uu_dd>"000011" then ----有上升请求,则电梯进入预备上升状态 
						en_up<='1'; 
						opendoor<='0';    
	              elsif uu_dd<"000010" then ---有下降请求,则电梯进入预备下降状态  
						en_down<='1'; 
						opendoor<='0'; 
	              end if; 
              else -----------------电梯前一运动状态为下降      
	              if k22='1' or down22='1' then ----有当前层的请求,则电梯进入开门状态
						k22<='0'; 
						down22<='0';
						opendoor<='1';  
	              elsif uu_dd<"000010" then ----有下降请求,则电梯进入预备下降状态
						en_down<='1';  
						opendoor<='0'; 
	              elsif uu_dd>"000011" then ----有上升请求,则电梯进入预备上升状态 
						en_up<='1';   
						opendoor<='0'; 
	              end if;
	           end if;
        elsif g3='1' then led<="0000110"; --------电梯到达3楼,数码管显示3                  
	          if updown='1' then                 
	              if k33='1' or up33='1' then 
						k33<='0'; 
						up33<='0';
						opendoor<='1';                    
	              elsif uu_dd>"000111" then 
						en_up<='1';  
						opendoor<='0';          
	              elsif uu_dd<"000100" then 
						en_down<='1';   
						opendoor<='0';        
	              end if;
	          else 
		          if k33='1' or down33='1' then 
						k33<='0'; 
						down33<='0';   
						opendoor<='1';     
		          elsif uu_dd<"000100" then 
						en_down<='1';  
						opendoor<='0';          
		          elsif uu_dd>"000111" then 
						en_up<='1';  
						opendoor<='0';           
		          end if;
		      end if;
        elsif g4='1' then led<="1001100";---------电梯到达4楼,数码管显示4                    
	          if updown='1' then                 
		          if k44='1' or up44='1' then 
						k44<='0'; 
						up44<='0'; 
						opendoor<='1';                   
		          elsif uu_dd>"001111" then
						en_up<='1'; 
						opendoor<='0';           
		          elsif uu_dd<"001000" then 
						en_down<='1';  
						opendoor<='0';         
		          end if;
	          else 
		          if k44='1' or down44='1' then
						k44<='0'; 
						down44<='0'; 
						opendoor<='1';        
		          elsif uu_dd<"001000" then 
						en_down<='1';  
						opendoor<='0';         
		          elsif uu_dd>"001111" then 
						en_up<='1';  
						opendoor<='0';           
		          end if;
		      end if;
        elsif g5='1' then led<="0100100"; -----------电梯到达5楼,数码管显示5                 
	          if updown='1' then                 
		          if k55='1' or up55='1' then 
						k55<='0'; 
						up55<='0';
						opendoor<='1';                       
		          elsif uu_dd>"011111" then 
						en_up<='1';     
						opendoor<='0';      
		          elsif uu_dd<"010000" then 
						en_down<='1';     
						opendoor<='0';      
		          end if;
	          else 
		          if k55='1' or down55='1' then 
						k55<='0';
						down55<='0';
						opendoor<='1';      
		          elsif uu_dd<"010000" then 
						en_down<='1';  
						opendoor<='0';          
		          elsif uu_dd>"011111" then 
						en_up<='1';   
						opendoor<='0';          
		          end if;
		      end if;
        elsif g6='1' then led<="0100000"; ---------电梯到达6楼,数码管显示6                                  
	          if k66='1' or down66='1'  then 
					k66<='0'; 
					down66<='0';
					opendoor<='1';     
	          elsif uu_dd<"100000" then 
					en_down<='1'; 
					opendoor<='0';                     
	          end if;
        else en_up<='0';en_down<='0'; --------电梯进入上升或下降状态
        end if;
  end if;   
end if;
end process;
end ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -