Tradução do Laboratory Exercise 1 disponível em <http://www.altera.com/education/univ/materials/digital_logic/labs/unv-labs.html> Exercícios de Laboratório 1 Switches (chaves), Luzes (LEDs) e Multiplexadores O objetivo desse exercício é aprender como conectar dispositivos de entrada e saída simples no chip do FPGA e implementar circuitos que usem esses dispositivos. Nos vamos usar as chaves SW 17-0 na placa DE2 como entradas para o circuito. Os LEDs e os displays de sete segmentos funcionarão como dispositivos de saída. Parte I A DE2 possui 18 chaves, nomeadas SW 17-0, que podem ser usadas como entradas para circuitos, e 18 LEDs vermelhos, nomeados LEDR 17-0, que podem ser usados para mostrar valores de saídas. A Figura 1 mostra uma entidade simples em VHDL que usa os LEDs vermelhos para mostrar o estado das chaves. Como existem LEDs vermelhos na mesma quantidade das chaves, é conveniente representarmos vetores utilizando os mesmos, como mostrado. Usamos atribuições simples para as 18 saídas (nos LEDs vermelhos), o que equivale as seguintes atribuições individuais A DE2 tem conexões hardwired entre o chip FPGA e as luzes e chaves. Para usar SW 17-0 e LEDR 17-0 é necessários incluir no projeto do Quartus II o mapeamento correto dos pinos, fornecido no Manual de Usuário da DE2. Por exemplo, o manual especifica que o SW0 está conectado ao pino 25 do chip FPGA e o LEDR0 está ao pino AE23. Uma boa maneira de fazer as associações de pinos é importar o arquivo chamado DE2_pin_assignments.csv, que é fornecido no CD que acompanha a placa (DE2 Systems CD) ou na seção do programa universitário no site da Altera. O procedimento para fazer as associações é descrito no tutorial Quartus II Introduction using VHDL Design (Introdução ao Quartus II usando VHDL), que também pode ser encontrado no site da Altera. É importante entender que o arquivo de associação de pinos é útil somente se os nomes utilizados nas entidades VHDL forem exatamente os mesmos que constam em tal arquivo. O arquivos usa os nomes SW[0]...SW[17] e LEDR[0]...SW[17] para as chaves e luzes, sendo essa a razão de usarmos esses nomes na entidade da Figura 1 (note que o Quartus II usa "[]" chaves para elementos de um vetor enquanto a sintaxe de vetores em VHDL usa "()" parênteses).
Figura 1. Código VHDL que usa chaves e LEDs da DE2. Execute os passos abaixo para implementar um circuito correspondente ao código na Figura 1 na DE2. 1. Crie um novo projeto no Quartus II. Selecione o chip Cyclone II EP2C35F672C6, o qual é o chip FPGA presente na DE2. 2. Em seu projeto, crie uma entidade VHDL e digite o código da Figura 1. 3. Inclua o arquivo de associação de pinos em seu projeto. Compile o projeto. 4. Carregue o projeto compilado no chip FPGA. Teste o funcionamento do circuito mudando a posição das chaves. Parte II A Figura 2a mostra um circuito multiplexador 2-para-1 com um seletor de entrada s. Se s=0 a saída do multiplexador será igual a x (m=x); se s=1, igual a y (m=y). A Figura 2b mostra a tabela verdade do circuito, e 2c mostra a simbologia do mesmo. Figura 2. Multiplexador 2-para-1 O multiplexador pode ser descrito (em VHDL) da seguinte forma: Agora escreva uma entidade VHDL que inclua oito atribuições como as usadas anteriormente para descrever o circuito da Figura 3a. Esse circuito terá duas entradas de oito bits, X e Y, e produzirá uma saída M, também de oito bits. Se s=0, M=X; se s=1, M=Y. Nós nos referimos a esse circuito como um multiplexador de oito bits de largura. A Figura 3b mostra a simbologia do multiplexador citado, no qual X, Y e M são identificados como conexões de 8bits. Execute os passos a seguir:
Figura 3. Multiplexador 2-para-1 com 8bits de largura 1. Crie um novo projeto no Quartus. 2. Inclua o arquivo do multiplexador de 8bits no projeto. Use a chave SW17 como s, as chaves SW 7-0 como X e SW 15-8 com Y. Conecte as chaves SW aos LEDRs e a saída M aos LEDG 7-0. 3. Inclua o arquivo de associação de pinos no seu projeto. Como foi discutido na Parte I, garantem que sejam usados os pinos certos do chip FPGA da DE2, garantindo a correta conexão das chaves e LEDs utilizados no projeto. 4. Compile o projeto. 5. Carregue o circuito compilado no chip FPGA. Teste a funcionalidade do multiplexador de oito bits mudando a posição das chaves e observe as mudanças nos LEDs. Parte III Na Figura 2 nós mostramos o multiplexador 2-para-1, que seleciona entre duas entrados x e y. Para essa etapa, considere que o circuito com saída m deve selecionar entre cinco saídas diferentes u, v, w, x, e y. A parte a da figura 4 mostra como podemos descrever um multiplexador 5-para-1 usando quatro multiplexadores 2-para1. O circuito usa um seletor de 3 bits s2s1s0 e implementa a tabela verdade mostrada na Figura 4b. A parte c da mesma figura mostra a simbologia do circuito. Relembre [da Figura 3] que um multiplexador 2-para-1 de oito bits de largura pode ser implementado usando-se instâncias de um multiplexador 2-para-1 simples. A Figura 5 aplica esse conceito para definir um multiplexador 5-para-1 de três bits de largura, o qual contém três instâncias do circuito da Figura 4a.
Figura 4. Multiplexador 5-para-1 Parte IV Figura 5. Multiplexador 5-para-1 com seletor de 3 bits Execute os seguintes passos para implementar o multiplexador 5-para-1 de três bits de largura. 1. Crie um novo projeto no Quartus II. 2. Crie uma entidade VHDL para o multiplexador a ser criado. Conecte a entrada de seleção às chaves SW 17-15 e use o restante das chaves para criar cinco entradas de 3bits cada (entradas U até Y). Conecte as chaves aos LEDs vermelhos e a saída M a três LEDs verdes. 3. Inclua o arquivo de associação de pinos no seu projeto. 4. Carregue o projeto compilado no FPGA. Teste a funcionalidade do novo circuito mudando a posição das chaves e observe a saída nos LEDs. A Figura 6 mostra um módulo decodificador para um display de 7 segmentos que tem uma entrada de 3bits c2c1c0. Esse decodificador produz sete saídas, as quais são usadas para mostrar um caractere no display de 7 segmentos. A Tabela 1 lista os caracteres que devem ser
mostrados para cada valos da entrada c2c1c0. Para manter a simplicidade, somente quatro caracteres são incluídos na tabela (mais o caractere "branco", os quais são selecionados com os códigos 100-111). O display de 7 segmentos é identificados pelo índices de 0 a 6 mostrado na figura abaixo. Cada segmento é iluminado se o valor lógico 0 for atribuído ao mesmo. Você deve escrever uma entidade que implemente que represente os funções lógicas necessárias para ativar cada um dos sete segmentos. Use somente atribuições simples para especificar cada expressão booleana usada nas funções lógicas. Figura 6. Decodificador de 7 segmentos. Tabela 1. Códigos de caracteres. Execute os passos seguintes: 1. Crie um novo projeto no Quartus II para o novo circuito. 2. Crie uma entidade para o decodificador de 7 segmentos. Conecte c2c1c0 às chaves SW 2-0 e conecte as saídas do decodificador no HEX0 para ser mostrado na DE2. Os segmentos do display são chamados HEX0 0, HEX0 1,..., HEX0 6, de acordo com a Figura 6. Você deve declarar uma porta de 7bits no seu código para que os pinos sejam associados corretamente. 3. Compile o projeto. 4. Carregue o circuito criado no FPGA. Teste o circuito alterando a posição das chaves SW 2-0 e observe o display de 7 segmentos. Parte V Considere o circuito mostrado na Figura 7. Ele usa o multiplexador 5-para-1 de três bits de largura para habilitar a seleção de cinco caracteres H, E, L, O e "branco". O código dos caracteres estão na Tabela 1, usando as chaves SW14-0 para inseri-los e usando as chaves SW 17-15 para especificar o display que vai exibi-lo. Um rascunho de código que representa o circuito é mostrado na figura 8. Note que usamos os circuitos criados nas parte II e IV como módulos (ou subcircuitos). Você deverá estender o código da figura 8 para que possamos usar cinco displays de 7 segmentos ao invés de somente um. Você vai precisar de cinco instâncias para cada módulo. O propósito do circuito final é mostrar uma palavra utilizando os cinco displays compostos de caracteres da Tabela 1 e poder rotacionar a palavra de forma circular, movendo as letras através de dos cinco displays quando a posição das chaves SW 17-15 for alterada. Como exemplo, se a palavra a ser mostrada for HELLO, o circuito deverá criar os padrões de saída mostrados na Tabela 2.
Figura 7. Circuito que pode selecionar e exibir cinco caracteres. Figura 8. Código VHDL para o circuito da Figura 7. Tabela 2. Rotação da palavra HELLO em cinco displays. Execute os passos seguintes.
1. Crie um novo projeto no Quartus II. 2. Inclua sua entidade no projeto. Conecte as chaves SW 17-15 no seletor de cada instância do multiplexador 5-para-1 de três bits de largura. Também conecte SW 14-0 em cada instância dos multiplexadores para que seja possível criar os padrões de caracteres mostrados na Tabela 2. Conecte as saídas dos cinco multiplexadores aos displays de 7 segmentos HEX4, HEX3, HEX2, HEX1 e HEX0. 3. Inclua o arquivo de associação de pinos e compile o projeto. 4. Carregue o projeto compilado no FPGA e teste o novo circuito alterando a posição das chaves SW 14-0 para selecionar o padrão de caracteres e das chaves SW 17-15 para ver a rotação da palavra. Parte VI Estenda seu circuito criado na Parte V para que todos os displays de 7 segmentos sejam utilizados. Seu circuito deve ser capaz de mostrar palavras com até cinco caracteres nos oito displays, e rotacionar a palavra que está sendo exibida quando o padrão das chaves SW 17-15 for alterado. Se a palavra é HELLO, então seu circuito deve produzir os padrões mostrados na Tabela 3. Siga os passos seguintes: Tabela 3. Rotação da palavra HELLO em oito displays. 1. Crie um novo projeto no Quartus II. 2. Inclua sua entidade no projeto. Conecte as chaves SW 17-15 nos seletores de cada instância dos multiplexadores em seu projeto. Conecte também as chaves SW 14-0 em cada instância dos multiplexadores para que possam ser produzidos os padrões de caracteres mostrados na Tabela. (Dica: para algumas entradas dos multiplexadores você irá desejar selecionar o caractere "branco".) Conecte as saídas dos multiplexadores aos displays HEX7,..., HEX0. 3. Inclua o arquivo de associações de pinos e compile seu projeto. 4. Carregue o projeto no FPGA. Teste a funcionalidade do circuito selecionando a posição das chaves SW 14-0 na sequência correta e alterando SW 17-15 para observar a rotação da palavra.