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

Mais conteúdo relacionado

PDF
Lab3 componentes
PDF
Lab2 vhdl fluxo_quartus
PPT
Arquitetura 6
PPT
Pro3 04 e_enderecamento_indireto
PPT
Pro3 06 e_tratamento_de_erros
PDF
Capitulo 9 teoria de inventarios o stock2
PDF
Mbe
 
PDF
Lab3 componentes
Lab2 vhdl fluxo_quartus
Arquitetura 6
Pro3 04 e_enderecamento_indireto
Pro3 06 e_tratamento_de_erros
Capitulo 9 teoria de inventarios o stock2
Mbe
 

Semelhante a Lab5 decod 7seg (20)

PDF
Lab10 somadores
PDF
Lab4 mux
PDF
Comunicação serial
PDF
Utilizando um Display de LCD
PDF
Pic18xx
PDF
Circuitos combinatorios
PDF
gk_2021_01_Aula07-twi.pdf
PDF
Contadorgray
PDF
Apresentação-Jun18-V1.pdf_bresimar_training
PDF
Aula1 30-07-120922184742-phpapp02
DOCX
Relatório multiplexadores e decodificadores
PDF
Roteiro exp9
PDF
Documentação Plataforma Ton
PDF
Documentação Plataforma Ton
PDF
Acesso à memória e registros
PDF
CSEduino presentation at Lisbon Mini Maker Faire
PDF
codificadores decodificadores
PDF
Introdução
PPT
Pic aula1
PDF
2 manual - clp pic40-v3
Lab10 somadores
Lab4 mux
Comunicação serial
Utilizando um Display de LCD
Pic18xx
Circuitos combinatorios
gk_2021_01_Aula07-twi.pdf
Contadorgray
Apresentação-Jun18-V1.pdf_bresimar_training
Aula1 30-07-120922184742-phpapp02
Relatório multiplexadores e decodificadores
Roteiro exp9
Documentação Plataforma Ton
Documentação Plataforma Ton
Acesso à memória e registros
CSEduino presentation at Lisbon Mini Maker Faire
codificadores decodificadores
Introdução
Pic aula1
2 manual - clp pic40-v3
Anúncio

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