lab

 avatar
unknown
plain_text
a month ago
1.6 kB
28
Indexable
library IEEE;
use IEEE.STD_LOGIC_1164.all
entity CROSSING is
port(
CLOCK, RESET, SENSOR1, SENSOR2: in STD_LOGIC;
RED1, RED2, YELLOW1, YELLOW2, GREEN1, GREEN: out STD_LOGIC;
);
end CROSSING;
architecture CROSSING of CROSSING is
type STATE_T is (ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7);
signal STATE, NXSTATE: STATE_T;
begin
UPDATE_STATE: process (RESET, CLOCK)
begin
if (RESET = ’1’) then
STATE <= ST0;
elsif CLOCK’EVENT and CLOCK = ’1’ then
STATE <= NXSTATE;
end if;
end process UPDATE_STATE;
TRANSITIONS: process (STATE, SENSOR1, SENSOR2)
begin
-- initialization
RED1 <= ‘0’; YELLOW1 <= ‘0’; GREEN1 <= ‘0’;
RED2 <= ‘0’; YELLOW2 <= ‘0’; GREEN2 <= ‘0’;
case STATE is
when ST0 => GREEN1 <= ‘1’; RED2 <= ‘1’;
if SENSOR2 = SENSOR1 then NXSTATE <= ST1;
elsif (SENSOR1 = ‘0’ and SENSOR2 = ‘1’) then
NXSTATE <= ST2;
else NXSTATE <= ST0;
end if;
when ST1 => GREEN1 <= ‘1’; RED2 <= ‘1’;
NXSTATE <= ST2;
when ST2 => GREEN1 <= ‘1’; RED2 <= ‘1’;
NXSTATE <= ST3;
when ST3 => YELLOW1 <= ‘1’; RED2 <= ‘1’;
NXSTATE <= ST4;
when ST4 => RED1 <= ‘1’; GREEN2 <= ‘1’;
if (SENSOR1 = ‘0’ and SENSOR2 = ‘0’) then
NXSTATE <= ST5;
elsif (SENSOR1 = ‘1’ and SENSOR2 = ‘0’) then
NXSTATE <= ST6;
else NXSTATE <= ST4;
end if;
when ST5 => RED1 <= ‘1’; GREEN2 <= ‘1’;
NXSTATE <= ST6;
when ST6 => RED1 <= ‘1’; GREEN2 <= ‘1’;
NXSTATE <= ST7;
when ST7 => RED1 <= ‘1’; YELLOW2 <= ‘1’;
NXSTATE <= ST0;
end case;
end process TRANSITIONS;
end CROSSING;
Editor is loading...
Leave a Comment