Teach Remote lab lessons

Teach lesson

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

Escreva portas lógicas em Verilog, 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
  • Ensino médio técnico, formação profissional inicial ou primeiros cursos técnicos
  • Português (Brasil)
  • Digital systems & FPGA
Altera DE1-SoC
Altera DE1-SoC

Learning Outcomes

  • Explicar que Verilog descreve hardware, e não um programa executado linha por linha.

  • Usar o fluxo de trabalho 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 Verilog, 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 Verilog 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:0] — 10 chaves deslizantes que você controla na tela. Uma chave para cima representa o nível lógico 1.
- KEY[3: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: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 Verilog do LabsLand abre com um arquivo, leds_mirror.v, que contém um módulo de nível superior chamado leds_mirror. Você vai substituir todo o conteúdo desse arquivo pelo projeto do exercício, mantendo sempre o nome do módulo como leds_mirror. 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 Verilog da DE1-SoC no LabsLand: editar o módulo de nível superior leds_mirror.v, 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 leds_mirror.v, 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. Seu módulo Verilog é sintetizado diretamente como o projeto de nível superior, portanto você editará apenas esse arquivo.

Qual afirmação descreve melhor o que seu código Verilog 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 Verilog, essas portas usam os operadores bit a bit & | ~ ^. 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. assign significa “esta saída é continuamente igual a esta expressão”, exatamente como ocorre em um fio conectado a portas lógicas.

// Licao 1 - modelo inicial de portas basicas. Substitua todo o conteudo de leds_mirror.v por isto.
// Complete cada expressao TODO antes de sintetizar.
module leds_mirror(SW, LEDR);
    input  [9:0] SW;        // SW[0] = A, SW[1] = B (outras chaves nao utilizadas)
    output [9:0] LEDR;

    wire A = SW[0];
    wire B = SW[1];

    assign LEDR[0] = TODO_AND_EXPRESSION;       // AND
    assign LEDR[1] = TODO_OR_EXPRESSION;        // OR
    assign LEDR[2] = TODO_NOT_A_EXPRESSION;     // NOT A
    assign LEDR[3] = TODO_NAND_EXPRESSION;      // NAND
    assign LEDR[4] = TODO_NOR_EXPRESSION;       // NOR
    assign LEDR[5] = TODO_XOR_EXPRESSION;       // XOR

    assign LEDR[9:6] = 4'b0000;                 // LEDs nao utilizados permanecem apagados
endmodule

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 Verilog da DE1-SoC. O editor mostra o arquivo leds_mirror.v.

  2. Selecione todo o conteúdo de leds_mirror.v e substitua-o pelo módulo de portas básicas acima. Mantenha o nome do módulo como leds_mirror.

  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 SW0 e SW1 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 SW1 para cima (A=0, B=1), depois SW0 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 = SW0 B = SW1 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.