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.
New to LabsLand? Create your teacher account
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.
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.
- HEX0–HEX5 — 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 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.
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.
Sintetize, envie e verifique
16 min
Agora construa o circuito na placa real e confira-o com a tabela-verdade.
Abra o laboratório VHDL da DE1-SoC. O editor mostra o arquivo
blink.vhd.Selecione todo o conteúdo de
blink.vhde substitua-o pelo projeto inicial de portas básicas acima. Complete todas as linhas TODO e mantenha o nome da entidade comoblink.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.Clique em Enviar para a FPGA (
Upload to FPGA) e espere a sessão da placa e a câmera ao vivo aparecerem.Com as chaves
SW(0)eSW(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.Coloque
SW(1)para cima eSW(0)para baixo (A=0, B=1), depoisSW(1)para baixo eSW(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.
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.