Sunteți pe pagina 1din 8

LIBRARY ieee;

USE ieee.std_logic_1164.all;
ENTITY soal8_30 IS
PORT( Clock
Reset
N, D
z

: IN STD_LOGIC;
: IN STD_LOGIC;
: IN STD_LOGIC;
: OUT STD_LOGIC);

END soal8_30 ;
ARCHITECTURE behavioral OF soal8_30 IS
TYPE Statetype IS (S1,S2,S3,S4,S5);
SIGNAL y : Statetype;
BEGIN
PROCESS (Reset, Clock)
BEGIN
IF Reset = '1' THEN
y<=S1;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE y IS
WHEN S1 =>
IF N = '1' THEN y<=S3;
ELSIF D = '1' THEN y<=S2;
ELSE y<=S1;
END IF;
z<='0';
WHEN S2 =>
IF N = '1' THEN y<=S4;
ELSIF D = '1' THEN y<=S5;
ELSE y<=S2;
END IF;
z<='0';
WHEN S3 =>
IF N = '1' THEN y<=S2;
ELSIF D = '1' THEN y<=S4;
ELSE y<=S3;
END IF;
z<='0';
WHEN S4 =>
y<=S1;
z<='1';
WHEN S5 =>
y<=S3;
z<='1';
END CASE;
END IF;
END PROCESS;
END behavioral;

LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY soal8_31 IS
PORT (
Clock : IN STD_LOGIC;
Reset : IN STD_LOGIC;
N, D : IN STD_LOGIC;
z
: OUT STD_LOGIC);
END soal8_31;
ARCHITECTURE behavioral OF soal8_31 IS
TYPE Statetype IS (S1,S2,S3,S4,S5);
SIGNAL y_present, y_next: Statetype;
BEGIN
PROCESS (N,D,y_present)
BEGIN
CASE y_present IS
WHEN S1 =>
IF N = '1' THEN y_next<=S3;
ELSIF D = '1' THEN y_next<=S2;
ELSE y_next<=S1;
END IF;
WHEN S2 =>
IF N = '1' THEN y_next<=S4;
ELSIF D = '1' THEN y_next<=S5;
ELSE y_next<=S2;
END IF;
WHEN S3 =>
IF N = '1' THEN y_next<=S2;
ELSIF D = '1' THEN y_next<=S4;
ELSE y_next<=S3;
END IF;
WHEN S4 =>
y_next<=S1;
WHEN S5 =>
y_next<=S3;
END CASE;
END PROCESS;
PROCESS ( Clock, Reset )
BEGIN
IF Reset = '1' THEN
y_present<=S1;
ELSIF Clock'EVENT AND Clock = '1' THEN
y_present<=y_next;
END IF;
END PROCESS;
z<='1' WHEN y_present = S4 OR y_present = S5 ELSE '0';
END behavioral;

Lampu lalu lintas simpang 4


LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY FSM IS
PORT (
clk : IN STD_LOGIC;
reset : IN STD_LOGIC;
hari : IN STD_LOGIC;
emergency : IN STD_LOGIC;
M_US : OUT STD_LOGIC;
K_US : OUT STD_LOGIC;
H_US : OUT STD_LOGIC;
M_BT : OUT STD_LOGIC;
K_BT : OUT STD_LOGIC;
H_BT : OUT STD_LOGIC);
END FSM;
ARCHITECTURE behavioral OF FSM IS
TYPE executionStage IS (s1,s2,s3,s4,s5);
SIGNAL currentstate, nextstate: executionStage;
BEGIN
PROCESS
BEGIN
WAIT UNTIL( clk'EVENT ) AND ( clk = '1' );
IF ( reset = '0' ) THEN
currentstate <= s1;
ELSE
currentstate <= nextstate;
END IF;
END PROCESS;
PROCESS(hari,currentstate)
variable count: integer:=0;
BEGIN
IF CLK'event and CLK='1' THEN
CASE currentstate IS
WHEN s1 =>
IF(hari = '1' AND emergency = '0' AND count<8) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
M_BT <= '0';
K_BT <= '0';
H_BT <= '1';
count:=count+1;
ELSIF(hari = '0' AND emergency = '0' AND count<4) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
M_BT <= '0';
K_BT <= '0';

H_BT <= '1';


count:=count+1;
ELSIF((hari = '1' OR hari = '0') AND emergency = '1') THEN
nextstate <= s5;
count:=0;
ELSE
nextstate <= s2;
END IF;
WHEN s2 =>
IF(hari = '1' AND emergency = '0' AND count>7 AND count<10)
THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
M_BT <= '0';
K_BT <= '1';
H_BT <= '0';
count:=count+1;
ELSIF(hari = '0' AND emergency = '0' AND count>3 AND
count<5) THEN
M_US <= '1';
K_US <= '0';
H_US <= '0';
M_BT <= '0';
K_BT <= '1';
H_BT <= '0';
count:=count+1;
ELSIF((hari = '1' OR hari = '0') AND emergency = '1') THEN
nextstate <= s5;
count:=0;
ELSE
nextstate <= s3;
END IF;
WHEN s3 =>
IF (hari = '1' AND emergency = '0' AND count>9 AND count<18)
THEN
M_US <= '0';
K_US <= '0';
H_US <= '1';
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
count:=count+1;
ELSIF (hari = '0' AND emergency = '0' AND count>4 AND
count<9) THEN
M_US <= '0';
K_US <= '0';
H_US <= '1';
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
count:=count+1;
ELSIF ((hari = '1' OR hari = '0') AND emergency = '1') THEN

nextstate <= s5;


count:=0;
ELSE
nextstate <= s4;
END IF;
WHEN s4 =>
IF(hari = '1' AND emergency = '0' AND count>17 AND count<20)
THEN
M_US <= '0';
K_US <= '1';
H_US <= '0';
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
count:=count+1;
ELSIF(hari = '0' AND emergency = '0' AND count>8 AND
count<10) THEN
M_US <= '0';
K_US <= '1';
H_US <= '0';
M_BT <= '1';
K_BT <= '0';
H_BT <= '0';
count:=count+1;
ELSIF((hari = '1' OR hari = '0') AND emergency = '1') THEN
nextstate <= s5;
count:=0;
ELSE
nextstate <= s1;
count:=0;
END IF;
WHEN s5 =>
IF ((hari = '1' OR hari = '0') AND emergency = '1' AND
count<5) THEN
IF (count = 1 OR count = 3) THEN
M_US <= '0';
K_US <= '1';
H_US <= '0';
M_BT <= '0';
K_BT <= '1';
H_BT <= '0';
count :=count+1;
ELSE
M_US <= '0';
K_US <= '0';
H_US <= '0';
M_BT <= '0';
K_BT <= '0';
H_BT <= '0';
count :=count+1;
END IF;
ELSE
nextstate <= s1;

count :=0;
END IF;
END CASE;
END IF;
END PROCESS;
END behavioral;

S-ar putea să vă placă și