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

📄 traffic.vhd

📁 EDA仿真程序
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TRAFFIC IS
    PORT(start,en,clk,ew,sn : IN std_logic;
         t1 : buffer INTEGER RANGE 107 downto 0;
         EW_M : OUT std_logic_vector(2 downto 0);
         EW_P : OUT std_logic_vector(1 downto 0);
         EW_R,EW_L : OUT std_logic_vector(2 downto 0);
         SN_M : OUT std_logic_vector(2 downto 0);
         SN_P : OUT std_logic_vector(1 downto 0);
         SN_R,SN_L :OUT std_logic_vector(2 downto 0));
         
END TRAFFIC ;
ARCHITECTURE one OF TRAFFIC IS
  TYPE C_ST0 IS (S0,S1,S2,S3,S4,S5);
  TYPE C_St1 IS (ST0,ST1,ST2,ST3,ST4,ST5);
  SIGNAL SS0 : C_ST0;
  SIGNAL SS1 : C_ST1;
  SIGNAL Q1,Q2 : std_logic_vector(10 downto 0); 
  

         BEGIN
 --计时时钟
 CLOCK: PROCESS (start,en,clk)
         VARIABLE t10:INTEGER RANGE 107 downto 0; 
             BEGIN
              IF start='1' then t10:=0;
                ELSIF clk'EVENT AND clk='1' then
                  IF en='1' then
                      t10:=t10+1;
                     END IF ;
                       END IF ;
                       t1<=t10;
              
          END PROCESS;
 --东西方向通道
 EAST_WEST: PROCESS (start,clk)
                BEGIN
                   
               IF start='1'  THEN Q1<=(OTHERS=>'0');SS0<=S0;
                 ELSIF clk'EVENT AND clk='1' then 
                  CASE SS0 IS 
                    WHEN S0 =>  IF t1=30 then SS0<=S1;END IF;
                                  Q1<="00101100100";                    
                    WHEN S1 =>  
                                IF t1=32 then SS0<=S2;END IF;
                                 Q1<="11010110100";
                    WHEN S2 =>  IF t1=87 then SS0<=S3;END IF;
                                 Q1<="10010001100";
                    WHEN S3 =>  IF t1=89 then SS0<=S4;END IF;
                                 Q1<="10010001110";
                    WHEN S4 =>  IF t1=105 then SS0<=S5;END IF;
                                 Q1<="10010001001";
                    WHEN S5 =>  IF t1=107 then SS0<=S0;END IF;
                                 Q1<="11010010010";
                             
                    WHEN OTHERS =>SS0<=S0;
                     
                       END CASE;
                         END IF;
               IF en='0' and ew='0' and sn='1' THEN 
                      Q1<="10010100100";
                 ELSIF en='0'and ew='1' and sn='0' THEN 
                      Q1<="00110100100";END IF;
                                                  --东西方向紧急控制 
               IF t1>26 and t1<30 then Q1(6)<=CLK;END IF;
               IF t1>101 and t1<105 then Q1(3)<=CLK;Q1(0)<=CLK;END IF;
                     
               EW_M<=Q1(10 DOWNTO 8);EW_P<=Q1(7 DOWNTO 6);
               EW_R<=Q1(5 DOWNTO 3 );EW_L<=Q1(2 DOWNTO 0);     
              END PROCESS;
--南北方向通道
SOUTH_NORTH: PROCESS (start,clk)
            BEGIN
              IF start='1' THEN 
                 
                  Q2<=(OTHERS=>'0');SS1<=ST0;
                ELSIF clk'EVENT AND clk='1' THEN
                  CASE SS1 IS
                    WHEN ST0 => IF t1=55 then SS1<=ST1;END IF;
                                 Q2<="10010001100";
                    WHEN ST1 => IF t1=57 then SS1<=ST2;END IF;
                                 Q2<="10010001110";
                    WHEN ST2 => IF t1=73 then SS1<=ST3;END IF;
                                 Q2<="10010001001";
                    WHEN ST3 => IF t1=75 then SS1<=ST4;END IF;
                                 Q2<="11010010010";
                    WHEN ST4 => IF t1=105 then SS1<=ST5;END IF;
                                 Q2<="00101100100";
                    WHEN ST5 => IF t1=107 then SS1<=ST0;END IF;
                                 Q2<="11010110100";
                        END CASE;
                          END IF;
                    IF en='0' and ew='1' and sn='0' THEN 
                       Q2<="10010100100";
                      ELSIF en='0' and ew='0' and sn='1' THEN 
                       Q2<="00110100100";END IF;                                                
                                                   --南北方向紧急控制
                    IF t1>69 and t1<73 then Q2(3)<=CLK;Q2(0)<=CLK;END IF;
                    IF t1>101 and t1<105 then Q2(6)<=CLK;END IF;
                    SN_M<=Q2(10 DOWNTO 8);SN_P<=Q2(7 DOWNTO 6);
                    SN_R<=Q2(5 DOWNTO 3 );SN_L<=Q2(2 DOWNTO 0);
                 END PROCESS;

END One; 

⌨️ 快捷键说明

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