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

📄 自动交通控制系统.vhd

📁 《CPLD_FPGA设计及应用》课件与实例
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY controller IS 
PORT (clk, Sa, Sb: IN STD_LOGIC;
       R, Y, G, r, y, g: OUT STD_LOGIC);
     END controller;
 ARCHITECTURE xcontrol OF controller IS 
      TYPE states IS (s0, s1, s2,s3);
      SIGNAL  state: states;
SIGNAL  leda: STD_LOGIC_VECTOR(2 DOWNTO 0);
      SIGNAL  ledb: STD_LOGIC_VECTOR(2 DOWNTO 0);
      BEGIN
         leda <= R & Y & G;
         ledb <= r & y & g;
             PROCESS (clk)
                  VARIABLE counter: INTEGER RANGE 0 TO 29; 
                  VARIABLE cr,cnt: STD_LOGIC;
                BEGIN
                  IF (clk'ENENT AND clk = ′1′)  THEN
                      IF  cr = ′0′  THEN
                         counter := 0;
                      ELSIF  cnt = ′0′  THEN
                         counter := counter;
                      ELSE
                         counter := counter+1;
                      END IF;
                      CASE state IS
                          WHEN s0 =>  leda <= ″001″;
                                      ledb <= ″100″;
                             IF (Sa AND Sb ) = ′1′  THEN
                                IF  counter = 29  THEN
                                    state <= s1;
                                    cr := ′0′;
                                    cnt := ′0′;
                                 ELSE
                                    state <= s0;
                                    cr := ′1′;
                                    cnt := ′1′;
                                 END IF;
                              ELSIF (Sb AND (NOT Sa)) = ′1′  THEN
                                    state <= s1;
                                    cr := ′0′;
                                    cnt := ′0′;
                              ELSE
                                    state <= s0;
                                    cr := ′1′;
                                    cnt := ′1′;
                              END IF;
                          WHEN s1 =>  leda <= ″010″;
                                      ledb <= ″100″;
                                IF  counter = 4  THEN
                                    state <= s3;
                                    cr := ′0′;
                                    cnt := ′0′;
                                 ELSE
                                    state <= s1;
                                    cr := ′1′;
                                    cnt := ′1′;
                                 END IF;
                          WHEN s2 =>  leda <= ″100″;
                                      ledb <= ″001″;
                             IF (Sa AND Sb ) = ′1′  THEN
                                IF  counter = 19  THEN
                                    state <= s3;
                                    cr := ′0′;
                                    cnt := ′0′;
                                 ELSE
                                    state <= s2;
                                    cr := ′1′;
                                    cnt := ′1′;
                                 END IF;
                              ELSIF Sb  = ′0′  THEN
                                    state <= s3;
                                    cr := ′0′;
                                    cnt := ′0′;
                              ELSE
                                    state <= s2;
                                    cr := ′1′;
                                    cnt := ′1′;
                              END IF;
                          WHEN s3 =>  leda <= ″100″;
                                      ledb <= ″010″;
                                IF  counter = 4  THEN
                                    state <= s0;
                                    cr := ′0′;
                                    cnt := ′0′;
                                 ELSE
                                    state <= s3;
                                    cr := ′1′;
                                    cnt := ′1′;
                                 END IF;
                              END CASE;
                            END IF;
                     END PROCESS;
                  END xcontrol; 

⌨️ 快捷键说明

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