SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Universidade Federal de Santa Catarina
         Centro Tecnológico – CTC
    Departamento de Engenharia Elétrica
                                            http://gse.ufsc.br




“EEL7020 – Sistemas Digitais”


     Prof. Eduardo Augusto Bezerra
           Eduardo.Bezerra@eel.ufsc.br




          Florianópolis, agosto de 2012.
Objetivos do laboratório


1. Entender o conceito de máquinas de estados (FSM).
2. Entender o conceito de circuito sequencial controlando o
   fluxo de atividades de circuito combinacional.
3. Entender o processo de síntese de FSMs em VHDL.
4. Entender o funcionamento de contadores.
5. Estudo de caso: projeto e implementação em VHDL de
   um contador baseado em máquinas de estados.



                        EEL7020 – Sistemas Digitais   2/34
“Síntese de máquinas de estado (FSM)”




              EEL7020 – Sistemas Digitais   3/34
Finite State Machine (FSM)


   • Sistemas computacionais, normalmente, são
     compostos por um módulo de “controle” e um
     módulo para “execução das operações”.
                                                          Automóvel
    Máquina de venda       Computador                      (sistemas
     de refrigerantes                                    embarcados)
                        Execução:
    Execução:           - Busca instrução              Execução:
    - Recebe R$         - Decodifica                   - Alarme
    - Devolve troco     - Executa                      - Vidros
    - Fornece produto   - Acessa memória               - ABS
                        - Escreve resultados

       Controlador                                        Controlador
                           Controlador



                         EEL7020 – Sistemas Digitais                    4/34
Finite State Machine (FSM)
• O “controlador” é responsável por coordenar a sequência
  de atividades a ser realizada em um determinado
  processo (ou sistema)
• Em sistemas digitais são utilizados “circuitos sequenciais”
  na geração de sinais de controle
• Um circuito sequencial transita por uma série de estados
  e, a cada estado (a cada momento), poderá fornecer uma
  determinada saída
• As saídas são utilizadas no controle da execução de
  atividades em um processo
• A lógica sequencial utilizada na implementação de uma
  FSM possui um número “finito” de estados.
                         EEL7020 – Sistemas Digitais     5/34
Finite State Machine (FSM)

   Modelo de comportamento composto por:
      • Estados
      • Transições
      • Ações

   Estados
       Armazena informação sobre o passado refletindo as modificações
       das entradas do início até o presente momento

   Transição
       Indica uma troca de estado e é descrita por uma condição que
       habilita a modificação de estado

   Ação
      Descrição da atividade que deve ser executada em um
      determinado instante

                              EEL7020 – Sistemas Digitais             6/34
Estrutura de uma FSM




      EEL7020 – Sistemas Digitais   7/34
Estrutura de uma FSM
  • Dois módulos:
         • Armazenamento do “estado atual”; e
         • Cálculo da “saída” e do “próximo estado”

   Entradas Primárias                                            Saídas Primárias
                                Circuito Combinacional
                                 (Funções de Saída e
                              Funções de Próximo Estado)
          Estado Atual                                            Próximo Estado




                                  Registrador de Estado

              Sinal de relógio ("Clock")                    Sinal de inicialização ("Reset")


                                   EEL7020 – Sistemas Digitais                                 8/34
Estrutura de uma FSM

  • Armazenamento do “estado atual”
    • Registrador construído a partir de flip-flops


  • Cálculo da “saída” e do “próximo estado”
    • Circuito combinacional; ou
    • Tabela verdade da lógica de saída e da lógica de
      próximo estado armazenada em uma memória
      (ROM, Flash, RAM, ...)




                        EEL7020 – Sistemas Digitais      9/34
Síntese de FSMs




   EEL7020 – Sistemas Digitais   10/34
VHDL
Uso de HDL para descrever uma FSM                                                      típico


          VHDL típico de uma máquina de estados – 2 processos
 entity MOORE is   port(X, clock, reset : in std_logic;    Z: out std_logic);   end;

 architecture A of MOORE is
     type STATES is (S0, S1, S2, S3);
     signal EA, PE : STATES;
 begin
     process (clock, reset)
     begin
            if reset= '1' then
                  EA <= S0;
           elsif clock'event and clock='1' then
                   EA <= PE ;
           end if;
     end process;

     process(EA, X)
     begin
            case EA is
               when S0 =>       Z <= '0';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S1 =>       Z <= '1';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S2 =>       Z <= '1';
                                if X='0' then PE <=S2; else PE <= S3; end if;
               when S3 =>       Z <= '0';
                                if X='0' then PE <=S3; else PE <= S1; end if;
            end case;
     end process;
 end A;
                                                  EEL7020 – Sistemas Digitais          11/34
VHDL
Uso de HDL para descrever uma FSM                                                                  típico


          VHDL típico de uma máquina de estados – 2 processos
 entity MOORE is   port(X, clock, reset : in std_logic;   Z: out std_logic);   end;

 architecture A of MOORE is
     type STATES is (S0, S1, S2, S3);       TIPO ENUMERADO
     signal EA, PE : STATES;
 begin
                                            Sinais EA (estado atual)            e PE (próximo estado)
     process (clock, reset)
     begin
            if reset= '1' then
                  EA <= S0;
           elsif clock'event and clock='1' then
                   EA <= PE ;
           end if;
     end process;

    process(EA, X)
    begin
           case EA is
              when S0 =>       Z <= '0';
                               if X='0' then PE <=S0; else PE <= S2; end if;
              when S1 =>       Z <= '1';
                               if X='0' then PE <=S0; else PE <= S2; end if;
              when S2 =>       Z <= '1';
                               if X='0' then PE <=S2; else PE <= S3; end if;
              when S3 =>       Z <= '0';
                               if X='0' then PE <=S3; else PE <= S1; end if;
            end case;
     end process;
 end A;
                                                EEL7020 – Sistemas Digitais                        12/34
VHDL
Uso de HDL para descrever uma FSM                                                         típico


          VHDL típico de uma máquina de estados – 2 processos
 entity MOORE is   port(X, clock, reset : in std_logic;    Z: out std_logic);   end;

 architecture A of MOORE is
     type STATES is (S0, S1, S2, S3);
     signal EA, PE : STATES;
 begin
     process (clock, reset)
     begin
            if reset= '1' then
                  EA <= S0;                               Registrador que armazena o EA
           elsif clock'event and clock='1' then
                   EA <= PE ;                             em função do próximo estado
           end if;
     end process;

     process(EA, X)
     begin
            case EA is
               when S0 =>       Z <= '0';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S1 =>       Z <= '1';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S2 =>       Z <= '1';
                                if X='0' then PE <=S2; else PE <= S3; end if;
               when S3 =>       Z <= '0';
                                if X='0' then PE <=S3; else PE <= S1; end if;
            end case;
     end process;
 end A;
                                                  EEL7020 – Sistemas Digitais             13/34
VHDL
Uso de HDL para descrever uma FSM                                                               típico


          VHDL típico de uma máquina de estados – 2 processos
 entity MOORE is   port(X, clock, reset : in std_logic;    Z: out std_logic);   end;

 architecture A of MOORE is
     type STATES is (S0, S1, S2, S3);
     signal EA, PE : STATES;
 begin
     process (clock, reset)
     begin
            if reset= '1' then
                  EA <= S0;
           elsif clock'event and clock='1' then
                   EA <= PE ;
           end if;                                        Geração do PE e a saída Z
     end process;
                                                          em função do EA e da entrada X
     process(EA, X)                                       (observar a lista de sensitividade)
     begin
            case EA is
               when S0 =>       Z <= '0';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S1 =>       Z <= '1';
                                if X='0' then PE <=S0; else PE <= S2; end if;
               when S2 =>       Z <= '1';
                                if X='0' then PE <=S2; else PE <= S3; end if;
               when S3 =>       Z <= '0';
                                if X='0' then PE <=S3; else PE <= S1; end if;
            end case;
     end process;
 end A;
                                                  EEL7020 – Sistemas Digitais                   14/34
VHDL
Uso de HDL para descrever uma FSM                                        típico


         VHDL típico de uma máquina de estados – 2 processos

  Desenhe a máquina de estados conforme as transições especificadas
  no processo combinacional:
         process(EA, X)
         begin
              case EA is
                when S0 =>     Z <= '0';
                         if X='0' then PE <=S0; else PE <= S2; end if;
                when S1 =>     Z <= '1';
                         if X='0' then PE <=S0; else PE <= S2; end if;
                when S2 =>     Z <= '1';
                         if X='0' then PE <=S2; else PE <= S3; end if;
                when S3 =>     Z <= '0';
                         if X='0' then PE <=S3; else PE <= S1; end if;
              end case;
         end process;

Esta é uma máquina Moore. A saída (Z) depende apenas do estado atual (S0, ...).
    Em uma máquina de Mealy, a saída depende do estado E das entradas.
                                EEL7020 – Sistemas Digitais               15/34
VHDL
Uso de HDL para descrever uma FSM                              típico




        process(EA, X)
        begin
            case EA is
              when S0 => Z <= '0';
                       if X='0' then PE <=S0; else PE <= S2; end if;
              when S1 => Z <= '1';
                       if X='0' then PE <=S0; else PE <= S2; end if;
              when S2 => Z <= '1';
                       if X='0' then PE <=S2; else PE <= S3; end if;
              when S3 => Z <= '0';
                       if X='0' then PE <=S3; else PE <= S1; end if;
            end case;
        end process;      EEL7020 – Sistemas Digitais          16/34
VHDL
Uso de HDL para descrever uma FSM                                                         1 proc


                          Máquina de estados – 1 processo
 entity MOORE is    port(X, clock, reset : in std_logic;   Z: out std_logic);      end;

 architecture B of MOORE is
     type STATES is (S0, S1, S2, S3);
     signal EA: STATES;
 begin
     process(clock, reset)
     begin
            if reset= '1' then
                   EA <= S0;
           elsif clock'event and clock='1' then
                  case EA is
                       when S0 => Z <= '0';
                                  if X='0' then EA <=S0; else EA <= S2; end if;
                       when S1 => Z <= '1';
                                  if X='0' then EA <=S0; else EA <= S2; end if;
                       when S2 => Z <= '1';
                                   if X='0' then EA <=S2; else EA <= S3; end if;
                      when S3 => Z <= '0';
                                  if X='0' then EA <=S3; else EA <= S1; end if;
                end case;
           end if;
     end process;
 end B;


• EA: mesmo comportamento
• Saída Z ficará defasada 1 ciclo de clock
                                                 EEL7020 – Sistemas Digitais              17/34
VHDL
Uso de HDL para descrever uma FSM                              1 proc


              Máquina de estados – 1 processo
  process(clock, reset)
  begin                                                Não tem o PE
        if reset= '1' then                             da FSM com
                EA <= S0;                              2 processos!
        elsif clock'event and clock='1' then
              case EA is
                    when S0 =>     Z <= '0';
                                   if X='0' then
                                             EA <=S0;
                                   else
                                             EA <= S2;
                                   end if;
                    when S1 =>     Z <= '1';
                                   if X='0' then
                    …
              end case;
        end if;
  end process;
                          EEL7020 – Sistemas Digitais           18/34
VHDL
Uso de HDL para descrever uma FSM                                        3 procs


                   Máquina de estados – 3 processos

  SM_CS       P2
                         • P1 define o estado atual, atualizando essa
 P1                        informação (SM_CS) para P2 e P3.
              P3
      SM_CS

                         • Com base nos valores dos sinais, P2 define o
  SM_NS       P2           próximo estado, colocando essa informação no
                           sinal SM_NS sem, contudo, realizar a transição
  P1                       (será realizada por P1).
              P3         • Com base nos valores dos sinais (status) da
                           FSM, P3 define novos valores para os sinais
                           (do estado atual).
                              EEL7020 – Sistemas Digitais                19/34
VHDL
Uso de HDL para descrever uma FSM                                             3 procs


                   Máquina de estados – 3 processos
P1 - Processo, sensível as transições do clock, que realiza a transição de estados na
FSM, fazendo com que o estado atual (SM_CS, State Machine Current State) receba
o próximo estado (SM_NS, State Machine Next State). Essa transição é sensível a
borda de descida do clock.

stChange:
process(clk_i)
begin
   if clk_i'event and clk_i='0' then
      if rst_n_i='0' then
          SM_CS <= SM_rst;
      else
          SM_CS <= SM_NS;
      end if;f
   end if;
end process;

                                   EEL7020 – Sistemas Digitais                 20/34
VHDL
Uso de HDL para descrever uma FSM                                            3 procs


                  Máquina de estados – 3 processos
P2 – Realiza as alterações nos estados (define o próximo estado). Sensível a
alterações nos sinais definidos na lista de sensitividade. Controla os estados
definindo o fluxo, ou seja, define qual será o valor do sinal SM_NS a ser utilizado
pelo processo P1 responsável por realizar as transições de estados. Comando "case
SM_CS is“ seleciona o estado atual (Current State) e, conforme os sinais da FSM,
um próximo estado é definido no sinal SM_NS.
process( SM_CS, signalA )
begin
   case SM_CS is                                       if signalA = '1' then
      when state_rst =>                                   SM_NS <= state_exec;
         SM_NS <= state_idle                           else
      when state_idle =>                                  SM_NS <= state_idle;
         if signalA = '1' then                         end if;
            SM_NS <= state_exec;                    when state_exec =>
         else                                          SM_NS <= state_idle
            SM_NS <= state_idle;                    when others =>
         end if;                                       end case;
                                                 end process;
                                  EEL7020 – Sistemas Digitais                21/34
VHDL
Uso de HDL para descrever uma FSM                                             3 procs


                   Máquina de estados – 3 processos
P3 – Realiza atribuições dos sinais em cada estado. Sinais são alterados na borda
de subida, e os estados na borda de descida. São atribuídos todos os sinais,
incluindo os sinais de saída e sinais internos do processo.

process(clk_i)
begin
   if clk_i'event and clk_i='1' then
      case SM_CS is
         when state_rst =>
             signal_out <= '0'
         when state_idle =>
             signal_out <= '0'
         when state_exec =>
             signal_out <= '1';
         when others =>
      end case;
   end if;
end process;
                                  EEL7020 – Sistemas Digitais                 22/34
library ieee;
use ieee.std_logic_1164.all;                    Uso de sinais (pinos)
entity FSM is
port (
                                                disponíveis na DE2
 LEDR: out std_logic_vector(7 downto 0);        para Clock e Reset
 KEY: in std_logic_vector(3 downto 0);
 CLOCK_50: in std_logic             process (EA, KEY(0), KEY(1))
);                                  begin
end FSM;                             case EA is
architecture FSM_beh of FSM is         when S0 => if KEY(0) = '0' then
 type states is (S0, S1, S2, S3);              PE <= S3; else PE <= S0;
 signal EA, PE: states;                        end if;
 signal clock: std_logic;              when S1 =>
 signal reset: std_logic;                      LEDR <= "01010101";
begin                                          PE <= S0;
 clock <= CLOCK_50;                    when S2 =>
 reset <= KEY(3);                        case KEY(1) is
process (clock, reset)                       when '0' => LEDR <= "10101010";
 begin                                       when '1' => LEDR <= "00000000";
   if reset = '0' then                       when others => LEDR <= "11111111";
         EA <= S0;                       end case;
   elsif clock'event and                 PE <= S1;
                 clock = '1' then      when S3 =>
         EA <= PE;                               PE <= S2;
   end if;                               end case;
 end process;                       end process;
                                    end FSM_beh;
                               EEL7020 – Sistemas Digitais                23/34
Tarefa a ser realizada na aula prática




               EEL7020 – Sistemas Digitais   24/34
Tarefa
• Implementar uma FSM em VHDL com 1 processo para geração dos
  caracteres ‘A’ a ‘Z’ da tabela ASCII, apresentando os caracteres nos
  LEDs verdes (LEDG).

• FSM com reset assíncrono (usar botão KEY(0)) para inicializar um
  contador com o valor do primeiro caracter a ser gerado (‘A’ = 41H).

• A cada pulso do relógio de 27 MHz (borda de subida), o contador
  deverá ser incrementado, gerando o próximo caracter da tabela ASCII.

• A FSM deverá possuir um número reduzido de estados, número esse
  suficiente para incrementar o contador, e verificar se chegou ao final
  da contagem (caracter ‘Z’ = 5AH).

• Ao atingir o último caracter da tabela ASCII, a FSM deverá voltar ao
  início da sequencia, gerando novamente o caracter ‘A’.
Obs. Alternativamente, no lugar do relógio de 27MHz o sinal de clock poderá ser gerado
     por um botão (KEY), porém é preciso cuidar o problema do debounce.
                                    EEL7020 – Sistemas Digitais                 25/34
Diagrama de blocos do circuito a ser implementado
         (FSM utilizada como contador)
                 topo.vhd




                                      8

                                   Contagem                LEDG(7 downto 0)


      CLOCK_27     clock              FSM
        KEY(0)      resetMáquina de estados com a               TD_RESET
                       função de “contador”. Realiza      Habilita o clock
                         a geração da sequencia de        de 27MHz
                       valores de ‘A’ (41H) a ‘Z’ (5AH)


                       EEL7020 – Sistemas Digitais                 26/34
Diagrama de blocos do circuito a ser implementado
             “Uso dos displays de 7-segmentos como saída”
1. Incluir o componente Decod7seg
   dos labs anteriores;
                                      topo.vhd                 F(7..4)         Decod.
                                                                          4    7-seg
2. Criar um signal F no topo;

3. Criar duas instâncias do
   decodificador (com port map);                                F(3..0)        Decod.
                                                                          4    7-seg
4. Usar o novo sinal interno F para
   conectar a saída da FSM
   (Contagem) com as entradas dos
   decodificadores (usando port
   map);                                                        F


5. Conectar o sinal F ao LEDG:                             8
   LEDG <= F.
                                                        Contagem                         LEDG(7 downto 0)


               CLOCK_27                 clock              FSM
                   KEY(0)                resetMáquina de estados com a                        TD_RESET
                                            função de “contador”. Realiza               Habilita o clock
                                              a geração da sequencia de                 de 27MHz
                                            valores de ‘A’ (41H) a ‘Z’ (5AH)


                                            EEL7020 – Sistemas Digitais                          27/34
Dica: Topo.vhd com componente FSM e clock de 27MHz
        (sem utilizar os displays de 7-segmentos)
entity Topo is
    port (       LEDG: out std_logic_vector(7 downto 0);
                 KEY: in std_logic_vector(3 downto 0);
                 TD_RESET: out std_logic;
                 CLOCK_27: in std_logic
         );
end Topo;
architecture topo_beh of Topo is
   component ContaASCII -- Esse e’ o componente FSM
      port (
             valorASCII: out std_logic_vector(7 downto 0);
             clock: in std_logic;
             reset: in std_logic                    Colocar TD_RESET em '1'
      );                                               para "ligar" o sinal de
begin                                                   CLOCK_27 da DE2
   TD_RESET <= '1';

   L0: ContaASCII port map ( LEDG, CLOCK_27, KEY(0) );

end topo_beh;                    EEL7020 – Sistemas Digitais               28/34
Dica: ContaASCII.vhd – trecho para geração de atraso (delay) com clock de 27MHz
 library IEEE;
 use IEEE.std_logic_1164.all;
 use IEEE.std_logic_unsigned.all;      -- Para usar o ‘+’ nos incrementos.

 process(CLOCK_27, … ) -- Ao usar o clock de 27MHz, esse process será
    begin                   -- executado 27 milhões de vezes por segundo.
         … -- Colocar aqui os estados do contador ASCII (ex. Inicio, inc, fim).
         when D1 =>      -- Estado para iniciar contador do atraso
          atraso <= ( others => '0' );
          EA <= D2;
         when D2 =>      -- Estado para gerar atraso ao mostrar dado no LEDG
          atraso <= atraso + 1;       -- “atraso” foi inicializado com zero em D1.
          EA <= D3;
         when D3 =>       -- Estado para testar se atingiu o valor máximo.
           if atraso >= x"800000" then -- 8.388.608 / 27.000.000 = 0,3 * 3 = 1 s.
              EA <= S1; -- Ao atingir o valor máximo, sai do laço de atraso
          else             -- e volta para o processamento do contador ASCII.
              EA <= D4; -- Permanece no laço de contagem para gerar atraso.
          end if;
         when D4 =>        -- Estado para continuar contagem do atraso.
            EA <= D2;      -- Essa repetição irá gerar um atraso para
                          -- possibilitar a Sistemas Digitais do dado no LEDG.
                                    EEL7020 –
                                              visualização                      29/34
Dica: Componente ContaASCII gerado pelo Quartus II




                       EEL7020 – Sistemas Digitais   30/34
Dica: FSM gerada pelo Quartus II
(componente EA do slide anterior)




                       EEL7020 – Sistemas Digitais   31/34
Simulação no Quartus II (com atraso de +/- 1s)




                                         O tempo total para realizar uma
                                        simulação de 20 segundos em um
                                       i7 quad core (hyper threading, logo
                                        “8 cores”), 2,93GHz e 8 G RAM foi
                                            de 19 horas e 28 minutos.




                     EEL7020 – Sistemas Digitais                    32/34
Simulação no Quartus II (com atraso de +/- 1s)



Reset




 41H = ‘A’

TD_RESET = ‘1’


 Estados da
    FSM



                    A cada 3 pulsos de clock, repete os estados do
                       atraso (D2 no slide das dicas de atraso).
                     EEL7020 – Sistemas Digitais              33/34
Simulação no Quartus II (com atraso de +/- 1s)
             Apresentação da contagem em LEDG, a
              cada pulso no estado EA.ContaLetra




                        EEL7020 – Sistemas Digitais   34/34

Weitere ähnliche Inhalte

Was ist angesagt?

Relatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresRelatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresFlavio Oliveira Rodrigues
 
Capitulo 004 logica ladder - logica combinacional
Capitulo 004   logica ladder - logica combinacionalCapitulo 004   logica ladder - logica combinacional
Capitulo 004 logica ladder - logica combinacionalYasmim Morais
 
Projeto ula
Projeto ula Projeto ula
Projeto ula unifesptk
 
Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Rodrigo Vieira
 

Was ist angesagt? (7)

Relatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresRelatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadores
 
Portas logicas
Portas logicasPortas logicas
Portas logicas
 
Capitulo 004 logica ladder - logica combinacional
Capitulo 004   logica ladder - logica combinacionalCapitulo 004   logica ladder - logica combinacional
Capitulo 004 logica ladder - logica combinacional
 
Aula 05-oac-conceitos-de-logica-digital
Aula 05-oac-conceitos-de-logica-digitalAula 05-oac-conceitos-de-logica-digital
Aula 05-oac-conceitos-de-logica-digital
 
Projeto ula
Projeto ula Projeto ula
Projeto ula
 
Projeto ULA
Projeto ULAProjeto ULA
Projeto ULA
 
Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)
 

Andere mochten auch

Vpoa Fsm Poa 2010
Vpoa Fsm Poa 2010Vpoa Fsm Poa 2010
Vpoa Fsm Poa 2010Ronaldo
 
Trabalho valvulas eletronicas
Trabalho valvulas eletronicasTrabalho valvulas eletronicas
Trabalho valvulas eletronicasRenato Almeida
 
Apresentação Ricci - Fórum Social Mundial
Apresentação Ricci - Fórum Social MundialApresentação Ricci - Fórum Social Mundial
Apresentação Ricci - Fórum Social MundialBruno César Dos Santos
 
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAs
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAsLivro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAs
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAsEdward David Moreno
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoFabio Souza
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladoresDanilo Morais Pagano
 

Andere mochten auch (11)

Vpoa Fsm Poa 2010
Vpoa Fsm Poa 2010Vpoa Fsm Poa 2010
Vpoa Fsm Poa 2010
 
Resoluções Do FSM 2010
Resoluções Do  FSM 2010Resoluções Do  FSM 2010
Resoluções Do FSM 2010
 
Ppt forum social mundial
Ppt forum social mundialPpt forum social mundial
Ppt forum social mundial
 
Trabalho valvulas eletronicas
Trabalho valvulas eletronicasTrabalho valvulas eletronicas
Trabalho valvulas eletronicas
 
Lab8 controladores
Lab8 controladoresLab8 controladores
Lab8 controladores
 
Apresentação Ricci - Fórum Social Mundial
Apresentação Ricci - Fórum Social MundialApresentação Ricci - Fórum Social Mundial
Apresentação Ricci - Fórum Social Mundial
 
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAs
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAsLivro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAs
Livro - Projeto, Desempenho e Aplicacoes de Sistemas Digitais em FPGAs
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
O processador
O processadorO processador
O processador
 
Organizações Internacionais
Organizações InternacionaisOrganizações Internacionais
Organizações Internacionais
 

Mehr von Eduardo Bezerra

Mehr von Eduardo Bezerra (8)

Lab9 processos
Lab9 processosLab9 processos
Lab9 processos
 
Lab6 flipflop
Lab6 flipflopLab6 flipflop
Lab6 flipflop
 
Lab5 decod 7seg
Lab5 decod 7segLab5 decod 7seg
Lab5 decod 7seg
 
Lab4 mux
Lab4 muxLab4 mux
Lab4 mux
 
Lab3 componentes
Lab3 componentesLab3 componentes
Lab3 componentes
 
Lab2 vhdl fluxo_quartus
Lab2 vhdl fluxo_quartusLab2 vhdl fluxo_quartus
Lab2 vhdl fluxo_quartus
 
Lab1 apresentacao disciplina
Lab1 apresentacao disciplinaLab1 apresentacao disciplina
Lab1 apresentacao disciplina
 
Lab10 somadores
Lab10 somadoresLab10 somadores
Lab10 somadores
 

Lab7 fsm

  • 1. Universidade Federal de Santa Catarina Centro Tecnológico – CTC Departamento de Engenharia Elétrica http://gse.ufsc.br “EEL7020 – Sistemas Digitais” Prof. Eduardo Augusto Bezerra Eduardo.Bezerra@eel.ufsc.br Florianópolis, agosto de 2012.
  • 2. Objetivos do laboratório 1. Entender o conceito de máquinas de estados (FSM). 2. Entender o conceito de circuito sequencial controlando o fluxo de atividades de circuito combinacional. 3. Entender o processo de síntese de FSMs em VHDL. 4. Entender o funcionamento de contadores. 5. Estudo de caso: projeto e implementação em VHDL de um contador baseado em máquinas de estados. EEL7020 – Sistemas Digitais 2/34
  • 3. “Síntese de máquinas de estado (FSM)” EEL7020 – Sistemas Digitais 3/34
  • 4. Finite State Machine (FSM) • Sistemas computacionais, normalmente, são compostos por um módulo de “controle” e um módulo para “execução das operações”. Automóvel Máquina de venda Computador (sistemas de refrigerantes embarcados) Execução: Execução: - Busca instrução Execução: - Recebe R$ - Decodifica - Alarme - Devolve troco - Executa - Vidros - Fornece produto - Acessa memória - ABS - Escreve resultados Controlador Controlador Controlador EEL7020 – Sistemas Digitais 4/34
  • 5. Finite State Machine (FSM) • O “controlador” é responsável por coordenar a sequência de atividades a ser realizada em um determinado processo (ou sistema) • Em sistemas digitais são utilizados “circuitos sequenciais” na geração de sinais de controle • Um circuito sequencial transita por uma série de estados e, a cada estado (a cada momento), poderá fornecer uma determinada saída • As saídas são utilizadas no controle da execução de atividades em um processo • A lógica sequencial utilizada na implementação de uma FSM possui um número “finito” de estados. EEL7020 – Sistemas Digitais 5/34
  • 6. Finite State Machine (FSM) Modelo de comportamento composto por: • Estados • Transições • Ações Estados Armazena informação sobre o passado refletindo as modificações das entradas do início até o presente momento Transição Indica uma troca de estado e é descrita por uma condição que habilita a modificação de estado Ação Descrição da atividade que deve ser executada em um determinado instante EEL7020 – Sistemas Digitais 6/34
  • 7. Estrutura de uma FSM EEL7020 – Sistemas Digitais 7/34
  • 8. Estrutura de uma FSM • Dois módulos: • Armazenamento do “estado atual”; e • Cálculo da “saída” e do “próximo estado” Entradas Primárias Saídas Primárias Circuito Combinacional (Funções de Saída e Funções de Próximo Estado) Estado Atual Próximo Estado Registrador de Estado Sinal de relógio ("Clock") Sinal de inicialização ("Reset") EEL7020 – Sistemas Digitais 8/34
  • 9. Estrutura de uma FSM • Armazenamento do “estado atual” • Registrador construído a partir de flip-flops • Cálculo da “saída” e do “próximo estado” • Circuito combinacional; ou • Tabela verdade da lógica de saída e da lógica de próximo estado armazenada em uma memória (ROM, Flash, RAM, ...) EEL7020 – Sistemas Digitais 9/34
  • 10. Síntese de FSMs EEL7020 – Sistemas Digitais 10/34
  • 11. VHDL Uso de HDL para descrever uma FSM típico VHDL típico de uma máquina de estados – 2 processos entity MOORE is port(X, clock, reset : in std_logic; Z: out std_logic); end; architecture A of MOORE is type STATES is (S0, S1, S2, S3); signal EA, PE : STATES; begin process (clock, reset) begin if reset= '1' then EA <= S0; elsif clock'event and clock='1' then EA <= PE ; end if; end process; process(EA, X) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; end A; EEL7020 – Sistemas Digitais 11/34
  • 12. VHDL Uso de HDL para descrever uma FSM típico VHDL típico de uma máquina de estados – 2 processos entity MOORE is port(X, clock, reset : in std_logic; Z: out std_logic); end; architecture A of MOORE is type STATES is (S0, S1, S2, S3); TIPO ENUMERADO signal EA, PE : STATES; begin Sinais EA (estado atual) e PE (próximo estado) process (clock, reset) begin if reset= '1' then EA <= S0; elsif clock'event and clock='1' then EA <= PE ; end if; end process; process(EA, X) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; end A; EEL7020 – Sistemas Digitais 12/34
  • 13. VHDL Uso de HDL para descrever uma FSM típico VHDL típico de uma máquina de estados – 2 processos entity MOORE is port(X, clock, reset : in std_logic; Z: out std_logic); end; architecture A of MOORE is type STATES is (S0, S1, S2, S3); signal EA, PE : STATES; begin process (clock, reset) begin if reset= '1' then EA <= S0; Registrador que armazena o EA elsif clock'event and clock='1' then EA <= PE ; em função do próximo estado end if; end process; process(EA, X) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; end A; EEL7020 – Sistemas Digitais 13/34
  • 14. VHDL Uso de HDL para descrever uma FSM típico VHDL típico de uma máquina de estados – 2 processos entity MOORE is port(X, clock, reset : in std_logic; Z: out std_logic); end; architecture A of MOORE is type STATES is (S0, S1, S2, S3); signal EA, PE : STATES; begin process (clock, reset) begin if reset= '1' then EA <= S0; elsif clock'event and clock='1' then EA <= PE ; end if; Geração do PE e a saída Z end process; em função do EA e da entrada X process(EA, X) (observar a lista de sensitividade) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; end A; EEL7020 – Sistemas Digitais 14/34
  • 15. VHDL Uso de HDL para descrever uma FSM típico VHDL típico de uma máquina de estados – 2 processos Desenhe a máquina de estados conforme as transições especificadas no processo combinacional: process(EA, X) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; Esta é uma máquina Moore. A saída (Z) depende apenas do estado atual (S0, ...). Em uma máquina de Mealy, a saída depende do estado E das entradas. EEL7020 – Sistemas Digitais 15/34
  • 16. VHDL Uso de HDL para descrever uma FSM típico process(EA, X) begin case EA is when S0 => Z <= '0'; if X='0' then PE <=S0; else PE <= S2; end if; when S1 => Z <= '1'; if X='0' then PE <=S0; else PE <= S2; end if; when S2 => Z <= '1'; if X='0' then PE <=S2; else PE <= S3; end if; when S3 => Z <= '0'; if X='0' then PE <=S3; else PE <= S1; end if; end case; end process; EEL7020 – Sistemas Digitais 16/34
  • 17. VHDL Uso de HDL para descrever uma FSM 1 proc Máquina de estados – 1 processo entity MOORE is port(X, clock, reset : in std_logic; Z: out std_logic); end; architecture B of MOORE is type STATES is (S0, S1, S2, S3); signal EA: STATES; begin process(clock, reset) begin if reset= '1' then EA <= S0; elsif clock'event and clock='1' then case EA is when S0 => Z <= '0'; if X='0' then EA <=S0; else EA <= S2; end if; when S1 => Z <= '1'; if X='0' then EA <=S0; else EA <= S2; end if; when S2 => Z <= '1'; if X='0' then EA <=S2; else EA <= S3; end if; when S3 => Z <= '0'; if X='0' then EA <=S3; else EA <= S1; end if; end case; end if; end process; end B; • EA: mesmo comportamento • Saída Z ficará defasada 1 ciclo de clock EEL7020 – Sistemas Digitais 17/34
  • 18. VHDL Uso de HDL para descrever uma FSM 1 proc Máquina de estados – 1 processo process(clock, reset) begin Não tem o PE if reset= '1' then da FSM com EA <= S0; 2 processos! elsif clock'event and clock='1' then case EA is when S0 => Z <= '0'; if X='0' then EA <=S0; else EA <= S2; end if; when S1 => Z <= '1'; if X='0' then … end case; end if; end process; EEL7020 – Sistemas Digitais 18/34
  • 19. VHDL Uso de HDL para descrever uma FSM 3 procs Máquina de estados – 3 processos SM_CS P2 • P1 define o estado atual, atualizando essa P1 informação (SM_CS) para P2 e P3. P3 SM_CS • Com base nos valores dos sinais, P2 define o SM_NS P2 próximo estado, colocando essa informação no sinal SM_NS sem, contudo, realizar a transição P1 (será realizada por P1). P3 • Com base nos valores dos sinais (status) da FSM, P3 define novos valores para os sinais (do estado atual). EEL7020 – Sistemas Digitais 19/34
  • 20. VHDL Uso de HDL para descrever uma FSM 3 procs Máquina de estados – 3 processos P1 - Processo, sensível as transições do clock, que realiza a transição de estados na FSM, fazendo com que o estado atual (SM_CS, State Machine Current State) receba o próximo estado (SM_NS, State Machine Next State). Essa transição é sensível a borda de descida do clock. stChange: process(clk_i) begin if clk_i'event and clk_i='0' then if rst_n_i='0' then SM_CS <= SM_rst; else SM_CS <= SM_NS; end if;f end if; end process; EEL7020 – Sistemas Digitais 20/34
  • 21. VHDL Uso de HDL para descrever uma FSM 3 procs Máquina de estados – 3 processos P2 – Realiza as alterações nos estados (define o próximo estado). Sensível a alterações nos sinais definidos na lista de sensitividade. Controla os estados definindo o fluxo, ou seja, define qual será o valor do sinal SM_NS a ser utilizado pelo processo P1 responsável por realizar as transições de estados. Comando "case SM_CS is“ seleciona o estado atual (Current State) e, conforme os sinais da FSM, um próximo estado é definido no sinal SM_NS. process( SM_CS, signalA ) begin case SM_CS is if signalA = '1' then when state_rst => SM_NS <= state_exec; SM_NS <= state_idle else when state_idle => SM_NS <= state_idle; if signalA = '1' then end if; SM_NS <= state_exec; when state_exec => else SM_NS <= state_idle SM_NS <= state_idle; when others => end if; end case; end process; EEL7020 – Sistemas Digitais 21/34
  • 22. VHDL Uso de HDL para descrever uma FSM 3 procs Máquina de estados – 3 processos P3 – Realiza atribuições dos sinais em cada estado. Sinais são alterados na borda de subida, e os estados na borda de descida. São atribuídos todos os sinais, incluindo os sinais de saída e sinais internos do processo. process(clk_i) begin if clk_i'event and clk_i='1' then case SM_CS is when state_rst => signal_out <= '0' when state_idle => signal_out <= '0' when state_exec => signal_out <= '1'; when others => end case; end if; end process; EEL7020 – Sistemas Digitais 22/34
  • 23. library ieee; use ieee.std_logic_1164.all; Uso de sinais (pinos) entity FSM is port ( disponíveis na DE2 LEDR: out std_logic_vector(7 downto 0); para Clock e Reset KEY: in std_logic_vector(3 downto 0); CLOCK_50: in std_logic process (EA, KEY(0), KEY(1)) ); begin end FSM; case EA is architecture FSM_beh of FSM is when S0 => if KEY(0) = '0' then type states is (S0, S1, S2, S3); PE <= S3; else PE <= S0; signal EA, PE: states; end if; signal clock: std_logic; when S1 => signal reset: std_logic; LEDR <= "01010101"; begin PE <= S0; clock <= CLOCK_50; when S2 => reset <= KEY(3); case KEY(1) is process (clock, reset) when '0' => LEDR <= "10101010"; begin when '1' => LEDR <= "00000000"; if reset = '0' then when others => LEDR <= "11111111"; EA <= S0; end case; elsif clock'event and PE <= S1; clock = '1' then when S3 => EA <= PE; PE <= S2; end if; end case; end process; end process; end FSM_beh; EEL7020 – Sistemas Digitais 23/34
  • 24. Tarefa a ser realizada na aula prática EEL7020 – Sistemas Digitais 24/34
  • 25. Tarefa • Implementar uma FSM em VHDL com 1 processo para geração dos caracteres ‘A’ a ‘Z’ da tabela ASCII, apresentando os caracteres nos LEDs verdes (LEDG). • FSM com reset assíncrono (usar botão KEY(0)) para inicializar um contador com o valor do primeiro caracter a ser gerado (‘A’ = 41H). • A cada pulso do relógio de 27 MHz (borda de subida), o contador deverá ser incrementado, gerando o próximo caracter da tabela ASCII. • A FSM deverá possuir um número reduzido de estados, número esse suficiente para incrementar o contador, e verificar se chegou ao final da contagem (caracter ‘Z’ = 5AH). • Ao atingir o último caracter da tabela ASCII, a FSM deverá voltar ao início da sequencia, gerando novamente o caracter ‘A’. Obs. Alternativamente, no lugar do relógio de 27MHz o sinal de clock poderá ser gerado por um botão (KEY), porém é preciso cuidar o problema do debounce. EEL7020 – Sistemas Digitais 25/34
  • 26. Diagrama de blocos do circuito a ser implementado (FSM utilizada como contador) topo.vhd 8 Contagem LEDG(7 downto 0) CLOCK_27 clock FSM KEY(0) resetMáquina de estados com a TD_RESET função de “contador”. Realiza Habilita o clock a geração da sequencia de de 27MHz valores de ‘A’ (41H) a ‘Z’ (5AH) EEL7020 – Sistemas Digitais 26/34
  • 27. Diagrama de blocos do circuito a ser implementado “Uso dos displays de 7-segmentos como saída” 1. Incluir o componente Decod7seg dos labs anteriores; topo.vhd F(7..4) Decod. 4 7-seg 2. Criar um signal F no topo; 3. Criar duas instâncias do decodificador (com port map); F(3..0) Decod. 4 7-seg 4. Usar o novo sinal interno F para conectar a saída da FSM (Contagem) com as entradas dos decodificadores (usando port map); F 5. Conectar o sinal F ao LEDG: 8 LEDG <= F. Contagem LEDG(7 downto 0) CLOCK_27 clock FSM KEY(0) resetMáquina de estados com a TD_RESET função de “contador”. Realiza Habilita o clock a geração da sequencia de de 27MHz valores de ‘A’ (41H) a ‘Z’ (5AH) EEL7020 – Sistemas Digitais 27/34
  • 28. Dica: Topo.vhd com componente FSM e clock de 27MHz (sem utilizar os displays de 7-segmentos) entity Topo is port ( LEDG: out std_logic_vector(7 downto 0); KEY: in std_logic_vector(3 downto 0); TD_RESET: out std_logic; CLOCK_27: in std_logic ); end Topo; architecture topo_beh of Topo is component ContaASCII -- Esse e’ o componente FSM port ( valorASCII: out std_logic_vector(7 downto 0); clock: in std_logic; reset: in std_logic Colocar TD_RESET em '1' ); para "ligar" o sinal de begin CLOCK_27 da DE2 TD_RESET <= '1'; L0: ContaASCII port map ( LEDG, CLOCK_27, KEY(0) ); end topo_beh; EEL7020 – Sistemas Digitais 28/34
  • 29. Dica: ContaASCII.vhd – trecho para geração de atraso (delay) com clock de 27MHz library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; -- Para usar o ‘+’ nos incrementos. process(CLOCK_27, … ) -- Ao usar o clock de 27MHz, esse process será begin -- executado 27 milhões de vezes por segundo. … -- Colocar aqui os estados do contador ASCII (ex. Inicio, inc, fim). when D1 => -- Estado para iniciar contador do atraso atraso <= ( others => '0' ); EA <= D2; when D2 => -- Estado para gerar atraso ao mostrar dado no LEDG atraso <= atraso + 1; -- “atraso” foi inicializado com zero em D1. EA <= D3; when D3 => -- Estado para testar se atingiu o valor máximo. if atraso >= x"800000" then -- 8.388.608 / 27.000.000 = 0,3 * 3 = 1 s. EA <= S1; -- Ao atingir o valor máximo, sai do laço de atraso else -- e volta para o processamento do contador ASCII. EA <= D4; -- Permanece no laço de contagem para gerar atraso. end if; when D4 => -- Estado para continuar contagem do atraso. EA <= D2; -- Essa repetição irá gerar um atraso para -- possibilitar a Sistemas Digitais do dado no LEDG. EEL7020 – visualização 29/34
  • 30. Dica: Componente ContaASCII gerado pelo Quartus II EEL7020 – Sistemas Digitais 30/34
  • 31. Dica: FSM gerada pelo Quartus II (componente EA do slide anterior) EEL7020 – Sistemas Digitais 31/34
  • 32. Simulação no Quartus II (com atraso de +/- 1s) O tempo total para realizar uma simulação de 20 segundos em um i7 quad core (hyper threading, logo “8 cores”), 2,93GHz e 8 G RAM foi de 19 horas e 28 minutos. EEL7020 – Sistemas Digitais 32/34
  • 33. Simulação no Quartus II (com atraso de +/- 1s) Reset 41H = ‘A’ TD_RESET = ‘1’ Estados da FSM A cada 3 pulsos de clock, repete os estados do atraso (D2 no slide das dicas de atraso). EEL7020 – Sistemas Digitais 33/34
  • 34. Simulação no Quartus II (com atraso de +/- 1s) Apresentação da contagem em LEDG, a cada pulso no estado EA.ContaLetra EEL7020 – Sistemas Digitais 34/34