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.
Sistemas Digitais


Circuitos sequenciais, latches e flip-flops




                EEL7020 – Sistemas Digitais   2/20
Objetivos do laboratório

1. Entender o conceito de circuitos sequenciais.
2. Entender o conceito e diferença entre flip-flops e latches.
3. Entender o conceito de registradores em VHDL.
4. Implementação de flip-flops, latches e registradores em
   VHDL.
5. Estudo de caso: projeto de calculadora personalizada,
   com apresentação dos resultados em displays de 7-
   segmentos, e uso de registradores como elementos de
   “memória”.


                         EEL7020 – Sistemas Digitais     3/20
Uso de “process” na descrição de circuitos sequenciais




                     EEL7020 – Sistemas Digitais    4/20
Descrição de circuitos sequenciais em VHDL
library ieee;                     Process
use ieee.std_logic_1164.all;
entity Sinais is port (           • Define uma SEQUÊNCIA         DE COMANDOS a
           C: in std_logic;
                                  ser realizada pelo circuito.
           D: in std_logic;
           Q: out std_logic
                                  • O processo é acionado, e sua sequência
        );
end Sinais;
                                  de comandos é executada, sempre que
                                  ocorrer uma alteração em algum elemento
architecture behv of Sinais is
      signal A, B: std_logic;     da sua LISTA DE PARÂMETROS (Ex. C ou D).
begin
      A <= D;                     • Um processo nunca termina - CÍCLICO.
       Q <= B;
                                  • Dessa forma, após a execução do último
       P1: process (C, D)
                                  comando, o primeiro comando da sequência
       begin
              B <= '0’;           é executado, SEMPRE que ocorrer uma
              if (C = '1') then   nova alteração em algum parâmetro.
                  B <= D;
              end if;             • Obs. Comando IF .. THEN .. ELSE é
       end process P1;            utilizado APENAS dentro de um process.
end behv;                          EEL7020 – Sistemas Digitais              5/20
Descrição de circuitos sequenciais em VHDL
                                      Process

                                      • A lista de parâmetros de um processo
                                      é denominada SENSITIVITY LIST.
process (A, B, C, D)                  • Os valores atribuídos aos sinais pelos
 begin                                comandos do processo, só serão válidos
       A <= '1';         Sequêncial
                                      após a execução do último comando, ou
       B <= '1';                      seja, após “sair” do processo.
       B <= D;
       A <= not B;                    • Se existirem várias atribuições a um
       C <= A and '1';
                                      mesmo sinal, APENAS a última atribuição
       D <= C;
 end process;                         será válida (ex. sinal B no corpo do
                                      processo).

                                      • Não é permitido declarar sinais dentro de
                                      um processo.


                                      EEL7020 – Sistemas Digitais           6/20
Descrição de circuitos sequenciais em VHDL
library ieee;
use ieee.std_logic_1164.all;          Resultado da simulação do VHDL
entity Sinais is port (
           C: in std_logic;
           D: in std_logic;
           Q: out std_logic
        );
end Sinais;
architecture behv of Sinais is
      signal A, B: std_logic;     C
begin                             D
      A <= D;                     Q
       Q <= B;
       P1: process (C, D)
                                         C foi alterado para ‘0’, logo o processo é
       begin
                                         executado novamente, e B receberá ‘0’,
              B <= '0';
                                         pois o teste do IF será falso.
              if (C = '1') then
                                         Logo, Q será zero (combinacional).
                  B <= D;
              end if;
       end process P1;
end behv;                         EEL7020 – Sistemas Digitais                  7/20
Flip-flops e latches em VHDL




        EEL7020 – Sistemas Digitais   8/20
Latch D
 library ieee;
 use ieee.std_logic_1164.all;                         D
                                                               D latch

 entity D_latch is port (                                  S

          C: in std_logic;
                                                      C
          D: in std_logic;
          Q: out std_logic                                          Q

         );                                                R
 end D_latch;
 architecture behv of D_latch is
 begin
          process(C, D)
          begin
             if (C = '1') then
                 Q <= D;
              end if;
            end process;
 end behv;
                             EEL7020 – Sistemas Digitais                 9/20
Latch D
 library ieee;
 use ieee.std_logic_1164.all;
 entity D_latch is port (
          C: in std_logic;
          D: in std_logic;
          Q: out std_logic
         );
 end D_latch;
                                                    1
 architecture behv of D_latch is               D
                                                    0
 begin
                                                    1
          process(C, D)                        C
                                                    0
          begin
                                                    1
             if (C = '1') then                  S
                                                    0
                 Q <= D;
                                                    1
              end if;                          R
                                                    0
            end process;
                                                    1
 end behv;                                     Q
                                                    0
                             EEL7020 – Sistemas Digitais   10/20
Flip-Flop D                                                                       D flip-flop
                                                                   D latch    D latch
                                                                                            Q’
library ieee;                                       D
                                                               Dm       Qm   Ds       Qs’
use ieee.std_logic_1164.all;
                                                                                             Q
entity D_FF is port (                                          Cm            Cs       Qs
          CLK: in std_logic;
                                                                   master     servant
          D: in std_logic;
          Q: out std_logic                          Clk
         );
end D_FF;
architecture behv of D_FF is                                 Clk
begin
    process(CLK, D)                                     D/Dm
    begin                                                    Cm
      if (CLK'event and CLK = '1') then
                Q <= D;                               Qm/Ds
      end if;                                                Cs
    end process;
end behv;                                                    Qs

                               EEL7020 – Sistemas Digitais                                  11/20
Flip-Flop D com RESET assíncrono
                                library ieee;
                                use ieee.std_logic_1164.all;
                                entity D_FF is port (
            D     Q
                                           CLK: in std_logic;
             CLK                           RST: in std_logic;
              RST                          D: in std_logic;
                                           Q: out std_logic
                                          );
                                end D_FF;
•Sempre que a entrada RST       architecture behv of D_FF is
for Zero, a saída Q será Zero. begin
                                    process (CLK, RST, D)
• Quando RST for diferente          begin
de Zero, o valor na saída Q            if (RST = '0') then
vai depender da entrada CLK.                 Q <= '0';
                                       elsif (CLK'event and CLK = '1') then
• Se CLK for ‘1’ E for uma                       Q <= D;
borda de subida, então Q               end if;
receberá a entrada D.               end process;
                               EEL7020behv; Digitais
                                end – Sistemas                          12/20
library ieee;
Flip-Flop D com Enable          use ieee.std_logic_1164.all;
                                entity D_FF is port (
                                            CLK: in std_logic;
                                            RST: in std_logic;
            D                               EN: in std_logic;
                  Q
                                            D: in std_logic;
            EN                              Q: out std_logic
             CLK                          );
              RST               end D_FF;
                                architecture behv of D_FF is
                                begin
                                    process (CLK, RST, D)
• Sempre que a entrada RST          begin
for Zero, a saída Q será Zero.         if RST = '0' then
                                             Q <= '0';
• Se CLK for ‘1’ E for uma             elsif CLK'event and CLK = '1' then
borda de subida E o sinal de                    if EN = '1' then
Enable (En) estiver em ‘1’,                          Q <= D;
                                                 end if;
então Q receberá a entrada D.
                                       end if;
                                    end process;
                                end behv;
                               EEL7020 – Sistemas Digitais               13/20
Enquanto não ocorrer um
Registrador de 4 bits                                     novo evento no sinal CLK e
library ieee;                                             enquanto esse evento for
use ieee.std_logic_1164.all;                              diferente de ‘1’ (borda de
entity D_4FF is port (                                    subida), então a saída Q do
         CLK: in std_logic;                               flip-flop continuará
         D: in std_logic_vector(3 downto 0);              armazenando o valor atual.
         Q: out std_logic_vector(3 downto 0)
        );                                         Ao ocorrer um novo evento
end D_4FF;                                         em CLK, e se esse novo
architecture behv of D_4FF is                      evento for uma transição
begin                                              de ‘0’ para ‘1’ (borda de
         process(CLK, D)                           subida), então a saída Q
         begin                                     receberá o novo valor
            if (CLK'event and CLK = '1') then      existente na entrada D.
                Q <= D;
                                   D(3)       D(2)         D(1)       D(0)
             end if;                       Q(3)         Q(2)        Q(1)     Q(0)
           end process;
end behv;                               D  Q      D    Q        D  Q       D Q

                                           CLK            CLK      CLK       CLK

                          clock_50
                                 EEL7020 – Sistemas Digitais                       14/20
Tarefa a ser realizada:
 Mini-calculadora com registradores para
armazenamento (memória) de resultados.




               EEL7020 – Sistemas Digitais   15/20
Uso de registradores na mini-calculadora VHDL
  Operando B                                 top_calc




                          f=A+B




                                                                             Registrador
  SW(15 downto 8)                                                       D
                      8
                                                              F(7..4)                              Decod.
  Operando A                            8                                                  Q
                                                                                               4       7-seg
  SW(7 downto 0)      8                                   4
                                                                        EN




                          f = A or B
                                                                                                                                  HEX1

                      8
                                        8   F1
                                                 00
                      8
                                            F2   01
                                                              F(3..0)




                                                                             Registrador
                                                          F
                                            F3   Mux                    D
                                                 10       8     4
                                                                                           Q        Decod.
                                            F4   11                                            4       7-seg
                          F = A xor B
                                                                        EN


                      8                               2
                                                                                                                                  HEX0
                                                 sel      8
                                        8
                      8


                                                              F(7..0)




                                                                                                        Registrador
                                                                                                   D
                          f = not A




                                                                                                                      Q
                                                                                                   EN
                                                                                                                          8
Seleção da operação   8                 8
(+, or, xor, not)
SW(17 downto 16)                                                                                                              LEDR(7 downto 0)
Enter   KEY(1)
Clock   CLOCK_50
Reset   KEY(0)                              EEL7020 – Sistemas Digitais                                                                  16/20
Descrição do circuito a ser implementado
• O circuito consiste na mini-calculadora do lab. anterior, porém com a inclusão
  de registradores para armazenar os resultados das operações.
    o Um registrador de 4 bits para armazenar a parte baixa do resultado a ser
      apresentado em HEX0.
    o Um registrador de 4 bits para armazenar a parte alta do resultado a ser
      apresentado em HEX1.
    o Um registrador de 8 bits para armazenar o resultado a ser apresentado, em
      binário, nos LEDs vermelhos.
• Ao se pressionar o botão KEY0 (Reset), os flip-flops deverão ser “limpos”,
  apagando os LEDs, e apresentando o valor 0 (zero) nos displays de sete
  segmentos.
• Ao se pressionar o botão KEY1(Enter), os flip-flops são habilitados para
  escrita, armazenando os valores presentes nas suas entradas (“memória”).
• As entradas CLK (clock) dos flip-flops recebem um sinal de relógio gerado
  por um cristal presente na placa DE2.
                                   EEL7020 – Sistemas Digitais                   17/20
Dicas úteis




 EEL7020 – Sistemas Digitais   18/20
Dicas úteis
•   No slide 13 é apresentado um flip-flop D            D
                                                                  Q
    com Reset e Enable (ver símbolo ao lado).           EN

                                                        CLK
                                                            RST
•   No slide 14 é apresentado um registrador
    de 4 bits, implementado com 4 flip-flops,
    porém sem Reset e sem Enable.
•   Utilizar os circuitos dos slides 13 e 14 como base para
    para escrever o VHDL dos dois registradores de 4 bits
    e do registrador de 8 bits solicitado no exercício, todos
    com Reset e Enable.
•   O sinal de relógio (Clock ou CLK) do circuito deve ser
    obtido diretamente da placa, utilizando o sinal CLOCK_50
    (ver o manual da DE2, e o arquivo de pinos).
                          EEL7020 – Sistemas Digitais             19/20
Interface com o usuário (entrada/saída)
                       HEX1   HEX0           LEDR(7..0)




                                                                     Usar KEY(0)
                                                                    para o “Reset”

                                                Usar KEY(1) para o “Enter” (Enable)

                              Usar SW(7..0) para entrar com operando A

            Usar SW(15..8) para entrar com operando B

  Usar SW(17..16) para selecionar a operação (F1, F2, F3 ou F4)

                               EEL7020 – Sistemas Digitais                   20/20

Lab6 flipflop

  • 1.
    Universidade Federal deSanta 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.
    Sistemas Digitais Circuitos sequenciais,latches e flip-flops EEL7020 – Sistemas Digitais 2/20
  • 3.
    Objetivos do laboratório 1.Entender o conceito de circuitos sequenciais. 2. Entender o conceito e diferença entre flip-flops e latches. 3. Entender o conceito de registradores em VHDL. 4. Implementação de flip-flops, latches e registradores em VHDL. 5. Estudo de caso: projeto de calculadora personalizada, com apresentação dos resultados em displays de 7- segmentos, e uso de registradores como elementos de “memória”. EEL7020 – Sistemas Digitais 3/20
  • 4.
    Uso de “process”na descrição de circuitos sequenciais EEL7020 – Sistemas Digitais 4/20
  • 5.
    Descrição de circuitossequenciais em VHDL library ieee; Process use ieee.std_logic_1164.all; entity Sinais is port ( • Define uma SEQUÊNCIA DE COMANDOS a C: in std_logic; ser realizada pelo circuito. D: in std_logic; Q: out std_logic • O processo é acionado, e sua sequência ); end Sinais; de comandos é executada, sempre que ocorrer uma alteração em algum elemento architecture behv of Sinais is signal A, B: std_logic; da sua LISTA DE PARÂMETROS (Ex. C ou D). begin A <= D; • Um processo nunca termina - CÍCLICO. Q <= B; • Dessa forma, após a execução do último P1: process (C, D) comando, o primeiro comando da sequência begin B <= '0’; é executado, SEMPRE que ocorrer uma if (C = '1') then nova alteração em algum parâmetro. B <= D; end if; • Obs. Comando IF .. THEN .. ELSE é end process P1; utilizado APENAS dentro de um process. end behv; EEL7020 – Sistemas Digitais 5/20
  • 6.
    Descrição de circuitossequenciais em VHDL Process • A lista de parâmetros de um processo é denominada SENSITIVITY LIST. process (A, B, C, D) • Os valores atribuídos aos sinais pelos begin comandos do processo, só serão válidos A <= '1'; Sequêncial após a execução do último comando, ou B <= '1'; seja, após “sair” do processo. B <= D; A <= not B; • Se existirem várias atribuições a um C <= A and '1'; mesmo sinal, APENAS a última atribuição D <= C; end process; será válida (ex. sinal B no corpo do processo). • Não é permitido declarar sinais dentro de um processo. EEL7020 – Sistemas Digitais 6/20
  • 7.
    Descrição de circuitossequenciais em VHDL library ieee; use ieee.std_logic_1164.all; Resultado da simulação do VHDL entity Sinais is port ( C: in std_logic; D: in std_logic; Q: out std_logic ); end Sinais; architecture behv of Sinais is signal A, B: std_logic; C begin D A <= D; Q Q <= B; P1: process (C, D) C foi alterado para ‘0’, logo o processo é begin executado novamente, e B receberá ‘0’, B <= '0'; pois o teste do IF será falso. if (C = '1') then Logo, Q será zero (combinacional). B <= D; end if; end process P1; end behv; EEL7020 – Sistemas Digitais 7/20
  • 8.
    Flip-flops e latchesem VHDL EEL7020 – Sistemas Digitais 8/20
  • 9.
    Latch D libraryieee; use ieee.std_logic_1164.all; D D latch entity D_latch is port ( S C: in std_logic; C D: in std_logic; Q: out std_logic Q ); R end D_latch; architecture behv of D_latch is begin process(C, D) begin if (C = '1') then Q <= D; end if; end process; end behv; EEL7020 – Sistemas Digitais 9/20
  • 10.
    Latch D libraryieee; use ieee.std_logic_1164.all; entity D_latch is port ( C: in std_logic; D: in std_logic; Q: out std_logic ); end D_latch; 1 architecture behv of D_latch is D 0 begin 1 process(C, D) C 0 begin 1 if (C = '1') then S 0 Q <= D; 1 end if; R 0 end process; 1 end behv; Q 0 EEL7020 – Sistemas Digitais 10/20
  • 11.
    Flip-Flop D D flip-flop D latch D latch Q’ library ieee; D Dm Qm Ds Qs’ use ieee.std_logic_1164.all; Q entity D_FF is port ( Cm Cs Qs CLK: in std_logic; master servant D: in std_logic; Q: out std_logic Clk ); end D_FF; architecture behv of D_FF is Clk begin process(CLK, D) D/Dm begin Cm if (CLK'event and CLK = '1') then Q <= D; Qm/Ds end if; Cs end process; end behv; Qs EEL7020 – Sistemas Digitais 11/20
  • 12.
    Flip-Flop D comRESET assíncrono library ieee; use ieee.std_logic_1164.all; entity D_FF is port ( D Q CLK: in std_logic; CLK RST: in std_logic; RST D: in std_logic; Q: out std_logic ); end D_FF; •Sempre que a entrada RST architecture behv of D_FF is for Zero, a saída Q será Zero. begin process (CLK, RST, D) • Quando RST for diferente begin de Zero, o valor na saída Q if (RST = '0') then vai depender da entrada CLK. Q <= '0'; elsif (CLK'event and CLK = '1') then • Se CLK for ‘1’ E for uma Q <= D; borda de subida, então Q end if; receberá a entrada D. end process; EEL7020behv; Digitais end – Sistemas 12/20
  • 13.
    library ieee; Flip-Flop Dcom Enable use ieee.std_logic_1164.all; entity D_FF is port ( CLK: in std_logic; RST: in std_logic; D EN: in std_logic; Q D: in std_logic; EN Q: out std_logic CLK ); RST end D_FF; architecture behv of D_FF is begin process (CLK, RST, D) • Sempre que a entrada RST begin for Zero, a saída Q será Zero. if RST = '0' then Q <= '0'; • Se CLK for ‘1’ E for uma elsif CLK'event and CLK = '1' then borda de subida E o sinal de if EN = '1' then Enable (En) estiver em ‘1’, Q <= D; end if; então Q receberá a entrada D. end if; end process; end behv; EEL7020 – Sistemas Digitais 13/20
  • 14.
    Enquanto não ocorrerum Registrador de 4 bits novo evento no sinal CLK e library ieee; enquanto esse evento for use ieee.std_logic_1164.all; diferente de ‘1’ (borda de entity D_4FF is port ( subida), então a saída Q do CLK: in std_logic; flip-flop continuará D: in std_logic_vector(3 downto 0); armazenando o valor atual. Q: out std_logic_vector(3 downto 0) ); Ao ocorrer um novo evento end D_4FF; em CLK, e se esse novo architecture behv of D_4FF is evento for uma transição begin de ‘0’ para ‘1’ (borda de process(CLK, D) subida), então a saída Q begin receberá o novo valor if (CLK'event and CLK = '1') then existente na entrada D. Q <= D; D(3) D(2) D(1) D(0) end if; Q(3) Q(2) Q(1) Q(0) end process; end behv; D Q D Q D Q D Q CLK CLK CLK CLK clock_50 EEL7020 – Sistemas Digitais 14/20
  • 15.
    Tarefa a serrealizada: Mini-calculadora com registradores para armazenamento (memória) de resultados. EEL7020 – Sistemas Digitais 15/20
  • 16.
    Uso de registradoresna mini-calculadora VHDL Operando B top_calc f=A+B Registrador SW(15 downto 8) D 8 F(7..4) Decod. Operando A 8 Q 4 7-seg SW(7 downto 0) 8 4 EN f = A or B HEX1 8 8 F1 00 8 F2 01 F(3..0) Registrador F F3 Mux D 10 8 4 Q Decod. F4 11 4 7-seg F = A xor B EN 8 2 HEX0 sel 8 8 8 F(7..0) Registrador D f = not A Q EN 8 Seleção da operação 8 8 (+, or, xor, not) SW(17 downto 16) LEDR(7 downto 0) Enter KEY(1) Clock CLOCK_50 Reset KEY(0) EEL7020 – Sistemas Digitais 16/20
  • 17.
    Descrição do circuitoa ser implementado • O circuito consiste na mini-calculadora do lab. anterior, porém com a inclusão de registradores para armazenar os resultados das operações. o Um registrador de 4 bits para armazenar a parte baixa do resultado a ser apresentado em HEX0. o Um registrador de 4 bits para armazenar a parte alta do resultado a ser apresentado em HEX1. o Um registrador de 8 bits para armazenar o resultado a ser apresentado, em binário, nos LEDs vermelhos. • Ao se pressionar o botão KEY0 (Reset), os flip-flops deverão ser “limpos”, apagando os LEDs, e apresentando o valor 0 (zero) nos displays de sete segmentos. • Ao se pressionar o botão KEY1(Enter), os flip-flops são habilitados para escrita, armazenando os valores presentes nas suas entradas (“memória”). • As entradas CLK (clock) dos flip-flops recebem um sinal de relógio gerado por um cristal presente na placa DE2. EEL7020 – Sistemas Digitais 17/20
  • 18.
    Dicas úteis EEL7020– Sistemas Digitais 18/20
  • 19.
    Dicas úteis • No slide 13 é apresentado um flip-flop D D Q com Reset e Enable (ver símbolo ao lado). EN CLK RST • No slide 14 é apresentado um registrador de 4 bits, implementado com 4 flip-flops, porém sem Reset e sem Enable. • Utilizar os circuitos dos slides 13 e 14 como base para para escrever o VHDL dos dois registradores de 4 bits e do registrador de 8 bits solicitado no exercício, todos com Reset e Enable. • O sinal de relógio (Clock ou CLK) do circuito deve ser obtido diretamente da placa, utilizando o sinal CLOCK_50 (ver o manual da DE2, e o arquivo de pinos). EEL7020 – Sistemas Digitais 19/20
  • 20.
    Interface com ousuário (entrada/saída) HEX1 HEX0 LEDR(7..0) Usar KEY(0) para o “Reset” Usar KEY(1) para o “Enter” (Enable) Usar SW(7..0) para entrar com operando A Usar SW(15..8) para entrar com operando B Usar SW(17..16) para selecionar a operação (F1, F2, F3 ou F4) EEL7020 – Sistemas Digitais 20/20