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

📄 a.txt

📁 这里是我个人编写的状态机的实现的程序
💻 TXT
字号:
ctrlift:PROCESS(reset,liftclk)
  VARIABLE pos: INTEGER RANGE 12 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=>
            doorlight<='1';
            position<=1; pos:=1;
            mylift<=doorwait1;
          WHEN   doorwait1=>
            mylift<=doorwait2;
          WHEN   doorwait2=>
             clearup<='0';
             cleardn<='0';
             mylift<=doorwait3;
         WHEN doorwait3=>
          mylift<=doorwait4;
           WHEN doorwait4=>
               mylift<= doorclose;
           WHEN  doorclose=>
                doorlight<='0';
               IF udsig='0'THEN
                  IF position=12 THEN
IF stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                        udsig<='1';mylift<=doorclose;
                      ELSE udsig<='1';mylift<=down;
                      END IF;
                    ELSIF position=11 THEN
                      IF  stoplight="00000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF
                         stoplight(12)='1' OR (stoplight(12)='0' AND fdnlight(12)='1')THEN
                         udsig<='0';mylift<=up;
                      ELSE udsig<='1';mylift<=down;
                      END IF;
                    ELSIF position=10 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 11)>"00" OR fdnlight(12 DOWNTO 11)>"00" OR fuplight(11)>'0' THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                        END IF;
                      ELSIF position=9 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';
                          mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 10)>"000" OR fdnlight(12 DOWNTO 10)>"000" OR fuplight(11 DOWNTO 10)>"00" THEN
                           udsig<='0'; mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                    ELSIF position=8 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 9)>"0000" OR fdnlight(12 DOWNTO 9)>"0000" OR fuplight(11 DOWNTO 9)>"000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                     ELSIF position=7 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 8)>"00000" OR fdnlight(12 DOWNTO 8)>"00000" OR fuplight(11 DOWNTO 8)>"0000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                    ELSIF position=6 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 7)>"000000" OR fdnlight(12 DOWNTO 7)>"000000" OR fuplight(11 DOWNTO 7)>"00000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                     ELSIF position=5 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF 
                          stoplight(12 DOWNTO 6)>"0000000" OR fdnlight(12 DOWNTO 6)>"0000000" OR fuplight(11 DOWNTO 6)>"000000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                    ELSIF position=4 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 5)>"00000000" OR fdnlight(12 DOWNTO 5)>"00000000" OR fuplight(11 DOWNTO 5)>"0000000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                       ELSIF position=3 THEN
                       IF  stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0'; mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 4)>"000000000" OR fdnlight(12 DOWNTO 4)>"000000000" OR fuplight(11 DOWNTO 4)>"00000000" THEN
                           udsig<='0'; mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                    ELSIF position=2 THEN
                       IF stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0'; mylift<=doorclose;
                      ELSIF stoplight(12 DOWNTO 3)>"0000000000" OR fdnlight(12 DOWNTO 3)>"0000000000" OR fuplight(11 DOWNTO 3)>"000000000" THEN
                           udsig<='0';mylift<=up;
                       ELSE udsig<='1';mylift<=down;
                     END IF;
                      ELSIF position= 1 THEN
                       IF stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='0';mylift<=doorclose;
                        ELSE udsig<='0';mylift<=up;
                        END IF;
                      END IF;
               ELSIF udsig='1' THEN
                       IF position=1 THEN
                         IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='0';mylift<=doorclose;
                         ELSE udsig<='0'; mylift<=up;
                         END IF;
                      ELSIF  position= 2 THEN
                        IF stoplight="000000000000" AND fuplight="000000000000" AND fdnlight="000000000000" THEN
                          udsig<='1';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="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(2 DOWNTO 1)>"00" OR (stoplight(2 DOWNTO 1)="00" AND fuplight(2 DOWNTO 1)>"00")THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
                        ELSIF position=4 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(3 DOWNTO 1)>"000" OR (stoplight(3 DOWNTO 1)="000" AND fuplight(3 DOWNTO 1)>"000")
                       THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
ELSIF position=5 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(4 DOWNTO 1)>"0000" OR (stoplight(4 DOWNTO 1)="0000" AND fuplight(4 DOWNTO 1)>"0000") THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
                   ELSIF position=6 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(5 DOWNTO 1)>"00000" OR (stoplight(5 DOWNTO 1)="00000" AND fuplight(5 DOWNTO 1)>"00000")  THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
 ELSIF position=7 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(6 DOWNTO 1)>"000000" OR (stoplight(6 DOWNTO 1)="000000" AND fuplight(6 DOWNTO 1)>"000000") THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
ELSIF position=8 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(7 DOWNTO 1)>"0000000" OR (stoplight(7 DOWNTO 1)="0000000" AND fuplight(7 DOWNTO 1)>"0000000")THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF; 
ELSIF position=9 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(8 DOWNTO 1)>"00000000" OR (stoplight(8 DOWNTO 1)="00000000" AND fuplight(8 DOWNTO 1)>"00000000")  THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
ELSIF position=10 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(9 DOWNTO 1)>"000000000" OR (stoplight(9 DOWNTO 1)="000000000" AND fuplight(9 DOWNTO 1)>"000000000")  THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
ELSIF position=11 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" THEN
                            udsig<='1';mylift<=doorclose;
                         ELSIF 
                         stoplight(10 DOWNTO 1)>"0000000000" OR (stoplight(10 DOWNTO 1)="0000000000" AND fuplight(10 DOWNTO 1)>"0000000000")THEN
                           udsig<='1';mylift<=down;
                          ELSE udsig<='0'; mylift<=up;
                         END IF;
                        ELSIF position=12 THEN  
                        IF  stoplight="000000000000"AND fuplight="000000000000" AND fdnlight ="000000000000" 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<12 AND (stoplight(pos)='1' OR fdnlight(pos)='1')
                            THEN mylift<= stop;
ELSIF pos=12 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<=11 AND(stoplight(position)='1' OR fuplight(position)='1') THEN
                             clearup<='1';
                            ELSE clearup<='1'; cleardn<='1';
                            END IF;
                          ELSIF udsig='1' THEN
IF  position>=2 AND (stoplight(position)='1' OR fdnlight(position)='1') THEN
cleardn<='1';
                      ELSE clearup<='1'; cleardn<='1';
                      END IF;
                      END IF;
                     mylift<=doorwait1;
                     END CASE; 
             END IF;

⌨️ 快捷键说明

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