Teach Remote lab lessons

Teach lesson

Lógica digital na DE1-SoC com VHDL (1/6): suas primeiras portas em hardware real

Escreva portas lógicas em VHDL, sintetize e envie o projeto para uma DE1-SoC real e verifique a tabela-verdade com chaves e LEDs físicos.

  • Altera DE1-SoC
  • 50 min
  • Graduação introdutória
  • Português (Brasil)
  • Digital systems & FPGA
Altera DE1-SoC
Altera DE1-SoC

Learning Outcomes

  • Explicar que VHDL descreve hardware, e não um programa executado passo a passo.

  • Usar o fluxo VHDL da DE1-SoC no LabsLand: editar, sintetizar, enviar e observar.

  • Construir as seis portas lógicas básicas e verificar sua tabela-verdade em hardware real.

  • Reconhecer LEDs ativos em nível alto e botões ativos em nível baixo na DE1-SoC.

Student activity preview

Activity Content

Preview only. In a class session, students can fill in responses and submit their work to the teacher.

1

O que você vai fazer

12 min

A maioria dos programas que você conhece é executada em um processador: as instruções são realizadas uma após a outra. Neste curso, você fará algo diferente. Você vai descrever um circuito digital em uma linguagem chamada VHDL, e um chip real será configurado para se tornar esse circuito. Não há um processador executando suas linhas uma por uma: sua descrição se transforma em fios e portas reais que funcionam ao mesmo tempo.

O chip é uma FPGA (*Field-Programmable Gate Array*): um circuito integrado que contém uma grande malha de blocos lógicos cujas conexões podem ser reconfiguradas. A placa é uma Terasic DE1-SoC com uma FPGA Cyclone V da Intel/Altera, usada em muitos cursos universitários de projeto digital. Você acessa uma placa real pelo navegador com o LabsLand: um servidor executa o Intel Quartus para transformar seu VHDL em um arquivo de configuração, programa a placa física e transmite uma câmera ao vivo para que você veja os LEDs reais responderem.

Partes da placa que você usará neste curso:

- SW(9 downto 0) — 10 chaves deslizantes que você controla na tela. Uma chave para cima representa o nível lógico 1.
- KEY(3 downto 0) — 4 botões. Eles são ativos em nível baixo: um botão é lido como 0 quando pressionado e como 1 quando solto.
- CLOCK_50 — um sinal de clock de 50 MHz, usado a partir da Lição 3.
- LEDR(9 downto 0) — 10 LEDs vermelhos, com LEDR0 na extremidade direita da fileira e LEDR9 na esquerda. Eles são ativos em nível alto: um LED acende quando recebe 1.
- HEX0HEX5 — seis displays de 7 segmentos. Eles são ativos em nível baixo: um segmento acende quando recebe 0.

O fluxo de trabalho será o mesmo em todas as lições: o editor VHDL do LabsLand abre com um arquivo, blink.vhd, que contém uma entidade de nível superior chamada blink. Você vai substituir todo o conteúdo desse arquivo pelo projeto do exercício, mantendo sempre o nome da entidade como blink. Depois, clique em Sintetizar (Synthesize), espere o processo terminar, clique em Enviar para a FPGA (Upload to FPGA) e use as chaves na tela enquanto observa a câmera. Se um tour guiado ou uma janela de ajuda cobrir os botões do editor, feche ou pule o tour antes de continuar.

Fluxo de trabalho VHDL da DE1-SoC no LabsLand: editar a entidade de nível superior blink em blink.vhd, sintetizar com o Quartus no servidor, enviar o projeto para a FPGA real e usar as chaves na tela enquanto se observa a câmera ao vivo.

Fluxo do curso: edite blink.vhd, execute Sintetizar (Synthesize, com o Quartus no servidor), selecione Enviar para a FPGA (Upload to FPGA), controle as chaves na tela e observe a câmera ao vivo. Sua entidade VHDL é sintetizada diretamente como o projeto de nível superior, portanto você editará apenas esse arquivo.

Qual afirmação descreve melhor o que seu VHDL faz neste laboratório?

Nesta placa, qual valor faz um LED acender, e qual valor um botão KEY apresenta quando está pressionado? Responda em uma frase.

2

As seis portas básicas

12 min

Uma porta lógica recebe uma ou mais entradas binárias e produz uma saída binária. Seis portas abrangem quase tudo o que você usará neste curso. Com as entradas A e B:

Tabela-verdade para A, B:

- A=0, B=0 -> AND 0, OR 0, NOT A 1, NAND 1, NOR 1, XOR 0
- A=0, B=1 -> AND 0, OR 1, NOT A 1, NAND 1, NOR 0, XOR 1
- A=1, B=0 -> AND 0, OR 1, NOT A 0, NAND 1, NOR 0, XOR 1
- A=1, B=1 -> AND 1, OR 1, NOT A 0, NAND 0, NOR 0, XOR 0

Em VHDL, essas portas usam os operadores lógicos and, or, not e xor. O projeto abaixo conecta a chave SW(0) a A, a chave SW(1) a B e envia o resultado de cada porta a um LED. Uma atribuição concorrente de sinal, como LEDR(0) <= A and B;, significa que a saída acompanha continuamente essa expressão, como um fio ligado às portas.

-- Modelo inicial do estudante: complete as linhas TODO antes de sintetizar.
-- Licao 1 - portas basicas. Substitua TODO o conteudo de blink.vhd por este projeto.
library ieee;
use ieee.std_logic_1164.all;

entity blink is
    port (
        SW   : in  std_logic_vector(9 downto 0);  -- SW(0)=A, SW(1)=B
        LEDR : out std_logic_vector(9 downto 0)
    );
end entity blink;

architecture rtl of blink is
    signal A, B : std_logic;
begin
    A <= SW(0);
    B <= SW(1);

    LEDR(0) <= TODO_AND;          -- TODO: expressao para AND
    LEDR(1) <= TODO_OR;           -- TODO: expressao para OR
    LEDR(2) <= TODO_NOT_A;        -- TODO: expressao para NOT A
    LEDR(3) <= TODO_NAND;         -- TODO: expressao para NAND
    LEDR(4) <= TODO_NOR;          -- TODO: expressao para NOR
    LEDR(5) <= TODO_XOR;          -- TODO: expressao para XOR
    LEDR(9 downto 6) <= (others => '0');  -- LEDs nao usados apagados
end architecture rtl;

Antes de executá-lo, determine o padrão inicial dos LEDs por conta própria. Com as duas chaves para baixo, A=0 e B=0. Encontre essa linha na tabela-verdade acima e decida, para cada uma das seis portas, se sua saída será 1. No próximo passo, você comparará sua previsão com a placa real.

Com as duas chaves para baixo (A=0, B=0), quais LEDs entre LEDR(0) e LEDR(5) você prevê que estarão acesos? Liste-os antes de executar o projeto.

3

Sintetize, envie e verifique

16 min

Agora construa o circuito na placa real e confira-o com a tabela-verdade.

  1. Abra o laboratório VHDL da DE1-SoC. O editor mostra o arquivo blink.vhd.

  2. Selecione todo o conteúdo de blink.vhd e substitua-o pelo projeto inicial de portas básicas acima. Complete todas as linhas TODO e mantenha o nome da entidade como blink.

  3. Clique em Sintetizar (Synthesize). Se um tour guiado cobrir o botão, feche ou pule o tour primeiro. Espere o processo terminar, o que leva cerca de 1 a 3 minutos. Se houver um erro, verifique se falta um ponto e vírgula ou se há parênteses incompatíveis, corrija e sintetize novamente. A compilação pode exibir muitos avisos; continue somente quando o estado final informar que ela terminou com 0 erros.

  4. Clique em Enviar para a FPGA (Upload to FPGA) e espere a sessão da placa e a câmera ao vivo aparecerem.

  5. Com as chaves SW(0) e SW(1) na tela para baixo (A=0, B=0), observe na câmera quais LEDs estão acesos e compare o resultado com sua previsão.

  6. Coloque SW(1) para cima e SW(0) para baixo (A=0, B=1), depois SW(1) para baixo e SW(0) para cima (A=1, B=0) e, por fim, as duas para cima (A=1, B=1), observando os seis LEDs em cada caso.

Para cada linha de entradas, ajuste as chaves e registre o que os seis LEDs mostram na câmera (1 = aceso, 0 = apagado). Compare com a tabela-verdade da etapa anterior.

A = SW(0) B = SW(1) LEDR0 AND LEDR1 OR LEDR2 NOT A LEDR3 NAND LEDR4 NOR LEDR5 XOR

Envie sua evidência. Faça uma captura da câmera com as duas chaves para cima (SW = 11): LEDR0 (AND) e LEDR1 (OR) devem estar acesos, e os demais, apagados. Anexe a imagem no campo abaixo.

Qual é a única porta cuja saída é 1 em exatamente uma combinação de entradas: a linha A=1, B=1?

Qual é a única porta cuja saída é 1 em exatamente uma combinação de entradas: a linha A=0, B=0?

Com suas palavras, o que NAND e NOR significam em termos de AND/OR seguidas de NOT? Use os dados registrados para justificar sua resposta.

4

Verificação do fluxo de trabalho

10 min

Qual sequência corresponde ao que você acabou de fazer?

Em três frases, explique o que Sintetizar fez, o que Enviar para a FPGA fez e como você soube que as portas estavam funcionando. Mencione uma situação em que a polaridade ativa em nível alto ou ativo em nível baixo foi importante.