Buscar

Contadores em VHDL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

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 figura1.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. DigitalSystems: 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.

Outros materiais

Outros materiais