📄 555.txt
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY traffic_ctrl IS
PORT(reset,clk:IN STD_LOGIC;
sensor:IN STD_LOGIC;
light1_red:OUT STD_LOGIC;
light1_yellow:OUT STD_LOGIC;
light1_green:OUT STD_LOGIC;
light2_red:OUT STD_LOGIC;
light2_yellow:OUT STD_LOGIC;
light2_green:OUT STD_LOGIC);
END ENTITY traffic_ctrl;
ARCHITECTURE mysta OF traffic_ctrl IS
TYPE states IS(st0,st1,st2);
SIGNAL current_state:states;
SIGNAL next_state:states;
SIGNAL cout0,cout1,cout2:STD_LOGIC;
SIGNAL m1:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL m2:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
SIGNAL m3:STD_LOGIC_VECTOR(1 DOWNTO 0):="00";
BEGIN
PROCESS(current_state)
BEGIN
CASE current_state IS
WHEN st0=>
IF reset='1'THEN
next_state<=st0;
ELSIF sensor='1'AND cout0='1' THEN
next_state<=st1;
ELSE next_state<=st0;
END IF;
WHEN st1=>
IF reset='1'THEN
next_state<=st0;
ELSIF cout1='1' THEN
IF sensor='1' THEN
next_state<=st2;
ELSE next_state<=st0;
END IF;
ELSE
next_state<=st1;
END IF;
WHEN st2=>
IF reset='1' THEN
next_state<=st0;
ELSIF sensor='0' THEN
next_state<=st1;
ELSIF sensor='1'AND cout2='1' THEN
NEXT_STATE<=ST0;
ELSE
next_statE<=st2;
END IF;
WHEN OTHERS=>next_state<=st0;
END CASE;
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'event and clk='1' THEN
current_state<=next_state;
END IF;
END PROCESS;
PROCESS(current_state)
BEGIN
CASE current_state IS
WHEN st0=>
light1_red<='0';light1_yellow<='0';light1_green<='1';
light2_red<='1';light2_yellow<='0';light2_green<='0';
WHEN st1=>
light1_red<='0';light1_yellow<='1';light1_green<='0';
light2_red<='0';light2_yellow<='1';light2_green<='0';
WHEN st2=>
light1_red<='1';light1_yellow<='0';light1_green<='0';
light2_red<='0';light2_yellow<='0';light2_green<='1';
WHEN OTHERS=>
light1_red<='0';light1_yellow<='0';light1_green<='1';
light2_red<='1';light2_yellow<='0';light2_green<='0';
END CASE;
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'event and clk='1' THEN
IF current_state=st0 THEN
IF m1="11"THEN
m1<="00";
ELSE m1<=m1+1;
END IF;
END IF;
END IF;
cout0<=m1(1)AND m1(0);
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk='1'THEN
IF current_state=st2 THEN
IF m2="11"THEN
m2<="00";
ELSE m2<=m2+1;
END IF;
END IF;
END IF;
cout2<=m2(1)AND m2(0);
END PROCESS;
PROCESS(clk)
BEGIN
IF clk'event and clk='1' THEN
IF current_state=st1 THEN
IF m3="01"THEN
m3<="00";
ELSE m3<=m3+1;
END IF;
END IF;
END IF;
cout1<=m3(0);
END PROCESS;
END ARCHITECTURE mysta;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -