簡單的交通信號燈控制系統VHDL20240601_TrafficLightController
https://youtube.com/shorts/5IS8Gvxwax4
題目:簡單的交通信號燈控制系統
說明:
設計一個簡單的交通信號燈控制系統,該系統有三個狀態:綠燈、黃燈和紅燈。信號燈按照固定時間順序切換:綠燈 -> 黃燈 -> 紅燈 -> 綠燈。
要求:
- 使用有限狀態機 (FSM) 設計交通信號燈控制邏輯。
- 每個燈的持續時間為:
- 綠燈:10 秒
- 黃燈:2 秒
- 紅燈:8 秒
- 輸出信號:
green
: 綠燈信號 (1 為亮,0 為滅)yellow
: 黃燈信號 (1 為亮,0 為滅)red
: 紅燈信號 (1 為亮,0 為滅)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity VHDL20240601_TrafficLightController is
port(
clk_4M:in std_logic;
reset:in std_logic;
seg7_out:out std_logic_vector(6 downto 0);
seg7_scan:out std_logic_vector(3 downto 0):="1110";
LED_GYB:out std_logic_vector(2 downto 0):="100";
seg7_sec:out std_logic);
end VHDL20240601_TrafficLightController;
architecture aa of VHDL20240601_TrafficLightController is
signal cnt1:integer range 0 to 1999999:=0;
signal clk_sec:std_logic:='0';
type state_type is(green, yellow, red);
signal state:state_type:=green;
signal cnt2:integer range 0 to 11:=0;
begin
process(clk_4M)
begin
if rising_edge(clk_4M) then
if cnt1=1999998 then
cnt1<=0;
clk_sec<=not clk_sec;
else
cnt1<=cnt1+1;
end if;
end if;
end process;
process(reset, state, clk_sec)
begin
if reset='0' then
state<=green;
LED_GYB<="100";
cnt2<=0;
elsif rising_edge(clk_sec) then
case state is
when green =>
if cnt2=9 then
cnt2<=0;
state<=yellow;
LED_GYB<="010";
else
cnt2<=cnt2+1;
end if;
when yellow =>
if cnt2=1 then
cnt2<=0;
state<=red;
LED_GYB<="001";
else
cnt2<=cnt2+1;
end if;
when red =>
if cnt2=7 then
cnt2<=0;
state<=green;
LED_GYB<="100";
else
cnt2<=cnt2+1;
end if;
end case;
end if;
end process;
seg7_out<= "1000000"when(cnt2=0)else
"1111001"when(cnt2=1)else
"0100100"when(cnt2=2)else
"0110000"when(cnt2=3)else
"0011001"when(cnt2=4)else
"0010010"when(cnt2=5)else
"0000010"when(cnt2=6)else
"1111000"when(cnt2=7)else
"0000000"when(cnt2=8)else
"0011000"when(cnt2=9)else
"0011100"when(cnt2=10)else
"1111111";
end aa;
留言
張貼留言