Você está na página 1de 14

Universidade Federal Rural de Pernambuco

Unidade Acadêmica do Cabo de Santo Agostinho


Técnicas Digitais

Prática 5
Máquina de Estados Finitos

Alunos(as): Giulia Gabriela Morais Perruci


Joana D’arc Barros de Lima
Lucas Martins Castelo Branco

Objetivos:

Explorar o conceito de máquina de estados finitos e realizar a implementação em


VHDL.

Problema 1: ​Pretende-se projetar um sistema de controle de uma linha de enchimento


automático de garrafas. Esta linha é construída com uma esteira que conduz as
garrafas vazias até a posição de enchimento e por meio de uma torneira que abre ou
fecha ao ser detectada a presença de uma garrafa. Este sistema de controle possui
duas entradas ​G e ​C e duas saídas ​M e ​T.​ A entrada ​G proveniente de um sensor
torna-se ativa assim que uma garrafa se encontra posicionada abaixo da torneira e o
sensor ​C sinaliza o fim do enchimento da garrafa. A saída ​M​, quando ativa, faz a esteira
avançar e a saída ​T ativa uma válvula que comanda o enchimento da garrafa. Admita
que ao ser ligado, o circuito parte de um estado inicial em que as saídas ​M e ​T não
estão ativas, dando-se de imediato início ao enchimento de uma garrafa ou ao
movimento da esteira, conforme exista ou não uma garrafa posicionada corretamente.

Especifique todos os estados, entradas e saídas, detalhando o objetivo de cada um.


Apresente o diagrama de transição de estados, a tabela de transição de estados
(defina primeiro como os estados são codificados), as expressões lógicas e o circuito
correspondente (utilize o Logisim Evolution ou o Quartus para construção do circuito).
Por fim, implemente a máquina de estados correspondente utilizando VHDL e
apresente formas de onda de maneira que seja possível visualizar a transição entre os
estados.
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

Figura 1: Diagrama de estados.

PARA:
LIGAR = 0 0
MOVIMENTAR = 0 1
ENCHER = 1 0

Estado atual: Entradas: Saídas: Próximo estado:


Q1 Q0 G C T M D1 D0

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

Tabela 1: Tabela-verdade da máquina de refrigerantes.


Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

Figura 3: Equações do sistema.

Figura 2: Circuito criado no LogiSim Evolution.


Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

Código VHDL do arquivo esteira_refri.vhd

use​ work.enum_types.​all​;

entity​ esteira_refri ​is


​port​ (
clock, sensor_G, sensor_C: ​in​ bit; ​--entradas da nossa fabrica
ativar_M, ativar_T: ​out​ bit;
estado_atual: ​out​ estados_refri
);
end​ esteira_refri;

architecture​ comportamento ​of​ esteira_refri ​is


​-- type estados_refri is (ociosidade = ligar, agitacao = movimento,
enchimento = torneira);
begin
​process​ (clock)
​variable​ estado_atual_aux: estados_refri;
​begin
​if​ (clock = ​'1'​ ​and​ clock​'event​) ​then
​case​ estado_atual_aux ​is
​when​ ligar =>
​if​ sensor_G = ​'1'​ ​then​ estado_atual_aux := torneira;
​else​ estado_atual_aux := movimento;
​end​ ​if​;

​when​ movimento =>


​if​ sensor_G = ​'1'​ ​then​ estado_atual_aux := torneira;
​else​ estado_atual_aux := movimento;
​end​ ​if​;

​when​ torneira =>


​if​ sensor_C = ​'1'​ ​then​ estado_atual_aux := movimento;
​else​ estado_atual_aux := torneira;
​end​ ​if​;
​end​ ​case​;
​end​ ​if​;

​case​ estado_atual_aux ​is


​when​ ligar => ativar_M <= ​'0'​; ativar_T <= ​'0'​;
​when​ torneira => ativar_M <= ​'0'​; ativar_T <= ​'1'​;
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

​when​ movimento => ativar_M <= ​'1'​; ativar_T <= ​'0'​;


​end​ ​case​;

estado_atual <= estado_atual_aux;


​end​ ​process​;
end​ comportamento;

Código VHDL do arquivo tb_esteira_refri.vhd

use​ work.enum_types.​all​;

entity​ tb_esteira_refri ​is


end​ tb_esteira_refri;

architecture​ comportamento ​of​ tb_esteira_refri ​is


​component​ esteira_refri ​is
​port​ (
clock, sensor_G, sensor_C: ​in​ bit;
ativar_M, ativar_T: ​out​ bit;
estado_atual: ​out​ estados_refri
);
​end​ ​component​;

​signal​ clock, sensor_G, sensor_C: bit;


​signal​ ativar_M, ativar_T: bit;
​signal​ estado_atual: estados_refri;
begin
maquina: ​esteira_refri ​port ​map (clock, sensor_G, sensor_C, ativar_M,
ativar_T, estado_atual);

​process
​begin
clock <= ​'1'​;
​wait​ ​for​ ​1​ ns;

​for​ i ​in​ integer ​range​ ​0​ ​to​ ​18​ ​loop


clock <= ​not​ clock;
​wait​ ​for​ ​1​ ns;
​end​ ​loop​;

​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;

sensor_G <= ​'0'​; sensor_C <= '


​ 1'​;
​wait​ ​for​ ​2​ ns;

sensor_G <= ​'1'​; sensor_C <= '


​ 0'​;
​wait​ ​for​ ​2​ ns;

sensor_G <= ​'1'​; sensor_C <= '


​ 1'​;
​wait​ ​for​ ​2​ ns;

sensor_G <= ​'0'​; sensor_C <= '


​ 0'​;
​wait​ ​for​ ​2​ ns;

​wait​;
​end​ ​process​;
end​ comportamento;

Código do arquivo enum_types.vhd

package​ enum_types ​is


​type​ estados_refri ​is​ (ligar, movimento, torneira);
end​ ​package​;

Figura 3: Gráfico gerado pelo gtkwave do arquivo ondas.vcd.

Problema 2: ​Pretende-se projetar um circuito para controlar um túnel de lavagem


automática de automóveis. O túnel é composto por 4 áreas que um automóvel
atravessa sucessivamente, por ação de um sistema mecânico. Na área 1 o automóvel é
enxaguado com água e detergente, na área 2 é sujeito a ação de escovas, na área 3 é
novamente enxaguado e na área 4 é sujeito a um processo de secagem por ventilação
forçada, conforme ilustrado na figura abaixo.
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

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.

Especifique todos os estados, entradas e saídas, detalhando o objetivo de cada um.


Apresente o diagrama de transição de estados, a tabela de transição de estados
(primeiro defina como os estados são codificados), as expressões lógicas e o circuito
correspondente (utilize o Logisim Evolution ou o Quartus para construção do circuito).
Por fim, implemente a máquina de estados correspondente utilizando VHDL e
apresente formas de onda de maneira que seja possível visualizar a transição entre os
estados.
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

TABELA-VERDADE DO SISTEMA DE LAVAGEM DO AUTOMÓVEL.


Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

EQUAÇÕES DO SISTEMA.
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

TABELA-VERDADE DO BOTÃO DE EMERGÊNCIA (E)

EQUAÇÕES DO BOTÃO DE EMERGÊNCIA (E)


Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

Figura: Circuito implementado no Logisim.

Código VHDL do arquivo enum_types.vhd

package​ enum_types ​is


​type​ estados_lavajato ​is​ (O0, O1, O2, O3, O4, O5);
end​ ​package​;

Código VHDL do arquivo lavajato.vhd

use​ work.enum_types.​all​;

entity​ lavajato ​is


​port​ (
clock, S1, S2, S3, S4, S5, B, E : ​in​ bit; ​--entradas da nossa fabrica
A1, A2, A3, A4, T, T0, X: ​out​ bit;
estado_atual: ​out​ estados_lavajato
);
end​ lavajato;
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

architecture​ comportamento ​of​ lavajato ​is


​-- type estados_refri is (ociosidade = ligar, agitacao = movimento, enchimento =
torneira);

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​;

​case​ estado_atual_aux ​is


​when O0 => A1 <= ​'0'​; A2 <= ​'0'​; A3 <= ​'0'​; A4 <= ​'0'​; T <= ​'0'​; T0 <=
'0'​; X <= ​'1'​;
​when O1 => A1 <= ​'1'​; A2 <= ​'0'​; A3 <= ​'0'​; A4 <= ​'0'​; T <= ​'1'​; T0 <=
'0'​; X <= ​'0'​;
Universidade Federal Rural de Pernambuco
Unidade Acadêmica do Cabo de Santo Agostinho
Técnicas Digitais

​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​;

estado_atual <= estado_atual_aux;


​end​ ​process​;
end​ comportamento;

Código VHDL do arquivo tb_lavajato.vhd

use​ work.enum_types.​all​;

entity​ tb_lavajato ​is


end​ tb_lavajato;

architecture​ comportamento ​of​ tb_lavajato ​is


​component​ lavajato ​is
​port​ (
clock, S1, S2, S3, S4, S5, B, E : ​in​ bit; ​--entradas da nossa fabrica
A1, A2, A3, A4, T, T0, X: ​out​ bit;
estado_atual: ​out​ estados_lavajato
);
​end​ ​component​;

​signal​ clock, S1, S2, S3, S4, S5, B, E: bit;


​signal​ A1, A2, A3, A4, T, T0, X: bit;
​signal​ estado_atual: estados_lavajato;

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;

​for​ i ​in​ integer ​range​ ​0​ ​to​ ​18​ ​loop


clock <= ​not​ clock;
​wait​ ​for​ ​1​ ns;
​end​ ​loop​;

​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;

Figura 5: Gráfico gerado pelo GTKWAVE utilizando os algorítimos VHDL​.

Você também pode gostar