?? vhdl_2.txt
字號:
交通燈控制
技術(shù)指標(biāo)
(1)車輛直行時不允許車輛左拐行駛,但右拐可以同時進行,必須設(shè)有專門的左拐時間。
(2)車輛直行以及車輛左拐交替通行,直行時間綠燈每次放行60秒,車輛左拐每次放行30秒。
(3)綠燈亮表示可通行.紅燈亮表示禁止通行。
(4)直行車輛每次綠燈變紅燈時.黃燈先亮5秒。
(5)十字路口要有數(shù)字顯示,作為等候時間提示。要求各通道的通行時間及黃燈亮的時間均以秒為單位作減計數(shù)。
(6)設(shè)置行人過馬路的紅綠燈。
(7)增加緊急情況處理,允許急救車優(yōu)先通過要求,當(dāng)有急救車通過時,路口信號燈全部變紅,倒計時停止計數(shù),以便讓急救車通過。急救車通過后,交通燈恢復(fù)原先狀態(tài)。
entity traffic_control is ------------------------------狀態(tài)機
port(
clk: in std_logic;
-- reset: in std_logic;
NS_green,NS_red,NS_yellow :out std_logic;
NS_green_left,NS_red_left :out std_logic;
NS_people_green,NS_people_red:out std_logic;
WE_green,WE_red,WE_yellow :out std_logic;
WE_green_left,WE_red_left :out std_logic;
WE_people_green,WE_people_red:out std_logic;
data :out std_logic_vector(1 downto 0)
);
end traffic_control;
architecture behave of traffic_control is
type states is(S00,S01,S10,S11,S2,S3);
signal state :states;
begin
process(clk)
variable counter :integer range 0 to 59;
variable cr,cnt :std_logic;
begin
-- if reset='1' then
-- state<=S00;
if (clk'event 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 S00=>
data<="00";
NS_green<='1';
NS_red<='0';
NS_yellow<='0';
NS_green_left<='0';
NS_red_left<='1';
NS_people_green<='1';
NS_people_red<='0';
WE_green<='0';
WE_red<='1';
WE_yellow <='0';
WE_green_left<='0';
WE_red_left <='1';
WE_people_green<='0';
WE_people_red<='1';
if counter=59 then
data<="01";
state<=S01;
cr:='0';
cnt:='0';
else
state<=S00;
cr:='1';
cnt:='1';
end if;
when S01=>
data<="01";
NS_green<='0';
NS_red<='0';
NS_yellow<='1';
NS_green_left<='0';
NS_red_left<='1';
NS_people_green<='1';
NS_people_red<='0';
WE_green<='0';
WE_red<='1';
WE_yellow <='0';
WE_green_left<='0';
WE_red_left <='1';
WE_people_green<='0';
WE_people_red<='1';
if counter=4 then
data<="00";
state<=S10;
cr:='0';
cnt:='0';
else
state<=S01;
cr:='1';
cnt:='1';
end if;
when S10=>
data<="00";
NS_green<='0';
NS_red<='1';
NS_yellow<='0';
NS_green_left<='0';
NS_red_left<='1';
NS_people_green<='0';
NS_people_red<='1';
WE_green<='1';
WE_red<='0';
WE_yellow <='0';
WE_green_left<='0';
WE_red_left <='1';
WE_people_green<='1';
WE_people_red<='0';
if counter=59 then
data<="01";
state<=S11;
cr:='0';
cnt:='0';
else
state<=S10;
cr:='1';
cnt:='1';
end if;
when S11=>
data<="01";
NS_green<='0';
NS_red<='1';
NS_yellow<='0';
NS_green_left<='0';
NS_red_left<='1';
NS_people_green<='0';
NS_people_red<='1';
WE_green<='0';
WE_red<='0';
WE_yellow <='1';
WE_green_left<='0';
WE_red_left <='1';
WE_people_green<='1';
WE_people_red<='0';
if counter=4 then
data<="10";
state<=S2;
cr:='0';
cnt:='0';
else
state<=S11;
cr:='1';
cnt:='1';
end if;
when S2=>
data<="10";
NS_green<='0';
NS_red<='1';
NS_yellow<='0';
NS_green_left<='0';
NS_red_left<='1';
NS_people_green<='0';
NS_people_red<='1';
WE_green<='0';
WE_red<='1';
WE_yellow <='0';
WE_green_left<='1';
WE_red_left <='0';
WE_people_green<='0';
WE_people_red<='1';
if counter=29 then
data<="11";
state<=S3;
cr:='0';
cnt:='0';
else
state<=S2;
cr:='1';
cnt:='1';
end if;
when S3=>
data<="11";
NS_green<='0';
NS_red<='1';
NS_yellow<='0';
NS_green_left<='1';
NS_red_left<='0';
NS_people_green<='0';
NS_people_red<='1';
WE_green<='0';
WE_red<='1';
WE_yellow <='0';
WE_green_left<='0';
WE_red_left <='1';
WE_people_green<='0';
WE_people_red<='1';
if counter=29 then
data<="00";
state<=S00;
cr:='0';
cnt:='0';
else
state<=S3;
cr:='1';
cnt:='1';
end if;
end case;
end if;
end process;
end behave;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -