Você está na página 1de 21

LÓGICA PROGRAMÁVEL

AULA 2

Prof. Ederson Cichaczewski


CONVERSA INICIAL

Nesta aula, iremos conhecer os aspectos elementares de VHDL


(VHSIC1 Hardware Description Language): sua representação de dados e seus
operadores, comandos concorrentes, estruturas sequenciais e, por fim, suas
funções.
A linguagem de descrição de hardware VHDL, sendo universal,
possibilita a troca de informações de circuito entre diferentes fabricantes e
ferramentas de projeto.

TEMA 1 – CONHECENDO OS ASPECTOS ELEMENTARES DE VHDL

O hardware pode ser descrito em sua arquitetura segundo dois níveis de


abstração:

 estrutural: lista de ligações;


 comportamental: modo de operação.

O VHDL permite descrever circuitos em nível RTL (Register-Transfer


Level), que consiste em descrever o fluxo dos sinais entre registradores e
portas lógicas por meio de uma sintaxe familiar a uma linguagem de
programação.

Figura 1 ‒ Exemplo de descrição estrutural de um contador de 2 bits

1 Very High Speed Integrated Circuit.


2
Figura 2 ‒ Exemplo de descrição comportamental de um contador de 2 bits

Figura 3 ‒ Exemplo de descrição em nível RTL

1.1 Bibliotecas (libraries)

As bibliotecas fornecem um meio para a definição de recursos de uso


comum. Elas podem ser:
 library IEEE;
 library std;
 library work;

1.1.1 Package

Package é uma subdivisão de uma biblioteca, especificado por USE. Por


exemplo: o pacote que define tipos de dados, funções etc. é o IEEE 1164. No
código o seu uso é dado por: USE ieee.std_logic_1164.all

3
1.2 Execução concorrente (em paralelo)

Em princípio, todos as linhas de código são executadas


concorrentemente. Isso quer dizer que a ordem de apresentação dos
comandos é irrelevante na operação do circuito. Por exemplo: os códigos das
linhas 8 e 9 podem ser trocados de posição, e não haverá diferença na
operação (ver Figura 4).
É possível delimitar regiões de código sequencial nas quais será seguida
a ordem de apresentação dos comandos.

Figura 4 ‒ Descrição VHDL

Figura 5 ‒ Circuito equivalente da descrição VHDL

A sintaxe não diferencia letras minúsculas de maiúsculas. Como padrão,


usa-se maiúsculas em palavras-chave da linguagem.
As letras minúsculas devem ser usadas para variáveis criadas pelo
desenvolvedor.
Comentários se iniciam após dois hifens “--” e terminam ao final da linha.

4
1.3 Entidade de projeto

A entidade de projeto (design entity) é composta de duas partes:

 Declaração da entidade: interfaces de I/O.


 Arquitetura: operação.

Figura 6 ‒ Exemplo das partes de uma entidade

Figura 7 ‒ Exemplo de declaração de uma entidade

Observações:
 após "entidade" vem o nome que a identifica, seguido por IS;
 GENERIC permite declarar constantes;
 PORT define o modo e o tipo das portas de entrada e saída;
 END seguida do nome da entidade encerra a construção.
O modos das portas são os seguintes:
 IN: apenas entrada;
 OUT: apenas saída;
 INOUT: entrada e saída;
 BUFFER: permite uma conexão interna à entidade.

5
Figura 8 ‒ Exemplo de representação das portas

1.4 Arquitetura

Figura 9 ‒ Exemplo de declaração de uma arquitetura

Observações:
 após ARCHITECTURE vem o nome que a identifica; depois, OF e o
nome da entidade, seguido por IS;
 logo a seguir podem ser feitas declarações;
 entre BEGIN e END ficam os comandos concorrentes que descrevem a
entidade.

TEMA 2 – REPRESENTAÇÃO DE DADOS E OPERADORES

2.1 Classes de objetos

Os elementos que contêm valor armazenado são quatro:

 CONSTANT (constante): valor estático;

6
 VARIABLE (variável): valor que pode ser alterado, usado apenas em
código sequencial;
 SIGNAL (sinal): valor que pode ser alterado, usado em códigos
concorrente e sequencial;
 FILE (arquivo): associados à criação de arquivos.

Figura 10 ‒ Exemplos de declaração de objetos

2.2 Tipos de dados

Os objetos devem ser declarados segundo um tipo definido. Os


principais tipos são apresentados a seguir:

Figura 11 ‒ Hierarquia de tipos de dados em VHDL

2.2.1 Dados escalares

 BIT: níveis lógicos 0 ou 1.


 BOOLEAN: valores TRUE ou FALSE.
 CHARACTER: qualquer caractere ASCII.
 INTEGER: valores inteiros positivos ou negativos. Subtipos: NATURAL e
POSITIVE.
 REAL: números em ponto flutuante.
 TIME: tipo físico com unidade 10-15s.

7
Figura 12 ‒ Tabela com exemplos dos tipos escalares

2.2.2 Dados compostos

 BIT_VECTOR: contém elementos do tipo BIT.


 STRING: contém elementos do tipo CHARACTER.

Tabela 1 ‒ Tabela com exemplos de tipos compostos

O número de elementos é especificado com a palavra DOWNTO. Por


exemplo: SIGNAL a, b: BIT_VECTOR(4 DOWNTO 0).

Figura 13 ‒ Exemplos de declarações de vetores com definição de limites

2.2.3 Tipos do padrão IEEE 1164

Podem assumir nove valores: ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘–’. São
eles:
8
 STD_LOGIC.
 STD_LOGIC_VECTOR.

Tabela 2 ‒ Valores do tipo std_logic

2.2.4 Tipos do padrão IEEE 1076.3

Valores com sinal (SIGNED) e sem sinal (UNSIGEND) do tipo BIT


(pacote numeric_bit) ou STD_LOGIC (pacote numeric_std).
Em um vetor que tem um número com sinal negativo, ele é representado
em complemento de 2.

Figura 14 ‒ Exemplos de valores para tipos com sinal e sem sinal

2.3 Operadores

2.3.1 Atribuição

 ":=" é usado para atribuir valor a um objeto das classes VARIABLE ou


CONSTANT;
 "<=" é usado para atribuir valor a um objeto da classe SIGNAL e para
portas (PORT);

9
 "=>" é usado para atribuir valor a um elemento de um vetor ou aos
elementos não especificados (OTHERS).

2.3.2 Operadores lógicos

Realizam operações lógicas. Os tipos de dados envolvidos podem ser: BIT,


BIT_VECTOR, STD_LOGIC e STD_LOGIC_VECTOR.

Tabela 3 ‒ Operadores lógicos

2.3.3 Operadores aritméticos

Realizam operações aritméticas. Os tipos de dados envolvidos podem


ser: INTEGER, SIGNED, UNSIGNED e REAL.

Tabela 4 ‒ Operadores aritméticos

2.3.4 Operadores relacionais

Realizam comparações em operações de igualdade, desigualdade e


ordenação. Qualquer tipo de dado é aceito.
10
Tabela 5 ‒ Operadores relacionais

2.3.5 Operadores de deslocamento de bit

Há deslocamento lógico para esquerda ou para a direita. Há


deslocamento aritmético, também, para esquerda ou para a direita. A rotação
lógica é feita para a esquerda ou para a direita. O operando da esquerda deve
ser do tipo BIT_VECTOR, e o operando da direita, do tipo INTEGER.

Tabela 6 ‒ Operadores de deslocamento de bit

Figura 15 ‒ Operações de deslocamento lógico e aritmético

Figura 16 ‒ Operações de rotação

11
2.4 Atributos

São informações adicionais associadas a sinais, vetores e tipos. São


atributos de sinais:

 ACTIVE: retorna se o sinal está ativo.


 QUIET[t]: retorna se o sinal está inativo em um instante de tempo
especificado.
 EVENT: retorna se o sinal teve uma mudança de valor, ou se ocorreu
um evento.
 STABLE: retorna se não ocorreu nenhum evento.

Figura 17 ‒ Exemplo de condições de sinais

O atributo EVENT é utilizado, por exemplo, na implementação de flip-


flops.

TEMA 3 – COMANDOS CONCORRENTES EM VHDL

3.1 Código concorrente versus código sequencial

Podemos fazer uma relação de comparativos entre circuitos


combinacionais e sequenciais.
Os circuitos combinacionais não possuem memória, e suas saídas
dependem apenas do estado corrente das entradas. Portanto, só podem ser
descritos com código concorrente.
Em circuitos sequenciais, a saída depende de uma entrada anterior, pois
há uma realimentação da saída para a sua entrada. Portanto, só podem ser
descritos com código sequencial.
Os comandos concorrentes são: WHEN, GENERATE e BLOCK.

12
Ao elaborarmos um código concorrente é necessário cuidado para não
criarmos iterações que gerem loop, causando instabilidade.
Em uma região de código concorrente, a ordem das linhas não deve
interferir no resultado; o que se busca é uma condição estável do circuito.
Em certos casos é mais fácil implementar um circuito combinacional
utilizando código sequencial, mesmo que o circuito lógico não tenha elementos
sequenciais.

3.1.1 WHEN

Permite duas construções:

 WHEN/ELSE: permite a transferência condicional de um sinal, com


prioridade na ordem das condições;
 WITH/SELECT/WHEN: transfere um valor a um sinal de destino
segundo uma relação de opções, sem prioridade.

Figura 18 ‒ Exemplo de construção WHEN/ELSE

A primeira condição que retorna o valor verdadeiro define o valor que é


transferido para o sinal de destino.

Figura 19 ‒ Exemplo de construção WITH/SELECT/WHEN

Todas as condições de seleção devem ser consideradas e devem ser


mutuamente exclusivas.

3.1.2 GENERATE

Permite repetir comandos concorrentes segundo duas construções:

 FOR/GENERATE: contém um identificador local e os limites da geração;

13
 IF/GENERATE: faz uma réplica dos comandos contidos, caso a
condição seja satisfeita.

Aplica-se a circuitos como somadores, multiplicadores e unidades


lógicas aritméticas.

Figura 20 ‒ Exemplos de construção FOR/GENERATE

Figura 21 ‒ Exemplo de construção IF/GENERATE

A condição é verificada por uma expressão estática.

3.1.3 BLOCK

Permite dividir o código em regiões para facilitar o entendimento da


descrição.
Sinais podem ser declarados com visibilidade restrita ao interior do
bloco.

Figura 22 ‒ Exemplo de construção do bloco

14
3.1.3.1 BLOCK com sinal de guarda

Permite desabilitar sinais no interior do bloco segundo condições


definidas por expressões de guarda.

Figura 23 ‒ Exemplo de construção de bloco com sinal de guarda

TEMA 4 – ESTRUTURAS SEQUENCIAIS EM VHDL

4.1 Comandos sequenciais

Os comandos sequenciais ficam em regiões específicas de código,


como processos ou subprogramas, como por exemplo:

 PROCESS;
 FUNCTION;
 PROCEDURE.

Os comandos sequenciais são:

 IF;
 CASE;
 WAIT;
 LOOP.

4.1.1 PROCESS

Em sua construção, possui uma lista de sensibilidade na qual são


definidos os sinais que disparam a execução do processo. É equivalente à
interrupção em um microcontrolador.
Em determinadas aplicações, pode ser usado em conjunto com o
atributo EVENT para identificar o tipo de mudança ocorrida no sinal.
A atualização do valor de uma variável é imediata, mas a de um sinal
pode ocorrer após o término do processo.

15
4.1.2 Construção IF/ELSE

Permite execução condicional em função de condições.


O comando IF pode ser seguido de cláusulas ELSIF, tendo a última que
ser ELSE (ambas opcionais).

Figura 24 ‒ Exemplo de construção IF/ELSE

4.1.3 Construção CASE WHEN

Permite uma execução condicional em função de uma expressão. As


condições devem ser mutuamente exclusivas.
Pode-se agrupar condições com o operador “|”, que equivale a “OU”.

Figura 25 ‒ Exemplo de construção CASE WHEN

4.1.4 Comando WAIT

Suspende a execução de um processo ou procedimento. Suas cláusulas


são as seguintes:

 ON: suspende o processo até a alteração de um dos sinais mudar de


valor.
 UNTIL: suspende o processo enquanto a expressão booleana não for
satisfeita.
 FOR: suspende o processo por um determinado tempo.

16
Figura 26 ‒ Exemplos de uso do comando WAIT.

4.1.5 Comando LOOP

Permite repetir a execução de comandos sequenciais. Esquemas FOR e


WHILE.

4.1.6 FOR/LOOP

Contém um identificador local e os limites de iteração.

Figura 27 ‒ Exemplos de construção FOR/LOOP

4.1.7 WHILE/LOOP

Um conjunto de comandos são executados se uma condição for


verdadeira.

Figura 28 ‒ Exemplo de construção WHILE/LOOP

Observações:

 EXIT: comando usado para sair do loop;


 NEXT: comando usado para pular passos do loop, para ir ao final do
loop.

17
TEMA 5 – FUNÇÕES E PROCEDIMENTOS EM VHDL

5.1 Subprogramas

É o conjunto de comandos sequenciais usados frequentemente.


Recebem parâmetros e retornam valores. Podem ser chamados em regiões de
código concorrente ou sequencial.
Objetos declarados localmente perdem o seu valor ao sair do
subprograma, e ele não permite declarar sinais.

5.1.1 FUNCTION (função)

É chamada por uma expressão e retorna um único valor (comando


RETURN).
É muito similar ao processo (PROCESS); os mesmos comandos (IF,
CASE, LOOP) podem ser utilizados aqui.
Ela possui duas partes:

 corpo;
 chamada.

Figura 29 ‒ Exemplo de construção de uma função

Figura 30 ‒ Exemplo prático de uma função

18
5.1.2 PROCEDURE (procedimento)

É chamado por meio de um comando, e permite retornar mais de um


valor. Aqui, o comando RETURN não é obrigatório.
Ele possui duas partes:
 corpo;
 chamada.

Figura 31 ‒ Exemplo de construção de um procedimento

Figura 32 ‒ Exemplo prático de um procedimento

19
FINALIZANDO

Nesta aula, vimos os vários aspectos de VHDL. A compreensão do


conteúdo desta aula é fundamental para que possamos dar continuidade ao
conteúdo da disciplina.

20
REFERÊNCIAS

D’AMORE, R. VHDL: descrição e síntese de circuitos digitais. 2. ed. Rio de


Janeiro: LTC, 2012, capítulos 2, 3, 4, 5 e 8.

21

Você também pode gostar