Você está na página 1de 84

Departamento de Engenharia Eltrica e de

Computao

Apostila de Introduo a VHDL

Profa. Luiza Maria Romeiro Cod

1. Introduo:

1.1 O QUE HDL?

Linguagem de Descrio de Hardware (HDL-Hardware


Desccriptive Language) descreve, atravs de um arquivo de texto, o
que um sistema digital faz e como. HDL consiste em um tipo de
programao de alto nvel que permite descrever todas as
caractersticas importantes de um sistema lgico com qualquer
complexidade, descrevendo o comportamento do circuito digital em
diversos nveis de abstrao (Ex: comportamental, transferncia de
registros e portas lgicas). Esta descrio um modelo do sistema
hardware, que ser executado atravs da utilizao de uma
ferramenta (software) EDA (Electronic Desigm Automation) em um
software chamado simulador da seguinte maneira: o projetista cria um
arquivo de texto, seguindo certo conjunto de regras, conhecido como
sintaxe da linguagem, e usa um compilador para criar dados de
programao do dispositivo lgico programvel(ou PLD).Um sistema
descrito em linguagem de hardware pode ser implementado em um
dispositivo programvel permitindo assim o uso em campo do seu
sistema, tendo a grande vantagem da alterao do cdigo a qualquer
momento.

1
Prof Luiza Maria Romeiro Cod
As HDLs tm uma grande semelhana s linguagens de
programao, mas so especificamente orientadas descrio das
estruturas e do comportamento do hardware. Uma grande vantagem
das HDLs em relao entrada esquemtica que elas podem
representar diretamente equaes booleanas, tabelas verdade e
operaes complexas (p.ex. operaes aritmticas).
A HDL possui as seguintes caractersticas:

Possui construo de linguagem para escrever cdigos


sucintos de descrio de lgica complexa.
Suporta bibliotecas de projeto e criaes de componentes re-
utilizveis.
Projeto Independente do Dispositivo, ou seja, um projeto pode
ser criado sem antes ter que se escolher o dispositivo.
Possibilita a metodologia de projeto top-down, essencial para
projetos de circuitos complexos, em substituio a antiga
metodologia bottom-up.

Existem dezenas de linguagens de HDLs: VERILOG, Handel-C,


SDL, ISP, ABEL, etc. As mais populares e padronizadas pelo IEEE
(Institute of Electrical and Electronic Engineers) so a Verilog HDL e
VHDL. Cada uma das linguagens HDL tm seu prprio estilo, uma
estrutura de hardware pode ser modelada igualmente por ambas, a
escolha de uma delas pode ser feita de acordo com preferncia
pessoal, porm a VHDL tm se mostrado mais aceita entre os
projetistas.

1.2 O QUE SIGNIFICA VHDL?

Very High Speed Integrated Circuit(circuitos integrados de altssima


velocidade)
Hardware
Description
Language

VHDL uma Linguagem Descrio de Hardware especfica, foi


desenvolvida pelo Depto. De Defesa dos Estados Unidos por volta
1980. uma linguagem usada para facilitar o projeto (concepo) de
circuitos digitais programveis. Apresenta uma descrio textual, um

2
Prof Luiza Maria Romeiro Cod
algoritmo, para desenvolver o circuito, sem necessidade de especificar
explicitamente as ligaes entre componentes. VHDL utilizada para
as tarefas de documentao, descrio, sntese, simulao, teste e
verificao formal. padronizada pelo IEEE (Institute of Electrical and
Electronic Engineers).
Dispositivos de Hardware Digital operam em paralelo, portanto
uma linguagem de programao convencional no pode precisamente
descrever ou modelar a operao de Hardware digital porque so
baseados na execuo seqencial das instrues. Neste caso, VHDL
apropriado, pois seu processo opera em paralelo. Lembrando
tambm que em VHDL, as variveis mudam sem atraso e os sinais
mudam com um pequeno atraso.

1.3 BREVE HISTRICO:

As primeiras linguagens de descrio de hardware foram


desenvolvidas no final dos anos 60, como alternativa s linguagens de
programao para descrever e simular dispositivos hardware. Durante
dez anos, inmeras linguagens foram desenvolvidas com sintaxe e
semnticas incompatveis, permitindo descries a diferentes nveis de
modelizao.
No final dos anos 70, o Departamento de Defesa dos Estados
Unidos definiu um programa chamado VHSIC (Very High Speed
Integrated Circuit) que visava a descrio tcnica e projeto de uma
nova linha de circuitos integrados. Com o avano acelerado dos
dispositivos eletrnicos, entretanto este programa apresentou-se
ineficiente, principalmente na representao de grandes e complexos
projetos.
Em 1981, aprimorando-se as idias do VHSIC, foi proposta uma
linguagem de descrio de hardware mais genrica e flexvel. Esta
linguagem chamada VHDL (VHSIC Hardware Description Language)
foi bem aceita pela comunidade de desenvolvedores de hardware e
em 1987 se tornou um padro pela organizao internacional IEEE,
Padro IEEE: IEEE Std 1076-1987.

Em 1992 foram propostas vrias alteraes para a norma, 1993


o IEEE publicou uma verso revisada: IEEE Std 1076-1993 (VHDL-

3
Prof Luiza Maria Romeiro Cod
93), mais flexvel e com novos recursos. A qual at hoje a mais
amplamente utilizada.

Atualmente o VHDL padro obrigatrio nos meios industrial e


acadmico, para: Documentar, Especificar, Simular, e Sintetizar
circuitos digitais.
1.4 VANTAGEM DO PROJETO EM VHDL E RELAO AO
ESQUEMTICO:

O uso de uma linguagem formal de descrio de hardware como


o VHDL, ao invs da descrio por diagramas esquemticos,
apresenta as seguintes vantagens:

Projeto independente da tecnologia;


Pode-se utilizar a descrio do projeto em vrios tipos de
plataforma, de um simulador para outro.
Pode-se utilizar um projeto em VHDL em diferentes projetos.
Permite, atravs de simulao, verificar o comportamento do
sistema digital;
Facilidade na atualizao dos projetos;
Reduz tempo de projeto e custo;
O objetivo do projeto fica mais claro do que na representao por
esquemticos;
O volume de documentao diminui, j que um cdigo bem
comentado em VHDL substitui com vantagens o esquemtico e
a descrio funcional do sistema;

1.5 DESVANTAGEM DO PROJETO EM VHDL E RELAO AO


ESQUEMTICO:

O hardware gerado pela descrio VHDL no otimizado.

4
Prof Luiza Maria Romeiro Cod
1.6 CARACTERSTICAS DO VHDL:

Suporta projetos com mltiplos nveis de hierarquias. Portanto, a


descrio geral do circuito pode consistir na interligao de
outras descries menores.

Favorece projeto top-down, onde projetos complexos partem


de um nvel de especificao mais elevado para um mais baixo.

Permite, atravs de simulao, verificar o comportamento do


sistema digital;

Permite descrever hardware em diversos nveis de abstrao,


por exemplo:
Algortmico ou comportamental;
Transferncia entre registradores (RTL);
Nvel de portas lgicas(Gate Level);

Pode mesclar diferentes nveis de abstrao em um mesmo


cdigo.

Comandos executados Concorrentemente (com exceo de regies


especficas no cdigo), assim como os elementos de um sistema
digital executam tarefas simultaneamente:
Ordem dos comandos irrelevante;
Mudana de valor em um sinal acarreta a execuo de
todos os comandos envolvidos;
Ex: Uma alterao no valor de b, mostrado na Figura 1.1, leva
execuo de todos os comandos sensveis ele, comandos
das linhas 8 e 9.

Figura 1.1 Concorrncia em uma descrio.

5
Prof Luiza Maria Romeiro Cod
Possibilita delimitar regies de cdigo seqencial (subprogramas
e processos) onde a execuo dos comandos segue a ordem de
sua apresentao no cdigo, como mostra a Figura 1.2. Dentro
de cada regio os comandos so executados concorrentemente.

Figura 1.2 Regies de cdigo contendo comandos seqenciais.

Possibilita a definio de Biblioteca e Pacote (Library e


Package, respectivamente).

Pacotes(Package,): armazenam subprogramas,


constantes ou novos tipos definidos, evitando a repetio
de uma definio em todas as descries.
Bibliotecas (Library): armazenam informaes
compiladas, sendo a biblioteca corrente denominada
Work.

1.7 FERRAMENTAS:

ghdl (Linux):
Front-end do gcc para VHDL
Altera Quartus II (Windows)
Sntese para FPGA da Altera
Xilinx ISE (Windows)
Sntese para FPGA da Xilinx
Modelsim (Windows/Linux)
Simulador
Mentor Leonardo ou Precision (Windows/Linux)
Sntese para diversos fabricantes

6
Prof Luiza Maria Romeiro Cod
2. Ciclo do Projeto em VHDL:
O projeto de um sistema digital auxiliado por ferramentas
computadorizadas segue normalmente as 3 etapas mostradas na
Figura 2.1 e

Figura 2.1 Etapas de projeto em VHDL.

Especificao: determinar requisitos e funcionalidade do


projeto.

Codificao: com base nas especificaes, descrever em VHDL


todo o projeto, segundo padres de sintaxe.

Ferramenta: submeter a descrio em VHDL um software


para verificar a correspondncia entre especificao e cdigo e
sintetizar o circuito. Essa etapa pode ser dividida em duas sub-
etapas como mostra a Figura 2.2, a etapa de elaborao da
descrio VHDL e etapa de sntese da descrio VHDL.

7
Prof Luiza Maria Romeiro Cod
Figura 2.1 Etapas da Ferramenta VHDL.

A etapa de elaborao da descrio VHDL ilustrada na Figura


2.3. Como a linguagem VHDL possibilita descrever o mesmo circuito
de diversas maneiras, ou seja, com diferentes nveis de abstrao, o
cdigo gerado pode no poder ser sintetizado. Portanto, so
necessrios vrios processos iterativos de simulaes at ser atingida
uma descrio que coincida com as especificaes do projeto e que
tambm possa ser sintetizada.

Figura 2.3 Etapa de elaborao da descrio VHDL.

Figura 2.2

A etapas da elaborao da descrio VHDL esto explicadas a


seguir:
]
Compilao: transforma o arquivo texto (descrio VHDL) em
informaes sobre o circuito.

8
Prof Luiza Maria Romeiro Cod
Simulao do Cdigo-Fonte: simular o cdigo em ferramenta
confivel a fim de verificar preliminarmente cumprimento da
especificao;

Uma vez completada a etapa de elaborao da descrio VHDL


inicia-se a etapa de Sntese que pode ser vista na Figura 2.4, a qual
consiste nos passos:

Gerao de circuito nvel RTL(Register Transfer Level):


circuito esse que emprega primitivas disponveis na
ferramenta (comparadores, somadores, registradores e portas
lgicas). Esse circuito gerado aps a verificao de erro de
sintaxe e consiste em uma interligao das estruturas
necessrias para obter o circuito gerado a partir da descrio.
Nessa etapa o circuito gerado ainda no est associado a
nenhuma tecnologia de fabricao.

Gerao de circuito especfico para a tecnologia


escolhida: dessa etapa obtm-se um arquivo contendo uma
rede de ligaes entre os elementos disponveis na tecnologia
empregada.

Figura 2.4 Sntese da descrio VHDL.

A Figura 2.5 ilustra um processo de sntese partindo da


descrio VHDL, a qual executa a soma de valores entre zero e
sete. A ferramenta gera o circuito RTL que sugere utilizar um

9
Prof Luiza Maria Romeiro Cod
somador com trs bits e na etapa seguinte elabora a primitiva RTL
utilizando os elementos disponveis na tecnologia escolhida.

Figura 2.5 Passos executados na ferramenta de sntese


VHDL.

A partir da rede de ligaes obtida da etapa anterior, a


ferramenta define o posicionamento e as interligaes dos
componentes no dispositivo, antes da construo, ou
implementao no dispositivo. Essa etapa ilustrada na Figura 2.6.

Figura 2.6 Etapa Final do projeto

Implementao: configurao das lgicas programveis ou


de fabricao de ASICs

10
Prof Luiza Maria Romeiro Cod
A figura 2.7 esquematiza todo o processo, desde a especificao
at a implementao do circuito.

Figura 2.7 Etapas de um projeto VHDL.

11
Prof Luiza Maria Romeiro Cod
3. Conceitos Bsicos da Linguagem
VHDL:
Devido sua potencialidade, a linguagem VHDL complexa, e
muitas vezes de difcil entendimento, dada as inmeras opes para
modelar o comportamento de um circuito. Entretanto, o entendimento
de um pequeno nmero de comandos, suficiente para o modelamento
de estruturas medianamente complexas, pode ser rapidamente
atingido. A necessidade de projetos mais complexos encaminha
procura por novos comandos levando a uma maior compreenso das
opes da linguagem.

Considerando o bloco de funo lgica da Figura 3.1, ele


composto de portas de entradas as quais so as variveis lgicas I0,
I1 e I2 e de duas portas de sada para a funo f(I0, I1, I2) que so S1
e S2. Uma Linguagem de Descrio de Hardware, como a VHDL,
possibilita que a operao lgica que descreve internamente o bloco
por exemplo, da Figura 3.1, seja descrita usando enunciados bem
definidos tal como uma linguagem de programao de alto nvel para
computadores. Para utilizar a linguagem VHDL, inicialmente faz-se a
descrio da unidade lgica usando a sintaxe e formato especficos da
linguagem. Essas informaes so as entradas de um arquivo texto o
qual ser utilizado como entrada de um compilador VHDL. O arquivo
de sada ento utilizado na etapa de simulao grfica, para
verificao de resultados. Estando o projeto funcionando como
esperado, s programar o chip com o projeto.

A estrutura de um programa em VHDL baseia-se em 4 blocos:

12
Prof Luiza Maria Romeiro Cod
PACKAGE ou LIBRARY: conjunto de sub-programas que
descrevem, elementos e componentes j programados para serem
reutilizados.

ENTITY (Entidade): define as portas de entradas e sadas dos


circuitos na descrio.

ARCHITECTURE (Arquitetura): implementaes do projeto;


descreve as relaes entre as portas.

CONFIGURATION (Configurao): define as arquiteturas que


sero utilizadas.

A estrutura de uma descrio VHDL com os seus blocos definidos


mostrado a seguir:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all; PACKAGE (BIBLIOTECAS)
USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY exemplo IS
PORT ( ENTITY (PINOS DE I/O)
<descrio dos pinos de I/O>
);
END exemplo;

ARCHITECTURE teste OF exemplo IS


BEGIN ARCHITECTURE
........... (ARQUITETURA)
END teste;

A descrio em VHDL de qualquer mdulo lgico representada


pela Entidade de Projeto, Figura 3.2 a qual deve ser composta de ao
menos duas das estruturas, que consistem na declarao da entidade
(entity) e na arquitetura (architecture). Para o mdulo da
Figura 3.1

13
Prof Luiza Maria Romeiro Cod
ENTITY: No caso da entidade de Projeto da Figura 3.1 seria:
:I0, I1, I2, S0 e S1

ARCHITECTURE: No caso da entidade de Projeto da Figura


3.1 seria o circuito interno ao bloco referente ao mdulo.

Figura 3.1 Mdulo Lgico Genrico.

Figura 3.2 Entidade de projeto da descrio VHDL

3.1 DECLARAO DE PACKAGE ou LIBRARY:

PACKAGE ou LIBRARY so conjuntos de declaraes usadas


para um determinado fim. Pode ser um conjunto de sub-programas
(contendo bibliotecas ou funes) que operem com um tipo de dado
assim como pode ser um conjunto de declaraes necessrias para
modelar um determinado projeto.
Pacotes mais utilizados esto citados no Quadro 3.1

14
Prof Luiza Maria Romeiro Cod
Quadro 3.1
Biblioteca Pacote TIPOS DE DADOS DESCRIO
IEEE STD_LOGIC_1164 STD_LOGIC e Define o padro para
STD_LOGIC_VECTOR descrever a interconexo
entre tipos de dados usados
na linguagem VHDL
IEEE STD_LOGIC_ARITH Especifica tipos de Funes de converso,
dados sinalizados e operaes aritmticas e
no sinalizados comparaes para uso de
dados sinalizados e no
sinalizados
IEEE STD_LOGIC_UNSIGNED STD_LOGIC_VECTOR Define funes que
permitem usar tipos de
dados
STD_LOGIC_VECTOR,
como se fossem tipo de
dado no sinalizado
IEEE STD_LOGIC_SIGNED STD_LOGIC_VECTOR Define funes que
permitem usar tipos de
dados
STD_LOGIC_VECTOR,
como se fossem tipo de
dado sinalizado
IEEE NUMERIC_STD Define operaes
aritmticas seguindo o
padro IEEE. Substitui os
pacotes usados juntos
STD_LOGIC_ARITH,
STD_LOGIC_UNSIGNED e
STD_LOGIC_SIGNED
STD STANDARD BIT(0 ou 1)
BIT_VECTOR( 3
Downto 0);
BIT_VECTOR( 0 to 3);
BOOLEAN(falso ou
verdadeiro);
INTEIRO(positivo ou
negativo)

STD TEXTIO Define os arquivos de


operaes.
WORK <definido pelo usurio> Biblioteca corrente de
trabalho

OBS: As bibliotecas STD e WORK no necessitam ser referenciadas


no projeto VHDL, pois so assumidas automaticamente pela
linguagem.
A declarao do uso de pacotes e bibliotecas mostrada nos Quadros
3.2 a e b

15
Prof Luiza Maria Romeiro Cod
Quadro 3.2a
LIBRARY < nome_da biblioteca>
Quadro 3.2b
LIBRARY < nome_da biblioteca>
USE < nome_do_pacote_biblioteca> .ALL

No Quadro 3.2b o uso de .all implica que todos os elementos da


biblioteca podem ser usados.

OBS: Sempre que for utilizar alguma biblioteca sempre usar


.ALL

3.2 DECLARAO DA ENTIDADE:

Todo componente VHDL tem que ser definido como uma


entidade (entity), o que nada mais do que uma representao formal
de uma simples porta lgica at um sistema lgico completo. Na
declarao de uma entidade, descreve-se o conjunto de entradas e
sadas que constituem o projeto, equivalente ao smbolo de um
bloco em captura esquemtica, como est esquematizado na Figura
3.3.

Figura 3.3 Exemplo de entidade de Projeto do bloco Modulo .


Para o mdulo lgico da Figura 3.1, a declarao da entidade
que vai declarar que este mdulo contm I0, I1 e I3 como entradas, e
s1 e s2 como sada. Uma declarao genrica para o mdulo da
Figura 3.1 mostrada no Quadro 3.3.

Quadro 3.3
ENTITY modulo IS
PORT ( I0, I1,I2 : modo_1 tipo_a; --entradas
S0, S1 : modo_2 tipo_b ); -- sadas
END modulo;

16
Prof Luiza Maria Romeiro Cod
A declarao de uma entidade deve conter trs clusulas como
explicado a seguir:

ENTITY : palavra reservada ENTITY inicia a declarao


seguida do nome que a identifica e da palavra reservada IS.

Ex: No caso da entidade de Projeto da Figura 3.1 seria:

ENTITY modulo IS

PORT: lista as entradas e as sadas da entidade de projeto.


Define o modo e tipo das portas.

Modos de operao de uma PORT: existem quatro modos,


representados na Figura 3.4, os quais so:

Modo IN : entrada
Modo OUT: sada
Modo BUFFER: sada que pode ser realimentada
internamente.
Modo INOUT: bidirecional.

Figura 3.4 Modos de operao de uma PORT.

A declarao inicia com a palavra reservada PORT e em seguida


abre-se um parntesis ( seguido do nome das entradas separados
por vrgula, seguido de dois pontos : do modo, por exemplo : IN e

17
Prof Luiza Maria Romeiro Cod
do tipo das entradas listadas na linha e de ponto e vrgula(;),
quando trata-se de entradas. A ltima declarao da porta
finalizada com o parntesis antes do ponto e vrgula (;).

Ex: No caso da entidade de Projeto da Figura 3.1 seria:

PORT ( I0, I1 : IN tipo_a; --entradas


S1, S2 : OUT tipo_b ); -- sadas

OBS: comentrios iniciam com --

Tipos de uma PORT: Sero explicados em um item posterior, mas os


tipos de PORT mais utilizados esto descritos no Quadro 3.4 a seguir.

Quadro 3.4

Ex: No caso da entidade de Projeto da Figura 3.1 a atribuio do


Tipo poderia ser:

PORT ( I0, I1 : IN BIT; --entradas


S1, S2 : OUT BIT ); -- sadas

18
Prof Luiza Maria Romeiro Cod
END: termina a declarao. Usa-se a palavra reservada END
seguida do nome da Entidade de Projeto e de ponto e
vrgula(;).
o projeto composto por diversas entidades distintas

Ex: No caso da entidade de Projeto da Figura 3.1 seria:


END modulo;

Desta forma a declarao da Entidade completa da Entidade de


Projeto da Figura 3.1 mostrada no Quadro 3.5 a seguir:

Quadro 3.5
ENTITY modulo IS
PORT ( I0, I1 : IN BIT; --entradas
S1, S2 : OUT BIT ); -- sadas
END modulo;

Uma declarao genrica de uma entidade mostrada no Quadro


3.6

Quadro 3.6
ENTITY nome IS
PORT ( I0, I1,...In : IN tipo_a; --entradas
S0, S1 : OUT tipo_b ); -- sadas
Y0 : BUFFER tipo_c); -- sada
Z0, Z1 : INOUT tipo_d ); -- entrada/sada
END nome;

Normalmente as portas de entrada de uma entidade so


declaradas antes das de sada. Cada declarao de interface
seguida por ponto e vrgula ';'. Tambm necessrio colocar-se ponto
e vrgula no final da definio de porta.

19
Prof Luiza Maria Romeiro Cod
3.3 DECLARAO DA ARQUITETURA:

A declarao da arquitetura (architecture) descreve o


comportamento da entidade, define o seu funcionamento interno, isto
, como as entradas e sadas influem no funcionamento e como se
relacionam com outros sinais internos. Para tal, utiliza-se uma srie de
comandos de operao. A declarao de uma arquitetura pode conter
comandos concorrentes ou seqenciais. Sua organizao pode conter
declarao de sinais, constante, componentes, operadores lgicos,
etc, assim como comandos(ex: BEGIN, END). VHDL permite ter mais
de uma architecture para a mesma entidade. Uma Arquitetura
consiste de duas partes:

a seo de declarao da arquitetura.


e o corpo da arquitetura.

Um exemplo de declarao de arquitetura mostrado no Quadro 3.7:

Quadro 3.7
architecture behavioral of ent is
signal c_internal: small_int;
begin
c_internal <= a0 + b0;
c0 <= c_internal;
c1 <= c_internal + a1 + b1;
end behavioral;

A seo de declarao da arquitetura (architecture) a rea


entre a chave architecture e a chave begin. Nesse espao pode-se
declarar objetos que so localizados na arquitetura. Aps a seo de
declarao tem-se o corpo da arquitetura o qual especifica o
comportamento da arquitetura.

A arquitetura de uma entidade pode ser descrita de trs formas


distintas de abstrao, mas que, em geral, conduzem a uma mesma
implementao.

Descrio estrutural
Descrio por Fluxo de dados (data-flow)
Descrio comportamental

20
Prof Luiza Maria Romeiro Cod
3.2.1 DESCRIO ESTRUTURAL:

Descreve todos os componentes e suas interconexes onde as


atribuies de sinais so feitas atravs do mapeamento de entradas e
sadas de componentes. Ou seja, como se fosse uma lista de
ligaes entre componentes bsicos pr-definidos, onde:

Component: exatamente a descrio de um componente

port map: um mapeamento deste componente em um


sistema maior.

Exemplo 1: Um exemplo de arquitetura estrutural pode ser visto


tomando o circuito da Figura 3.5., .(Unidade_AOI), a sada dada pela
expresso:

f a.b c.d

Onde: X 1 a.b
X 2 c.d
Ento: f X1 X 2
As trs equaes para X1, X2 e f fornecem a estrutura bsica do
circuito lgico, pois fornecem a informao necessria para reconstruir
o diagrama exatamente como ele for originalmente apresentado.
Modelos estruturais so escritos usando o mesmo conceito.

Figura 3.5 Exemplo de modelo estrutural

21
Prof Luiza Maria Romeiro Cod
No caso do exemplo da Figura 3.5, os sinais X1 e X2 so sinais
internos, portanto no foram declarados na ENTITY, ento devem
ser declarados no corpo da arquitetura antes entre as declaraes
ARCHITECTURE e BEGIN.

Modelos estruturais em VHDL so criados utilizando blocos


construtivos chamados de componentes. Um componente um
mdulo lgico definido em uma listagem normal de uma entidade com
uma arquitetura, sendo utilizado para criar outros mdulos lgicos. Um
componente pode ser visto como uma simples porta lgica, ou
representar um bloco mais complicado. Um componente ser
analisado como um simples bloco construtivo, independente da sua
complexidade interna. Para criar um modelo estrutural, mostrado no
Quadro 3.8 do circuito da Figura 3.5, primeiro se escolhe os
componentes e depois se descreve como eles so interconectados. A
conexo especificada por uma listagem formal que mapeia as portas
dos mdulos. O mapeamento de portas (port map) especifica que
portas da entidade so conectadas para quais sinais do sistema que
se est montando.

Quadro 3.8: Descrio estrutural da Unidade_AOI,


--Descrio estrutural circuito da Figura 3.5
entity Unidade_AOI is
port(a, b, c, d : in bit;
f : out bit);
end Unidade_AOI;
-- A seguinte listagem constri a unidade usando componentes
architecture Estrutural of Unidade_AOI is
--Define a porta AND como um componente
component AND2
port(x, y : in bit;
z : out bit);
end component;
--Define a porta OR como um componente
component OR2
port(x, y : in bit;
z : out bit);
end component;
--A prxima linha declara os seguintes sinais internos ao mdulo

22
Prof Luiza Maria Romeiro Cod
signal X1, X2 : bit;
-- O mapeamento das portas especfica a conexo interna
begin
G1 : AND2 port map(a, b, X1);
G2 : AND2 port map(c, d X2);
G3 : OR2 port map(X1, X2, f);
end Estrutural;

Um dos conceitos novos apresentados na Quadro 3.8 foi a


declarao de um componente a qual genericamente mostrada no
Quadro 3.9:

Quadro 3.9 Declarao de componente


component AND2
port(x, y : in bit;
z : out bit);
end component;

Para utilizar uma unidade como se fosse um componente, um


mdulo mais complexo, ele deve ser previamente definido como uma
entidade que tem uma determinada arquitetura. Isto significa que j
haviam sido feitas na listagem completa do programa em VHDL, as
seguintes declaraes dos Quadros 3.10 e 3.11:

Quadro 3.10 Declarao de componente AND2


entity AND2 is
port(u, v, : in bit;
q : out bit);
end AND2;
architecture Logica of AND2 is
begin
q <= u and v;
end Logica;

23
Prof Luiza Maria Romeiro Cod
e,

Quadro 3.11 Declarao de componente OR2


entity OR2 is
port(u, v, : in bit;
q : out bit);
end OR2;
architecture Logica of OR2 is
begin
q <= u or v;
end Logica;

O conceito de componentes pode ser entendido usando o


conceito de biblioteca do projeto, que uma coleo de diferentes
mdulos, cada um definido por uma declarao de entidade e
arquitetura. Uma vez que as clulas tenham sido definidas na
biblioteca, pode-se usar cpias das clulas no projeto em questo
usando o comando component. Isto chamado de instanciao da
clula e o componente chamado de instncia do original. Instanciar
uma clula, significa copiar a clula que est na biblioteca. Uma clula
pode ser instanciada quantas vezes for necessrio.

Na linha signal: X1, X2 : bit;


A palavra SIGNAL utilizada para definir os identificadores
(variveis) internos X1 e X2 que definem as sadas das portas G1 e
G2 do diagrama lgico original. A definio de sinal diferente da
definiode identificadores utilizados na declarao de uma porta
(port) que existe dentro do mdulo. Identificadores internos, so
portanto utilizados para conectar portas , formando as conexes do
mdulo.
Depois dos componentes declarados, o circuito descrito com a
utilizao das palavras chave port map, as quais fornecem a
informao de como os sinais (ligaes interbas) dos componentes
interagem.

A linha G1 :AND2 port map (a, b, X1);

24
Prof Luiza Maria Romeiro Cod
o primeiro mapeamento e define que a porta G1 um componente
AND2 e que est conectado aos identificadores de porta a, b e ao
sinal X1. A ordem dos sinais na declarao do componente AND2 foi
dada como (u, v, q) que corresponde a primeira entrada, segunda
entrada e sada, respectivamente. O mapeamento da porta (a, b, X1)
mantm essa mesma ordem. Portanto, a varivel de entrada a da
Unidade_AOI mapeada na varivel de entrada u da entidade AND2;
a varivel de entrada b da Unidade_AOI mapeada na varivel de
entrada v da entidade AND2; a varivel de entrada X1 da
Unidade_AOI mapeada na varivel de entrada q da entidade AND2;
O mesmo raciocnio serve para as outras linhas de mapeamento.

Exemplo2: Descrio estrutural da entidade d_latch

Figura 3.6 Representao da entidade d_latch

Tomando-se como base a entidade um flip-flop tipo D simples,


mostrado na Figura 3.6, cuja declarao encontra-se a seguir no
Quadro 3.12:

Quadro 3.12 Declarao de entidade do circuito da Figura 3.6


entity d_latch is
port ( d, clk : in bit;
q : out bit);
end d_latch;

Pode-se utilizar esta estrutura para se compor sistemas mais


complexos, como registradores de um nmero qualquer de bits. Para
ilustrar isto a seguir apresentada a descrio de um registrador de 2
bits, chamado reg_2bits, construdo a partir do flip_flop d_latch, como
mostra a Figura 3.7:

25
Prof Luiza Maria Romeiro Cod
Figura 3.7 Representao de reg_2bits a partir de entidades
d_latch.

A descrio VHDL da estrutura da Figura 3.7 apresentada a


seguir no Quadro 3.13:

Quadro 3.13 Declarao de entidade do circuito da Figura 3.7


entity reg_2bits is
port ( d0, d1, clk : in bit;
q0, q1 : out bit);
end reg_2bits;
architecture estrutura of reg_2bits is
--Define a porta d_latch como um componente
component d_latch is
port ( d, clk : in bit;
q : out bit);
end component;
begin
bit0: d_latch port map (d0,clk,qo);
bit1: d_latch port map(d1, clk, q1);
end architecture estrutura;

26
Prof Luiza Maria Romeiro Cod
Pode-se observar neste caso, que na prpria indicao dos
componentes que constituem o sistema reg_2bits j feito o
mapeamento de pinos desejado, ou seja, d0 associado ao pino d do
primeiro flip-flop, assim como o pino clk ao sinal de porta de mesmo
nome e q0 ao bit q, conforme a estruturao bit0. A estrutura bit1
descrita de forma anloga somente que uma nova entidade d_latch
(uma cpia deste componente) ser criada para a realizao de suas
ligaes. Este formato traz por si s uma maior flexibilidade do
projeto na manipulao de sinais.

Exemplo3: Descrio estrutural da entidade componente_sistema

Figura 3.8 Circuito referente ao exemplo 3


componente_sistema

27
Prof Luiza Maria Romeiro Cod
Quadro 3.14 Descrio VHDL dos componentes do exemplo 3

28
Prof Luiza Maria Romeiro Cod
Quadro 3.15 Descrio VHDL do exemplo 3

3.3.2 DESCRIO POR FLUXO DE DADOS(data-flow):

Neste tipo de descrio, os valores de sada so atribudos


diretamente, atravs de expresses lgicas. Todas as expresses so
concorrentes no tempo, ou seja, as atribuies ocorrem
simultaneamente. Geralmente descrevem o fluxo de dados no
sistema.

29
Prof Luiza Maria Romeiro Cod
Um exemplo de descrio de arquitetura por fluxo de dados de um
contador completo, mostrado nos circuitos da Figura 3.9
apresentada no Quadro 3.16.

Figura 3.9 Circuito somador completo.

Quadro 3.16
ARCHITECTURE dataflow OF full_adder IS
BEGIN
Cout <= ( AND b ) OR ( a AND Cin ) OR ( b AND Cin );
S <= a XOR b XOR Cin;
END dataflow;

Pode-se eventualmente utilizar os sinais internos adicionais na


descrio, e para isso esses sinais precisam ser declarados na
arquitetura, pois no foram declarados na entidade porque no so
conexes externas do circuito, como mostra o Quadro 3.17.

Quadro 3.17
ARCHITECTURE dataflow OF full_adder IS
SIGNAL x1, x2, x3, y1 : BIT;
BEGIN
x1 <= a AND b;
x2 <= a AND Cin;
x3 <= b AND Cin;
Cout <= x1 OR x2 OR x3;
y1 <= a XOR b;
s <= y1 XOR Cin;
END dataflow;

30
Prof Luiza Maria Romeiro Cod
Pode-se tambm descrever uma arquitetura por fluxo de dados
usando comandos condicionais, como mostra o Quadro 3.18, onde o
circuito da Figura 3.10 descrito. Portanto, considerando o mdulo
chamado Igual, mostrado na Figura 3.10, sua tabela verdade indica
que a sua sada mesma = 1 quando as entradas a e b forem iguais e
a sada mesma = 0 se a e b forem diferentes. Um enunciado em,
VHDL permite associar um valor a um sinal se algumas condies
forem satisfeitas. Usando comandos condicionais pode-se escrever a
declarao do mdulo Igual como mostra o Quadro 3.18 a seguir:

Quadro 3.18 Declarao em VHDL do circuito da Figura 3.10


entity Igual is
port(a,b :in bit;
mesma : out bit);
end Igual;
-- Declarao condicional do mdulo Igual
architecture fluxo_dados of Igual is
begin
mesma <= 1 when a = b else
0
end fluxo_dados;

Figura 3.10 Mdulo detector de Igualdade

A linha aps o comentrio -- Declarao condicional do


mdulo Igual indica que esta a definio de uma nova estrutura
chamada fluxo_dados, que pertence entidade chamada Igual. Assim
esta arquitetura descreve a operao da entidade Igual. As linhas
entre as diretivas de comeo (begin) e fim (end) descrevem a
operao do Igual.

Quando se escreve a declarao da arquitetura introduz-se a


linha de comando usando a construo geral do Quadro 3.19:

31
Prof Luiza Maria Romeiro Cod
Quadro 3.19
Identificador <= 1 when condio else
0

Onde essa construo associa ao identificador o valor 1 se a


condio for verdadeira e associa ao identificador o valor Zero (0) se
a condio no for satisfeita.
Este tipo de construo possibilita a descrio em VHDL sem o
conhecimento de detalhes internos do mdulo, ou sem o
conhecimento da expresso lgica do mdulo.

3.3.3 MODELOS DE DESCRIO COMPORTAMENTAL:

A Linguagem de descrio de hardware VHDL permite a


utilizao de comandos condicionais para construir uma declarao de
arquitetura baseada no comportamento do mdulo. Esse tipo de
descrio, representado no Quadro 3.20, utilizado na descrio de
sistemas seqenciais cujo comando fundamental o PROCESS o
qual pode ser, opcionalmente precedido de um rtulo(label) e
seguido de uma lista de sensibilidade que indica quais so as
variveis e sinais cuja alterao deve levar reavaliao da sada. No
simulador funcional, quando uma varivel da lista modificada, o
processo simulado novamente. Basicamente, a diferena entre
arquitetura com descrio comportamental e por fluxo de dados est
no uso da declarao PROCESS que define os processos
concorrentes.
Obs: Sinais com inicializao assncrona devem obrigatoriamente
estar na lista de sensibilidade. Caso no conste nesta lista, a
ferramenta de sntese ir colocar uma mensagem alertando a
ausncia, mas ir construir o circuito, podendo este no corresponder
com o que se deseja implementar. Quando a operao do sinal
sncrona, no h necessidade de incluir o sinal ma lista de
sensibilidade.

32
Prof Luiza Maria Romeiro Cod
Quadro 3.20
process_name: PROCESS( sensitivity_list_signal_1, ... )
BEGIN
-- comandos do processo
END PROCESS process_name;

Esta a forma mais flexvel e poderosa de descrio. O corpo da


arquitetura comportamental montado descrevendo sua funo a
partir uma ou vrias sentenas de processo (PROCESS ), que so
conjuntos de aes a serem executadas. Os tipos de aes que
podem ser realizadas incluem expresses de avaliao, atribuio de
valores a variveis, execuo condicional, expresses repetitivas e
chamadas de subprogramas. Dentro dos processos os comandos so
executados seqencialmente, mas se em uma arquitetura tiver mais
de um processo eles sero executados concorrentemente entre si.

Um exemplo de declarao de um comparador de 4 bits


mostrado no Quadro 3.21

Quadro 3.21
-- comparador de 4 bits
entity comp4 is
port ( a, b : in bit_vector (3 downto );
equals: out bit);
end comp4;
architecture comport of comp4 is
begin
comp: process (a,b) -- lista de sensibilidade
begin
if a = b then
equals = 1 ;
else
equals = O ;
end if;
end process comp;
end comport;

33
Prof Luiza Maria Romeiro Cod
Assim como em outras linguagens de programao, variveis
internas so definidas tambm em VHDL, com o detalhe de que estas
podem somente ser utilizadas dentro de seus respectivos processos,
procedimentos ou funes. Para troca de dados entre processos deve-
se utilizar sinais (signal) ao invs de variveis.
Outro exemplo possvel de um corpo de arquitetura
comportamental apresentado a seguir no Quadro 3.22, para a
entidade reg4, registrador de 4 bits:

Exemplo2:
Quadro 3.22
architecture comportamento of reg4 is
begin
carga: process (clock)
variable d0_temp, d1_temp, d2_temp, d3temp : bit;
begin
if clk = '1' then
if en = '1' then
d0_temp := d0;
d1_temp := d1;
d2_temp := d2;
d3_temp := d3;
end if;
end if;
q0 <= d0_temp after 5ns;
q1 <= d1_temp after 5ns;
q2 <= d2_temp after 5ns;
q3 <= d3_temp after 5ns;
end process carga;
end architecture comportamento

Neste corpo de arquitetura, a parte aps a diretiva begin inclui a


descrio de como o registrador se comporta. Inicia com a definio
do nome do processo, chamado carga, e termina com a diretiva end
process.

34
Prof Luiza Maria Romeiro Cod
Na primeira parte da descrio testada a condio de que
ambos os sinais en e clk sejam iguais a 1. Se eles so, as sentenas
entre as diretivas then e end if so executadas, atualizando as
variveis do processo com os valores dos sinais de entrada.
Aps a estrutura if os quatro sinais de sada so atualizados com
um atraso de 5ns.
O processo carga sensvel ao sinal clock, o que indicado
entre parnteses na declarao do mesmo. Quando uma mudana no
sinal clock ocorre, o processo novamente executado.

A Figura 3.11 a seguir resume a os campos de um PROCESS.

Figura 3.11 Partes de um algoritmo PROCESS.

3.4 CONFIGURATION (Configurao):

A CONFIGUAO estabelece o elo entre uma declarao de


componente e uma entidade de projeto, ela define as arquiteturas que
sero utilizadas. Uma mesma entidade pode ter vrias arquiteturas.
Para ligar a arquitetura entidade usada a seguinte declarao:

35
Prof Luiza Maria Romeiro Cod
Especificao do componente indicao do elo

FOR lista_de_rtulos: nome_componente USE ENTITY WORK.nome_entidade(arquitetura);

Como por exemplo, o Quadro 3.23 mostra a declarao da entidade


soma com suas trs arquiteturas que so utilizadas na forma de
componentes. Na entidade somadores1 so declarados dois
componentes add e adx. Na declarao do componente add o
nome das portas coincidem com o das portas da entidade soma.
A especificao da configurao definida nas linhas onde iniciam
com declaraes FOR u1, FOR u2 e FOR u3. Na solicitao
u1 que emprega a declarao do componente add estabelecido
um elo com soma. Como no foi especificada a arquitetura,
empregada a ltima arquitetura compilada. A solicitao u2 emprega
tambm a declarao do componente add, para essa solicitao
estabelecido o elo com a arquitetura lenta da entidade soma. A
solicitao u3 emprega a declarao do componente adx, e para
essa solicitao estabelecido o elo com arquitetura tpica de
soma. Como nesse ltimo caso os nomes das portas so diferentes,
necessrio definir a correspondncia entre nomes atravs de PORT
MAP.

QUADRO 3.23(exemplo retirado do livro dAmore


1 -- declarao da entidade soma e suas 3 arquiteturas
2 ENTITY soma IS
3 PORT (a, b : IN INTEGER 0 TO 7;
4 s : OUT INTEGER 0 TO 15);
5 END soma;
6
7 ACHITECTURE lenta OF soma IS
8 BEGIN
9 s<= a + b AFTER 50ns;
10 END lenta;
11
12 ACHITECTURE tpica OF soma IS
13 BEGIN
14 s<= a + b AFTER 25ns;

36
Prof Luiza Maria Romeiro Cod
15 END tpica;
16
17 ACHITECTURE rapida OF soma IS
18 BEGIN
19 s<= a + b AFTER 10ns;
20 END rapida;
21
22 -- Especificao da configurap
23 ENTITY somadores1 IS
24 PORT (x,y : IN INTEGER 0 TO 7;
25 sl, st, sr : OUT INTEGER 0 TO 15);
26 END somadores1;
27
28 ACHITECTURE teste OF somadores1 IS
29 --add: nome_local componente
30 --portas com mesma designao
31 COMPONENT add PORT (a, b : IN INTEGER 0 TO 7;
32 s : OUT INTEGER 0 TO 15);
33 END COMPONENT;
34
35 --adx: nome_local componente
36 -- portas com designao diferente
37 COMPONENT adx PORT (k, l : IN INTEGER 0 TO 7;
38 m : OUT INTEGER 0 TO 15);
39 END COMPONENT;
40
41 -- associao entre add, adx e as entidades de projeto soma
42 --arquitetura de u1 a ultima compilada
43 FOR u1: add USE ENTITY WORK.soma;
44 FOR u2: add USE ENTITY WORK.soma(lenta);
45 FOR u3: adx USE ENTITY WORK.soma(tipica) PORT MAP(a=>k, b=>l, s=>m); ;

46 BEGIN
47 u1 : add PORT MAP (x, y, Sr)
48 u2 : add PORT MAP (x, y, Sl)
49 u3 : adx PORT MAP (x, y, St)
50 END teste;

37
Prof Luiza Maria Romeiro Cod
4. Elementos Bsicos da Sintaxe de
VHDL:
Quadro 4.1 Estrutura de um projeto em VHDL.

Neste captulo, sero discutidas as regras bsicas de sintaxe de


cada comando de uma descrio VHDL. O Quadro 4.1 mostra uma
declarao VHDL onde esto indicadas algumas das estruturas e
comandos que podem aparecer neste tipo de descrio.

38
Prof Luiza Maria Romeiro Cod
Como em qualquer linguagem de programao, a VHDL utiliza um
conjunto bem definido de regras, as quais devem ser seguidas e que
definem palavras-chave e a sintaxe da linguagem que se refere ao
uso de uma palavra e a ordem que deve ser obedecida para escrever
os comandos. A linguagem no case-sensitive, mas
freqentemente so usadas maisculas para as palavras reservadas.
Uma palavra-chave, mostradas no Quadro 4.2, tem um significado
reservado na linguagem e no podem ser usadas para outro propsito.
A sintaxe refere-se ao uso de uma palavra e a ordem que deve ser
obedecida para escrever os comandos. O Quadro 4.3 mostra uma lista
dos smbolos especiais e suas sintaxes.
Quadro 4.2 Palavras reservadas em VHDL.
abs file nand then
acess for new to
after function next transport
alias nor type
all not
and null
architecture
array
assert
attribute
begin generate of unaffected
block generic on units
body group open until
buffer guarded or use
bus others
out
case if package variable
component impure port
configuration in postponed
constant inertial procedure
inout process
is pure
disconnect lable range wait
downto libraries record when
linkage register while
literal reject with
loop rem
report
return
rol
ror
else map select xor

39
Prof Luiza Maria Romeiro Cod
elseif mod severity xnor
end shared
entity signal
exit sla
sll
sra
srl
subtype

Quadro 4.3 Smbolos definidos em VHDL.


Smbolo Significado Smbolo Significado
Separao entre
Adio ou nmero
+ positivo
: uma varivel e o
tipo
Subtrao ou
- nmero negativo
Aspas dupla
Aspas simples ou
/ Diviso marca de tick
= Igualdade ** Exponenciao
Seta indicando
< Menor do que => ento
Seta indicando
> Maior do que => recebe
Associao de
& Concatenador := valor para
variveis

Barra vertical /= Desigualdade
Maior do que ou
; Terminador >= igual a
Menor do que ou
# Literal includo <= igual a
Parntese da Associao de
( esrquerda
<= valor para sinais
Parntese da
) direita
<> Caixa
. Notao de Ponto -- Comentrio

4.1 COMENTRIOS:

40
Prof Luiza Maria Romeiro Cod
Os comentrios em VHDL so permitidos aps dois traos - e
so vlidos at o final da linha corrente.
Exemplo:

bit0 := d0; -- Esta linha atribui o valor de d0 a varivel bit0

No exemplo da Quadro 4.1 : Comentrio :


--Exemplos de declaraes e comandos de uma descrio VHDL
4.2 LIBRARY (Bibliotecas):

A explicao da sintaxe de bibliotecas encontra-se no


captulo 3, Quadros 3.2 a e 3.2b. Normalmente, em descries
VHDL, utiliza-se a biblioteca de trabalho work (que fica no diretrio de
trabalho vigente). Para incluir outras bibliotecas que no a work, deve-
se utilizar a palavra-chave library seguida pelo nome da biblioteca
desejada, como mostra a descrio a seguir:

Library <nome_da_biblioteca>...

Pode-se tambm incluir todos os componentes de uma biblioteca


usando a diretiva use em conjunto com a palavra-chave all como
segue:

Library <nome_da_biblioteca> e/ou


Use<nome_da_biblioteca>.all

Por exemplo, a biblioteca IEEE contm um conjunto poderoso de


definies como:

Identificadores de tipo como BIT e BOOLEAN.


Definies de tempo para ns(nanossegundos),
ps(picossegundos) e outras escalas.

A biblioteca dividida em subgrupos chamados de pacotes. Os


seguintes itens so encontrados no pacote 1164 da biblioteca IEEE o
qual bastante til para a linguagem VHDL:

Identificadores de tipo como 0 e 1


41
Prof Luiza Maria Romeiro Cod
Operadores de funes bsicas para AND, OR, NOR e outras.
BIT, VECTORS E BIT_VECTOR.
Para incluir a biblioteca IEEE e o pacote 1164, deve-se iniciar a
descrio em VHDL com:

Library IEEE
Use IEEE_STD_LOGIC_1164.all

Uma vez que a biblioteca IEEE_1164 tenha sido includa na listagem


VHDL, utiliza-se notaes diferentes para bit e bit_vector:

BIT substitudo por STD_LOGIC


BIT_VECTOR substitudo por STD_LOGIC_VECTOR

Essa mudana possibilita mudar de BIT, o qual tem apenas dois


valores (0 e 1) para o STD_LOGIC mais til, o qual possui nove
valores possveis:

0 = 0 forte
1 = 1 forte
X = forando desconhecido
Z = alta impedncia (circuito aberto)
w = desconhecido fraco
L = 0 fraco
H = 1 fraco
U = inicializao desconhecida
- = no importa (dont care)

O exemplo a seguir mostra que as regras para descrio continuam


iguais, mas os tipos de sinal STD_LOGIC so utilizados.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL
ENTITY porta_and IS
PORT(a, b : IN std_logic;
f : OUT std_logic);
END porta_and;
ARCHITECTURE lgica OF porta_and IS
BEGIN

42
Prof Luiza Maria Romeiro Cod
f <= a and b;
END logica;

Praticamente, todos os mdulos escritos em VHDL iniciam com:


LIBRARY ieee
USE ieee.std_logic_1164.all
USE ieee.std_logic_arith.all
USE ieee.std_logic_unsigned.all

Essas quarto linhas significam que deve-se utilizar a biblioteca


IEEE, que contm a definio de funes bsicas, subtipos,
constantes, e todas as definies dos Packages includos nesta
biblioteca.
No quadro 4.1 a declarao de biblioteca :
LIBRARY ieee
USE ieee.std_logic_1164.all

4.3 IDENTIFICADORES:

Os identificadores so usados para se atribuir nomes sinais ou


processos, devem ser escolhidos de tal maneira que sejam fceis de
serem lembrados e que tenham algum significado no projeto lgico.
Um identificador bsico em VHDL:

pode conter:
letras do alfabeto (A a Z e a a z),
dgitos decimais(0 a 9)
caracter underline (_);
precisa comear com uma letra do alfabeto;
no pode terminar com um caracter underline;
no pode conter dois caracteres underline em sequncia.

Exemplos:
contador data0 Novo_valor resultado_final_operacao_FFT
No h distino entre letras maisculas e minsculas, logo valor,
Valor ou VALOR so interpretados da mesma forma.

43
Prof Luiza Maria Romeiro Cod
VHDL permite ainda a definio de identificadores estendidos que
devem ser utilizados somente para interfaceamento com outras
ferramentas que usam regras diferentes para definir seus
identificadores. A definio de identificadores estendidos feita entre
\.

Exemplos:

\9data\ \proximo valor\ \bit#123\

Alguns exemplos de identificadores da descrio do Quadro 4.1 so:


contador_generico
count_signal_name
data_input_name

O Quadro a seguir, mostra o resumo de identificadores vlidos e


invlidos

4.4 DECLARAO GENRICA:

44
Prof Luiza Maria Romeiro Cod
A declarao genrica uma declarao opcional que possibilita
passar informaes externas para entidades de projeto. O emprego do
GENERIC possibilita a reconfigurao de um circuito pela simples
alterao de seus valores, sem alterar o cdigo do projeto deixando-o
generico. A sintaxe da declarao de generico :

GENERIC ( < nome_genrico> : tipo := <valor inicial>);

Uma declarao generic em uma listagem VHDL :

ENTITY contador IS
GENERIC (min_count : NATURAL:=0;
max_count : NATURAL:=9);
Declarao das portas
END contador;

No quadro 4.1 a declarao de de genrico :

GENERIC ( Max_count : NATURAL:=9);

4.5 OBJETOS DE DADOS:

Objetos so elementos que contm um valor armazenado. So trs as


classes de objetos de dados mais usadas : signals, variables, e
constants.

SIGNAL(Sinal): representa sinais lgicos sobre um fio no


circuito, os quais interligam componentes. Um sinal no tem
memria, portanto se a fonte do sinal removida, o sinal no
ter um valor. PORTS so exemplos de sinais. Podem ser
declarados na entidade ou na arquitetura. No podem ser
declarados em processos, mas podem ser utilizados em seu
interior.

Sintaxe:
signal identificador(es) : tipo [restrio] [:=expresso];

45
Prof Luiza Maria Romeiro Cod
Exemplo:
signal cont : integer range 50 downto 1;
signal ground : bit := 0;

No exemplo do Quadro 4.1 o sinal :


count_signal_name : INTEGER RANGE 0 TO Max_Count;

VARIABLE (Varivel): Um objeto VARIABLE lembra seu


contedo e usado para clculos de modelos
comportamental.
So utilizadas em processos e devem ser declaradas neles. So
atualizadas imediatamente e no correspondem
implementao fsica, como no caso dos sinais.

Sintaxe se a varivel tem valor inicial:


variable nome_variavel : tipo [restrio] [:=valor_inicial];

Sintaxe se a varivel no tem valor inicial:


variable nome_variavel : tipo [restrio];

CONSTANT(Constante): Um objeto CONSTANT deve ser


inicializado com um valor quando declarado e seu valor no
pode ser mudado. Podem ser declaradas nos nveis de:
package
entity
architecture
process
e valem apenas no contexto em que so declaradas.

Exemplos:

SIGNAL x: BIT
VARIABLE y: INTEGER
CONSTANT one: STD_LOGIC_VECTOR(3 DOWNTO 0) := "0001"

46
Prof Luiza Maria Romeiro Cod
4.6 TIPOS DE DADOS:
Os objetos devem ser declarados segundo uma especificao de
tipo. Um tipo caracterizado por um conjunto de valores que pode
assumir e por um conjunto de operaes que podem ser realizadas.
Os tipos de objetos so divididos em:

Escalares
Compostos

A Figura 4.1 mostra as subdivises dos tipos escalares e


compostos. Porm, neste curso sero estudados apenas os tipos
indicados na Figura 4.1.
Os tipos de dados mais utilizados so mostrados no Quadro 4.1
a seguir:

Figura 4.1 Tipos de dados VHDL mais utilizados.

Observao: No permitida a transferncia de valores entre objetos


de tipos diferentes.

4.6.1 Tipos Escalares:

Escalar um nico valor. Os tipos enumerados podem ser


ordenados, ou seja, pode-se aplicar operadores relacionais (maior,
menor).

47
Prof Luiza Maria Romeiro Cod
O quadro 4.2 apresenta tipos escalares definidos no pacote
padro.

Quadro 4.2

4.6.2 Tipos Compostos ou Arrays):

Variveis de tipo composto so montadas com um agrupamento


de variveis de tipos j conhecidos. No pacote padro so definidos
dois tipos compostos: BIT_VECTOR e STRING.

BIT_VECTOR: contm elementos do Tipo BIT, ou seja,


um vetor.
Na declarao do objeto, o nmero de elementos contidos
no vetor especificado atravs das palavras reservadas
DOWNTO e TO. A primeira indica uma ordem
descendente nos ndices e a segunda o inverso, como
mostra a Figura 4.2
48
Prof Luiza Maria Romeiro Cod
Sintaxe:
TYPE identifier IS ARRAY (range) OF type;

Exemplo:
TYPE byte IS ARRAY(7 DOWNTO 0) OF BIT
TYPE memory_type IS ARRAY(1 TO 128) OF byte
SIGNAL memory: memory_type
memory(3) <= "00101101"

STRING: contm elementos do Tipo CHARACTER

Figura 4.2 exemplos de declaraes tipo bit_vector e string

4.6.3 Tipos Utilizados neste curso:

Nesse curso, para fins de simplificao, sero utilizados apenas


alguns dos Tipos, mostrados no Quadro 4.3 e descritos a seguir, os
quais so os mais utilizados em declarao VHDL.

Quadro 4.3

49
Prof Luiza Maria Romeiro Cod
BIT:
Valores: 0 ou 1
Atribuio de valor: bit_signal <= '0';
Nativo da linguagem VHDL, no precisa de declarao de
biblioteca. Exemplo mostrado no Quadro 4.4

Declarao de BIT:
bit_signal : BIT;

Quadro 4.4
SIGNAL x: BIT;
x <= '1';

BIT_VECTOR:
VHDL possibilita que as palavras binrias sejam trabalhadas
como vetores de bits, palavras binrias com n-bits, com 2n
valores distintos, simplificando a listagem. Nativo da
linguagem VHDL, no precisa de declarao de biblioteca.

50
Prof Luiza Maria Romeiro Cod
Declarao de BIT_VECTOR:
bit_vector_signal : BIT_VECTOR( max_index DOWNTO 0 );

Atribuio de BIT_VECTOR:
bit_vector_signal(0) <= 1;
bit_vector_signal(0) <= bit_signal;
bit_vector_signal <= "0001";

Um exemplo de aplicao de BIR_VECTOR mostrado no Quadro


4.5.
Quadro 4.5
SIGNAL x: BIT_VECTOR(7 DOWNTO 0)
x <= "0010"

Os exemplos 1 e 2 a seguir mostram a utilizao do


TipooBIT_VECTOR:

Exemplo 1:
Considerando a palavra: In_a = a3 a2 a1 a0
A qual a entrada do bloco mostrado na Figura 4.2, onde a sada
tem um nico bit x . Utilizando o comando BIT_VECTOR, os
componentes da palavre In_a so especificados pelo nmero
subscrito, como mostrado na listagem de porta:

PORT ( In_a : in BIT_VECTOR (3 DOWNTO 0)


X : out bit)

Essa declarao define In_a como sendo quarto componentes


nomeados pelo comando DOWNTO, em ordem decrescente, a qual
no possibilita mais mudar as posies dos bits individuais, os quais
so:
In_a(3) = a3
In_a(2) = a2
In_a(1) = a1
In_a(0) = a0

Figura 4.2 Exemplo de uma entrada do tipo BIT_VECTOR

51
Prof Luiza Maria Romeiro Cod
Exemplo2:
Usar o comando BIT_VECTOR para descrever o mdulo da
Figura4.3, onde as entradas so palavras de 4 bits In_a e :
In_b, e a sada tambm de 4 bits definida por:

Sada = In_a OR In_b

Em que a operao OR implicitamente indexada, ou seja, a Sada


uma palavra de 4 bits que tem os seguintes valores para cada bit:

Sada(3) = In_a(3) OR In_b(3)


Sada(2) = In_a(2) OR In_b(2)
Sada(1) = In_a(1) OR In_b(1)
Sada(0) = In_a(0) OR In_b(0)

Figura 4.3 Mdulo OR usando vetor.

O mdulo OR da Figura 4.3 pode ser descrito usando a seguinte


listagem em VHDL:

Entity modulo_or IS
PORT(In_a, In_b : in BIT_VECTOR(3 downto 0);
Saida : out BIT_VECTOR(3 downto 0));
END modulo_or;
ARCHITECTURE listagem OF modulo_or IS
BEGIN
Sada(3) <= In_a(3) OR In_b(3);
Sada(2) <= In_a(2) OR In_b(2);
Sada(1) <= In_a(1) OR In_b(1);

52
Prof Luiza Maria Romeiro Cod
Sada(0) <= In_a(0) OR In_b(0);
END listagem;

Os elementos individuais de um BIT_VECTOR podem ser usados


em separado. Exemplo:

f1 <= In_a(3) AND In_b(3);

STD_LOGIC e STD_LOGIC_VECTOR: Os tipos


STD_LOGIC e STD_LOGIC_VECTOR fornecem mais valores
do que o tipo BIT para modelagem mais precisa de um
circuito real. Objetos desses tipos podem ter os seguintes
mostrados no Quadro 4.6 a seguir.
Quadro 4.6

Os tipos STD_LOGIC e STD_LOGIC_VECTOR no so


predefinidos e ento duas bibliotecas (library) devem ser includas
para usar esses tipos, a biblioteca em que so definidos deve ser
previamente declarada como mostra :
LIBRARY ieee
USE ieee.std_logic_1164.ALL

Se objetos do tipo STD_LOGIC_VECTOR so usados como


nmeros binrios em manipulaes aritmticas, ento uma das duas
seguintes instrues de USE devem ser includas:

Para nmeros aritmticos com sinal:


USE ieee.std_logic_signed.ALL;

53
Prof Luiza Maria Romeiro Cod
Para nmeros aritmticos sem sinal:
USE ieee.std_logic_unsigned.all;

Exemplo:
LIBRARY ieee
USE ieee.std_logic_1164.ALL
SIGNAL x: STD_LOGIC
SIGNAL y: STD_LOGIC_VECTOR(7 DOWNTO 0)
x <= 'Z'
y <= "001-"

INTEGER: O tipo predefinido INTEGER define objetos


nmeros binrios para uso com operadores aritmticos. Um
INTEGER usa 32 bits para representar um nmero com sinal.
INTEGER usando poucos bits pode tambm ser declarado
com a chave RANGE.
NO possvel realizar operaes lgicas sobre inteiros (deve-
se realizar a converso explcita)

Exemplo:
SIGNAL x: INTEGER
SIGNAL y: INTEGER RANGE 64 to 64

4.5 .EXPRESSES:

Expresses so frmulas que realizam operaes sobre objetos


de mesmo tipo. As expresses so escritas utilizando sinais e
operadores os quais so descritos no tem 4.6. As operaes
descrevem as atribuies dos sinais. A atribuio de valor para um
sinal :
Emprega o delimitador <=
Ocorrer em regies de codigo sequencial ou concorrente.

54
Prof Luiza Maria Romeiro Cod
Exemplo:
Sinal_destino <= expresso;
Obs: tipo do sinal de destino = tipo do sinal da expresso
O que a seguinte linha de VHDL realiza: X <= A ?

Resposta: X assume o valor de A

A informao pode ser originada de:


Uma expresso
Um sinal

Operaes lgicas: and, or, nand, nor, xor, not Menor

Operaes relacionais: =, /=, <, <=, >, >=


Operaes aritmticas: - (unria), abs
Operaes aritmticas: +, -
PRIORIDADE
Operaes aritmticas: *, /
Operaes aritmticas: mod, rem, **
Concatenao

Maior

Observaes:
Operaes lgicas so realizadas sobre tipos bit e boolean.
Operadores aritmticos trabalham sobre inteiros e reais.
Incluindo-se o package da Synopsys, por exemplo, pode-se
somar vetores de bits.
Todo tipo fsico pode ser multiplicado/dividido por inteiro ou
ponto flutuante.
Concatenao aplicvel sobre caracteres, strings, bits,
vetores de bits e arrays.

55
Prof Luiza Maria Romeiro Cod
Exemplos: ABC & xyz resulta em: ABCxyz
1001 & 0011 resulta em: 10010011

4.6 OPERADORES:
Os Operadores so divididos em classe como mostra o Quadro 4.7.
As classes definem a precedncia dos operadores
Operadores de uma mesma classe possuem mesma
precedncia.
Quadro 4.7 Operadores separados por classes.

Obs: Operador lgico NOT est na classe diversos devido sua


precedncia.

4.6.1 Operadores Lgicos:

Operandos: tipos bit e boolean


Vetores unidimensionais compostos de elementos
bit e boolean.
Os vetores devem ter o mesmo tamanho
Operao executada entre elementos de mesma posio

56
Prof Luiza Maria Romeiro Cod
4.6.2 Operadores Relacionais:

Operadores de igualdade e desigualdade: qualquer tipo


Operadores de ordenao: tipos escalares(bit, integer, etc)

4.6.3 Operadores de deslocamento e rotao:

57
Prof Luiza Maria Romeiro Cod
4.6.4 Operadores de Adio:

Adio e subtrao: tipo numrico.


Concatenao: vetor unidiensional e elementos(mesmo tipo).

4.6.5 Operadores Aritmticos: identidade, negao

Operandos: qualquer tipo numrico.


Possuem o mesmo significado dos operadores matemticos
equivalentes.
58
Prof Luiza Maria Romeiro Cod
4.6.6 Operadores Diversos: Absoluto, exponenciao.

Possuem o mesmo significado dos operadores matemticos


equivalentes.

4.6.7 Operadores Multiplicao:

Multiplicao e diviso: operandos tipo inteiro e real.


MOD e REM : operandos tipo inteiro.

Os quatro Quadros seguintes mostram os diversos operadores da


VHDL separados por tipos de operao.

Quadro 4.8 OPERADORES ARITMTICOS


Operador Operao Tipo do Tipo do Tipo do
operador da operador resultado
esquerda da direita

mesmo do igual aos


+ Adio numrico
anterior operandos
- mesmo do igual aos
Subtrao numrico
anterior operandos
& Array 1 mesmo do igual aos
Concatenao
dimenso anterior operandos

59
Prof Luiza Maria Romeiro Cod
inteiro ou ponto
mesmo do igual aos
flutuante
anterior operandos
inteiro ou ponto
* Multiplicao fsico flutuante fsico

inteiro ou ponto
flutuante fsico fsico

inteiro ou ponto
mesmo do igual aos
flutuante
anterior operandos
/ Diviso inteiro ou ponto
fsico flutuante fsico

fsico fsico inteiro


mod mesmo do igual aos
Mdulo inteiro
anterior operandos
Resto da mesmo do igual aos
rem Diviso
inteiro
anterior operandos
inteiro ou ponto Igual ao
** Potenciao flutuante inteiro operador da
esquerda
Valor
abs Absoluto
numrico numrico
Bit, booleana Igual ao
not Negao ou array (bit, operador da
boolean) direita

Quadro 4.9 OPERAES DE COMPARAO:


Operador Operao Tipo do Tipo do operador Tipo do
operador da direita resultado
da esquerda

= Igualdade qualquer Mesmo do anterior boolean


< Menor do que Escalar ou array Mesmo do anterior boolean
> Maior do que Escalar ou array Mesmo do anterior boolean
/= Desigualdade qualquer Mesmo do anterior boolean
Maior do que Escalar ou array Mesmo do anterior boolean
>= ou igual a
Menor do que Escalar ou array Mesmo do anterior boolean
<= ou igual a

60
Prof Luiza Maria Romeiro Cod
QUADRO 4.10 OPERAES LGICAS:
Operador Operao Tipo do Tipo do operador Tipo do
operador da direita resultado
da esquerda

Bit, booleana ou Mesmo do anterior boolean


and Lgica E array
(bit,boolean)
Bit, booleana ou Mesmo do anterior boolean
or Lgica OR array
(bit,boolean)
Bit, booleana ou Mesmo do anterior boolean
Lgica E
nand negada
array
(bit,boolean)
Bit, booleana ou Mesmo do anterior boolean
Lgica OR
nor negada
array
(bit,boolean)
Bit, booleana ou Mesmo do anterior boolean
Lgica OR
xor exclusivo
array
(bit,boolean)
Lgica OR Bit, booleana ou Mesmo do anterior boolean
xnor exclusivo array
negada (bit,boolean)

Exemplo:

Operador exemplo significado


not not a a
and c and b c.d
or u or v u+v
nand a nand b a.b
nor c nor d cd
xor a xor b a b
xnor c xnor d cd

61
Prof Luiza Maria Romeiro Cod
Quadro 4.11 OPERAES DE DESLOCAMENTO E ROTAO:
Operador Operao Tipo do Tipo do operador Tipo do
operador da direita resultado
da esquerda

array de bit array de


Desloc. Lgico
sll para esquerda
ou boolean inteiro bit ou
Boolean
array de bit array de
Desloc. Lgico
srl para direita
ou boolean Inteiro bit ou
Boolean
Desloc. array de bit array de
sla aritmtico ou boolean Inteiro bit ou
para esquerda Boolean
Desloc. array de bit array de
sra aritmtico ou boolean Inteiro bit ou
para direita Boolean
array de bit array de
Rotao para
rol a esquerda
ou boolean Inteiro bit ou
Boolean
array de bit array de
Rotao para
ror a direita
ou boolean inteiro bit ou
boolean

4.7 Exemplos de Atribuio de valores de sinais(Retirados


do livro de Roberto dAmore, Descrio e Sntese de
Circuitos Digitais)

Exemplo 1. Tipos INTEGER e REAL


Operao: valor 11 atribudo a todas asportas de sada

62
Prof Luiza Maria Romeiro Cod
Exemplo 2: Tipos BIT_VECTOR
Operao: valor 1011 atribudo a toads as portas de sada
Diferentes bases de representao
Tipos integer, real : formato 16#B# 16#B.0#
Tipos bit_vector: formato XB
Linha 12: caracter _ em 01_0_11 melhora leitura do valor
Linhas 14 e 15: valor definido para uma parte real: DOWNTO

63
Prof Luiza Maria Romeiro Cod
Exemplo 3: Atribuio de valores em sinais, tipos
BIT_VECTOR agregados
S2 S4 atribuio de valor: notao posicional.
S3 S5 atribuio de valor: associao de nomes.

Exemplo 4: Atribuio de valores: Expresses com


operadores lgicos.
Linhas 8 e 14: comentrio no cdigo
Linha 15: x and y equivale a not(a and b) ordem das
operaes importante.

64
Prof Luiza Maria Romeiro Cod
Exemplo 5: Operadores classe adio.
Linhas 10 e 11: Operao de concatenao de dois vetores
(tipos bit_vector)
Linha 12: soma de dois tipos inteiros

65
Prof Luiza Maria Romeiro Cod
5. Comandos em VHDL:
Em VHDL uma descrio estrutural de uma arquitetura apresenta
tanto as instrues como comandos concorrentes entre si, ou seja, a
ordem de apresentao das instrues ou dos comandos irrelevante.
Todos (comandos ou instrues) so executados paralelamente. Em
uma descrio de arquitetura por fluxo de dados ou comportamental,
podem ser utilizados alguns comandos com o objetivo de facilitar a
descrio de circuitos mais complexos. Esses comandos podem ser
concorrentes, e alguns deles se contidos em regies especficas de
cdigos, como dentro de processos, so avaliados na sequncia em
que so apresentados. Neste captulo sero apresentados alguns
comandos bsicos de VHDL, assim como alguns conceitos
necessrios para a utilizao desses comandos, os quais so:

Declarao e Atribuio sinais


Atribuio variveis
Conceito de Atributo

DECLARAO E ATRIBUIO SINAIS:

A Declarao de sinal usada como meio de transmisso de


informao dentro da arquitetura. As conexes internas entre os
componentes so descritas por meio de sinais. A atribuio de um
valor a um sinal pode ocorrer tanto em uma regio de cdigo
concorrente como em regies de cdigo seqencial.
Os sinais so declarados aps a declarao da arquitetura entre
a palavra chave IS e antes de BEGIN da seguinte maneira:

ARCHITECTURE tipo_arquitetura OF nome_entidade IS


SIGNAL nome_sinal1 : tipo_do_sinal;
BEGIN

Uma listagem em VHDL poderia ter a seguinte declarao:

66
Prof Luiza Maria Romeiro Cod
ARCHITECTURE estrutural OF teste IS
SIGNAL X1,X2: STD_LOGIC;
SIGNAL X13: STD_LOGIC_VECTOR(7DOWNTO 0);;
BEGIN

A Declarao de Atribuio do sinal descreve como o dado flui


do lado direito do operador (<=) para o lado esquerdo como a seguir

<nome_do_sinal > <= <expresso>;

Para circuito da Figura 5.1, X deve ser declarado como sinal


com o tipo BIT ou STD_LOGIC, como mostra a listagem VHDL
seguinte

Figura 5.1 Circuito bloco1 com sinal X interno

ENTITY bloco1 IS
PORT( a, b : IN :STD_LOGIC;
s : OUT STD_LOGIC VECTOR);
END bloco1;
ARCHITECTURE estrutural OF bloco1 IS
SIGNAL X: STD_LOGIC;
BEGIN
s <= not a and b;
END estrutural;

A listagem VHDL a seguir mostra uma atribuio de sinal dentro


de um processo. (Exemplo retirado de Terroso, A. R. Dispositivo
Lgicos Programvel (FPGA) e Linguagem de Descrio de Hardware

67
Prof Luiza Maria Romeiro Cod
(VHDL)). Na linha 9 o sinal a vale 0, aps 20ns passa para 1 e aps
40ns volta a ser 0. A linha 10 e 11 so operaes lgicas e a linha 12
o processo semelhante ao da linha 9 porm, o sinal d recebe valores
inteiros.

1 ACHITECTURE comportamental OF exemplo IS


2 SIGNAL a, b, c: BIT;
3 SIGNAL d: INTEGER;
4 BEGIN
5 PROCESS (a, b, c, d)
6 VARIABLE k, m, n q BIT
7
8 BEGIN
9 a <= 0 ,1 AFTER 20ns, 0 AFTER 40ns;
10 b <= NOT k ;
11 c <= ((k and m) XOR (n nand q));
12 d <= 3,5 AFTER 20ns, 7 AFTER 40ns, 9 AFTER 60ns;
13 END PROCESS;
14 END comportamental;

OBSERVAES: Os sinais que foram atribudos valores dentro


do processo podero ser utilizados em outro processo, mas no
pode receber atribuio de valores.

DECLARAO E ATRIBUIO VARIVEIS:

Diferente do sinal, a varivel s pode ser utilizada internamente


a um processo em que foi criada e o valor passado ela atravs de
:= sua atualizao imediata enquanto a atualizao do sinal s
ocorre no final do processo. A funo a varivel dentro do processo
de intermediar valores.
A varivel declarada depois do comando PROCESS.e antes do
comando BEGIN e tem a seguinte sintaxe:

VARIABLE<nome_da_varivel > <: <expresso>;

68
Prof Luiza Maria Romeiro Cod
A listagem VHDL a seguir (EXEMPLO 1) apresenta as etapas de
simulao de um programa VHDL. Acompanhando horizontalmente
cada bloco pode-se observar as atualizaes das variveis. E,
analisando a listagem do EXEMPLO2 pode-se verificar a diferena
entre sinal e varivel(Exemplos retirados de Terroso, A. R. Dispositivo
Lgicos Programvel (FPGA) e Linguagem de Descrio de Hardware
(VHDL)).

EXEMPLO 1

69
Prof Luiza Maria Romeiro Cod
EXEMPLO 2

ESCOLHA ENTRE SINAL OU VARIVEIS:

A escolha entre utilizar sinais (expresses concorrentes) variveis,


as quais so usadas em processos sequencias, vai depender do que
se implementar. Por exemplo, nas atribuies a seguir a Atribuio1
faz com que os valores de a e b sejam permutados e a Aribuio2 faz
com que a e b assumam o valor anterior de b.
Atribuio1: Atribuio2:
a <= b; a := b;
b <= a; b := a;

70
Prof Luiza Maria Romeiro Cod
CONCEITO DE ATRIBUTO:

Atributos so informaes adicionais associadas a objetos, como


por exemplo, a sinais. Os atributos possibilitam a verificao de
transies de sinal e o modelamento atrasos. A sintaxe de atributo
apresentada a seguir:

nome_atributo;

A Tabela 5.1 apresenta um resumo de sinais de atributo e SUS


funes

Tabela 5.1
ATRIBUTO FUNO
nome_do_sinal EVENT Verdadeiro se ocorreu uma troca de
valor do sinal no ciclo corrente de
simulao; e falso, caso contrrio
nome_do_sinal ACTIVE Verdadeiro se foi atribudo um valor
durante o ciclo corrente de simulao; e
falso, caso contrrio
nome_do_sinal TRANSACTION Retorna um sinal tipo BIT
complementado em relao ao anterior
a cada transio do sinal
nome_do_sinal LAST_EVENT Tempo decorrido desde a ultima troca
de valor do sinal
nome_do_sinal LAST_VALUE Retorna o valor do sinal antes do ltimo
evento
nome_do_sinal LAST_ACTIVE Retorna o intervalo de tempo desde que
a ltima transio tenha ocorrido no
sinal
nome_do_sinal DELAYED(T) Novo sinal equivalente ao sinal atrasado
T unidades de tempo. O valor de T
opcional, mas o default T=0.
nome_do_sinal STABLE(T) Retorna um sinal tipo booleano
verdadeiro se no ocorreu nenhuma
troca de valor durante um perodo T;
caso contrrio retorna um valor falso
nome_do_sinal QUIET (T) Retorna um sinal tipo booleano
verdadeiro se no ocorreu nenhuma
transio durante um perodo T; caso
contrrio retorna um valor falso

71
Prof Luiza Maria Romeiro Cod
A Figura 5.2 apresenta os termos relativos active, quiet e
event. A condio active empregada acaso seja atribudo um
novo valor a um sinal, durante um ciclo de simulao, mesmo que o
novo valor seja igual ao anterior. A condio quiet oposta
active. E a condio event representa uma mudana no valor a ser
assumido.

Figura 5.2 condies active, quiet e event de um sinal.

5.1 COMANDOS CONCORRENTES:

5.1.1Construo WHEN ELSE:

Permite associar um valor a um sinal se algumas condies so


satisfeitas. Uma lista de opes apresentada estabelecendo qual
valor de uma expresso deve ser trans ferido a um sinal de destino. A
primeira condio verdadeira define a expresso transferida. O
Quadro 5.1 mostra o formato utilizado para este comando. E no
Quadro 5.2 apresentado o cdigo completo para o circuito da Figura
5.1. A descrio possui um estilo mais prximo ao compotamento do
circuito.

Quadro 5.1

72
Prof Luiza Maria Romeiro Cod
Figura 5.1 Circuito de um Mux 4x1

Quadro 5.2

5.1.2 CONSTRUO WITH SELECT:

Transfere um valor a um sinal de destino segundo um relao


de opes. Todas as condies de seleo devem ser consideradas e
elas devem ser mutuamente exclusivas. No existe uma prioridade
como na construo WHEN ELSE. Essa construo segue o
formato mostrado no Quadro 5.3. As oes podem ser agrupadas
atravs do dilimitador |, equivalente a uma condio ou. E tambm
pode-se utilizar as palavras reservadas TO e DOWNTO para
delimitar uma faixa de condices de um tipo escalar. A palavra
OTHERS vlida como ltima alternativa para englobar as
condies restantes.

73
Prof Luiza Maria Romeiro Cod
Quadro 5.3

O Quadro 5.4 mostra a descrio completa utilizando o comando


WITH SELECT para o circuito da da Figura 5.1 cuja expresso de
escolha :

Sinal sel = s1 e s0 concatenados

Quadro 5.4

74
Prof Luiza Maria Romeiro Cod
Comparao entre as construes WHEN ELSE e WITH
SELECT:

5.1.3 COMANDO PROCESS:

O comando PROCESS delimita regies de cdigo seqencial.


dividido em duas regies da primeira a parte da declarao do
processo e a outra a descrio do mesmo. Como mostra o Quadro 5.5
a seguir

Quadro 5.5
process_name: PROCESS( sensitivity_list_signal_1, ... )
BEGIN
-- comandos do processo
END PROCESS process_name;

Antes da palavra PROCESS pode aparecer um rtulo com o


nome do processo, o qual opcional. Logo aps a palavra
PROCESS pode-se definir uma lista de sensibilidade que causam a
execuo do processo, como mostrado na descrio do Quadro 5.5. A
alterao de um valor de um dos sinais da lista de sensibilidade ativa o

75
Prof Luiza Maria Romeiro Cod
processo causando a execuo dos comandos seqenciais segundo a
ordem de apresentao.

5.2 COMANDOS SEQENCIAIS:

Os comandos seqenciais ficam contidos em regies onde o


cdigo executado sequencialmente, como dentro de processos,
delimitados pelo comando PROCESS.

Observao: Esses comandos no podem ser utilizados fora da


regio delimitada pelo comando PROCESS.

atribuio de variveis
if,
case,
for,
while,
wait

5.2.1 Atribuio de variveis:

Variveis no passam valores fora do processo na qual foram


declaradas, so locais. Elas sequer existem fora de um
processo.
As atribuies so seqenciais, ou seja, a ordem delas importa.

O formato da atribuio de uma varivel mostado a seguir:

variable_assignment_statement ::= target := expression ;


target ::= name | aggregate

76
Prof Luiza Maria Romeiro Cod
5.2.2 - Estrutura IF:

utilizada em situaes em que a execuo de uma sequencia


de comandos depende de uma ou mais condies. A forma mais
simples de utilizao atravs da estrutura if-then-end-if como
apresentado a seguir:

IF chave = 1 THEN
saida1 := valor_saida;
END IF;

Onde a condio (chave = 1) testada para permitir a operao


necessria. Se a condio for verdadeira, valor_saida atribudo
varivel saida1, caso no nada feito.
Em alguns casos desejado realizar-se uma operao (ou
sequncia de operaes) para quando a condio for verdadeira e
outra quando a condio for falsa.
Ver exemplo de uma estrutura if-then-else-end if:

IF chave = 1 THEN
saida1 := valor_saida;
ELSE
saida1 := 255;
registrador := valor_saida;
END IF;

Este caso idntico ao caso anterior s que quando a condio


chave = 1 for falsa so executadas as linhas saida1 := 255 e
registrador := valor_saida.

Uma outra variao desta estrutura permitida atravs da


utilizao da palavra chave elsif, que funciona como uma nova
estrutura de comparao dentro da estrutura if corrente. So possveis
tantos elsif quantos forem necessrios para refinar as comparaes. A
seguir tem-se um exemplo:

IF painel = OFF THEN


led1 := OFF;

77
Prof Luiza Maria Romeiro Cod
led2 := OFF;
ELSIF leitura = 1 OR leitura = 3 THEN
led1 := ON;
led2 := OFF;
ELSIF leitura = 2 or leitura = 4 THEN
led1 := OFF;
led2 := ON;
END IF;

onde os valores de sada led1 e led2 so vinculados aos valores


da varivel de entrada leitura. Se leitura for igual a 1 ou 3 (atravs do
uso do operador or) a sada led1 ativada. Se leitura for igual a 2 ou 4
a sada led2 ativada. Isto claro somente se a condio painel =
OFF for falsa, ou seja a chave de entrada do painel estiver ligada.

IMPORTANTE:

teste de borda de subida: if clock'event and clock='1' then

teste de borda de descida: if clock'event and clock='0' then

a seqncia na qual esto definidos os ifs implica na


prioridade das aes

5.2.3. - Estrutura CASE:

Uma outra estrutura de comparao de valores para seleo de


operaes a estrutura case-is-when-endcase. Esta estrutura mais
utilizada para aplicaes onde uma determinada varivel pode assumir
um nmero limitado de valores, cada qual associado a um conjunto de
operaes. A seguir tem-se o exemplo de um multiplexador
implementado com esta estrutura:

CASE seletor IS
WHEN 0 =>
sada <= entrada0;
WHEN 1 =>
78
Prof Luiza Maria Romeiro Cod
sada <= entrada1;
WHEN 2 =>
sada <= entrada2;
WHEN 3 =>
sada <= entrada3;
END CASE;

Para se implementar a funo OU em estruturas CASE usa-se o


caracter |.
Como exemplo apresenta-se uma forma alternativa de implementar a
funo de acionamento das sadas led1 e led2 de acordo com a
varivel leitura

CASE leitura IS
WHEN 1 | 3 => -- quando 1 ou 3
led1 := ON;
led2 := OFF;
WHEN 2 | 4 => quando 2 ou 4
led1 := OFF;
led2 := ON
End CASE;

Para a rea de sistemas digitais a grande utilidade da estrutura


CASE na implementao de mquinas de estado. No exemplo a
seguir:

CASE estado IS
WHEN estado_A =>
saida <='0';
IF entrada = '1' THEN estado := estado_B;
END IF;
WHEN estado_B =>
IF entrada = '0' THEN estado := estado_C;
END IF;
WHEN estado_C =>
estado := estado_A;
saida <= '1';
END CASE;

79
Prof Luiza Maria Romeiro Cod
No exemplo anterior est implementada mquina de estados da
Figura 5.2. Apesar de no indicado, a estrutura apresentada deveria
estar dentro de um processo sincronizado com o clock, o que
normalmente subentendido em sistemas de mquinas de estados.

Figura5.2 : Mquina de estados implementada no exemplo

5.2.4 - Comando WAIT:

A operao ou comando de espera (wait) tem como finalidade


suspender a execuo da sequncia corrente at que uma
determinada condio ocorra. A sua utilizao feita a partir da
palavra-chave wait. Este comando pode ser empregado para se
esperar simplesmente a mudana de estado de um sinal ou aguardar
por uma variao especfica.

Espera por uma Variao Qualquer:

O modo mais simples de utilizao do comando wait para se


aguardar uma mudana qualquer de estado em um determinado sinal.

80
Prof Luiza Maria Romeiro Cod
Isto feito com a palavra-chave on seguido pelo sinal que se deseja
monitorar. Por exemplo, na execuo de uma descrio em VHDL que
contenha:

...
wait on a;
...

a sequncia de operao ir ser suspensa na linha apresentada


at que o sinal a mude de valor, quando ento ir seguir em execuo
normal. possvel a combinao de mais de um sinal de entrada
como no caso abaixo:

...
wait on a, b;
...

onde a sequncia de operao suspensa at que haja uma variao


em qualquer dos sinais a ou b.

Espera por uma Variao Especfica:

Para a programao da sensibilidade para um nico tipo de


variao deve-se utilizar a palavra-chave until seguida pelo sinal e a
condio que se deseja aguardar. Este formato de comando de espera
especialmente importante para a sntese de componentes sensveis
a um tipo de borda, como latches e flip-flops.
O exemplo abaixo ilustra a utilizao deste comando para a
implementao de um componente sensvel a borda positiva do sinal
clk:

...
wait until clk = '1';
...

81
Prof Luiza Maria Romeiro Cod
Espera por Nvel:

Em alguns casos, a funo que se deseja sintetizar deve ser sensvel


no a borda, mas sim a um nvel de sinal. Para tanto deve-se
especificar alm dos parmetros vistos no item anterior a informao
de tempo de persistncia da condio. Agrega-se ento estrutura de
comando de espera visto anteriormente a palavra-chave for seguida
pelo tempo que a condio deve ser mantida verdadeira para que o
programa saia do modo suspenso. Por exemplo:

...
wait until int_in = '1' for 1ms;
...

implementa a espera de um sinal de nvel lgico '1' com durao de


1ms na porta int_in para dar continuidade sequncia de operao.

5.2.5 COMPARAO ENTRE CONSTRUO IF-ELSE e CASE-


WHEN:

Sempre que possvel utiliza a construo CASE- WHEN ao invs


da IF ELSE, pois as restries impostas pelas construo CASE
WHEN evita que circuitos seqenciais sejam criados sem necessidade
como no caso da utilizao da construo IF- ELSE , onde o
esquecimento pelo projetista de incluir alguma condio leva a criao
de um elemento de memria, na compilao, para manter a condio
anterior.

82
Prof Luiza Maria Romeiro Cod
6.Bibliografia:
6.1 Livros:

Damore, R.,VHDL Descrio e Sntese de Circuitos Dogitais, Ed.


LTC

Hamblen, J. O. & Furman, M. D. Rapid Prototyping of Digital Systems-


A Tutorial Aproach. Kluwer Academic Publishers. 2nd. Edition, 2001.

Palnitkar, Samir. Verilog Hdl: A Guide to Digital Design and


Synthesis. SunSoft Press,1996

Perry, D. L. VHDL: Programming by Example, McGraw-Hill 4th


Ed.,2002.

Terroso, A. R. Dispositivo Lgicos Programvel (FPGA) e Linguagem


de Descrio de Hardware(VHDL). VII-Semana da Engenharia
PUCRS- Minicurso 2, Porto Alegre-RS, 1998.

Uyemura, J. P., Sistemas Digitais- Uma Abordagem Integrada. Ed.


Pioneira Thomson Learning, 2002

6.2 Sites Consultados:

http://pt.wikipedia.org/wiki/VHDL

http://ee.ucd.ie/~rreilly/DE%20Website/Lectures/DE-19-
VLSI%20Design%20Methodology.ppt

http://www.ene.unb.br/~juliana/cursos/sistdigital1/vhdl_ronhuse.pdf

http://www.dimap.ufrn.br/~ivan/orgI/vhdl.PDF

http://209.85.165.104/search?q=cache:hYIrOFzhoroJ:www.ee.pucrs.br
/~vargas/SisC/poligrafo-
vhdl.doc+ANDERSON+ROYES+TERROSO+LINGUAGEM+DE+DESC
RI%C3%87%C3%83O+DE+HARDWARE+(VHDL)&hl=pt-
BR&ct=clnk&cd=5&gl=br

83
Prof Luiza Maria Romeiro Cod
http://www.angelfire.com/in/rajesh52/verilogvhdl.html

www.model.com Comparison of VHDL, Verilog and SystemVerilog


Stephen Bailey

84
Prof Luiza Maria Romeiro Cod

Você também pode gostar