📄 jiaotongdengkongzhi.txt
字号:
library ieee;
use ieee.std_logic_1164.all;
entity trafficlight is
port (
clk:in std_logic; -- clock
sm,sb : in std_logic; --主干道M,支干道B传感信号
MR_N,MY_N,MG_N,BR_N,BY_N,BG_N: out std_logic --主支干道的红黄绿输出信号
--- 为在LED上显示便于观察,此处用低电平有效
);
end trafficlight;
architecture traffic of trafficlight is
type light_states is (A,B,C,D); -- 状态
signal state:light_states; -- 当前状态
signal MR,MY,MG,BR,BY,BG :std_logic;
begin
process (clk)
variable i :integer range 0 to 45; --延时计数
variable CLRN,EN:bit; --计数器清零。使能信号
begin
if (clk'event and clk='1')then -- 同步
if (clrn='0')then -- 计数器清零
i:=0; --
elsif en='0' then--使能,计数控制
i:=i;
else
i:=i+1; --加计数
end if;
case state is
when A=>
MR<='0';MY<='0';MG<='1'; --主干道 m green
BR<='1';BY<='0';BG<='0';--支干道 b red
IF (SB AND SM)='1' THEN --主干道,支干道均有车
if i=45 then --m green to yellow needs 45 s
state<=B ; CLRN:='0';EN:='0';
-- to state :m yellow ,b red
else -- still in state A
state<=A; CLRN:='1';EN:='1';
end if;
ELSIF (SB AND NOT SM)='1' THEN
--sb=1,sm=0 主干道无车,支干道有车,准备转换
state<=B; CLRN:='0';EN:='0';
-- to state :m yellow ,b red
ELSE
state<=A; CLRN:='1';EN:='1';
END IF;
when B=>
MR<='0';MY<='1';MG<='0';--主干道 m yellow
BR<='1';BY<='0';BG<='0';--支干道 b red
if i=5 then -- wait 5 s
state<=C ; CLRN:='0';EN:='0';
-- to m red,b green
else -- hold
state<=B; CLRN:='1';EN:='1';
end if;
when C=> ---支干道通行
MR<='1';MY<='0';MG<='0'; --主干道 m red
BR<='0';BY<='0';BG<='1';--支干道 b green
IF (SB AND SM)='1' THEN --主干道,支干道均有车
if i=25 then -- b green to yellow needs 25 s
state<=D ; CLRN:='0';EN:='0';
else
state<=C; CLRN:='1';EN:='1';
end if;
ELSIF SB='0' THEN --- 支干道无车,不计时,直接跳转
state<=D; CLRN:='0';EN:='0';
ELSE
state<=C; CLRN:='1';EN:='1';
END IF;
when D=>
MR<='1';MY<='0';MG<='0'; --主干道 m red
BR<='0';BY<='1';BG<='0';--支干道 b yellow
if i=5 then -- b yellow to red needs 5 s
state<=A ; CLRN:='0';EN:='0';
else --hold
state<=D; CLRN:='1';EN:='1';
end if;
END CASE;
END IF;
END PROCESS;
MR_N<=NOT MR;MY_N<=NOT MY;MG_N<=NOT MG; --主干道
BR_N<=NOT BR;BY_N<=NOT BY;BG_N<=NOT BG;--支干道
end architecture traffic;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -