📄 自动交通控制系统.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 + -