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.
New to LabsLand? Create your teacher account
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.
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.
- 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 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 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.
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.
Sintetize, envie e verifique
16 min
Agora construa o circuito na placa real e confira-o com a tabela-verdade.
Abra o laboratório Verilog da DE1-SoC. O editor mostra o arquivo
leds_mirror.v.Selecione todo o conteúdo de
leds_mirror.ve substitua-o pelo módulo de portas básicas acima. Mantenha o nome do módulo comoleds_mirror.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
SW0eSW1na 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
SW1para cima (A=0, B=1), depoisSW0para 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.
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.