Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 1 RESUMO Esta experiência consiste no projeto e implementação de circuitos contadores com o uso da linguagem de descrição de hardware VHDL. São apresentados aspectos básicos da descrição de circuitos sequenciais, de máquinas de estados e outros recursos da linguagem VHDL. 1. DESCRIÇÃO DE CONTADORES Um contador é um circuito sequencial muito utilizado em projetos digitais. Apesar de ser simples, é um circuito interessante para mostrar recursos importantes da linguagem de descrição de hardware VHDL. O trecho de código abaixo mostra um contador simples, onde a saída segue uma contagem crescente. Figura 1.1 – Descrição VHDL de um contador. O contador da descrição acima é um contador de 4 bits com reset assíncrono e sinal de enable da contagem. A implementação em VHDL usa um processo que usa uma variável contagem do tipo integer. Na ativação do sinal reset, a contagem é zerada e, na borda de subida do clock, se enable estiver ativado, a contagem é incrementada. Como a saída q tem tipo std_logic_vector, é usada a função de conversão de tipos conv_std_logic_vector para converter a contagem inteira em um vetor de bits. Na linha 15, a definição da variável contagem faz com que seja criado internamente um elemento com 4 bits para armazenar o valor da contagem atual. Para uso da função de conversão de tipos é necessário a inclusão da biblioteca ieee.std_logic_arith. Contadores em VHDL Versão 2012 EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 2 1.1. Displays de sete segmentos Para a verificação do funcionamento do contador, a saída q pode então ser mapeada um 4 leds em um placa de desenvolvimento de circuitos com FPGA. Normalmente, estas placas de desenvolvimento dispõem também de displays de sete segmentos. Para usar estes displays é necessário que a saída binária do contador seja convertida para o código de sete segmentos (figura 1.2). Figura 1.2 – Display de 7 segmentos e alguns exemplos (fonte: [Wakerly, 2006]). O display de sete segmentos é composto por sete leds dispostos espacialmente como mostrado na figura 1.2 e identificados de a até g. Quando, por exemplo, o dígito 1 deve ser apresentado, os segmentos b e c devem ser ativados, então o código equivalente ao dígito 1 é 0110000 (abcdefg). Na placa DE2, os sinais de controle dos leds nos displays de sete segmentos são ativos em baixo. Desta forma, para o dígito 1, o código de sete segmentos correspondente é 1001111. A figura 1.3 apresenta uma descrição VHDL de um conversor de códigos. Figura 1.3 – Descrição VHDL de um conversor para código de sete segmentos. Na placa de desenvolvimento DE2 da Altera, temos 8 displays de sete segmentos, identificados como HEX0 até HEX7. Cada segmento dos displays tem seu sinal assinalado em certos pinos da FPGA da placa. Por exemplo, os leds do display HEX0 estão mapeados conforme a tabela 1. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 3 Tabela 1 – Mapeamento dos leds do display HEX0 da placa Altera DE2. Fonte: [Altera, 2008] Segmento Identificação Pino a HEX0[0] PIN_AF10 b HEX0[1] PIN_AB12 c HEX0[2] PIN_AC12 d HEX0[3] PIN_AD11 e HEX0[4] PIN_AE11 f HEX0[5] PIN_V14 g HEX0[6] PIN_V13 Assim, caso se deseje apresentar a saída do contador binário da figura 1.1 em um dos displays de sete segmentos, basta conectar o conversor da figura 1.3, conforme a figura 1.4 abaixo. Figura 1.4 – Composição do contador binário e conversor para display de sete segmentos. A descrição VHDL correspondente à figura 1.4 é apresentada abaixo (figura 1.5). Nela, são usadas como componentes as entidades contador e conv_bin_7seg. Figura 1.5 – Descrição VHDL do circuito com um contador binário e um conversor para display de sete segmentos. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 4 1.2. Máquina de estados Uma alternativa para a descrição de contadores é através de uma máquina de estados. O contador binário de 4 bits tem 16 estados (E0 até E15) em um diagrama de transição de estados circular (figura 1.6). Figura 1.6 – Diagrama de transição de estados de um contador módulo 16. A figura 1.7 apresenta a descrição VHDL do contador binário com uma máquina de estados, usando três processos1: o primeiro processo verifica o sinal reset e muda o estado na borda de subida do clock. O segundo processo identifica o próximo estado e o terceiro especifica a saída do circuito para cada estado (máquina de Moore). Embora esta descrição seja mais longa que a descrição da figura 1.1, o uso de uma máquina de estados permite uma flexibilidade maior: por exemplo, com a mesma sequência de estados, é possível mudar os valores apresentados na saída do circuito. Para isto, basta modificar as linhas de código referentes ao processo saidas. Por exemplo, com poucas modificações é possível desenvolver a descrição de um contador módulo 16 com saídas em código Gray. 1.3. Funções em VHDL O uso da descrição de recursos em nível estrutural permite identificar componentes que são reutilizados em vários pontos de um sistema digital. Um exemplo simples de casos de componentes reutilizados é o conversor de código binário para o código de 7 segmentos, que permite mostrar um valor binário em displays de sete segmentos. Uma alternativa é usar recursos de linguagem na modelagem do sistema digital que permitem caracterizar estes módulos como um bloco separado da descrição do circuito, conhecidos genericamente como subprogramas. Em VHDL são disponíveis as funções e os procedimentos. Estes recursos da linguagem de descrição de hardware têm conceitos muito semelhantes aos seus correspondentes das linguagens de programação, conforme tabela 2 abaixo. Embora seja um bloco separado de código, ao contrário dos conceitos similares de software que levam a uma diminuição do tamanho total do código executável gerado, o uso destes recursos de linguagem de descrição de hardware não geram um circuito menor, pois cada chamada leva a criação de uma nova unidade funcional no circuito sintetizado. Podemos dizer que uma das vantagens no uso de funções e procedimentos é melhorar a legibilidade e entendimento da descrição VHDL. Uma descrição mais detalhada sobre funções e procedimentos em VHDL pode ser encontrada em [d’Amore 2012] e [Rushton, 2011]. 1 É possível implementar uma máquina de estados em VHDL usando três processos, dois processos ou apenas 1 único processo. Para mais informações consulte a referência [Rushton, 2011]. E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 5 Figura 1.7 – Contador binário descrito com uma máquina de estados. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 6 Tabela 2 – Algumas características de funções e procedimentos em VHDL. Características Função Procedimento retorno de valor retorna um valor através do comando return pode retornar vários valores através dos parâmetros passados ao procedimento parâmetros lista de parâmetros deve usar modo in obrigatoriamente parâmetros podem possuir modos in, inout ou out (valores de retorno usam modo out ou inout) comandos contém comandos sequenciais conceito generalização de uma expressão (pode ser usado dentro de um comando) generalização de um comando (pode ser considerado como um bloco de comandos) sobrecarga é possível criar vários subprogramas com mesmo nome, mas com lista de parâmetros e valores de retorno diferentes A figura 1.8 apresenta um exemplo de uso de funções em uma descrição VHDL. A função conv_7seg é definida entre as linhas 18 e 41: possui apenas um parâmetro de entrada (vetor d de 4 bits) e retorna um vetor de bits (std_logic_vector). Na linha 20 é definida a varíavel saida que será usada para determinar o valor a ser retornado. A seleção do valor de retorno usa o comando sequencial case (linhas 22 a 39). O comando return é usado somente uma vez (linha 40). A linha 47 contém a chamada à função conv_7seg dentro do comando de atribuição. Figura 1.8 – Contador binário descrito usando função em VHDL. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 7 2. PARTE EXPERIMENTAL A parte experimental desta experiência diz respeito à implementação de circuitos contadores em linguagem VHDL. Nesta experiência será usado o dispositivo lógico programável Altera Cyclone II EP2C35F672C6 da placa de desenvolvimento DE2. 2.1. Atividades Pré-Laboratório Antes do projeto dos circuitos da experiência, é importante a experimentação dos conceitos apresentados na seção 1. Desta forma deve-se: a) Para cada um dos circuitos apresentados (contador binário, conversor para código de 7 segmentos, contador binário com saída para display de sete segmentos, contador com máquina de estados), estude cada uma das descrições VHDL e escreva uma descrição das linhas de código. Por exemplo, no contador binário crescente: “As linhas 6 a 9 apresentam a definição da entidade. São definidos três sinais de entrada (clock, reset e enable com 1 bit) e 1 sinal de saída (q com 4 bits). O tipo destes quatro sinais de entrada e saída é std_logic”. b) A seguir, digite o código VHDL de cada exemplo, crie um projeto no Quartus II e execute simulações para verificar seu funcionamento. c) Anexe as formas de onda no planejamento. 2.2. Contador bidirecional O primeiro circuito a ser desenvolvido é um contador bidirecional de 4 bits. Baseado no valor do sinal sentido, o valor da contagem deve ser crescente (sentido=0) ou decrescente (sentido=1). A saída do circuito deve ser monitorado em leds. Considere a seguinte definição de entidade: entity contador_updown is port (clock, reset, enable : in std_logic; sentido : in std_logic; saida : out std_logic_vector (3 downto 0)); end contador_updown; A contagem também é controlada pelo sinal enable (contagem muda quando enable=1). A interface do circuito é mostrada na figura 2.1. Figura 2.1 – Contador bidirecional. d) Desenvolva o código VHDL e documente-o com uma descrição do código fonte e formas de onda das simulações do seu funcionamento. e) Considere a seguinte designação de pinos: • clock : botão KEY3 • reset : chave SW2 • sentido : chave SW1 • enable : chave SW0 • saida[0..3] : leds verdes LEDG0 a LEDG3 f) Teste o circuito projetado na placa de desenvolvimento. Que sinais de depuração adicionais podem ser usados para validar o circuito? DICA: lembrem-se que os botões na placa DE2 são ativos em baixo. O projeto deve levar isto em consideração. Use a tabela de designação de pinos da placa DE2. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 8 2.3. Contador em Código Gray com saída em Display de 7 Segmentos O segundo circuito a ser projetado é um contador bidirecional em código Gray com saídas em displays de sete segmentos. Usando uma descrição estrutural, implemente o circuito em VHDL com a interface abaixo. entity contGray7seg is port (clock, reset, enable, sentido : in std_logic; saidabin : out std_logic_vector (6 downto 0); saidagray : out std_logic_vector (6 downto 0)); end contGray7seg; Projete inicialmente o bloco conversor-binario-gray para a conversão de código binário para código Gray, conforme a seguinte interface. entity conv_bin_gray is port (d : in std_logic_vector (3 downto 0); q : out std_logic_vector (3 downto 0)); end conv_bin_gray; Em seguida, complete a descrição com a conexão dos componentes segunda a estrutura apresentada na figura 2.2. Figura 2.2 – Estrutura do contador em código Gray com saídas em display de 7 segmentos. g) Desenvolva o código VHDL e documente-o com uma descrição do código fonte e formas de onda das simulações do seu funcionamento. h) Considere a seguinte designação de pinos: • clock : botão KEY3 • reset : chave SW2 • sentido : chave SW1 • enable : chave SW0 • saidagray : display HEX0 • saidabin : display HEX1 i) Teste o circuito projetado na placa de desenvolvimento. Que sinais de depuração adicionais podem ser usados para validar o circuito? PERGUNTAS: 1. Compare a forma de conexão de componentes em um diagrama esquemático (forma gráfica) e uma descrição estrutural em VHDL. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 9 2.4. Contador em Código de Petherick com Máquina de Estados O terceiro circuito a ser projetado é um contador em código de Petherick usando uma máquina de estados. A interface deste contador é definida abaixo. entity contPetherickME is port (clock, reset, enable : in std_logic; saidabin : out std_logic_vector (6 downto 0); saida : out std_logic_vector (6 downto 0)); end contPetherickME; Temos duas saídas do circuito: uma saída da contagem binária saidabin e uma saída com a contagem em código de Petherick saida. Ambas as saídas devem ser conectadas em displays de sete segmentos. Use uma descrição estrutural conforme a figura 2.3. Figura 2.3 – Estrutura do contador em código de Petherick. j) Desenvolva o código VHDL do circuito. Documente o projeto com uma descrição do código fonte e formas de onda das simulações. k) Considere a seguinte designação de pinos: • clock : botão KEY3 • reset : chave SW2 • sentido : chave SW1 • enable : chave SW0 • saida : display HEX0 • saidabin : display HEX1 l) Teste o circuito projetado na placa de desenvolvimento. Que sinais de depuração adicionais podem ser usados para validar o circuito? PERGUNTAS: 2. Compare a estratégia de projeto do contador em código de Petherick com componentes TTL e usando uma linguagem de descrição de hardware. Cite duas vantagens da linguagem VHDL. 3. Que modificações seriam necessárias no projeto para usar o recurso de funções para a conversão das saídas para os displays de sete segmentos? Mostre a descrição VHDL. 4. Mostre como este projeto poderia ser adaptado para uma contagem em outro código binário. Exemplifique. EPUSP — PCS 2355 — Laboratório Digital Contadores em VHDL (2012) 10 2.5. Modificação em Circuito Uma pequena modificação ou adaptação de um dos projetos será solicitada aos alunos. Esta modificação deverá ser implementada em bancada. A descrição e a documentação desta modificação devem ser incluídas no relatório. 3. BIBLIOGRAFIA 1. ALTERA. DE2 Development and education board user manual. 2008. Version 1.42. 2. ALTERA. Quartus II Introduction Using VHDL Designs. University Program. 2010. Disponível em: ftp://ftp.altera.com/up/pub/Altera_Material/9.1/Tutorials/VHDL/Quartus_II_Introduction.pdf 3. D´AMORE, R. VHDL - Descrição e síntese de circuitos digitais. 2ª edição, LTC, 2012. 4. MIDORIKAWA, E.T. Introdução às Linguagens de Descrição de Hardware. Apostila de PCS2304, Escola Politécnica da USP, 2007. 5. MIDORIKAWA, E.T. Contador em Código de Petherick. Apostila de Laboratório Digital, 2012. 6. RANZINI, E.; HORTA, E. L. Introdução aos Dispositivos Lógicos Programáveis. Apostila de Laboratório Digital. Escola Politécnica da USP, 2000 (revisão em 2011). 7. RUSHTON, A. VHDL for logic synthesis. 3rd edition, Wiley, 2011. 8. TOCCI, R. J.; WIDMER, N. S.; MOSS, G. L. Digital Systems: principles and applications. 11th ed., Prentice-Hall, 2011. 4. EQUIPAMENTOS NECESSÁRIOS • 1 placa de desenvolvimento FPGA DE2 da Altera com o dispositivo Altera Cyclone II EP2C35F672C6. • 1 computador PC com programa Altera Quartus II e interface USB. Histórico de Revisões E.T.M./2012 – versão inicial.