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

📄 555.txt

📁 交通灯
💻 TXT
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY traffic_ctrl IS
  PORT(reset,clk:IN STD_LOGIC;
       sensor:IN STD_LOGIC;
       light1_red:OUT STD_LOGIC;
       light1_yellow:OUT STD_LOGIC;
       light1_green:OUT STD_LOGIC;
       light2_red:OUT STD_LOGIC; 
       light2_yellow:OUT STD_LOGIC;
       light2_green:OUT STD_LOGIC);
END ENTITY traffic_ctrl;

ARCHITECTURE mysta OF traffic_ctrl IS
 
TYPE states IS(st0,st1,st2);
SIGNAL current_state:states;
SIGNAL next_state:states;
SIGNAL cout0,cout1,cout2:STD_LOGIC;
SIGNAL m1:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL m2:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL m3:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";

BEGIN
    PROCESS(current_state)
      BEGIN
      CASE current_state IS
       WHEN st0=>
           IF reset='1'THEN
                next_state<=st0;
           ELSIF sensor='1'AND cout0='1' THEN
                next_state<=st1;
           ELSE next_state<=st0;
           END IF;
        WHEN st1=>
           IF reset='1'THEN
                 next_state<=st0;
           ELSIF cout1='1' THEN
           IF sensor='1' THEN
           next_state<=st2;
           ELSE next_state<=st0;
           END IF;
        ELSE
           next_state<=st1;
        END IF;
        
       WHEN st2=>
           IF reset='1' THEN
                next_state<=st0;
           ELSIF sensor='0' THEN
                next_state<=st1;
           ELSIF sensor='1'AND cout2='1' THEN
                NEXT_STATE<=ST0;
           ELSE
               next_statE<=st2;
           END IF;
       WHEN OTHERS=>next_state<=st0;

       END CASE;
     END PROCESS;

     PROCESS(clk)
          BEGIN        
            IF clk'event and clk='1' THEN
                current_state<=next_state;
            END IF;
     END PROCESS;

     PROCESS(current_state)
          BEGIN
            CASE current_state IS
              WHEN st0=>

light1_red<='0';light1_yellow<='0';light1_green<='1';
light2_red<='1';light2_yellow<='0';light2_green<='0';
              WHEN st1=>

light1_red<='0';light1_yellow<='1';light1_green<='0';
light2_red<='0';light2_yellow<='1';light2_green<='0';
              WHEN st2=>

light1_red<='1';light1_yellow<='0';light1_green<='0';
light2_red<='0';light2_yellow<='0';light2_green<='1';
             WHEN OTHERS=>
light1_red<='0';light1_yellow<='0';light1_green<='1';
light2_red<='1';light2_yellow<='0';light2_green<='0';
           END CASE;
   END PROCESS;
   
PROCESS(clk)
   BEGIN 
   IF clk'event and clk='1' THEN
       IF current_state=st0 THEN
           IF m1="11"THEN
               m1<="00";
           ELSE m1<=m1+1;
        END IF;    
END IF;
         END IF;
         cout0<=m1(1)AND m1(0);
END PROCESS;

PROCESS(clk)
      BEGIN
         IF clk'EVENT AND clk='1'THEN
               IF current_state=st2 THEN
                  IF m2="11"THEN
           m2<="00";
           ELSE m2<=m2+1;
     END IF;      
 END IF;
         END IF;
         cout2<=m2(1)AND m2(0);
END PROCESS;

 PROCESS(clk)
    BEGIN
     IF clk'event and clk='1' THEN
       IF current_state=st1 THEN
           IF m3="01"THEN
               m3<="00";
           ELSE m3<=m3+1;
          END IF; 
 END IF;
         END IF;
         cout1<=m3(0);
END PROCESS;
END ARCHITECTURE mysta;




 

⌨️ 快捷键说明

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