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

📄 dianti.vhd

📁 一个使用VHDL语言设计的电梯控制程序
💻 VHD
字号:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity dianti is
port(clk:in std_logic;
      full,deng,quick,clr:in std_logic;
      c_u1,c_u2,c_u3,c_u4,c_u5:in std_logic;
      c_d2,c_d3,c_d4,c_d5,c_d6:in std_logic;
      d1,d2,d3,d4,d5,d6: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);
      led_c_u:out std_logic_vector(5 downto 0);
      led_c_d:out std_logic_vector(5 downto 0);
      led_d:out std_logic_vector(5 downto 0);
      long:out std_logic;
      ud,alarm:out std_logic;
      up,down:out std_logic);
end dianti;


architecture behav of dianti is
      signal d11,d22,d33,d44,d55,d66:std_logic;
      signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic;
      signal c_d22,c_d33,c_d44,c_d55,c_d66:std_logic;
      signal q:integer range 0 to 1;
      signal q1:integer range 0 to 6;
      signal q2:integer range 0 to 6;
      signal dd,cc_u,cc_d,dd_cc:std_logic_vector( 5 downto 0);
      signal opendoor:std_logic;
      signal updown:std_logic;
      signal en_up,en_dw:std_logic;
begin
com:process(clk)
begin
     if clk'event and clk='1'then
       if clr='1' then q1<=0;q2<=0;long<='0';
     elsif full='1' then alarm<='1';q1<=0;
       if q1>=3 then door<="10";
     else door<="00";
     end if;
    elsif q=1 then q<=0;alarm<='0';
     if q2=3 then long<='1';
     else
      if opendoor='1' then door<="10";q1<=0;q2<=0;up<='0';down<='0';
      elsif en_up='1'then
        if deng='1'then door<="10";q1<=0;q2<=q2+1;
        elsif quick='1' then q1<=3;
        elsif q1=6 then door<="00";updown<='1';up<='1';
        elsif q1>=3 then door<="01";q1<=q1+1;
        else q1<=q1+1;door<="00";       
       end if;
      elsif en_dw='1'then

        elsif quick='1' then q1<=3;
        elsif q1=6 then door<="00";updown<='0';down<='1';
        elsif q1<=3 then door<="01";q1<=q1+1;
        else q1<=q1+1;door<="00";
        end if;
    end if;
if g1='1' then led<="1001111";
    if d11='1' or c_u11='1'then d11<='0';c_u11<='0';opendoor<='1';
    elsif dd_cc>"000001"then en_up<='1';opendoor<='0';
    elsif dd_cc="000000"then opendoor<='0';
    end if;
elsif g2='1'then led<="0010010";
    if updown='1'then
     if d22='1' or c_u22='1'then d22<='0';c_u22<='0';opendoor<='1';
    elsif dd_cc>"000011"then en_up<='1';opendoor<='0';
    elsif dd_cc<"000010"then en_dw<='1';opendoor<='0';
    end if;
   elsif d22='1'or c_d22='1' then d22<='0';c_d22<='0';opendoor<='1';
   elsif dd_cc<"000010" then en_dw<='1';opendoor<='0';
   elsif dd_cc>"000011"then en_up<='1';opendoor<='0';
   end if;
elsif g3='1' then led<="0000110";
  if updown='1' then
   if d33='1' or c_u33='1'then d33<='0';c_u33<='0';opendoor<='1';
    elsif dd_cc>"000111"then en_up<='1';opendoor<='0';
    elsif dd_cc<"000100"then en_dw<='1';opendoor<='0';
    end if;
   elsif d33='1'or c_d33='1' then d33<='0';c_d33<='0';opendoor<='1';
   elsif dd_cc<"000100" then en_dw<='1';opendoor<='0';
   elsif dd_cc>"000111"then en_up<='1';opendoor<='0';
   end if;
elsif g4='1' then led<="1001100";
  if updown='1' then
   if d44='1' or c_u44='1'then d44<='0';c_u44<='0';opendoor<='1';
    elsif dd_cc>"001111"then en_up<='1';opendoor<='0';
    elsif dd_cc<"001000"then en_dw<='1';opendoor<='0';
    end if;
   elsif d44='1'or c_d44='1' then d44<='0';c_d44<='0';opendoor<='1';
   elsif dd_cc<"001000" then en_dw<='1';opendoor<='0';
   elsif dd_cc>"001111"then en_up<='1';opendoor<='0';
   end if;
elsif g5='1' then led<="0100100";
  if updown='1' then
   if d55='1' or c_u55='1'then d55<='0';c_u55<='0';opendoor<='1';
    elsif dd_cc>"011111"then en_up<='1';opendoor<='0';
    elsif dd_cc<"010000"then en_dw<='1';opendoor<='0';
    end if;
   elsif d55='1'or c_d55='1' then d55<='0';c_d55<='0';opendoor<='1';
   elsif dd_cc<"010000" then en_dw<='1';opendoor<='0';
   elsif dd_cc>"011111"then en_up<='1';opendoor<='0';
   end if;
elsif g6='1' then led<="0100000";
  if updown='1' then
   if d66='1' or c_d66='1'then d66<='0';c_d66<='0';opendoor<='1';
     elsif dd_cc<"100000"then en_dw<='1';opendoor<='0';
    end if;
   else en_up<='0';en_dw<='0';
    end if;
   end if;
else q1<=1;alarm<='0';
  if d1='1' then d11<=d1;
  elsif d2='1' then d22<=d2;
  elsif d3='1' then d33<=d3;
  elsif d4='1' then d44<=d4;
  elsif d5='1' then d55<=d5;
  elsif d6='1' then d66<=d6;
  end if;
if c_u1='1' then c_u11<=c_u1;
elsif c_u2='1' then c_u22<=c_u2;
elsif c_u3='1' then c_u33<=c_u3;
elsif c_u4='1' then c_u44<=c_u4;
elsif c_u5='1' then c_u55<=c_u5;
end if;
if c_d2='1' then c_d22<=c_d2;
elsif c_d3='1' then c_d33<=c_d3;
elsif c_d4='1' then c_d44<=c_d4;
elsif c_d5='1' then c_d55<=c_d5;
elsif c_d6='1' then c_d66<=c_d6;
end if;
dd<=d66&d55&d44&d33&d22&d11;
cc_u<='0'&c_u55&c_u44&c_u33&c_u22&c_u11;
cc_d<=c_d66&c_d55&c_d44&c_d33&c_d22&'0';
dd_cc<=dd or cc_u or cc_d;
end if;
  ud<=updown;
  led_d<=dd;
  led_c_u<=cc_u;
  led_c_d<=cc_d;
 end if;
end process;
end behav;




 

⌨️ 快捷键说明

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