Buscar

Componentes, Pacotes e Configurações 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 3, do total de 23 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 6, do total de 23 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

Você também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
Você viu 9, do total de 23 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

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

LÓGICA PROGRAMÁVEL 
AULA 3 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof. Ederson Cichaczewski 
 
 
2 
CONVERSA INICIAL 
Nesta aula, abordaremos o papel do VHDL em componentes e circuitos, 
configurações, registradores, máquinas de estados, e, por fim, a descrição 
VHDL a partir de um algoritmo. 
Na linguagem VHDL é importante organizar os projetos 
hierarquicamente, por meio de componentes e pacotes, assim como 
estabelecer uma relação entre eles por meio de configurações. 
Iniciando-se por aplicações, os registradores são elementos de memória 
que são a base para máquinas de estados, circuitos síncronos ou assíncronos 
que operam por construções com comandos sequenciais. 
Descrição de hardware não é algoritmo, mas é possível estabelecer uma 
relação entre ambos que permita a conversão de um pseudocódigo em VHDL. 
TEMA 1 – COMPONENTES E PACOTES EM VHDL 
Um componente é uma entidade de projeto empregada na arquitetura de 
outra entidade. 
Lembre-se de que é possível criar um projeto hierárquico; é como 
interligar vários componentes em um diagrama esquemático. Para isso, usa-se 
a palavra reservada COMPONENT. 
A instanciação de um componente é um comando concorrente, e a 
declaração de um componente é semelhante à de uma entidade. 
Figura 1 ‒ Estrutura da declaração de um componente 
 
A declaração pode ser inserida no corpo da arquitetura ou em pacotes. 
Para instanciar/chamar um componente é necessário: 
 atribuir-lhe um rótulo (label) seguido do nome do componente; 
 definir as conexões entre os sinais do componente e os sinais da 
entidade que instanciou o componente com a palavra reservada 
PORT MAP. 
 
 
3 
Figura 2 ‒ Formas de chamada de um componente 
 
Por exemplo: a arquitetura “final” da entidade “topo” solicita dois 
componentes com rótulos “u1” e “u2”. No mapa de portas de “u1” é 
estabelecida a conexão entre os sinais “k1”, “k2” e “j1” e as portas “x”, “y” e “z” 
do componente “soma”. De modo semelhante, é estabelecida a interligação 
entre “j1”, “j2”, “js” e “jr” e as portas “a”, “b”, “s” e “o” do componente “alu”. Note 
que o sinal “j1” define a ligação entre as portas “z” e “a” por meio das 
solicitações de componentes “u1” e “u2”. 
Os nomes dos componentes declarados são idênticos aos nomes das 
entidades associadas aos componentes. O mesmo se aplica aos nomes das 
portas. Essa é a maneira mais simples de se estabelecer um elo de 
correspondência entre uma entidade e uma declaração de componente. 
Figura 3 ‒ Exemplo de elo entre componente e entidade 
 
1.1 Pacotes 
Permitem reunir declarações de constantes, tipos, sinais, subprogramas 
e componentes. Diferentes unidades de projetos (design units) podem 
compartilhar essas declarações. 
Os pacotes ficam associados a uma biblioteca, e sua estrutura é 
composta de duas partes: 
 
 
 
4 
1. declaração; 
2. corpo (opcional). 
Figura 4 ‒ Estrutura da declaração e do corpo de um pacote 
 
O pacote pode ser compilado e usado por meio da cláusula USE. Para 
isso, especifica-se a biblioteca, o nome do pacote e, se desejar, o item do 
pacote. 
Caso queira deixar todos os itens visíveis, use a palavra reservada ALL. 
Figura 5 ‒ Formas de referenciar o item de um pacote 
 
TEMA 2 – CONFIGURAÇÕES EM VHDL 
A configuração estabelece o elo entre a declaração de um componente e 
uma entidade de projeto. 
É possível especificar uma entidade com várias arquiteturas; nesse 
caso, o elo é estabelecido com a última arquitetura compilada. 
Figura 6 ‒ Elo natural entre o nome da entidade de projeto e o rótulo do 
componente 
 
 
5 
 
Pode ser necessário fazer uma alteração das associações entre 
componentes e entidades, sem recompilar as entidades. Os mecanismos para 
atender esses requisitos são: 
 especificação da configuração; 
 declaração da configuração. 
2.1 Especificação da configuração 
A configuração define o elo entre uma solicitação de componente e uma 
entidade de projeto, e está inserida na região de declaração de uma arquitetura 
que solicita os componentes. 
Figura 7 ‒ Elo definido por meio de uma especificação 
 
Figura 8 ‒ Formas de especificação da configuração 
 
A especificação da configuração do componente contém uma lista de 
rótulos seguidos do nome do componente e da indicação do elo. 
 
 
6 
A indicação do elo associa o componente a uma entidade, identificando 
sua biblioteca. Ela inclusive permite especificar a arquitetura da entidade a ser 
usada. 
Também pode-se definir mapas de portas por meio da especificação da 
configuração. 
2.2 Declaração da configuração 
Permite que a configuração seja realizada fora da arquitetura da 
entidade. 
A declaração da configuração é uma unidade de projeto (design unit). 
Figura 9 ‒ Unidades de projeto em VHDL 
 
A declaração da configuração deve ser compilada. Ela está no nível 
mais alto da hierarquia do projeto. 
A simulação é executada a partir de sua unidade de projeto. 
Pode-se alterar a configuração do projeto sem recompilar as unidades 
dependentes da configuração. 
Figura 10 ‒ Elo definido por meio da declaração da configuração 
 
 
 
 
7 
A declaração contém dois nomes: 
 o primeiro identifica a configuração; 
 o segundo identifica a entidade de projeto a que a configuração se 
aplica. 
Podem ser inseridas configurações de bloco e cláusulas USE. A 
configuração de bloco inicia-se com a palavra reservada FOR. 
Figura 11 ‒ Formas de declaração de configuração 
 
Figura 12 ‒ Formas de configuração de bloco 
 
Figura 13 ‒ Exemplos de configuração de componente 
 
TEMA 3 – REGISTRADORES EM VHDL 
O registrador é um elemento de memória que pode ser sensível a: 
 
 
8 
 nível: caso dos latches, em que a condição de memorização 
corresponde a um determinado nível lógico do sinal de controle (pino de 
enable); 
 borda: caso dos flip-flops, em que a condição de memorização 
corresponde à transição de um nível lógico para outro do sinal de clock. 
Figura 14 ‒ Operação de um latch 
 
Figura 15 ‒ Operação de um flip-flop 
 
Uma transição de sinal pode ser detectada por meio dos atributos 
EVENT ou STABLE. 
Figura 16 ‒ Exemplos de testes de ocorrência de bordas de subida e descida 
 
São operações de inicialização do registrador: 
 set: leva a saída para o nível lógico alto; 
 reset: leva a saída para nível lógico baixo. 
As operações de inicialização set e reset podem ser síncronas com o 
sinal de clock ou assíncronas. 
 
 
 
 
9 
Figura 17 ‒ Exemplo de operação de inicialização síncrona em flip-flops 
 
Figura 18 ‒ Exemplo de operação de inicialização assíncrona em flip-flops 
 
Na implementação de um registrador em VHDL, a palavra-chave é 
PROCESS. 
3.1 Registrador sensível a nível: latch em VHDL 
Leia a seguir um exemplo de descrição de um registrador de três bits 
sensível a nível com inicialização assíncrona: o sinal “en” controla o 
armazenamento da informação presente no sinal “d”; “en” no nível lógico baixo 
mantém a informação, e “en” no nível lógico alto faz com que o sinal “q” siga a 
entrada “d”. O sinal “rst” estabelece a operação de reset, e o sinal “set”, a 
operação de set. A construção do tipo “IF ELSE” verifica as condições set, 
reset e habilitação. Como ocorre com “en”, “rst” e “set”, bem como no sinal “d” ‒ 
a lista de sensibilidade do processo deve conter todos esses sinais ‒, qualquer 
alteração nos sinais de controle deve sempre ser avaliada. 
A saída é atualizada com o valor de entrada apenas quando en = 1. 
 
 
 
 
10 
Figura 19 ‒ Exemplo de uma descrição para um registrador sensível a nível 
 
3.2 Registrador sensível a borda: flip-flop em VHDL com inicialização 
síncrona 
Exemplo de um registrador com três bits sensível à borda de subida do 
terminal de controle. As operações de set e reset são síncronas. 
A descrição emprega duas construções do tipo “IF ELSE”: a primeira 
detecta a condição do sinal de controle, e a segundatesta sucessivamente as 
condições para se realizar operações de set, reset ou armazenamento. Como a 
segunda construção somente é executada na ocorrência de uma borda de 
subida do sinal de relógio, as operações de set, reset e armazenamento ficam 
condicionadas ao sinal de relógio, caracterizando o sincronismo com esse 
sinal. 
O código “ck'EVENT AND ck = ‘1’ identifica uma borda de subida. 
Figura 20 ‒ Exemplo de descrição para um registrador sensível a borda com 
inicialização síncrona 
 
 
11 
 
3.3 Registrador sensível a borda: flip-flop em VHDL com inicialização 
assíncrona 
Exemplo de um registrador, com três bits, sensível à borda de subida do 
sinal de relógio. As operações para inicialização definidas pelos sinais “set” e 
“rst” são independentes do sinal de relógio “ck”. 
A descrição emprega uma construção do tipo “IF ELSE” para testar 
sucessivamente as condições set, reset e borda de subida do sinal de relógio. 
Como os eventos nos sinais não estão mais condicionados ao sinal “ck”, eles 
devem ser inseridos na lista de sensibilidade do processo. Nesse exemplo, 
devido à característica da construção “IF ELSE”, a operação reset tem 
precedência sobre a operação set, e esta tem precedência sobre a operação 
de armazenamento. 
Apenas a atualização da saída depende do sinal de clock. 
Figura 21 ‒ Exemplo de descrição para um registrador sensível a borda com 
inicialização assíncrona 
 
 
12 
 
Síntese do código VHDL: a síntese do circuito gera um esquemático em 
nível RTL. 
Figura 22 ‒ Flip-flop com inicialização assíncrona, nível RTL 
 
TEMA 4 – MÁQUINAS DE ESTADOS EM VHDL 
A máquina de estados é um circuito sequencial que transita em uma 
sequência finita de estados. 
A transição entre estados é comandada por um sinal de controle (clock). 
O estado atual é definido por um elemento de memória; o estado futuro 
é determinado com base no estado atual e na condição das entradas. 
 
 
13 
4.1 Estilos de máquinas de estados 
A operação das máquinas de estados é descrita por um diagrama de 
transição de estados, sendo cada estado representado por um nó e pelas 
transições (de subida ou descida do clock), por arcos com setas. 
4.1.1 Máquina de Mealy 
O valor da saída depende exclusivamente do estado atual e das 
condições das entradas. 
No diagrama de estados, o valor da saída é incluído no arco. 
A seguir, veja um exemplo de operação com mudança de estado na 
borda de subida do sinal de controle (clock). 
Figura 23 ‒ Exemplo de um diagrama de blocos de uma máquina de Mealy 
 
Figura 24 ‒ Exemplo de diagrama de estados e de diagrama de tempo da 
máquina de Mealy 
 
 
 
14 
4.1.2 Máquina de Moore 
O valor da saída depende exclusivamente do estado atual. 
No diagrama de estados, o valor da saída é indicado no nó. 
A seguir, veja um exemplo de operação com mudança de estado na 
borda de subida do sinal de controle (clock). 
Figura 25 ‒ Exemplo de um diagrama de blocos de uma máquina de Moore 
 
Figura 26 ‒ Exemplo de diagrama de estados e diagrama de tempo da máquina 
de Moore 
 
4.1.3 Exemplo prático: máquina de Moore com quatro estados 
A máquina de Moore com quatro estados realiza uma contagem dada 
por: 00, 01, 11 e 10 (nessa ordem). 
Ela inclui uma entrada de inicialização assíncrona chamada “rst”. 
O valor que representa o estado atual corresponde ao valor das saídas. 
 
 
15 
Figura 27 ‒ Diagrama de transição de estados da máquina de Moore de quatro 
estados 
 
Figura 28 ‒ Diagrama de blocos da máquina de Moore de quatro estados 
 
O código VHDL, sendo um circuito sequencial, necessita do recurso 
PROCESS. 
Os estados não são necessariamente valores, então podem ser 
definidos como tipos enumerados com TYPE. 
Os sinais de inicialização assíncrona devem estar na lista de 
sensibilidade do PROCESS. 
 CASE/WHEN: define a transição de estados. 
 IF/ELSE: controla a transição de estados. 
 
 
 
 
 
 
16 
Figura 29 ‒ Código VHDL da máquina de Moore de estados finitos 
 
 O padrão de contagem não é necessariamente uma sequência. 
 Uma máquina de estado controla eventos. 
 A síntese gera um conjunto de flip-flops e também uma lógica 
combinacional. 
 As saídas de uma máquina de Moore são síncronas ao clock. É 
necessário haver um ciclo de inicialização. 
 As saídas de uma máquina de Mealy podem mudar assincronamente. 
TEMA 5 – DESCRIÇÃO A PARTIR DE UM ALGORITMO 
5.1 Conversão de pseudocódigo em VHDL 
A linguagem VHDL não funciona exatamente como uma linguagem de 
programação baseada em algoritmos. 
São necessárias considerações com relação a: 
 armazenamento de informações; 
 controle das operações; 
 tomadas de decisões; 
 unidades funcionais empregadas. 
É importante considerar o diagrama de blocos do circuito, definindo seus 
elementos e suas interligações. 
 
 
17 
5.1.1 Exemplo prático: máximo divisor comum (MDC) 
Os aspectos da descrição a partir de um algoritmo serão abordados por 
meio de um exemplo de algoritmo descrito por pseudocódigo para 
determinação do máximo divisor comum (MDC). 
Figura 30 ‒ Pseudocódigo do algoritmo do MDC 
 
Uma primeira abordagem usando um alto nível de abstração pode levar 
à implementação de uma descrição, conforme vemos a seguir: 
Figura 31 ‒ Algoritmo do MDC convertido diretamente em VHDL 
 
 
 
18 
Contudo, ao compilar-se esse código são verificados problemas de 
síntese e, portanto, uma análise das operações envolvidas é necessária para 
possibilitar a sintetização do código. 
1º passo 
Primeiro, é preciso prever quais serão os registradores “a” e “b”. 
A execução do algoritmo começa quando um nível alto é detectado na 
entrada “inicio” (linha 1 do pseudocódigo). O circuito de controle impõe um 
nível alto na saída “fim” (linha 2) e ativa os sinais de habilitação “h1” e “h2” para 
o armazenamento dos valores provenientes das entradas “a_en” e “b_en” 
(linhas 3 e 4). Assim, dois registradores, denominados “a” e “b”, devem ser 
previstos. 
Figura 32 ‒ Operações das linhas 1, 2, 3 e 4 do pseudocódigo 
 
2º passo 
Depois, deve-se tomar uma decisão com um comparador. Com isso, é 
possível verificar a tomada de decisão com base nos valores atuais dos 
registradores “a” e “b”. Para tanto, um comparador é necessário. 
Figura 33 ‒ Operações da linha 5 do pseudocódigo 
 
 
19 
 
3º Passo 
Aqui, é preciso comparar e subtrair entre os registradores “a” e “b”. Se o 
valor do registrador “a” for maior do que o valor do registrador “b”, deve-se 
executar uma subtração entre esses valores. Desse modo, mais um circuito de 
comparação e um subtrator devem ser adicionados ao diagrama. Nessa linha é 
indicado, ainda, que o valor resultante da subtração entre “a” e “b” deve ser 
armazenado no registrador “a”. Assim, uma unidade de seleção dever ser 
inserida no diagrama de blocos, de modo a permitir que a entrada do 
registrador “a” receba o valor de “a_en” ou o valor de sua própria saída. Essa 
operação deve ocorrer em uma transição do sinal de relógio. 
Figura 34 ‒ Operações da linha 6 do pseudocódigo 
 
 
 
20 
4o e último passo 
As operações executadas na linha 7 do pseudocódigo levam a 
considerações semelhantes àquelas levantadas na análise da linha 6. Duas 
novas unidades devem ser previstas: um subtrator e um circuito de seleção. 
Nesse caso, a saída do novo subtrator, que contém o valor de “b” menos “a”, 
deve ser interligada com a entrada do registrador “b”. 
O circuito de controle repetirá a execução do conjunto de operações da 
linha 6 ou do conjunto da linha 7 do pseudocódigo enquanto a condição de 
teste da linha 5 for verdadeira. Uma vez atingida a condição, as linhas 9 e 10 
deverão ser executadas: a saída “fim” deverá ser ativada e mais um registrador 
será necessário para o armazenamento do valor final presente na saída do 
registrador “a”. 
Figura 35 ‒ Diagrama final identificando os blocos da unidade de controle e da 
unidadeoperativa 
 
Um estudo com esse nível de detalhamento nem sempre é necessário, 
mas uma avaliação dos principais recursos da unidade operativa facilita a 
análise de possíveis opções de implementação. Por exemplo, um único 
subtrator com mais alguns circuitos de seleção poderiam realizar as operações 
das linhas 6 e 7 do pseudocódigo. A vantagem disso é a redução de recursos, 
considerando que um circuito de seleção é menos complexo que um subtrator; 
a desvantagem é a redução na frequência de operação do circuito, devido ao 
 
 
21 
maior tempo de propagação na unidade operativa ocasionado pela inclusão de 
circuitos de seleção. 
5.1.2 Fluxograma 
No fluxograma, converte-se o pseudocódigo em forma gráfica para 
facilitar a descrição. 
 Tem-se uma máquina com quatro estados. 
 Inicialização assíncrona. 
 Mudanças de estado na borda de subida. 
Figura 36 ‒ Fluxograma do algoritmo de MDC 
 
5.1.3 Código VHDL 
O código completo da descrição da máquina do máximo divisor comum 
(MDC) é apresentado a seguir. 
Figura 37 ‒ Código VHDL final 
 
 
22 
 
Figura 38 ‒ Diagrama de tempo da simulação do circuito MDC 
 
FINALIZANDO 
Nesta aula, tivemos contato com o VHDL e seu funcionamento. 
A compreensão do conteúdo desta aula é fundamental para a 
continuidade do conteúdo da disciplina. 
 
 
23 
REFERÊNCIAS 
D’AMORE, R. VHDL: descrição e síntese de circuitos digitais. 2. ed. Rio de 
Janeiro: LTC, 2012. Capítulo 6, 7, 9, 14 e 16.

Outros materiais