作者: pcbqc 時間: 2012-11-29 16:39
這個我還真的是不懂的作者: yhpeng 時間: 2012-11-30 10:02
這是一個狀態機問題,4狀態輸入,12狀態輸出。作者: yhpeng 時間: 2012-11-30 10:28
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all;
entity CrossLED is
Port (
nRST: in std_logic; -- 系統復位控制信號,低電平有效。
--
-- 各信號下標3、2、1、0對應方向東、南、西、北。
-- 輸出0,對應信號燈亮;輸出1,對應信號燈滅。
--
State: in std_logic_vector(1 downto 0); --
Yellow: out std_logic_vector(3 downto 0);
Red: out std_logic_vector(3 downto 0);
Blue: out std_logic_vector(3 downto 0)
);
end CrossLED;
architecture Behavioral of CrossLED is
begin
Yellow <= "0000" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"1111" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"1010" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"1111" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"0101" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"0000";
Red <= "1111" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"0101" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"0101" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"1010" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"1010" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"1111";
Blue <= "1111" when nRST = '0' else -- 復位狀態東西南北黃燈亮。
"1010" when State = "00" else -- 東西兩側紅燈亮,南北兩側綠燈亮。
"1111" when State = "01" else -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
"0101" when State = "10" else -- 東西兩側綠燈亮,南北兩側紅燈亮。
"1111" when State = "11" else -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
"1111";
end Behavioral; 作者: lvqing201205 時間: 2012-12-2 14:52
謝謝大家嘍!作者: mesecose 時間: 2012-12-4 23:46
student homework?作者: dingdake 時間: 2012-12-17 20:27
寫了一個verilog版,僅供樓主參考.
module traffic_led(rst_n, clk, r1, y1, g1, r2, y2,g2);
input rst_n, clk;
output r1, y1, g1, r2, y2,g2;
reg r1, y1, g1, r2, y2,g2;
reg [4:0] state, nextstate;