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

📄 threeflift.vhd

📁 电梯控制器的设计与分析---控制器的层数为三层,,电梯到达有停站请求的楼层
💻 VHD
字号:
LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY THREEFLIFT IS
  PORT(BUTTONCLK:IN STD_LOGIC;
       LIFTCLK:IN STD_LOGIC;
          RESET:IN STD_LOGIC;
       F1UPBUTTON,F2UPBUTTON,F2DNBUTTON,F3DNBUTTON:IN STD_LOGIC;
       STOP1BUTTON,STOP2BUTTON,STOP3BUTTON:IN STD_LOGIC;
       POSITION:BUFFER INTEGER RANGE 1 TO 3;
       DOUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
       DOORLIGHT:OUT STD_LOGIC;
       UDSIG:BUFFER STD_LOGIC);
END;

ARCHITECTURE A OF THREEFLIFT IS
TYPE LIFT_STATE IS
(STOPON1,DOOROPEN,DOORCLOSE,DOORWAIT1,DOORWAIT2,
DOORWAIT3,DOORWAIT4,UP,DOWN,STOP);
SIGNAL FUPLIGHT,FDNLIGHT,STOPLIGHT:STD_LOGIC_VECTOR(3 DOWNTO 1);
SIGNAL MYLIFT:LIFT_STATE;
SIGNAL CLEARUP:STD_LOGIC;
SIGNAL CLEARDN:STD_LOGIC;

BEGIN
CTRLIFT:PROCESS(RESET,LIFTCLK)
VARIABLE POS:INTEGER RANGE 3 DOWNTO 1;
  BEGIN 
  IF RESET='1' THEN
    MYLIFT<=STOPON1;--复位键按下,电梯状态为停在一楼
    CLEARUP<='0';
    CLEARDN<='0';
  ELSE
    IF LIFTCLK'EVENT AND LIFTCLK='1' THEN
      CASE MYLIFT IS
        WHEN STOPON1=> --电梯当前状态是STOPON1(停在一楼)的话执行如下四句
          DOORLIGHT<='1'; --指示灯显示当前电梯处于一楼
          POSITION<=1;POS:=1;
          MYLIFT<=DOORWAIT1; --电梯状态变为DOORWAIT1(在一楼等待)
        WHEN DOORWAIT1=>
          MYLIFT<=DOORWAIT2; 
        WHEN DOORWAIT2=>
          MYLIFT<=DOORWAIT3;
          CLEARUP<='0';
          CLEARDN<='0';
        WHEN DOORWAIT3=>
          MYLIFT<=DOORWAIT4;
        WHEN DOORWAIT4=>
          MYLIFT<=DOORCLOSE;
        WHEN DOORCLOSE=>
          DOORLIGHT<='0';
          IF UDSIG='0' THEN 
            IF POSITION=3 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
               elsif STOPLIGHT(2)='1'OR(STOPLIGHT(2)='0'AND FDNLIGHT(2)='1')THEN
                UDSIG<='1';
                           MYLIFT<=doorclose;
               elsif STOPLIGHT(2)='1'OR(STOPLIGHT(2)='0'AND FupLIGHT(2)='1')THEN
                UDSIG<='0';
                           MYLIFT<=UP;
               ELSE UDSIG<='1';MYLIFT<=DOWN;
                     END IF;
            ELSIF POSITION=2 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='0';
                           MYLIFT<=DOORCLOSE;
              ELSIF FDNLIGHT(2)='1' THEN
                UDSIG<='1';
                MYLIFT<=DOORCLOSE;
              ELSIF
                STOPLIGHT(3)='1'OR(STOPLIGHT(3)='0'AND FDNLIGHT(3)='1')THEN
                UDSIG<='0';
                           MYLIFT<=UP;
              ELSIF
                STOPLIGHT(1)='1'OR(STOPLIGHT(1)='0'AND FDNLIGHT(2)='1')THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
                    ELSE UDSIG<='1';MYLIFT<=DOWN;
                     END IF;
            ELSIF POSITION=1 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='0';
                           MYLIFT<=DOORCLOSE;
                ELSIF
                STOPLIGHT(3)='1'OR(STOPLIGHT(3)='0'AND FDNLIGHT(3)='1')THEN
                UDSIG<='0';
                           MYLIFT<=UP;
                ELSIF
                STOPLIGHT(1)='1'OR(STOPLIGHT(1)='0'AND FDNLIGHT(2)='1')THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
                ELSE UDSIG<='0';
MYLIFT<=UP;
              END IF;
            END IF;
          ELSIF UDSIG='1' THEN
            IF POSITION=1 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='0';
                        MYLIFT<=DOORCLOSE;

              ELSIF STOPLIGHT(1)='1'OR(STOPLIGHT(1)='0'AND FUPLIGHT(1)='1')THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
              ELSE UDSIG<='0';MYLIFT<=UP;
              END IF;
            ELSIF POSITION=2 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
              ELSIF FUPLIGHT(2)='1' THEN
                UDSIG<='0';
                MYLIFT<=DOORCLOSE;
              ELSIF
                STOPLIGHT(1)='1'OR(STOPLIGHT(1)='0'AND FUPLIGHT(1)='1')THEN
                UDSIG<='1';
                           MYLIFT<=DOWN;
                  ELSE UDSIG<='0';MYLIFT<=UP;
                     END IF;
           ELSIF POSITION=3 THEN
              IF
                STOPLIGHT="000"AND FUPLIGHT="000"AND FDNLIGHT="000" THEN
                UDSIG<='1';
                           MYLIFT<=DOORCLOSE;
                ELSE UDSIG<='1';
MYLIFT<=DOWN;
            END IF;
          END IF;
        END IF;
      WHEN UP=>
        POSITION<=POSITION+1;
        POS:=POS+1;
        IF POS<3 
AND(STOPLIGHT(POS)='1'OR FDNLIGHT(POS)='1') THEN 
          MYLIFT<=STOP;
        ELSIF POS<3 AND(STOPLIGHT(POS)='1'OR FUPLIGHT(POS)='1') THEN 
          MYLIFT<=STOP;
        ELSIF POS=3 AND (STOPLIGHT(POS)='1'OR FDNLIGHT(POS)='1')THEN  
MYLIFT<=STOP;
        ELSE MYLIFT<=DOORCLOSE;
        END IF;
      WHEN DOWN=>
        POSITION<=POSITION-1;
        POS:=POS-1;
        IF POS>1 AND (STOPLIGHT(POS)='1'OR FDNLIGHT(POS)='1')THEN MYLIFT<=STOP;
        ELSIF POS=1 AND (STOPLIGHT(POS)='1'OR FUPLIGHT(POS)='1')THEN  
MYLIFT<=STOP;
        ELSE MYLIFT<=DOORCLOSE;
        END IF;
      WHEN STOP=>
        MYLIFT<=DOOROPEN;
      WHEN DOOROPEN=>
        DOORLIGHT<='1';
        IF UDSIG='0'THEN
          IF POSITION<=2 AND (STOPLIGHT(POS)='1'OR FUPLIGHT(POS)='1')THEN 
            CLEARUP<='1';
          ELSE CLEARUP<='1';
CLEARDN<='1';
          END IF;
        ELSIF UDSIG='1' THEN
          IF POSITION>=2 AND (STOPLIGHT(POS)='1'OR FDNLIGHT(POS)='1')THEN 
            CLEARDN<='1';
          ELSE CLEARUP<='1';
CLEARDN<='1';
          END IF;
        END IF;
        MYLIFT<=DOORWAIT1;
      END CASE;
    END IF;
  END IF;
  END PROCESS CTRLIFT;
CTRLIGHT:PROCESS(RESET,BUTTONCLK)
BEGIN
  IF RESET='1' THEN
STOPLIGHT<="000"; 
FUPLIGHT<="000"; 
FDNLIGHT<="000";
  ELSE
    IF BUTTONCLK'EVENT AND BUTTONCLK='1' THEN
      IF CLEARUP='1' THEN
        STOPLIGHT(POSITION)<='0';FUPLIGHT(POSITION)<='0';
      ELSE
        IF F1UPBUTTON='1' THEN FUPLIGHT(1)<='1';
        ELSIF F2UPBUTTON='1' THEN FUPLIGHT(2)<='1';
        END IF;
      END IF;
      IF CLEARDN='1' THEN
        STOPLIGHT(POSITION)<='0';
FDNLIGHT(POSITION)<='0';
      ELSE
        IF F2DNBUTTON='1' THEN FDNLIGHT(2)<='1';
        ELSIF F3DNBUTTON='1' THEN FDNLIGHT(3)<='1';
        END IF;
      END IF;
      IF STOP1BUTTON='1' THEN STOPLIGHT(1)<='1';
      ELSIF STOP2BUTTON='1' THEN STOPLIGHT(2)<='1';
      ELSIF STOP3BUTTON='1' THEN STOPLIGHT(3)<='1';
      END IF;
    END IF;
  END IF;
END PROCESS;
process(POSITION)
begin
if POSITION=1 then dout1<="0001";
END IF;
if POSITION=2 then dout1<="0010";
END IF;
if POSITION=3 then dout1<="0011";
END IF;
end process;
END;

⌨️ 快捷键说明

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