SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
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 codificadores e decodificadores




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

1. Entender o conceito de circuitos codificadores e
   decodificadores (conversores de código).
2. Implementação de codificadores e decodificadores
   em VHDL.
3. Uso de barramentos (vetores de sinais) em VHDL –
   std_logic_vector.
4. Estudo de caso: projeto de calculadora
   personalizada, com apresentação dos resultados
   em displays de 7-segmentos.

                      EEL7020 – Sistemas Digitais     3/49
Barramentos em VHDL - “std_logic_vector”




              EEL7020 – Sistemas Digitais   4/49
No circuito do lab anterior, as entradas (A, B, C) e saídas
(F) possuem o tamanho de 1 bit:

                       C1                                   topo
C   SW(2)
                                   F1
B   SW(1)
                                                                          LEDR(7)
A   SW(0)                                             Mux 4x1             LEDR(6)
                                                                          LEDR(5)
                       C2                                                 LEDR(4)
                                                                          LEDR(3)
                                                       00                 LEDR(2)
                                   F2                  01                 LEDR(1)
                                                                          LEDR(0)
                                                       10
                                                0      11
                                                                      F
                       C3                                    2 bits
                                   F3

Seleção
SW(17..16)



                        EEL7020 – Sistemas Digitais                       5/49
Assumir o mesmo circuito, porém com entradas e saídas
de 4 bits:

                         C1                                   topo
C   SW(11..8)
                4 bits               F1
B   SW(7..4)
                4 bits             4 bits
A   SW(3..0)                                            Mux 4x1
                4 bits                                                          LEDR(7)
                                                                                LEDR(6)
                         C2                                                     LEDR(5)
                                                         00                     LEDR(4)
                                     F2                  01
                                                                                LEDR(3)
                                                                                LEDR(2)
                                                                                LEDR(1)
                                   4 bits                10         4
                                                  0      11         bits
                                                                           F    LEDR(0)


                         C3                                    2 bits
                                     F3
                                   4 bits


Seleção
SW(17..16)



                          EEL7020 – Sistemas Digitais                          6/49
Utilizando operandos de 4 bits

• Componente C1 realiza a operação F1 = A or B or C

• Componente C2 realiza a operação F2 = B xor C

• Operandos de 1 bit - ex. A = 0, B = 1, C = 0

• Operandos de 4 bits - ex. A = 0101, B = 1000, C = 0001

          1 bit                                          4 bits
      0                                        0101
      1           0                            1000               1000
      0           1                            0001               0001
F1 = 1       F2 = 1                 F1 = 1101                F2 = 1001

                           EEL7020 – Sistemas Digitais                   7/49
Implementação de barramento em VHDL

                          std_logic           fio
           std_logic_vector       vários fios (barramento)

• std_logic_vector é utilizado para implementar um “vetor” de
  sinais (vários fios, barramento).

• Por exemplo, a saída F deverá ser definida na entity como:

       F: out std_logic_vector(3 downto 0);




                           EEL7020 – Sistemas Digitais          8/49
Componente C1

  library IEEE;                                      4 bits
  use IEEE.Std_Logic_1164.all;

  entity C1 is
  port (A: in std_logic_vector(3 downto 0);
        B: in std_logic_vector(3 downto 0);
        C: in std_logic_vector(3 downto 0);
        F: out std_logic_vector(3 downto 0)
       );
  end C1;

  architecture c1_estr of C1 is
  begin
    F <= A or B or C;
  end c1_estr;

                        4 bits
                       EEL7020 – Sistemas Digitais            9/49
Componente C2

  library IEEE;                                      4 bits
  use IEEE.Std_Logic_1164.all;

  entity C2 is
  port (A: in std_logic_vector(3 downto 0);
        B: in std_logic_vector(3 downto 0);
        F: out std_logic_vector(3 downto 0)
       );
  end C2;

  architecture c2_estr of C2 is
  begin
    F <= A xor B;
  end c2_estr;
                      4 bits


                       EEL7020 – Sistemas Digitais            10/49
Componente C3

  library IEEE;                                      4 bits
  use IEEE.Std_Logic_1164.all;

  entity C3 is
  port (A: in std_logic_vector(3 downto 0);
        B: in std_logic_vector(3 downto 0);
        C: in std_logic_vector(3 downto 0);
        F: out std_logic_vector(3 downto 0)
       );
  end C3;

  architecture c3_estr of C3 is
  begin
    -- ver lab. sobre componentes
  end c1_estr;



                       EEL7020 – Sistemas Digitais            11/49
Componente Mux
 library IEEE;                                      4 bits
 use IEEE.Std_Logic_1164.all;

 entity mux4x1 is
 port (F1: in std_logic_vector(3 downto 0);
       F2: in std_logic_vector(3 downto 0);
       F3: in std_logic_vector(3 downto 0);
       F4: in std_logic_vector(3 downto 0);
       sel: in std_logic_vector(1 downto 0);                      2 bits
       F:   out std_logic_vector(3 downto 0)
      );
                                             F1
 end mux4x1;

 architecture mux_bhv of mux4x1 is                           F2            F
 begin
   -- ver lab. sobre Mux
                                                             F3       sel
 end mux_bhv;


                      EEL7020 – Sistemas Digitais                    12/49
Componente Topo                                        SW(11..8)
                                                       SW(7..4)
                                                                               F1
library ieee;                                          SW(3..0)
                                                                                          LEDR(3..0)
use ieee.std_logic_1164.all;
entity topo is
  port ( SW : IN STD_LOGIC_VECTOR(17 downto 0);                                F2
       LEDR : OUT STD_LOGIC_VECTOR(17 downto 0)
 );
end topo;
architecture topo_estru of topo is
                                                                              F3
  signal F1, F2, F3: std_logic_vector(3 downto 0);
 component C1                                          SW(17..16)
  port (A : in std_logic_vector(3 downto 0);
        B : in std_logic_vector(3 downto 0);
        C : in std_logic_vector(3 downto 0);
                                                       begin
        F : out std_logic_vector(3 downto 0));
 end component;                                         L0: C1 port map (SW(3 downto 0),
 component C2
                                                              SW(7 downto 4), SW(11 downto 8), F1);
    port (A : in std_logic_vector(3 downto 0);
          B : in std_logic_vector(3 downto 0);          L1: C2 port map (SW(3 downto 0),
          F : out std_logic_vector(3 downto 0));              SW(7 downto 4), SW(11 downto 8), F2);
 end component;
component C3                                            L2: C3 port map (SW(3 downto 0),
    port (A : in std_logic_vector(3 downto 0);                SW(7 downto 4), SW(11 downto 8), F3);
          B : in std_logic_vector(3 downto 0);
          C : in std_logic_vector(3 downto 0);
          F : out std_logic_vector(3 downto 0)          L3: mux4x1 port map (F1, F2, F3,
    );                                                        SW(17 downto 16), LEDR(3 downto 0));
 end component;
 -- INCLUIR AQUI O Mux                                 end topo_estru;     -- END da architecture
                                             EEL7020 – Sistemas Digitais                        13/49
Decodificadores em VHDL




      EEL7020 – Sistemas Digitais   14/49
Display de 7-segmentos
• Um display de 7-segmentos é composto por sete LEDs que podem ser
ligados ou desligados de forma independente.
• Anodo comum - terminais anodo dos LEDs estão conectados a Vcc, e
cada LED é ligado ao conectar seu catodo em GND.
• Catodo comum - terminais catodo dos LEDs estão conectados a GND,
e cada LED é ligado ao conectar seu anodo em Vcc.




                                     Cátodo comum        Ânodo comum

                           EEL7020 – Sistemas Digitais                 15/49
Decodificador de binário para 7-segmentos

 • Placa DE2 possui 7 displays de 7-segmentos, todos do tipo anodo
 comum (LEDs acendem com GND, ou zero lógico).

 • Para escrever um valor binário em um dos displays, é preciso
 realizar uma conversão do código binário para o código 7-segmentos.

 • Os 3 bits de entrada do circuito “Decod. 7-seg” são decodificados, e
 a palavra de 7 bits gerada é enviada para o display de 7 segmentos.




                          Decod.
                           7-seg



                              EEL7020 – Sistemas Digitais           16/49
Projeto de decodificador de binário para 7-segmentos

• Exemplos de valores em binários convertidos (decodificados) para 7-
segmentos, visando escrita no display da placa DE2 anodo comum)

                                                            7 bits
                                         C2    C1 C0       6543210   Letra
         Decod.                          0      0 0        1000001     U
          7-seg                          0      0 1        0001110     F
                                         0      1 0        0010010     S
                                         0      1 1        1000110     C
                                         1      1 1        1111111
• Nesse exemplo, ao receber “000” na entrada, o decodificador gera o
código equivalente ao acendimento da letra “U” no display 7-seg.

• Ao receber “111”, todos os segmentos são desligados.

• Notar que por ser do tipo anodo comum, um “0” liga um segmento.
                             EEL7020 – Sistemas Digitais               17/49
Projeto de decodificador “binário para 7-segmentos”
                                                    7 bits
                                     C2 C1 C0     6543210      Letra
         Decod.                       0 0 0       1000001        U
          7-seg                       0 0 1       0001110        F
                                      0 1 0       0010010        S
                                      0 1 1       1000110        C
                                      1 1 1        1111111
• Um circuito para implementar a lógica do decodificador em questão
poderia ser projetado utilizando vários métodos:
   • Soma de produtos:
         F(0) = C2’C1’C0’ + C2C1C0
         F(1) = C2’C1’C0 + C2’C1C0’ + C2’C1C0 + C2C1C0
         F(2) = ...
   • Análise comportamental:
           F = “1000001” quando C2C1C0 = “000” senão
               “0001110” quando C2C1C0 = “001” senão
                ... senão
               “1111111”
                            EEL7020 – Sistemas Digitais          18/49
Componente Decod_UFSC
                                                    Decod.
 library IEEE;                                       7-seg
 use IEEE.Std_Logic_1164.all;

 entity decodUFSC is                                             3 bits
 port (C: in std_logic_vector(2 downto 0);
       F: out std_logic_vector(6 downto 0)
      );
 end decodUFSC;                            7 bits

 architecture decod_bhv of      decodUFSC is
 begin
   F <= "1000001" when C =      "000"       else        --   U
        "0001110" when C =      "001"       else        --   F
        "0010010" when C =      "010"       else        --   S
        "1000110" when C =      "011"       else        --   C
        "1111111";
 end decod_bhv;

                      EEL7020 – Sistemas Digitais                   19/49
Tarefa a ser realizada na aula prática
Implementação de mini-calculadora de 8 bits personalizada




                      EEL7020 – Sistemas Digitais      20/49
Descrição funcional da mini-calculadora de 8 bits

• A mini-calculadora realiza uma operação aritmética e três
operações lógicas, todas de 8 bits:
    • F1 = A + B     -- operação aritmética ADIÇÃO
    • F2 = A or B
    • F3 = A xor B
    • F4 = not A

• Para utilizar a mini-calculadora é necessário:
   1.   Fornecer o operando A nas chaves SW(7..0).
   2.   Fornecer o operando B nas chaves SW(15..8).
   3.   Selecionar a operação desejada nas chaves SW(17..16).
   4.   O resultado será apresentado em HEXADECIMAL nos displays
        de sete segmentos (HEX0 e HEX1), e em BINÁRIO nos LEDs
        vermelhos (LEDR).
                            EEL7020 – Sistemas Digitais       21/49
Interface com o usuário
                              Resultado            Resultado
                             HEX1 e HEX0           LEDR(7..0)




   Operação     Operando B              Operando A
   SW(17..16)    SW(15..8)               SW(7..0)


• Para realizar uma das quatro operações disponíveis (F1, F2,
F3, F4), a calculadora personalizada utiliza:
   • as chaves SW(7..0) para leitura do operando A
   • as chaves SW(15..8) para leitura do operando B
   • as chaves SW(17..16) para seleção da operação desejada
• Os resultados são apresentados em displays de 7-segmentos
e nos LEDs vermelhos.
                                  EEL7020 – Sistemas Digitais   22/49
Interface com o usuário
                              Resultado            Resultado
                             HEX1 e HEX0           LEDR(7..0)




   Operação     Operando B              Operando A
   SW(17..16)    SW(15..8)               SW(7..0)


         Seletor SW(17..16)                  Saída (LEDR e displays 7-seg)
                 00                                     A+B
                 01                                     A or B
                 10                                    A xor B
                 11                                     not A

                                  EEL7020 – Sistemas Digitais                23/49
Operando B
   SW(15 downto 8)

   Operando A
   SW(7 downto 0)




                        Componente
     FPGA                TOP_CALC
                       (esse componente possui 7
                      componentes internamente)


                                                          LEDR(7 downto 0)

Seleção da operação

SW(17 downto 16)
                            EEL7020 – Sistemas Digitais         24/49
f=A+B
   Operando B
   SW(15 downto 8)    8
                                             8
   Operando A
   SW(7 downto 0)     8
                                                                     F(7 downto 4)
                                                                                      Decod.
                                                                              4        7-seg




                              f = A or B
                      8
                                             8     F1
                                                        00
                      8
                                                   F2   01
                                                                 F
                                                   F3    Mux                          Decod.
                                                        10       8
     FPGA                                          F4
                                                        11
                                                                              4
                                                                      F(3 downto 0)
                                                                                       7-seg


                          8   F = A xor B                    2

                                                         sel
                                             8
                      8
                              f = not A




                                                                                               LEDR(7 downto 0)

Seleção da operação       8                  8
(+, or, xor, not)
SW(17 downto 16)                                                          top_calc.vhd
                                            EEL7020 – Sistemas Digitais                              25/49
Calculadora é composta
Projeto hierárquico                                 por 8 componentes,
                                                sendo 7 apresentados a
                                                    seguir + o top_calc.




                      EEL7020 – Sistemas Digitais                  26/49
“top_calc”, “mux”, dois
Projeto hierárquico                    “decodificadores”, e quatro
                                   “funções lógicas e aritméticas”.




                      EEL7020 – Sistemas Digitais             27/49
Projeto hierárquico




                      EEL7020 – Sistemas Digitais   28/49
Componente C1 (arquivo c1.vhd)

  library IEEE;
  use IEEE.Std_Logic_1164.all;
  use IEEE.std_logic_unsigned.all; -- necessário para o +

  entity C1 is
  port (A: in std_logic_vector(7 downto 0);
        B: in std_logic_vector(7 downto 0);
        F: out std_logic_vector(7 downto 0)
       );
  end C1;




                                                     f=A+B
  architecture circuito of C1 is
  begin
    F <= A + B;
  end circuito;



                       EEL7020 – Sistemas Digitais           29/49
Componente C2 (arquivo c2.vhd)

  library IEEE;
  use IEEE.Std_Logic_1164.all;

  entity C2 is
  port (A: in std_logic_vector(7 downto 0);
        B: in std_logic_vector(7 downto 0);
        F: out std_logic_vector(7 downto 0)
       );
  end C2;

  architecture circuito of C2 is




                                                     f = A or B
  begin
    F <= A or B;
  end circuito;



                       EEL7020 – Sistemas Digitais                30/49
Componente C3 (arquivo c3.vhd)

  library IEEE;
  use IEEE.Std_Logic_1164.all;

  entity C3 is
  port (A: in std_logic_vector(7 downto 0);
        B: in std_logic_vector(7 downto 0);
        F: out std_logic_vector(7 downto 0)
       );
  end C3;

  architecture circuito of C3 is
  begin
    F <= A xor B;




                                                     F = A xor B
  end circuito;



                       EEL7020 – Sistemas Digitais                 31/49
Componente C4 (arquivo c4.vhd)

  library IEEE;
  use IEEE.Std_Logic_1164.all;

  entity C4 is
  port (A: in std_logic_vector(7 downto 0);
        F: out std_logic_vector(7 downto 0)
       );
  end C4;

  architecture circuito of C4 is
  begin
    F <= not A;
  end circuito;




                                                     F = not A
                       EEL7020 – Sistemas Digitais               32/49
Componente Mux (arquivo mux4x1.vhd)

  library IEEE;
  use IEEE.Std_Logic_1164.all;

  entity mux4x1 is
  port (F1, F2, F3, F4: in std_logic_vector(7 downto 0);
        sel: in std_logic_vector(1 downto 0);
        F: out std_logic_vector(7 downto 0)
       );
  end mux4x1;

  architecture circuito of     mux4x1 is
  begin
   F <= F1 when sel = "00"     else
        F2 when sel = "01"     else
        F3 when sel = "10"     else
        F4;
  end circuito;
                       EEL7020 – Sistemas Digitais   33/49
Componente Decod7seg
 Componente a ser implementado no presente lab.




                       f=A+B
                   8
                                      8
                   8
                                                             F(7 downto 4)   Decod.
                                                                              7-seg




                       f = A or B
                                                                      4

                   8
                                       8   F1
                                                00
                   8
                                           F2   01
                                                         F
                                           F3   Mux                          Decod.
                                                10       8            4       7-seg
                       F = A xor B         F4   11           F(3 downto 0)


                   8                                 2
                                                sel
                                      8
                   8
                       f = not A




                   8                  8


                                     EEL7020 – Sistemas Digitais                      34/49
Componente top_calc (arquivo top_calc.vhd)
library ieee;
use ieee.std_logic_1164.all;
entity top_calc is
  port ( SW : in std_logic_vector (17 downto 0);             begin
        HEX0, HEX1: out std_logic_vector(6 downto 0);
        LEDR : out std_logic_vector (17 downto 0)              L1: C1 port map (SW(7 downto 0),
 );                                                                  SW(15 downto 8), F1);
end top_calc;
architecture topo_stru of top_calc is                          L2: C2 port map (SW(7 downto 0),
  signal F, F1, F2, F3, F4: std_logic_vector (7 downto 0);           SW(15 downto 8), F2);
  component C1
     port (A : in std_logic_vector(7 downto 0);                L3: C3 port map (SW(7 downto 0),
           B : in std_logic_vector(7 downto 0);                      SW(15 downto 8), F3);
           F : out std_logic_vector(7 downto 0));
  end component;                                               L4: C4 port map (SW(7 downto 0), F4);
  -- componentes C2 e C3, idem C1
  component C4                                                 L5: mux4x1 port map (F1, F2, F3, F4,
     port (A : in std_logic_vector(7 downto 0);                      SW(17 downto 16), F);
           F : out std_logic_vector(7 downto 0)
     );                                                       L6: Decod7seg port map (F(3 downto 0),
  end component;                                                     HEX0);
component mux4x1
   port (F1, F2, F3, F4: in                                   L7: Decod7seg port map (F(7 downto 4),
                std_logic_vector(7 downto 0);                        HEX1);
   sel: in std_logic_vector(1 downto 0);
   F: out std_logic_vector(7 downto 0)                         LEDR(7 downto 0) <= F;
   );
end component;                                               end topo_stru; -- END da architecture
-- Incluir aqui o componente Decod7seg
-- (apenas uma declaração do Decod7seg) EEL7020 – Sistemas Digitais                             35/49
Dicas úteis
1. O projeto é composto por 7 arquivos (8 componentes):
    • c1.vhd – fornecido nos slides anteriores (slide 29)
    • c2.vhd – fornecido nos slides anteriores (slide 30)
    • c3.vhd – fornecido nos slides anteriores (slide 31)
    • c4.vhd – fornecido nos slides anteriores (slide 32)
    • mux4x1.vhd – fornecido nos slides anteriores (slide 33)
    • decod7seg.vhd – a ser desenvolvido (ver exemplo no slide 19)
    • top_calc.vhd – parcialmente fornecido nos slides anteriores (slide 35)

2. Cuidar a utilização correta do componente decodificador no circuito (topo).
   É necessário definir apenas um component decod7seg, e a seguir criar
   duas cópias desse componente com o port map (ver top_calc no slide 35).

3. Para implementar o decodificador de binário para 7-segmentos, utilizar
   como base o exemplo do slide 19. Completar a tabela do slide 38, de forma
   a obter todos os códigos em hexadecimal necessários.


                                EEL7020 – Sistemas Digitais              36/49
Componente Decod7seg

Componente a ser desenvolvido no presente lab.:

• Está sendo solicitada a implementação de apenas UM decodificador

                                 Decod.
                            4      7-seg



• A entity desse decodificador deverá possui apenas uma porta de
  entrada de 4 bits, e apenas uma porta de saída de 7 bits.

• A replicação do decodificador é realizada no “topo” da arquitetura, ao
  se utilizar o comando port map do VHDL – VER L6: e L7: no slide 35.



                                EEL7020 – Sistemas Digitais        37/49
Tabela de decodificação binário para 7-segmentos
                          Saída
          Entrada                                   Display
                        6543210
           0000        1000000                         0
           0001        1111001                         1
           0010        0100100                         2
           0011        0110000                         3
           0100        0011001                          4
           0101        0010010                          5
           0110        0000010                          6
           0111        1111000                          7
           1000        0000000                          8
            ...           ...                     9, A, b, C, d
           1110        0000110                          E
           1111        0001110
                    EEL7020 – Sistemas Digitais
                                                       F          38/49
Resumo da tarefa a ser realizada

1. Implementar o decodificador “binário para 7-segmentos” (slides 19 e 38).

2. Esse novo componente será um decodificador genérico, ou seja, poderá
   ser utilizado em qualquer projeto que precise de um decodificador com a
   tabela verdade do slide 38. Assim, não deverá ter nenhum “ajuste especial”
   para funcionamento com os demais componentes da calculadora. Deverá
   possuir a entrada de 4 bits e a saída de 6 bits definida no slide 38.

3. Criar um novo projeto denominado top_calc (esse é o nome da entity do
   arquivo “topo” – slide 35), e utilizar os componentes VHDL dos slides 29 a
   33 para implementação da calculadora.

4. Editar o componente top_calc do slide 35, e incluir a declaração do novo
   componente decodificador (usando component).

5. Verificar o funcionamento da calculadora no simulador e no kit FPGA.
                                EEL7020 – Sistemas Digitais               39/49
Animação do PORT MAP
begin




end topo_stru;   -- END da architecture
                                                                        top_calc

                                          EEL7020 – Sistemas Digitais         40/49
Animação do PORT MAP – C1
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                       8
                                                      8




                                                                        F1




end topo_stru;   -- END da architecture

                                          EEL7020 – Sistemas Digitais        41/49
Animação do PORT MAP – C2
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                             8
                                                      8
 L2: C2 port map (SW(7 downto 0),
       SW(15 downto 8), F2);




                                                            f = A or B
                                                       8
                                                                         8   F1
                                                       8
                                                                             F2




end topo_stru;   -- END da architecture
                                                                                  top_calc

                                          EEL7020 – Sistemas Digitais                   42/49
Animação do PORT MAP – C3
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),
       SW(15 downto 8), F2);




                                                            f = A or B
                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                              F2

                                                                              F3




                                                            F = A xor B
                                                       8

                                                                          8
                                                       8




end topo_stru;   -- END da architecture
                                                                                   top_calc

                                          EEL7020 – Sistemas Digitais                    43/49
Animação do PORT MAP – C4
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),
       SW(15 downto 8), F2);




                                                            f = A or B
                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                              F2
 L4: C4 port map (SW(7 downto 0), F4);                                        F3
                                                                              F4




                                                            F = A xor B
                                                       8

                                                                          8
                                                       8




                                                       8    f = not A     8

end topo_stru;   -- END da architecture
                                                                                   top_calc

                                          EEL7020 – Sistemas Digitais                    44/49
Animação do PORT MAP – mux4x1
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),
       SW(15 downto 8), F2);




                                                            f = A or B
                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                                   00
                                                                              F2   01
                                                                                            F
 L4: C4 port map (SW(7 downto 0), F4);                                        F3   Mux
                                                                                   10       8
                                                                              F4
 L5: mux4x1 port map (F1, F2, F3, F4,                                              11




                                                            F = A xor B
       SW(17 downto 16), F);
                                                       8                                2
                                                                                   sel
                                                                          8
                                                       8




                                                       8    f = not A     8

end topo_stru;   -- END da architecture
                                                                                                top_calc

                                          EEL7020 – Sistemas Digitais                                 45/49
Animação do PORT MAP – Decod7seg
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),
       SW(15 downto 8), F2);




                                                            f = A or B
                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                                   00
                                                                              F2   01
                                                                                            F
 L4: C4 port map (SW(7 downto 0), F4);                                        F3   Mux                          Decod.
                                                                                   10       8
                                                                                                        4        7-seg
                                                                              F4                F(3 downto 0)
 L5: mux4x1 port map (F1, F2, F3, F4,                                              11




                                                            F = A xor B
       SW(17 downto 16), F);
                                                       8                                2

L6: Decod7seg port map (F(3 downto 0),                                    8
                                                                                   sel
      HEX0);                                           8




                                                       8    f = not A     8

end topo_stru;   -- END da architecture
                                                                                                       top_calc

                                          EEL7020 – Sistemas Digitais                                               46/49
Animação do PORT MAP – Decod7seg
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),                                                               F(7 downto 4)   Decod.
       SW(15 downto 8), F2);                                                                                     7-seg




                                                            f = A or B
                                                                                                         4

                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                                   00
                                                                              F2   01
                                                                                            F
 L4: C4 port map (SW(7 downto 0), F4);                                        F3   Mux                          Decod.
                                                                                   10       8
                                                                                                         4       7-seg
                                                                              F4                F(3 downto 0)
 L5: mux4x1 port map (F1, F2, F3, F4,                                              11




                                                            F = A xor B
       SW(17 downto 16), F);
                                                       8                                2

L6: Decod7seg port map (F(3 downto 0),                                    8
                                                                                   sel
      HEX0);                                           8

L7: Decod7seg port map (F(7 downto 4),
      HEX1);


                                                       8    f = not A     8

end topo_stru;   -- END da architecture
                                                                                                        top_calc

                                          EEL7020 – Sistemas Digitais                                               47/49
Animação do PORT MAP
begin




                                                           f=A+B
 L1: C1 port map (SW(7 downto 0),                      8
       SW(15 downto 8), F1);                                              8
                                                      8
 L2: C2 port map (SW(7 downto 0),                                                               F(7 downto 4)   Decod.
       SW(15 downto 8), F2);                                                                                     7-seg




                                                            f = A or B
                                                                                                         4

                                                       8
 L3: C3 port map (SW(7 downto 0),
                                                                          8   F1
       SW(15 downto 8), F3);                           8
                                                                                   00
                                                                              F2   01
                                                                                            F
 L4: C4 port map (SW(7 downto 0), F4);                                        F3   Mux                          Decod.
                                                                                   10       8
                                                                                                         4       7-seg
                                                                              F4                F(3 downto 0)
 L5: mux4x1 port map (F1, F2, F3, F4,                                              11




                                                            F = A xor B
       SW(17 downto 16), F);
                                                       8                                2

L6: Decod7seg port map (F(3 downto 0),                                    8
                                                                                   sel
      HEX0);                                           8

L7: Decod7seg port map (F(7 downto 4),
      HEX1);


                                                            f = not A
 LEDR(7 downto 0) <= F;
                                                       8                  8
end topo_stru;   -- END da architecture
                                                                                                        top_calc

                                          EEL7020 – Sistemas Digitais                                               48/49
Mini-calculadora de 8 bits
  Operando B




                             f=A+B
  SW(15 downto 8)
                        8
  Operando A                               8
  SW(7 downto 0)        8
                                                                 F(7 downto 4)   Decod.
                                                                                  7-seg




                             f = A or B
                                                                          4

                        8
                                           8   F1
                                                    00
                        8
                                               F2   01
                                                             F
                                               F3   Mux                          Decod.
                                                    10       8
                                                                          4       7-seg
                                               F4   11           F(3 downto 0)


                             F = A xor B                 2
                         8
                                                    sel
                                           8
                        8
                             f = not A




                                                                                          LEDR(7 downto 0)

Seleção da operação      8                 8
(+, or, xor, not)                                                        top_calc
SW(17 downto 16)
                                     EEL7020 – Sistemas Digitais                                    49/49

Contenu connexe

Similaire à Lab5 decod 7seg

Similaire à Lab5 decod 7seg (20)

Lab10 somadores
Lab10 somadoresLab10 somadores
Lab10 somadores
 
Lab4 mux
Lab4 muxLab4 mux
Lab4 mux
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Pic18xx
Pic18xxPic18xx
Pic18xx
 
Circuitos combinatorios
Circuitos combinatoriosCircuitos combinatorios
Circuitos combinatorios
 
gk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdfgk_2021_01_Aula07-twi.pdf
gk_2021_01_Aula07-twi.pdf
 
Contadorgray
ContadorgrayContadorgray
Contadorgray
 
Aula1 30-07-120922184742-phpapp02
Aula1 30-07-120922184742-phpapp02Aula1 30-07-120922184742-phpapp02
Aula1 30-07-120922184742-phpapp02
 
Relatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresRelatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadores
 
Roteiro exp9
Roteiro exp9Roteiro exp9
Roteiro exp9
 
Documentação Plataforma Ton
Documentação Plataforma TonDocumentação Plataforma Ton
Documentação Plataforma Ton
 
Documentação Plataforma Ton
Documentação Plataforma TonDocumentação Plataforma Ton
Documentação Plataforma Ton
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
CSEduino presentation at Lisbon Mini Maker Faire
CSEduino presentation at Lisbon Mini Maker FaireCSEduino presentation at Lisbon Mini Maker Faire
CSEduino presentation at Lisbon Mini Maker Faire
 
codificadores decodificadores
codificadores decodificadorescodificadores decodificadores
codificadores decodificadores
 
Introdução
IntroduçãoIntrodução
Introdução
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
2 manual - clp pic40-v3
2 manual - clp pic40-v32 manual - clp pic40-v3
2 manual - clp pic40-v3
 
Fundamentos de VHDL em Lógica Programável v1.1
Fundamentos de VHDL em Lógica Programável v1.1Fundamentos de VHDL em Lógica Programável v1.1
Fundamentos de VHDL em Lógica Programável v1.1
 

Lab5 decod 7seg

  • 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. Sistemas Digitais Circuitos codificadores e decodificadores EEL7020 – Sistemas Digitais 2/49
  • 3. Objetivos do laboratório 1. Entender o conceito de circuitos codificadores e decodificadores (conversores de código). 2. Implementação de codificadores e decodificadores em VHDL. 3. Uso de barramentos (vetores de sinais) em VHDL – std_logic_vector. 4. Estudo de caso: projeto de calculadora personalizada, com apresentação dos resultados em displays de 7-segmentos. EEL7020 – Sistemas Digitais 3/49
  • 4. Barramentos em VHDL - “std_logic_vector” EEL7020 – Sistemas Digitais 4/49
  • 5. No circuito do lab anterior, as entradas (A, B, C) e saídas (F) possuem o tamanho de 1 bit: C1 topo C SW(2) F1 B SW(1) LEDR(7) A SW(0) Mux 4x1 LEDR(6) LEDR(5) C2 LEDR(4) LEDR(3) 00 LEDR(2) F2 01 LEDR(1) LEDR(0) 10 0 11 F C3 2 bits F3 Seleção SW(17..16) EEL7020 – Sistemas Digitais 5/49
  • 6. Assumir o mesmo circuito, porém com entradas e saídas de 4 bits: C1 topo C SW(11..8) 4 bits F1 B SW(7..4) 4 bits 4 bits A SW(3..0) Mux 4x1 4 bits LEDR(7) LEDR(6) C2 LEDR(5) 00 LEDR(4) F2 01 LEDR(3) LEDR(2) LEDR(1) 4 bits 10 4 0 11 bits F LEDR(0) C3 2 bits F3 4 bits Seleção SW(17..16) EEL7020 – Sistemas Digitais 6/49
  • 7. Utilizando operandos de 4 bits • Componente C1 realiza a operação F1 = A or B or C • Componente C2 realiza a operação F2 = B xor C • Operandos de 1 bit - ex. A = 0, B = 1, C = 0 • Operandos de 4 bits - ex. A = 0101, B = 1000, C = 0001 1 bit 4 bits 0 0101 1 0 1000 1000 0 1 0001 0001 F1 = 1 F2 = 1 F1 = 1101 F2 = 1001 EEL7020 – Sistemas Digitais 7/49
  • 8. Implementação de barramento em VHDL std_logic fio std_logic_vector vários fios (barramento) • std_logic_vector é utilizado para implementar um “vetor” de sinais (vários fios, barramento). • Por exemplo, a saída F deverá ser definida na entity como: F: out std_logic_vector(3 downto 0); EEL7020 – Sistemas Digitais 8/49
  • 9. Componente C1 library IEEE; 4 bits use IEEE.Std_Logic_1164.all; entity C1 is port (A: in std_logic_vector(3 downto 0); B: in std_logic_vector(3 downto 0); C: in std_logic_vector(3 downto 0); F: out std_logic_vector(3 downto 0) ); end C1; architecture c1_estr of C1 is begin F <= A or B or C; end c1_estr; 4 bits EEL7020 – Sistemas Digitais 9/49
  • 10. Componente C2 library IEEE; 4 bits use IEEE.Std_Logic_1164.all; entity C2 is port (A: in std_logic_vector(3 downto 0); B: in std_logic_vector(3 downto 0); F: out std_logic_vector(3 downto 0) ); end C2; architecture c2_estr of C2 is begin F <= A xor B; end c2_estr; 4 bits EEL7020 – Sistemas Digitais 10/49
  • 11. Componente C3 library IEEE; 4 bits use IEEE.Std_Logic_1164.all; entity C3 is port (A: in std_logic_vector(3 downto 0); B: in std_logic_vector(3 downto 0); C: in std_logic_vector(3 downto 0); F: out std_logic_vector(3 downto 0) ); end C3; architecture c3_estr of C3 is begin -- ver lab. sobre componentes end c1_estr; EEL7020 – Sistemas Digitais 11/49
  • 12. Componente Mux library IEEE; 4 bits use IEEE.Std_Logic_1164.all; entity mux4x1 is port (F1: in std_logic_vector(3 downto 0); F2: in std_logic_vector(3 downto 0); F3: in std_logic_vector(3 downto 0); F4: in std_logic_vector(3 downto 0); sel: in std_logic_vector(1 downto 0); 2 bits F: out std_logic_vector(3 downto 0) ); F1 end mux4x1; architecture mux_bhv of mux4x1 is F2 F begin -- ver lab. sobre Mux F3 sel end mux_bhv; EEL7020 – Sistemas Digitais 12/49
  • 13. Componente Topo SW(11..8) SW(7..4) F1 library ieee; SW(3..0) LEDR(3..0) use ieee.std_logic_1164.all; entity topo is port ( SW : IN STD_LOGIC_VECTOR(17 downto 0); F2 LEDR : OUT STD_LOGIC_VECTOR(17 downto 0) ); end topo; architecture topo_estru of topo is F3 signal F1, F2, F3: std_logic_vector(3 downto 0); component C1 SW(17..16) port (A : in std_logic_vector(3 downto 0); B : in std_logic_vector(3 downto 0); C : in std_logic_vector(3 downto 0); begin F : out std_logic_vector(3 downto 0)); end component; L0: C1 port map (SW(3 downto 0), component C2 SW(7 downto 4), SW(11 downto 8), F1); port (A : in std_logic_vector(3 downto 0); B : in std_logic_vector(3 downto 0); L1: C2 port map (SW(3 downto 0), F : out std_logic_vector(3 downto 0)); SW(7 downto 4), SW(11 downto 8), F2); end component; component C3 L2: C3 port map (SW(3 downto 0), port (A : in std_logic_vector(3 downto 0); SW(7 downto 4), SW(11 downto 8), F3); B : in std_logic_vector(3 downto 0); C : in std_logic_vector(3 downto 0); F : out std_logic_vector(3 downto 0) L3: mux4x1 port map (F1, F2, F3, ); SW(17 downto 16), LEDR(3 downto 0)); end component; -- INCLUIR AQUI O Mux end topo_estru; -- END da architecture EEL7020 – Sistemas Digitais 13/49
  • 14. Decodificadores em VHDL EEL7020 – Sistemas Digitais 14/49
  • 15. Display de 7-segmentos • Um display de 7-segmentos é composto por sete LEDs que podem ser ligados ou desligados de forma independente. • Anodo comum - terminais anodo dos LEDs estão conectados a Vcc, e cada LED é ligado ao conectar seu catodo em GND. • Catodo comum - terminais catodo dos LEDs estão conectados a GND, e cada LED é ligado ao conectar seu anodo em Vcc. Cátodo comum Ânodo comum EEL7020 – Sistemas Digitais 15/49
  • 16. Decodificador de binário para 7-segmentos • Placa DE2 possui 7 displays de 7-segmentos, todos do tipo anodo comum (LEDs acendem com GND, ou zero lógico). • Para escrever um valor binário em um dos displays, é preciso realizar uma conversão do código binário para o código 7-segmentos. • Os 3 bits de entrada do circuito “Decod. 7-seg” são decodificados, e a palavra de 7 bits gerada é enviada para o display de 7 segmentos. Decod. 7-seg EEL7020 – Sistemas Digitais 16/49
  • 17. Projeto de decodificador de binário para 7-segmentos • Exemplos de valores em binários convertidos (decodificados) para 7- segmentos, visando escrita no display da placa DE2 anodo comum) 7 bits C2 C1 C0 6543210 Letra Decod. 0 0 0 1000001 U 7-seg 0 0 1 0001110 F 0 1 0 0010010 S 0 1 1 1000110 C 1 1 1 1111111 • Nesse exemplo, ao receber “000” na entrada, o decodificador gera o código equivalente ao acendimento da letra “U” no display 7-seg. • Ao receber “111”, todos os segmentos são desligados. • Notar que por ser do tipo anodo comum, um “0” liga um segmento. EEL7020 – Sistemas Digitais 17/49
  • 18. Projeto de decodificador “binário para 7-segmentos” 7 bits C2 C1 C0 6543210 Letra Decod. 0 0 0 1000001 U 7-seg 0 0 1 0001110 F 0 1 0 0010010 S 0 1 1 1000110 C 1 1 1 1111111 • Um circuito para implementar a lógica do decodificador em questão poderia ser projetado utilizando vários métodos: • Soma de produtos: F(0) = C2’C1’C0’ + C2C1C0 F(1) = C2’C1’C0 + C2’C1C0’ + C2’C1C0 + C2C1C0 F(2) = ... • Análise comportamental: F = “1000001” quando C2C1C0 = “000” senão “0001110” quando C2C1C0 = “001” senão ... senão “1111111” EEL7020 – Sistemas Digitais 18/49
  • 19. Componente Decod_UFSC Decod. library IEEE; 7-seg use IEEE.Std_Logic_1164.all; entity decodUFSC is 3 bits port (C: in std_logic_vector(2 downto 0); F: out std_logic_vector(6 downto 0) ); end decodUFSC; 7 bits architecture decod_bhv of decodUFSC is begin F <= "1000001" when C = "000" else -- U "0001110" when C = "001" else -- F "0010010" when C = "010" else -- S "1000110" when C = "011" else -- C "1111111"; end decod_bhv; EEL7020 – Sistemas Digitais 19/49
  • 20. Tarefa a ser realizada na aula prática Implementação de mini-calculadora de 8 bits personalizada EEL7020 – Sistemas Digitais 20/49
  • 21. Descrição funcional da mini-calculadora de 8 bits • A mini-calculadora realiza uma operação aritmética e três operações lógicas, todas de 8 bits: • F1 = A + B -- operação aritmética ADIÇÃO • F2 = A or B • F3 = A xor B • F4 = not A • Para utilizar a mini-calculadora é necessário: 1. Fornecer o operando A nas chaves SW(7..0). 2. Fornecer o operando B nas chaves SW(15..8). 3. Selecionar a operação desejada nas chaves SW(17..16). 4. O resultado será apresentado em HEXADECIMAL nos displays de sete segmentos (HEX0 e HEX1), e em BINÁRIO nos LEDs vermelhos (LEDR). EEL7020 – Sistemas Digitais 21/49
  • 22. Interface com o usuário Resultado Resultado HEX1 e HEX0 LEDR(7..0) Operação Operando B Operando A SW(17..16) SW(15..8) SW(7..0) • Para realizar uma das quatro operações disponíveis (F1, F2, F3, F4), a calculadora personalizada utiliza: • as chaves SW(7..0) para leitura do operando A • as chaves SW(15..8) para leitura do operando B • as chaves SW(17..16) para seleção da operação desejada • Os resultados são apresentados em displays de 7-segmentos e nos LEDs vermelhos. EEL7020 – Sistemas Digitais 22/49
  • 23. Interface com o usuário Resultado Resultado HEX1 e HEX0 LEDR(7..0) Operação Operando B Operando A SW(17..16) SW(15..8) SW(7..0) Seletor SW(17..16) Saída (LEDR e displays 7-seg) 00 A+B 01 A or B 10 A xor B 11 not A EEL7020 – Sistemas Digitais 23/49
  • 24. Operando B SW(15 downto 8) Operando A SW(7 downto 0) Componente FPGA TOP_CALC (esse componente possui 7 componentes internamente) LEDR(7 downto 0) Seleção da operação SW(17 downto 16) EEL7020 – Sistemas Digitais 24/49
  • 25. f=A+B Operando B SW(15 downto 8) 8 8 Operando A SW(7 downto 0) 8 F(7 downto 4) Decod. 4 7-seg f = A or B 8 8 F1 00 8 F2 01 F F3 Mux Decod. 10 8 FPGA F4 11 4 F(3 downto 0) 7-seg 8 F = A xor B 2 sel 8 8 f = not A LEDR(7 downto 0) Seleção da operação 8 8 (+, or, xor, not) SW(17 downto 16) top_calc.vhd EEL7020 – Sistemas Digitais 25/49
  • 26. Calculadora é composta Projeto hierárquico por 8 componentes, sendo 7 apresentados a seguir + o top_calc. EEL7020 – Sistemas Digitais 26/49
  • 27. “top_calc”, “mux”, dois Projeto hierárquico “decodificadores”, e quatro “funções lógicas e aritméticas”. EEL7020 – Sistemas Digitais 27/49
  • 28. Projeto hierárquico EEL7020 – Sistemas Digitais 28/49
  • 29. Componente C1 (arquivo c1.vhd) library IEEE; use IEEE.Std_Logic_1164.all; use IEEE.std_logic_unsigned.all; -- necessário para o + entity C1 is port (A: in std_logic_vector(7 downto 0); B: in std_logic_vector(7 downto 0); F: out std_logic_vector(7 downto 0) ); end C1; f=A+B architecture circuito of C1 is begin F <= A + B; end circuito; EEL7020 – Sistemas Digitais 29/49
  • 30. Componente C2 (arquivo c2.vhd) library IEEE; use IEEE.Std_Logic_1164.all; entity C2 is port (A: in std_logic_vector(7 downto 0); B: in std_logic_vector(7 downto 0); F: out std_logic_vector(7 downto 0) ); end C2; architecture circuito of C2 is f = A or B begin F <= A or B; end circuito; EEL7020 – Sistemas Digitais 30/49
  • 31. Componente C3 (arquivo c3.vhd) library IEEE; use IEEE.Std_Logic_1164.all; entity C3 is port (A: in std_logic_vector(7 downto 0); B: in std_logic_vector(7 downto 0); F: out std_logic_vector(7 downto 0) ); end C3; architecture circuito of C3 is begin F <= A xor B; F = A xor B end circuito; EEL7020 – Sistemas Digitais 31/49
  • 32. Componente C4 (arquivo c4.vhd) library IEEE; use IEEE.Std_Logic_1164.all; entity C4 is port (A: in std_logic_vector(7 downto 0); F: out std_logic_vector(7 downto 0) ); end C4; architecture circuito of C4 is begin F <= not A; end circuito; F = not A EEL7020 – Sistemas Digitais 32/49
  • 33. Componente Mux (arquivo mux4x1.vhd) library IEEE; use IEEE.Std_Logic_1164.all; entity mux4x1 is port (F1, F2, F3, F4: in std_logic_vector(7 downto 0); sel: in std_logic_vector(1 downto 0); F: out std_logic_vector(7 downto 0) ); end mux4x1; architecture circuito of mux4x1 is begin F <= F1 when sel = "00" else F2 when sel = "01" else F3 when sel = "10" else F4; end circuito; EEL7020 – Sistemas Digitais 33/49
  • 34. Componente Decod7seg Componente a ser implementado no presente lab. f=A+B 8 8 8 F(7 downto 4) Decod. 7-seg f = A or B 4 8 8 F1 00 8 F2 01 F F3 Mux Decod. 10 8 4 7-seg F = A xor B F4 11 F(3 downto 0) 8 2 sel 8 8 f = not A 8 8 EEL7020 – Sistemas Digitais 34/49
  • 35. Componente top_calc (arquivo top_calc.vhd) library ieee; use ieee.std_logic_1164.all; entity top_calc is port ( SW : in std_logic_vector (17 downto 0); begin HEX0, HEX1: out std_logic_vector(6 downto 0); LEDR : out std_logic_vector (17 downto 0) L1: C1 port map (SW(7 downto 0), ); SW(15 downto 8), F1); end top_calc; architecture topo_stru of top_calc is L2: C2 port map (SW(7 downto 0), signal F, F1, F2, F3, F4: std_logic_vector (7 downto 0); SW(15 downto 8), F2); component C1 port (A : in std_logic_vector(7 downto 0); L3: C3 port map (SW(7 downto 0), B : in std_logic_vector(7 downto 0); SW(15 downto 8), F3); F : out std_logic_vector(7 downto 0)); end component; L4: C4 port map (SW(7 downto 0), F4); -- componentes C2 e C3, idem C1 component C4 L5: mux4x1 port map (F1, F2, F3, F4, port (A : in std_logic_vector(7 downto 0); SW(17 downto 16), F); F : out std_logic_vector(7 downto 0) ); L6: Decod7seg port map (F(3 downto 0), end component; HEX0); component mux4x1 port (F1, F2, F3, F4: in L7: Decod7seg port map (F(7 downto 4), std_logic_vector(7 downto 0); HEX1); sel: in std_logic_vector(1 downto 0); F: out std_logic_vector(7 downto 0) LEDR(7 downto 0) <= F; ); end component; end topo_stru; -- END da architecture -- Incluir aqui o componente Decod7seg -- (apenas uma declaração do Decod7seg) EEL7020 – Sistemas Digitais 35/49
  • 36. Dicas úteis 1. O projeto é composto por 7 arquivos (8 componentes): • c1.vhd – fornecido nos slides anteriores (slide 29) • c2.vhd – fornecido nos slides anteriores (slide 30) • c3.vhd – fornecido nos slides anteriores (slide 31) • c4.vhd – fornecido nos slides anteriores (slide 32) • mux4x1.vhd – fornecido nos slides anteriores (slide 33) • decod7seg.vhd – a ser desenvolvido (ver exemplo no slide 19) • top_calc.vhd – parcialmente fornecido nos slides anteriores (slide 35) 2. Cuidar a utilização correta do componente decodificador no circuito (topo). É necessário definir apenas um component decod7seg, e a seguir criar duas cópias desse componente com o port map (ver top_calc no slide 35). 3. Para implementar o decodificador de binário para 7-segmentos, utilizar como base o exemplo do slide 19. Completar a tabela do slide 38, de forma a obter todos os códigos em hexadecimal necessários. EEL7020 – Sistemas Digitais 36/49
  • 37. Componente Decod7seg Componente a ser desenvolvido no presente lab.: • Está sendo solicitada a implementação de apenas UM decodificador Decod. 4 7-seg • A entity desse decodificador deverá possui apenas uma porta de entrada de 4 bits, e apenas uma porta de saída de 7 bits. • A replicação do decodificador é realizada no “topo” da arquitetura, ao se utilizar o comando port map do VHDL – VER L6: e L7: no slide 35. EEL7020 – Sistemas Digitais 37/49
  • 38. Tabela de decodificação binário para 7-segmentos Saída Entrada Display 6543210 0000 1000000 0 0001 1111001 1 0010 0100100 2 0011 0110000 3 0100 0011001 4 0101 0010010 5 0110 0000010 6 0111 1111000 7 1000 0000000 8 ... ... 9, A, b, C, d 1110 0000110 E 1111 0001110 EEL7020 – Sistemas Digitais F 38/49
  • 39. Resumo da tarefa a ser realizada 1. Implementar o decodificador “binário para 7-segmentos” (slides 19 e 38). 2. Esse novo componente será um decodificador genérico, ou seja, poderá ser utilizado em qualquer projeto que precise de um decodificador com a tabela verdade do slide 38. Assim, não deverá ter nenhum “ajuste especial” para funcionamento com os demais componentes da calculadora. Deverá possuir a entrada de 4 bits e a saída de 6 bits definida no slide 38. 3. Criar um novo projeto denominado top_calc (esse é o nome da entity do arquivo “topo” – slide 35), e utilizar os componentes VHDL dos slides 29 a 33 para implementação da calculadora. 4. Editar o componente top_calc do slide 35, e incluir a declaração do novo componente decodificador (usando component). 5. Verificar o funcionamento da calculadora no simulador e no kit FPGA. EEL7020 – Sistemas Digitais 39/49
  • 40. Animação do PORT MAP begin end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 40/49
  • 41. Animação do PORT MAP – C1 begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 F1 end topo_stru; -- END da architecture EEL7020 – Sistemas Digitais 41/49
  • 42. Animação do PORT MAP – C2 begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), SW(15 downto 8), F2); f = A or B 8 8 F1 8 F2 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 42/49
  • 43. Animação do PORT MAP – C3 begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), SW(15 downto 8), F2); f = A or B 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 F2 F3 F = A xor B 8 8 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 43/49
  • 44. Animação do PORT MAP – C4 begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), SW(15 downto 8), F2); f = A or B 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 F2 L4: C4 port map (SW(7 downto 0), F4); F3 F4 F = A xor B 8 8 8 8 f = not A 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 44/49
  • 45. Animação do PORT MAP – mux4x1 begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), SW(15 downto 8), F2); f = A or B 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 00 F2 01 F L4: C4 port map (SW(7 downto 0), F4); F3 Mux 10 8 F4 L5: mux4x1 port map (F1, F2, F3, F4, 11 F = A xor B SW(17 downto 16), F); 8 2 sel 8 8 8 f = not A 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 45/49
  • 46. Animação do PORT MAP – Decod7seg begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), SW(15 downto 8), F2); f = A or B 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 00 F2 01 F L4: C4 port map (SW(7 downto 0), F4); F3 Mux Decod. 10 8 4 7-seg F4 F(3 downto 0) L5: mux4x1 port map (F1, F2, F3, F4, 11 F = A xor B SW(17 downto 16), F); 8 2 L6: Decod7seg port map (F(3 downto 0), 8 sel HEX0); 8 8 f = not A 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 46/49
  • 47. Animação do PORT MAP – Decod7seg begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), F(7 downto 4) Decod. SW(15 downto 8), F2); 7-seg f = A or B 4 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 00 F2 01 F L4: C4 port map (SW(7 downto 0), F4); F3 Mux Decod. 10 8 4 7-seg F4 F(3 downto 0) L5: mux4x1 port map (F1, F2, F3, F4, 11 F = A xor B SW(17 downto 16), F); 8 2 L6: Decod7seg port map (F(3 downto 0), 8 sel HEX0); 8 L7: Decod7seg port map (F(7 downto 4), HEX1); 8 f = not A 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 47/49
  • 48. Animação do PORT MAP begin f=A+B L1: C1 port map (SW(7 downto 0), 8 SW(15 downto 8), F1); 8 8 L2: C2 port map (SW(7 downto 0), F(7 downto 4) Decod. SW(15 downto 8), F2); 7-seg f = A or B 4 8 L3: C3 port map (SW(7 downto 0), 8 F1 SW(15 downto 8), F3); 8 00 F2 01 F L4: C4 port map (SW(7 downto 0), F4); F3 Mux Decod. 10 8 4 7-seg F4 F(3 downto 0) L5: mux4x1 port map (F1, F2, F3, F4, 11 F = A xor B SW(17 downto 16), F); 8 2 L6: Decod7seg port map (F(3 downto 0), 8 sel HEX0); 8 L7: Decod7seg port map (F(7 downto 4), HEX1); f = not A LEDR(7 downto 0) <= F; 8 8 end topo_stru; -- END da architecture top_calc EEL7020 – Sistemas Digitais 48/49
  • 49. Mini-calculadora de 8 bits Operando B f=A+B SW(15 downto 8) 8 Operando A 8 SW(7 downto 0) 8 F(7 downto 4) Decod. 7-seg f = A or B 4 8 8 F1 00 8 F2 01 F F3 Mux Decod. 10 8 4 7-seg F4 11 F(3 downto 0) F = A xor B 2 8 sel 8 8 f = not A LEDR(7 downto 0) Seleção da operação 8 8 (+, or, xor, not) top_calc SW(17 downto 16) EEL7020 – Sistemas Digitais 49/49