Escolar Documentos
Profissional Documentos
Cultura Documentos
Prática 5
Máquina de Estados Finitos
Objetivos:
PARA:
LIGAR = 0 0
MOVIMENTAR = 0 1
ENCHER = 1 0
0 0 0 X 0 1 0 1
0 0 1 X 1 0 1 0
0 1 0 X 0 1 0 1
0 1 1 X 1 0 1 0
1 0 X 0 1 0 1 0
1 0 X 1 0 1 0 1
use work.enum_types.all;
use work.enum_types.all;
process
begin
clock <= '1';
wait for 1 ns;
wait;
end process;
process
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais
begin
sensor_G <= '0'; sensor_C <= '
0';
wait for 2 ns;
wait;
end process;
end comportamento;
O sistema dispõe de 4 sensores (S1, S2, S3 e S4) que detectam a presença do
automóvel em cada uma das áreas e um sensor S5 que sinaliza a chegada do
automóvel ao fim do túnel. O sistema possui também 4 saídas (O1, O2, O3 e O4) que
ativam as 4 operações, e ainda uma saída T que ativa o sistema mecânico que faz o
automóvel avançar entre as áreas. O processo de lavagem é iniciado por atuação em
um botão de pressão B. Por razões de segurança, existe também um botão E, que ao
ser pressionado, desativa todas as 4 operações e conduz o automóvel de volta para o
começo do túnel. Quando o automóvel chega no fim do túnel, é ativada uma saída X
que faz acender uma lâmpada de sinalização e o sistema fica à espera de um novo
automóvel.
EQUAÇÕES DO SISTEMA.
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais
use work.enum_types.all;
begin
process (clock)
variable estado_atual_aux: estados_lavajato;
begin
if (clock = '1' and clock'event) then
case estado_atual_aux is
when O0 =>
if B = '1' and S1 = '1' then estado_atual_aux := O1;
elsif E = '1' then estado_atual_aux := O5;
else estado_atual_aux := O0;
end if;
when O1 =>
if S2 = '1' then estado_atual_aux := O2;
elsif E = '1' then estado_atual_aux := O5;
else estado_atual_aux := O1;
end if;
when O2 =>
if S3 = '1' then estado_atual_aux := O3;
elsif E = '1' then estado_atual_aux := O5;
else estado_atual_aux := O2;
end if;
when O3 =>
if S4 = '1' then estado_atual_aux := O4;
elsif E = '1' then estado_atual_aux := O5;
else estado_atual_aux := O3;
end if;
when O4 =>
if S5 = '1' then estado_atual_aux := O0;
elsif E = '1' then estado_atual_aux := O5;
else estado_atual_aux := O4;
end if;
when O5 =>
if E = '1' then estado_atual_aux := O5;
end if;
end case;
end if;
when O2 => A1 <= '0'; A2 <= '1'; A3 <= '0'; A4 <= '0'; T <= '1'; T0 <=
'0'; X <= '0';
when O3 => A1 <= '0'; A2 <= '0'; A3 <= '1'; A4 <= '0'; T <= '1'; T0 <=
'0'; X <= '0';
when O4 => A1 <= '0'; A2 <= '0'; A3 <= '0'; A4 <= '1'; T <= '1'; T0 <=
'0'; X <= '0';
when O5 => A1 <= '0'; A2 <= '0'; A3 <= '0'; A4 <= '0'; T <= '0'; T0 <=
'1'; X <= '0';
end case;
use work.enum_types.all;
begin
maquina: lavajato port map (clock, S1, S2, S3, S4, S5, B, E, A1, A2, A3, A4, T,
T0, X, estado_atual);
process
begin
clock <= '1';
wait for 1 ns;
wait;
end process;
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais
process
begin
S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0'; S5 <= '0'; B <= '0'; E <= '0';
wait for 2 ns;
S1 <= '1'; S2 <= '0'; S3 <= '0'; S4 <= '0'; S5 <= '0'; B <= '1'; E <= '0';
wait for 2 ns;
S1 <= '0'; S2 <= '1'; S3 <= '0'; S4 <= '0'; S5 <= '0'; B <= '0'; E <= '0';
wait for 2 ns;
S1 <= '0'; S2 <= '0'; S3 <= '1'; S4 <= '0'; S5 <= '0'; B <= '0'; E <= '0';
wait for 2 ns;
S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '1'; S5 <= '0'; B <= '0'; E <= '0';
wait for 2 ns;
S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0'; S5 <= '1'; B <= '0'; E <= '0';
wait for 2 ns;
S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0'; S5 <= '0'; B <= '0'; E <= '1';
wait for 2 ns;
S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0'; S5 <= '0'; B <= '0'; E <= '0';
wait for 2 ns;
wait;
end process;
end comportamento;