Disusun oleh :
Nafis Wildani Luwiyanto (1807323)
begin
if (clk'event and clk='1') then
permohonan (0)<= permohonan (0) or in1 or in1naik or in1turun;
permohonan (1)<= permohonan (1) or in2 or in2naik or in2turun;
permohonan (2)<= permohonan (2) or in3 or in3naik or in3turun;
permohonan (3)<= permohonan (3) or in4 or in4naik or in4turun;
//Begin Arah lift
case pr_state is
when lantai1 => posisi :=0;
when lantai2 => posisi :=1;
when lantai3 => posisi :=2;
when lantai4 => posisi :=3;
end case;
for i in 1 to 4 loop; //i harus dalam range konstanta
if permohonan (i)= '1' then
tempnaik:=i-posisi;
else null;
end if;
end loop;
for i in 3 downto 0 loop; //i harus dalam range konstanta
if permohonan (i)= '1' then
tempturun:=posisi-i;
else null;
end if;
end loop;
if tempnaik=0 and tempturun=0 then // saat posisi lantai
sama dengan permohonan
arahlift<=0;
elsif temp=1 then
arahlift <= 1; //perintah naik
if tempnaik < 1 then
temp :=2 ;
else null;
end if;
elsif temp= 2 then
arahlift <= 2; //perintah turun
bukapintu<='1';
bufferbukapintu:='1';
tutuppintu <= '0';
count:=0;
else
tutuppintu <='0';
pr_state<=nx_state;
if signalstatus='1' then
signalstatus<='0';
else
signalstatus<='1';
end if;
count:=0;
end if;
else
if (count < timepinturampungmenutup)
else
count:=timepinturampungmenutup;
end if;
else
pr_state<=nx_state;
if signalstatus='1' then
signalstatus<='0';
else
signalstatus<='1';
end if;
count:=0;
end if;
end if;
permohonan n(0)<='0';
else null;
end if;
when lantai2 =>
digit1 := "0100100";
if permohonan (1)='1' then
permohonan 1)<='0';
else null;
end if;
when lantai3 =>
digit1 := "0110000";
if permohonan (2)='1' then
permohonan (2)<='0';
else null;
end if;
when lantai4 =>
digit1 := "0011001";
if permohonan (3)='1' then
else null;
end if;
when others => null;
end case;
a1<=digit1(0);
a2<=digit1(1);
a3<=digit1(2);
a4<=digit1(3);
a5<=digit1(4);
a6<=digit1(5);
a7<=digit1(6);
end if;
end process utama;
step: process (pr_state, signalstatus)
begin
case pr_state is
when lantai1 =>
if (permohonan (0)='1') then
nx_state <= pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
signalnaikturunpengguna<='1';
else
signalnaikturunpengguna<='0';
if arahlift=1 then //apabila 1 akan naik
nx_state<=lantai2;
signalmotornaik <= '1';
signalmotorturun <= '0';
else
nx_state<=pr_state; //pada lantai 1 akan hanya diam atau naik
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;
else
signalnaikturunpengguna<='0';
if arahlift=1 then //apabila 1 akan naik
nx_state<=lantai3;
signalmotornaik <= '1';
signalmotorturun <= '0';
elsif arahlift=2 then //apabila 1 akan turun
nx_state<=lantai1;
signalmotornaik <= '0';
signalmotorturun <= '1';
else
nx_state<=pr_state;
signalmotornaik <= '0';
signalmotorturun <= '0';
end if;