Вы находитесь на странице: 1из 36

Introduo ao VHDL

O que VHDL?
VHDL ou VHSIC Hardware Description Language uma linguagem desenvolvida pela
DARPA (agncia de pesquisa em projetos de defesa norte-americanos), especificamente para a
descrio de circuitos digitais, originalmente focando circuitos VHSIC ou Very High Speed
Integrated Circuits.
O propsito original do VHDL, como o prprio nome da linguagem diz, era descrever
circuitos digitais, dessa forma servindo como uma fonte de documentao do funcionamento
dos mesmos. Em seguida a idia de simular os circuitos descritos nessa linguagem tornou-se
bastante bvia, com o que os primeiros simuladores surgiram no mercado, seguidos por
ferramentas capazes tambm de sintetizar um circuito digital a partir da descrio fornecida
pela linguagem (com limitaes que iremos estudar aos poucos).
Hoje existem ferramentas no somente capazes de sintetizar o cdigo VHDL, mas
igualmente capazes de sintetizar o mesmo otimizando determinados aspectos, tais como rea
em circuito, consumo de energia, etc.
A sintaxe do VHDL herdada da linguagem ADA (e, por sua vez, do PASCAL). O VHDL
essencialmente uma linguagem com descries de operaes executadas em paralelo (exceto
em blocos especiais onde se pode garantir o sequenciamento das instrues). As duas
principais verses em uso do VHDL so o VHDL87 (padro IEEE 1076-1998) e o VHDL93 (padro
IEEE 1076-1993). Existem verses posteriores do VHDL, sendo a ltima a verso proposta e em
anlise pelo IEEE em 2008. Alm dessas verses, existem diversos padres derivados do VHDL
que podem ser usados em conjunto com a linguagem de forma a expandir suas capacidades
iniciais.
Talvez a alternativa mais conhecida do VHDL seja o Verilog. Ainda assim, interessante
notar que existem diversas outras opes surgindo na atualidade, sendo uma delas a System C.
Alm disso, diversas ferramentas de alto nvel, a exemplo do Matlab e do LabView, j
permitem a converso de alguns recursos para VHDL, o que permitiria a posterior sntese do
mesmos.

Vocabulrio bsico VHDL

Entidade (Entity): todo o desenvolvimento se d em torno de entidades. A entidade


o bloco bsico de construo do VHDL. Todo o projeto possui uma entidade top-level,
ou seja, aquela que a entidade principal do sistema. Uma entidade pode agregar
dentro de si outras entidades atravs do mecanismo de componentes.
De forma simplificada, podemos imaginar uma entidade como o encapsulamento de
um dado circuito digital.
Para exemplificar, quando utilizamos um circuito 7400, por exemplo, sabemos que
possvel utilizar o mesmo da seguinte maneira:

Ou seja, temos a viso de como o circuito se conecta com o mundo exterior.


Fundamentalmente, esse o papel de uma entidade VHDL. Definir como o circuito
digital ir se comunicar com outros blocos do sistema.
Ou seja, em VHDL, essencialmente, a maior parte dos projetos consistir na
interconexo de vrias entidades de menor porte, a fim de construir a soluo de um
problema mais complexo.
Portas (Port): uma porta em VHDL um sinal declarado dentro da entidade. No
confunda com o termo porta lgica. A porta, em VHDL, est associada com o
conceito de pino de um circuito integrado.
Arquitetura (Architecture): todas as entidades demandam uma arquitetura, a qual
descreve o papel ou funcionamento da entidade associada. Uma entidade pode
possuir mais de uma arquitetura associada.
Ou seja, atravs da arquitetura, descrevemos precisamente como os pinos/portas da
entidade sero utilizados, em conjunto ou no com outros blocos, para realizar uma
determinada funo.
Sinal (Signal): um sinal possui um papel similar ao de uma varivel dentro do cdigo
em VHDL, porm ele tem uma utilizao e impactos completamente distintos.
Um sinal pode ser visto como a realizao fsica de uma informao. De fato,
conveniente (nem sempre absolutamente correto, mas serve como associao inicial),
pensar em um sinal como sendo uma trilha de um circuito, um caminho fsico.
Configurao (Configuration): um comando de configurao feito para associar a
instanciao de um componente a um determinado par entidade-arquitetura. A
configurao pode ser vista como uma listagem de componentes para um projeto.
Pacote (Package): uma coleo de subprogramas e tipos de dados comumente
utilizados em um projeto.
Driver: a fonte de um sinal. Se um sinal gerado por duas fontes, ento quando
ambas as fontes estiverem ativas, o sinal ter dois drivers.
Bus: em VHDL, o termo BUS determina um tipo especial de sinal que pode ter seus
drivers desligados.
Atributos (attribute): um atributo um dado que anexado aos objetos VHDL ou prdefinido acerca de objetos VHDL. Exemplos so a mxima temperatura de operao de
um dispositivo.
Genricos (generic): um termo VHDL utilizado para passar informaes de
parmetros para uma entidade.
Processos (process): uma unidade de execuo seqencial bsica do VHDL.

Elementos bsicos do VHDL


Reduzindo a complexidade da linguagem, pode-se afirmar que, talvez, os trs
principais elementos construtivos do VHDL sejam: biblioteca (library), entidade (entity) e
arquitetura (architecture).

Library: uma biblioteca representa o agrupamento de diversos pacotes (package) de trabalho.


Cada pacote, por sua vez, representa o agrupamento de tipos de dados, funes,
procedimentos e componentes, conforme pode ser visto na figura abaixo.

Entity: Uma entidade uma lista com especificaes de pinos de entrada e sada ou,
simplesmente, portas, do circuito. De certo modo, a entidade pode ser vista como o
encapsulamento do circuito, i.e., com quais sinais o circuito se comunica com o mundo
exterior, independentemente de sua complexidade interna. Todos os projetos em VHDL
necessitam ao menos de uma entidade (a entidade top-level) e, usualmente, so
constitudos de diversas entidades distintas.
A sintaxe bsica utilizada para descrever as entidades (mais detalhes podem existir
na declarao da entidade que so omitidos aqui para permitir o incio rpido na linguagem):
ENTITY nome IS
PORT (
nome_da_porta: modo_sinal tipo_sinal;
nome_da_porta: modo_sinal tipo_sinal;
....);
END nome;
Onde:
nome: o nome da entidade, podendo ser qualquer nome identificador vlido na
linguagem.
nome_da_porta: a identificao associado ao sinal;
modo_sinal: pode ser de quatro tipos IN, OUT, INOUT ou BUFFER. Os modos IN e
OUT (cuja finalidade bvia) so direcionais, impedindo que o sinal em questo seja
utilizado de outra maneira que no aquela especifica. Isso significa, por exemplo, que
um sinal IN jamais poder ter algum valor atribudo a ele, enquanto um sinal OUT no
poder jamais ser lido em nenhuma operao, visto que s possvel escrever no
mesmo. O modo INOUT bidirecional e o modo BUFFER especifica um sinal de sada
cujo valor presente tambm pode ser usado em operaes que necessitem ler o
mesmo.
tipo_de_sinal: especifica o tipo de dados do sinal em questo.

Um exemplo da declarao de um entidade pode ser visto abaixo:


ENTITY teste IS
PORT (
a,b: IN BIT;
Y: OUT BIT);
END teste;
NOTA 1: A linguagem VHDL uma linguagem INSENSVEL ao fato de letras serem maisculas
ou minsculas. Dessa forma, os identificadores TESTE, teste, TesTE, ou qualquer outra
variao, identificam exatamente a mesma coisa.
NOTA 2: usual representar as palavras reservadas do VHDL todas capitalizadas (muito
embora isso no seja obrigatrio). Iremos seguir essa conveno de cdigo.
NOTA 3: sugere-se que o cdigo VHDL, a exemplo de qualquer outra linguagem de
programao, seja escrito de forma IDENTADA, a fim de possibilitar a leitura clara do cdigo.
Essa norma ser utilizada em toda a codificao efetuada.
Arquitetura: a arquitetura a descrio de como certa entidade trabalha. Uma entidade pode
ter mais de uma arquitetura associada a si, mas necessita ao menos de uma. Existem vrias
formas de implementar efetivamente o funcionamento de uma entidade, mas duas delas se
destacam: o que se chama de descrio comportamental de uma entidade e aquilo que se
denomina descrio estrutural.
A sintaxe bsica para declarar uma arquitetura de uma certa entidade :
ARCHITECTURE nome_da_arquitetura OF nome_da_entidade IS
[declaraes diversas]
BEGIN
[cdigo]
END nome_da_arquitetura;
O nome da arquitetura a identificao que ser utilizada no caso de uso de
configuraes para instanciao de componentes baseado na entidade.

VHDL uma linguagem paralela ou concorrente


Linguagens tradicionais, como o C/C++, so linguagens onde, sob circunstncias
normais, o cdigo executado sempre seqencialmente, isto , um comando aps o outro.
Isso, em muitos casos, facilita a estruturao de algoritmos e a interpretao do cdigo.
No entanto, como o propsito primrio do VHDL descrever circuitos digitais,
necessrio lembrar que muitos elementos de um circuito trabalham simultaneamente, sem
uma ordem pr-estabelecida. Isso pode ser facilmente verificado em um circuito
combinacional qualquer como o circuito abaixo.

evidente que neste circuito cada porta lgica est produzindo uma sada, estvel ou
no, independentemente de qualquer outra coisa.
No VHDL a simulao do comportamento paralelo efetuada atravs de um simulador
de eventos discretos, onde feito o agendamento da alterao do valor de sinais de sada
(representando, por exemplo, a sada de uma porta lgica), conforme a lista de sensibilidade
existente para o sinal de sada em questo. A lista de sensibilidade usada para verificar se
uma operao deve ou no deve ser feita com o sinal em questo, ou seja, se ele ir ou no ir
sofrer alguma alterao. Note que o agendamento tambm possui o importante papel de
simular o comportamento real de um sinal fsico, visto que a mudana de um valor no ocorre
instantaneamente (simulando, por exemplo, o atraso introduzido por uma porta lgica).
possvel controlar esse atraso e agendamento, para efeitos de simulao, atravs do uso da
clusula AFTER do VHDL.

Descrio estrutural ou comportamental


Em VHDL possvel implementar uma entidade de vrias formas distintas,
usando arquiteturas distintas. Duas das principais formas de descrever entidades em
VHDL so as descries ditas comportamentais ou estruturais. Para exemplificar a
diferena, podemos considerar o exemplo de um mux 4:1.
ENTITY mux IS
PORT (a, b, c, d :
s0, s1 :
x :
END mux;

IN BIT;
IN BIT;
OUT BIT);

-- Descrio comportamental (
de fazer isso...)
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER;
BEGIN
select <= 0 WHEN s0 = 0
1 WHEN s0 = 1 AND
2 WHEN s0 = 0 AND
3;
x <= a AFTER 0.5 NS WHEN
b AFTER 0.5 NS WHEN
c AFTER 0.5 NS WHEN
d AFTER 0.5 NS;
END dataflow;

um exemplo, essa no a melhor forma

AND s1 = 0 ELSE
s1 = 0 ELSE
s1 = 1 ELSE
select = 0 ELSE
select = 1 ELSE
select = 2 ELSE

-- Descrio estrutural (tambm no a melhor soluo para um mux...)


ARCHITECTURE netlist OF mux IS
COMPONENT andgate
PORT( a, b, c :
IN bit;
c : OUT BIT);
END COMPONENT;
COMPONENT inverter

PORT( in1 :
IN BIT;
x :
OUT BIT);
END COMPONENT;
COMPONENT orgate
PORT( a, b, c, d : IN bit;
x :
OUT BIT);
END COMPONENT;
SIGNAL s0_inv, s1_inv, x1, x2, x3, x4 : BIT;
BEGIN
U1 : inverter(s0, s0_inv);
U2 : inverter(s1, s1_inv);
U3 : andgate(a, s0_inv, s1_inv, x1);
U4 : andgate(b, s0, s1_inv, x2);
U5 : andgate(c, s0_inv, s1, x3);
U6 : andgate(d, s0, s1, x4);
U7 : orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x);
END netlist;

Iniciando o trabalho com o VHDL


Como vimos na seo anterior, o cdigo VHDL apresenta trs elementos bsicos: as
bibliotecas, entidades e arquiteturas.
NOTA 1: O objetivo aqui possibilitar o desenvolvimento de conceitos de forma estruturada e
progressiva, razo pela qual por vezes iremos abordar novamente um conceito que foi
anteriormente estudado, a fim de permitir compreender melhor determinados aspectos da
linguagem.
NOTA 2: Iremos utilizar as ferramentas da Xilinx como ferramenta de apoio, mas todos os
princpios que vamos abordar podem ser igualmente utilizados com quaisquer outros
fabricantes. Apenas as ferramentas so distintas.

Primeiros projetos com o ambiente de trabalho ISE WebPack


O ambiente utilizado para os trabalhos de sntese e simulao o ISE WebPack da
Xilinx (ferramenta: Project Navigator).
ATENO: recomendamos aos alunos que tenham uma cpia local em sua casa ou notebook, a
fim de poder desenvolver melhor os trabalhos. O software na verso indicada gratuito e
pode ser baixado do endereo www.xilinx.com.
ATENO: recomenda-se que o estudante verifique se o ambiente no qual est trabalhando
est corretamente instalado e habilitado. Para tanto, os procedimentos listados no documento
TestesISE11-1.pdf devem ser executados com sucesso.
NOTA: em ambientes com direitos restritos (como o da universidade) o teste em uma
determinada porta USB no garante a operao do circuito nas demais. Ou utilize a mesma
porta, ou teste se todas as portas que voc pode utilizar esto funcionando corretamente ou
no.
Caso voc no veja o link da ferramenta diretamente no desktop do Windows/Linux, a
mesma pode ser acionada conforme mostra a figura abaixo:

Figura: acessando o ambientes do ISE.

A tela inicial tpica que ser aberta (caso no exista nenhum projeto anterior sendo
trabalhado) a tela abaixo. Caso o ambiente abra um projeto automaticamente, possvel
fechar o projeto acessando os menus File
Close Project.

Figura: Tela inicial do ambiente ISE.

Para iniciarmos um novo projeto, basta simplesmente clicar na opo New Project ou
ir diretamente no menu File
NewProject. Da mesma forma, no menu File temos as opes
de trabalho mais comuns, para abrir projetos, imprimir, salvar, abrir projetos recentes, entre
outras.
Ao iniciar um novo projeto, o ISE ir apresentar uma srie de telas de dilogo, as quais
so apresentadas e discutidas a seguir.

Figura: nome e local do projeto

A tela acima apresenta as configuraes iniciais de projeto do ambiente, onde


solicitado o nome do projeto, a localizao em disco (ou seja, onde ele ser salvo), uma
descrio do mesmo (opcional) e o tipo de fonte top do mesmo. No caso, temos que manter
essa opo em HDL.
ATENO: para evitar problemas, particularmente no uso de mquina do laboratrio,
recomenda-se que seja criado um subdiretrio especfico para os projetos em questo. Esse
subdiretrio deve ser localizado na mquina local no em rede e deve ser criado ou numa

partio de dados ou num diretrio vlido tipicamente, criar o subdiretrio diretamente no


desktop no funciona.
Depois de ter determinado o nome do projeto e o local onde o mesmo deve ser salvo,
a prxima caixa de dilogo ir solicitar as informaes exibidas na figura abaixo.

Figura: opes dependentes do kit ou dispositivo FPGA alvo do projeto.

importante ressaltar que as informaes constantes dessa tela so dependentes de


qual FPGA da Xilinx ser utilizada com o projeto.
Os dados solicitados so:
Product Category: famlia de dispositivos da Xilinx. Apenas restringe os dispositivos a
serem selecionados.
Family: especifica qual famlia de FPGA ser utilizada no projeto, dentre as diversas
famlias produzidas atualmente pela Xilinx. Serve como um filtro para a prxima
opo.
Device: determina qual chip FPGA est efetivamente sendo usado no projeto.
Package: determina o padro de encapsulamento usado no dispositivo selecionado
(podem ser vrios). O encapsulamento deve ser exatamente o desejado para a FPGA a
ser utilizada, ou a programao do dispositivo pode no funcionar corretamente.
Speed: determina a base de velocidade do dispositivo. No nvel que iremos trabalhar,
no relevante.
Top-Level Source Type: apenas apresenta a opo selecionada no dilogo anterior.
Synthesis Tool: na verso 11.1 do ISE, recebe o nome de XST note que o mesmo
sintetizador capaz de trabalhar com VHDL ou Verilog.
Simulator: iremos utilizar o simulador disponibilizado pela Xilinx no sute WebPack,
que o ISIM.
Preferred Language: deve ser selecionada a opo VHDL.
As demais opes podem ser deixadas inalteradas no ambiente.
NOTA: solicite os dados do kit ou FPGA a ser utilizado ao professor.
Spartan 3  CI: XC3S200, pinagem FT256

Spartan 3E  CI: XC3S500E, pinagem: FG320


O prximo dilogo apresentado pode ser visto na figura abaixo.

Figura: adicionar arquivo fonte ao projeto.

Essa caixa de dilogo permite adicionar um novo arquivo fonte ao projeto, acionando o
boto New Source. Note que o projeto pode ser criado sem nenhum arquivo fonte associado
ao mesmo, mas isso no usual (porm til no caso onde apenas se deseje reaproveitar
arquivos VHD de um projeto antigo).
Pressionando o boto New Source, as seguintes opes sero apresentadas:

Figura: opes de arquivo fonte.

Note que existem vrias opes para os arquivos fonte de projetos. No momento,
iremos explorar apenas a criao de mdulos VHDL (VHDL Module). O usurio deve colocar o
nome do arquivo, e pressionar o boto Next.
IMPORTANTE: arquivos fontes VHDL recebem a extenso .VHD. O nome do arquivo, de
acordo com o ambiente ISE e com a norma da linguagem, deve ser IDNTICO ao nome da
ENTIDADE a ser criada. Novamente, uma entidade DEVE ter o mesmo nome de seu arquivo.

No VHDL, um arquivo fonte contm uma nica entidade de trabalho.


A prxima tela de dilogo pode ser vista abaixo, onde podem ser determinadas as
portas presentes na entidade. No iremos utilizar esse mecanismo, mas sim descrever a
entidade diretamente no editor de cdigo. Deve-se pressionar o boto Next.

Figura: configurao da entidade.

Em seguida, pode ser visualizada uma tela de dilogo onde o usurio pode visualizar
um resumo da entidade criada. O boto Finish deve ser acionado para continuar com a criao
do projeto.

Figura: resumo da entidade.

A prxima caixa de dilogo apenas exibe o arquivo fonte adicionado ao projeto. Devese pressionar o boto Next.

Figura: entidade top adicionada ao projeto.

A tela de dilogo seguinte oferece a opo de adicionar arquivos VHD j existentes ao


projeto. No momento essa opo no ser utilizada e o aluno dever pressionar a tecla Next.

Figura: adicionar arquivos j existentes ao projeto [opcional].

Por fim, apresento um sumrio das caractersticas do projeto sendo criado. Ao


pressionar o boto Finish, seremos direcionados para a viso inicial do projeto.

Figura: resumo do projeto.

Podemos identificar os principais componentes do ambiente de trabalho, conforme


mostra a figura abaixo.

Figura: viso geral do ambiente de trabalho.

As cinco reas de trabalho mais utilizadas (fora os menus e atalhos do ambiente) so:

Viso do projeto: nesse menu drop-down, podemos visualizar qual tipo de fontes ou
modelo de trabalho o ambiente est considerando. Trs opes disponveis:
implementao (implementation), behavioral simulation (simulao comportamental)
e post-route simulation. No momento iremos utilizar apenas a opo de
implementao. A simulao ser tratada mais adiante. Mudar essa opo pode
mudar a viso da hierarquia e arquivos, bem como os utilitrios disponveis para uso.
Hierarquia, arquivos e plataforma FPGA alvo: nesse rea do ambiente podemos
visualizar qual a FPGA, quais so os arquivos, e como esses arquivos relacionam-se
entre si. Ao clicar sobre um arquivo .vhd, pode-se abrir a tela de edio do mesmo, a
fim de trabalhar com o cdigo em questo.

NOTA: um arquivo que seja componente de outra entidade maior aparece vinculado mesma.
Ou seja, para ser acessado, voc deve clicar no sinal + a esquerda do nome da entidade maior,
onde ser possvel visualizar os subcomponentes hierarquicamente inferiores e utilizados pela
mesma.

Utilitrios: so as ferramentas usadas para verificar o cdigo, sintetizar, rotear, simular


e outras opes disponveis conforme o projeto, o arquivo selecionado e a opo
global de trabalho. Iremos abordar gradualmente as principais opes disponveis.
Mensagens do ambiente: nessa zona da tela podem ser visualizadas as mensagens do
ambiente, geradas pelos diferentes utilitrios acionados em um determinado
processo. possvel ainda isolar os Warnings (avisos) e Errors (erros) gerados pelos
utilitrios.
Ambiente de trabalho: o ambiente de trabalho composto de vrias telas, as quais
podem ser acionadas clicando sobre a aba na parte inferior. No projeto em questo,
temos duas abas presentes: ckt_top.vhd e Design Summary. O sumrio do projeto
apresenta vrias informaes teis acerca do resultado do projeto, mas iremos
abordar essas informaes posteriormente. Para trabalho no cdigo, o usurio deve
selecionar uma aba de um arquivo vhd, onde ser apresentado o cdigo e ser dada a
possibilidade de edio do mesmo, conforme pode ser visto na figura abaixo.

Figura: tela de edio do cdigo.

Criando e especificando entidades


Basicamente, o cdigo de uma entidade VHDL vai apresentar as seguintes construes
iniciais, as quais podem ser utilizadas, expandidas ou editadas, conforme pode ser visto no
editor do ambiente ISE (obviamente, levemente diferente do cdigo abaixo).
Comandos relativos s bibliotecas e pacotes

Declarao da entidade

Declarao da arquitetura

library ieee;
use ieee.std_logic_1164.all;
entity OR_GATE is
port(
X:
in std_logic;
Y:
in std_logic;
F2:
out std_logic
);
end OR_GATE;
architecture behv of OR_GATE is
begin
F2 <= X or Y;
end behv;

Vamos iniciar a criao de uma nova entidade. Lembrando que a entidade descreve
como o circuito deve se conectar ao mundo exterior, podemos criar um circuito com as
seguintes entradas e sadas.

Figura: entidade.

Como o arquivo criado anteriormente como arquivo top-level para o projeto se


chamava ckt_top.vhd, nossa entidade, pela regra j destacada, dever receber o nome
ckt_top.
Uma dvida comum entender o que uma entidade top. Se voc lembrar que o
VHDL de fato uma linguagem de descrio de hardware, possvel pensar na entidade top
como um protoboard ou como uma placa ou rea onde todas as conexes so feitas entre os
vrios elementos dos circuitos. De fato, esses elementos sero, por sua vez, outras
entidades, que tambm so caixas que podem conter, por sua vez, entidades menores
interconectadas a fim de realizar alguma funo. Ou seja, um elemento auxiliar visual muito
til ao VHDL a viso estrutural do sistema sendo concebido em termos de diagrama em
blocos e suas interconexes, onde cada bloco possivelmente pode ter uma complexidade
interna varivel. Iremos abordar mais esse conceito posteriormente.
Prosseguindo com a descrio da nossa entidade, podemos escrever a mesma da
seguinte forma:
------------------------------------------ Company:
-- Engineer:
--- Create Date:
21:09:10 04/13/2010
-- Design Name:
-- Module Name:
ckt_top - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--- Dependencies:
--- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
-----------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ckt_top is
port(

Comentrios diversos introduzidos


automaticamente na criao do arquivo
(so interessantes, mas no estritamente
necessrios)

Declaraes de bibliotecas
automaticamente inseridas pelo
ambiente ISE
Declarao da entidade

A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
architecture Behavioral of ckt_top is
begin

Declarao da arquitetura inicialmente


inserida pelo ISE

end Behavioral;

Os pontos que devem ser destacados nessa declarao da entidade so os seguintes:

Comentrios de uma linha em VHDL podem ser inseridos usando o sinal -- a frente do
mesmo.
Notar que as portas/pinos declarados correspondem exatamente ao prottipo
pretendido, sendo os sinais A, B e C sinais de mesmo tipo e mesmo sentido, e o sinal Y
do mesmo tipo mas com sentido de sada.
Apesar do termo em VHDL ser PORTA, na prtica a idia associada a entidade a de
um PINO de um circuito integrado. Mas efetivamente, portas em VHDL so sinais
direcionais.
Sinais de mesmo tipo e sentido podem ser declarados individualmente, em vrias
linhas, ou podem ser simplesmente separados por vrgulas.
Cada linha declarando as portas/pinos da entidade deve ser terminada por ponto-evrgula, com exceo da ltima a qual fecha a declarao port e deve ser terminada
com ); .
Inicialmente, iremos trabalhar com dois modos de pinos/portas das entidades:
IN: representa o ingresso de um sinal na entidade. Um sinal/porta com modo
de operao IN s pode ser lido, jamais escrito.
OUT: representa a sada de uma informao de sinal da entidade. Um sinal
com modo OUT jamais pode ser lido, apenas escrito.

Quanto aos tipos de dados, existem dois tipos bsicos, fundamentais ao incio do
trabalho em VHDL, que devemos destacar:
bit: um tipo de dados nativo do VHDL, o qual permite representar a
informao de um nico bit. No recomendado o seu uso.
std_logic 1 : um tipo de dados pertencente a biblioteca
IEEE_STD_LOGIC_1164, a qual oferece o uso de um tipo binrio mais prximo
da realidade do que o tipo bit original do VHDL. Seu uso recomendado e a
biblioteca inclusa por default nas novas entidades criadas a partir do ISE.
Como estamos introduzindo apenas tipos binrios simples, importante destacar que
os valores representativos do 0 e do 1 so, respectivamente, 0 e 1 ou seja, o nmero 0 e o
nmero 1 dentro de aspas simples, ou apstrofos. Iremos ver em seguida que sequncias de
bits, por sua vez, so representadas dentro de aspas duplas. Exemplificando:
Vlidos:
1
0

1010

01010

Invlidos:
1

Maiores informaes sobre a biblioteca IEEE_STD_LOGIC podem ser obtidas aqui:


http://www.cs.sfu.ca/~ggbaker/reference/std_logic/

1010

O smbolo de subscrito ou underline pode ser usado em qualquer literal numrico no


VHDL, sem prejuzo a informao. Ou seja:
10100011 o mesmo que 1010_0011
103456 o mesmo que 103_456

Adicionando o comportamento do circuito


Como j foi dito, o comportamento do circuito especificado dentro da arquitetura do
mesmo. Nesse caso, vamos imaginar que o circuito que se deseja implantar seja o circuito
abaixo:

Para que seja possvel realizar e descrever esse circuito dentro da arquitetura,
devemos introduzir os primeiros operadores em VHDL.
Operador

Sintaxe

Exemplo

Atribuio simples de sinais


Operadores lgicos

Identificador <= expresso;


and, or, not, xor, nand, nor, xnor

Y <= a xor b;
Y <= (a and b) xor c;

AVISO: Apesar de a linguagem prever uma prioridade de operadores, no caso de expresses


lgicas FORTEMENTE recomendado que expresses que devam ser avaliadas primeiramente
sejam destacadas pelo uso apropriado de PARNTESES.
Abrindo o cdigo da arquitetura e usando os operadores lgicos e de atribuio,
podemos, portanto, descrever o comportamento do circuito acima com uma nica expresso
de cdigo:
architecture Behavioral of ckt_top is
begin
y <= (a and b) xor (not(a) and c);
end Behavioral;

Dado que temos o cdigo completo descrevendo tanto a entidade em si e a


arquitetura de sua operao, podemos agora iniciar o processo de verificao do cdigo,
simulao e sntese.
Verificao da sintaxe do cdigo
Apenas para verificao, o cdigo que voc deve ter associado ao arquivo ckt_top.vhd,
neste ponto, (eliminando comentrios):
library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ckt_top is
port(
A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
architecture imp of ckt_top is
begin
y <= (a and b) xor (not(a) and c);
end imp;

Na viso de projeto de implementao, com a seo de utilitrios Synthesize, e com o


utilitrio Check Sintax, pode-se acionar a verificao da sintaxe para implantao do circuito.
Isso pode ser feito simplesmente clicando-se com o boto esquerdo do mouse duas vezes
sobre o item (destacado na figura abaixo) ou com o boto direito e selecionando a opo Run
ou ReRun.

Figura: acionando a verificao de sintaxe.

Diversas mensagens de retorno podem surgir na rea de mensagens do ambiente, no


painel Console. Caso existam erros ou avisos quanto verificao efetuada, tambm sero
destacados nas mensagens de console, mas podem ser vistos isoladamente no painel Errors ou
Warnings.
NOTA: O ambiente ISE ainda no chegou a um nvel de evoluo onde a indicao de erros ou
mesmo warnings seja de grande valia ao usurio. Dessa forma, o estudante no deve se
assustar com um grande nmero de erros  muitas vezes o esquecimento de um simples
ponto-e-vrgula pode causar uma avalanche de mensagens de erro.
No caso de um cdigo sem erros, uma sada tpica no console seria algo no formato:

Started : "Check Syntax for ckt_top".


=========================================================================

*
HDL Compilation
*
=========================================================================
Compiling vhdl file "E:/aulas/TESTE/ckt_top.vhd" in Library work.
Entity <ckt_top> compiled.
Entity <ckt_top> (Architecture <imp>) compiled.
Process "Check Syntax" completed successfully

No caso da existncia de erros no cdigo (que devem ser resolvidos antes de


prosseguir com o restante do processo), uma sada possvel seria a apresentada abaixo:
Started : "Check Syntax for ckt_top".
=========================================================================
*
HDL Compilation
*
=========================================================================
Compiling vhdl file "E:/aulas/TESTE/ckt_top.vhd" in Library work.
Entity <ckt_top> compiled.
ERROR:HDLParsers:164 - "E:/aulas/TESTE/ckt_top.vhd" Line 14. parse error, unexpected
XOR, expecting SEMICOLON
Process "Check Syntax" failed

Note que o erro acima foi gerado apenas pela retirada dos parnteses na clusula de
atribuio (ou seja, o cdigo ficou y <= a and b xor not(a) and c;) e note mais ainda que a
mensagem de erro indica a falta de um ponto-e-vrgula o que, de fato, no o problema no
cdigo.
AVISO IMPORTANTE: o cdigo ter sua sintaxe correta NO significa afirmar que ser
sintetizvel e NO significa dizer que o circuito ir funcionar da forma esperada. A sntese
pode apresentar problemas, assim como o circuito deve ser testado a fim de verificar sua
operao.

Sntese do circuito
Uma vez que a sintaxe do circuito esteja correta, pode-se proceder sntese do
mesmo, simplesmente clicando (duas vezes) diretamente sobre a opo Synthesize, conforme
mostra a figura abaixo (novamente, ao clicar com o boto direito, tambm pode-se selecionar
a opo Run ou ReRun).

Figura: acionando o utilitrio de sntese.

Caso seja possvel a sntese do circuito e no exista nenhum erro residual de sintaxe,
uma sada tpica ao processo (mensagens geradas no console) seria:
IMPORTANTE: sempre salve os arquivos do projeto, a fim de se certificar que a sntese est
ocorrendo com as ltimas alteraes efetuadas!!!
Reading design: ckt_top.prj
=========================================================================
*
HDL Compilation
*
=========================================================================
Compiling vhdl file "E:/aulas/TESTE/ckt_top.vhd" in Library work.
Architecture imp of Entity ckt_top is up to date.
=========================================================================
*
Design Hierarchy Analysis
*
=========================================================================
Analyzing hierarchy for entity <ckt_top> in library <work> (architecture <imp>).

=========================================================================
*
HDL Analysis
*
=========================================================================
Analyzing Entity <ckt_top> in library <work> (Architecture <imp>).
Entity <ckt_top> analyzed. Unit <ckt_top> generated.

=========================================================================
*
HDL Synthesis
*
=========================================================================
Performing bidirectional port resolution...
Synthesizing Unit <ckt_top>.
Related source file is "E:/aulas/TESTE/ckt_top.vhd".
Found 1-bit xor2 for signal <Y>.
Unit <ckt_top> synthesized.

=========================================================================
HDL Synthesis Report
Macro Statistics
# Xors
1-bit xor2

: 1
: 1

=========================================================================
=========================================================================
*
Advanced HDL Synthesis
*
=========================================================================

=========================================================================
Advanced HDL Synthesis Report
Macro Statistics
# Xors
1-bit xor2

: 1
: 1

=========================================================================
=========================================================================
*
Low Level Synthesis
*
=========================================================================
Optimizing unit <ckt_top> ...
Mapping all equations...
Building and optimizing final netlist ...
Found area constraint ratio of 100 (+ 5) on block ckt_top, actual ratio is 0.

Final Macro Processing ...


=========================================================================
Final Register Report
Found no macro
=========================================================================
=========================================================================
*
Partition Report
*
=========================================================================
Partition Implementation Status
------------------------------No Partitions were found in this design.
------------------------------=========================================================================
*
Final Report
*
=========================================================================
Clock Information:
-----------------No clock signals found in this design
Asynchronous Control Signals Information:
---------------------------------------No asynchronous control signals found in this design
Timing Summary:
--------------Speed Grade: -5
Minimum
Minimum
Maximum
Maximum

period: No path found


input arrival time before clock: No path found
output required time after clock: No path found
combinational path delay: 5.753ns

=========================================================================
Process "Synthesis" completed successfully

Uma sntese com problemas pode exigir diversas intervenes no cdigo VHDL. Muito
embora o relatrio acima tenha vrias informaes teis, ainda no vamos explorar ele por
completo, mas apenas destacar a mensagem final, a qual indica uma sntese efetuada com
sucesso.
Mapeando as portas nos pinos fsicos da FPGA
O prximo passo considerando a implementao fsica do circuito definir como as
portas/pinos da entidade mais abrangente do projeto a entidade TOP ir se relacionar com
os pinos fsicos da FPGA. Note que muitas das entidades compreendidas num projeto podem
ter todos os seus sinais trafegando internamente ao circuito da FPGA, e apenas alguns dos
sinais efetivamente serem ligados ao mundo externo. Para isso, contudo, necessrio
indicar qual porta ir se conectar a qual pino. Muito embora exista o utilitrio PlanAhead do
ISE, por diversas razes por vezes mais simples editar diretamente o arquivo de restries de
projeto e esse ser o mtodo usado rotineiramente.
Ainda assim, o processo muito simples. Conforme mostra a figura abaixo, existem
diversos tipos de restries de projeto (User Constraints) que podem ser aplicadas ao mesmo.
Para a questo de pinos, pura e simplesmente, devemos considerar a opo aonde consta

FloorPlan Area/IO/Logic (PlanAhead). Clicando duas vezes sobre a opo ou com o boto
direito e opo Run/ReRun, o utilitrio PlanAhead ser acionado.

Figura: acionando o utilitrio PlanAhead.

Caso surja a caixa de dilogo abaixo, o usurio deve apenas concordar com a criao
de um novo arquivo UCF.

Figura: opo de criao do arquivo UCF via PlanAhead.

A tela inicial (pode surgir uma caixa de dilogo intermediria que pode ser desprezada)
do PlanAhead na criao de um novo arquivo UCS ser a vista na figura abaixo:

Figura: viso inicial do PlanAhead.

Essa a viso do dispositivo (que tem sua finalidade), mas inicialmente estamos
interessados apenas nos pinos que devem ser usados, para tanto, devemos selecionar a viso
Package, conforme destacado na figura acima. Abaixo, temos a viso do PlanAhead com a
opo Package selecionada.

Figura: PlanAhead com o modo Package selecionado.

Essa viso oferece justamente uma viso rpida dos pinos da FPGA (e dos pinos
especificamente da FPGA selecionada na criao do projeto). A seo destacada na figura
acima a rvore de seleo onde pode-se ter acesso aos pinos disponveis da entidade top e
que devero ser mapeados FPGA fsica. Ao abrir a caixa, os sinais sero exibidos e ao clicar
sobre um dos sinais, sero exibidas as opes de trabalho com o mesmo. A figura abaixo
mostra essa situao.

Figura: Selecionando um sinal para associao com o pino da FPGA.

Note que nas opes associadas ao sinal, existe uma caixa de texto Site. Nesse local
pode ser entrado manualmente qual o pino que se deseje utilizar. No caso deste projeto, faz
sentido selecionar trs chaves (dip switches) para os sinais de entrada (essas chaves mecnicas
esto sujeitas ao efeito de bouncing, e no existe circuito de debounce prvio, que, caso
necessrio, dever ser feito na prpria FPGA em VHDL) e um LED para sada.

As informaes de pinagem da placa e configurao de cada dispositivo dos kits


constam de outros documentos (solicite ao professor), porm para esse caso, podemos
destacar:
Kit Spartan 3
Funo
Dip-switch
Dip-switch
Dip-switch
LED

Dispositivo
SW0
SW1
SW2
LD0

Pino
F12
G12
H14
K12

Funo
Dip-switch
Dip-switch
Dip-switch
LED

Dispositivo
SW0
SW1
SW2
LD0

Pino
L13
L14
H18
F12

Kit Spartan 3E

A figura abaixo apresenta a insero das informaes. Note que a localizao para cada
sinal deve ser confirmada, clicando sobre o boto Aply.

Figura: Entrando e visualizando a localizao dos pinos.

Note que existem outras informaes necessrias configurao do pino, as quais so


fortemente dependentes do circuito ao qual a FPGA est conectada. Informaes como o
padro de I/O (TTL, CMOS, etc), se necessrio ou no proteo via pull-up ou pull-down,
entre diversas outras. Por essa razo, justamente, recomendado trabalhar com os arquivos j
adequados aos kits. Porm, exibida uma configurao de um dos pinos na figura abaixo, de
acordo com as informaes repassadas no kit. Deve-se clicar sobre a aba Configure (ressaltada
na figura), editar as configuraes de acordo com a situao fsica do circuito ou kit e ento
aplicar as configuraes pressionando o boto Apply.

Figura: Demais configuraes dos pinos.

Figura: Estado final da configurao dos pinos.

Aps ingressar os pinos para cada um dos sinais desejados e configurar os mesmos, o
arquivo dever ser salvo (vide figura acima) e o utilitrio PlanAhead poder ser encerrado. O
resultado desse processo a adio ao projeto de um arquivo com o nome do projeto e com a
extenso UCF. De fato, esse arquivo um arquivo texto e seu contedo exibido abaixo:
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET

"A"
"A"
"A"
"B"
"B"
"B"
"C"
"C"
"C"
"Y"
"Y"
"Y"

LOC = L13;
IOSTANDARD
PULLUP;
LOC = L14;
IOSTANDARD
PULLUP;
LOC = H18;
IOSTANDARD
PULLUP;
LOC = F12;
IOSTANDARD
DRIVE = 8;

= LVTTL;

= LVTTL;

= LVTTL;

= LVTTL;

No caso de trabalho com o kit de desenvolvimento da Xilinx (kits Spartan 3 e Spartan


3E), o aluno deve ter a disposio solicitar ao professor dois arquivos distintos:
Spartan3.ucf e Spartan3e.ucf. Eles so, respectivamente, indicados para trabalho com um ou
com o outro kit. No caso do trabalho com os arquivos, TODOS os pinos no utilizados devem

ser apagados e apenas deve ser renomeado o sinal. Pegando o arquivo original j com as
entradas desnecessrias eliminadas, teramos (para a Spartan3E):
#####################################################
### SPARTAN-3E STARTER KIT BOARD CONSTRAINTS FILE
#####################################################
# ==== Discrete LEDs (LED) ====
# These are shared connections with the FX2 connector
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
# ==== Slide Switches (SW) ====
NET "SW<0>" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ;
NET "SW<1>" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ;
NET "SW<2>" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP ;

Editando o arquivo de forma a refletir os sinais que desejamos mapear com os


respectivos pinos, temos:
#####################################################
### SPARTAN-3E STARTER KIT BOARD CONSTRAINTS FILE
#####################################################
# ==== Discrete LEDs (LED) ====
# These are shared connections with the FX2 connector
NET "Y LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
# ==== Slide Switches
NET "A" LOC = "L13" |
NET "B" LOC = "L14" |
NET "C" LOC = "H18" |

(SW) ====
IOSTANDARD = LVTTL | PULLUP ;
IOSTANDARD = LVTTL | PULLUP ;
IOSTANDARD = LVTTL | PULLUP ;

O arquivo deve ser SALVO, somente com a extenso UCF (cuidado para no gerar um
arquivo ucf.txt  no bloco de notas ou wordpad, salve o arquivo com o nome completo, entre
aspas, na forma entidade.ucf). O arquivo tambm deve ter o nome da entidade que se
deseja mapear os pinos, usualmente a entidade top.
AVISO: caso o arquivo esteja sendo editado/criado via Notepad ou WordPad ou Vi, o usurio
deve adicionar o arquivo UCF ao projeto, indo no menu do ISE ProjectAdd Source,
selecionando e adicionando o mesmo ao projeto, sob pena de o arquivo em questo ser
desconsiderado. De fato, na verso atual do ISE, TODOS os arquivos devem ser sempre
adicionados aos projetos (sejam UCFs ou VHDs).

Processo de gravao no kit de trabalho


Uma vez que todos os pinos estejam associados FPGA, podemos iniciar os demais
processos, que consistem na implementao fsica da sntese dentro da FPGA. Para tanto,
conforme mostra a figura abaixo, primeiro necessrio implementar o projeto, selecionando o
utilitrio Implement Design, o qual ir traduzir a sntese para a tecnologia da FPGA, mapear,
posicionar e rotear o projeto como um todo. Em projetos de grande porte, essa etapa pode
demandar um tempo considervel para sua execuo.

Figura: Implementando o projeto.

Em alguns casos a sntese pode transcorrer sem maiores problemas, porm o processo
de implementao gere erros ou avisos. Isso usualmente pode ser contornado via opes de
projeto dependentes especificamente da Xilinx. E usualmente refletem decises de projeto
que no so as mais adequadas. Uma implementao adequada gera um resultado no console
conforme o abaixo (reduzido em tamanho):
Command Line: E:\Xilinx\11.1\ISE\bin\nt\unwrapped\ngdbuild.exe -ise TESTE.ise
-intstyle ise -dd _ngo -nt timestamp -i -p xc3s500e-fg320-5 ckt_top.ngc
ckt_top.ngd
Reading NGO file "E:/aulas/TESTE/ckt_top.ngc" ...
Reading in constraint information from 'ckt_top.ucf'...
Gathering constraint information from source properties...
Done.
Resolving constraint associations...
Checking Constraint Associations...
Done...
Checking Partitions ...
Checking expanded design ...

Process "Translate" completed successfully


Using target part "3s500efg320-5".

Mapping design into LUTs...


Running directed packing...
Running delay-based LUT packing...
Running related packing...
Updating timing models...
Design Summary:
Number of errors:
0
Number of warnings:
0
Logic Utilization:
Number of 4 input LUTs:
1 out of
9,312
1%
Logic Distribution:
Number of occupied Slices:
1 out of
4,656
1%
Number of Slices containing only related logic:
1 out of
1 100%
Number of Slices containing unrelated logic:
0 out of
1
0%
*See NOTES below for an explanation of the effects of unrelated logic.
Total Number of 4 input LUTs:
1 out of
9,312
1%
Number of bonded IOBs:
4 out of
232
1%

Average Fanout of Non-Clock Nets:

1.00

Mapping completed.
See MAP report file "ckt_top_map.mrp" for details.
Process "Map" completed successfully

Design Summary Report:


Number of External IOBs

4 out of 232

1%

Number of External Input IOBs


Number of External Input IBUFs
Number of LOCed External Input IBUFs

3
3
3 out of 3

100%

Number of External Output IOBs


Number of External Output IOBs
Number of LOCed External Output IOBs

1
1
1 out of 1

100%

Number of External Bidir IOBs

Number of Slices
Number of SLICEMs

1 out of 4656
0 out of 2328

1%
0%

Starting Placer

Starting Router

Generating Pad Report.


All signals are completely routed.

Number of error messages: 0


Number of warning messages: 0
Number of info messages: 1
Writing design to file ckt_top.ncd
PAR done!
Process "Place & Route" completed successfully
Started : "Generate Post-Place & Route Static Timing".
Loading device for application Rf_Device from file '3s500e.nph' in environment
E:\Xilinx\11.1\ISE.
"ckt_top" is an NCD, version 3.2, device xc3s500e, package fg320, speed -5
Analysis completed Tue Apr 20 17:28:59 2010
-------------------------------------------------------------------------------Generating Report ...
Number of warnings: 0
Total time: 2 secs
Process "Generate Post-Place & Route Static Timing" completed successfully

A etapa seguinte consiste na gerao do arquivo de programao. Deve ser acionado o


utilitrio destacado na figura abaixo.

Figura: Gerando o arquivo de programao.

Nesse ponto j se torna necessria a conexo da placa do kit de desenvolvimento ao


computador. A conexo dependente de cada kit, mas o Windows deve reconhecer a placa
como um dispositivo vlido de sistema.
A prxima etapa envolve a configurao do dispositivo, e pode ser acionada atravs do
utilitrio Configure Target Device, conforme mostra a figura abaixo.

Figura: Iniciando a configurao do dispositivo.

Uma nova caixa de dilogo pode surgir, pedindo aprovao para criao de um novo
projeto no Impact, com o que o usurio deve concordar.

Figura: Dilogo.

Um novo software ser executado Impact no qual a opo a ser selecionada a


opo Boundary Scan (nesse ponto a placa deve estar conectada e ENERGIZADA), conforme
mostra a figura abaixo:

Figura: Viso inicial do Impact.

Sobre a tela que surgir (vide mensagem e figura abaixo), o aluno dever clicar com o
boto direito e selecionar a opo indicada na figura Initialize Chain. Isso far a deteco da
placa e, se no ocorrer nenhum erro, o Impact ir exibir uma nova mensagem de dilogo,
perguntando se deve continuar e associar os arquivos de configurao a resposta dever ser
positiva.

Figura: Varredura pela FPGA.

Figura: Dilogo sobre configurao da FPGA.

Ao selecionar a opo Yes, diversas caixas de dilogo iro surgir, questionando sobre
os arquivos de configurao que devem ser associados a cada um dos dispositivos detectados
note que o Impact detecta apenas os dispositivos Xilinx. Note que a cada dilogo, o ambiente
ir destacar com a cor verde qual o dispositivo a ser configurado. No nosso caso, queremos
configurar apenas a FPGA e para os demais dispositivos detectados, bypassar (Bypass) a
configurao, conforme mostra a figura abaixo. O arquivo a ser selecionado para a
configurao ser o arquivo com o nome da entidade/projeto com a extenso bit.

Figura: Selecionando o arquivo de configurao.

No caso do ambiente questionar a opo de gravao de Flashs PROMs, o usurio


dever seleciona a opo No (isso para os projetos padres).

Figura: Configurao da Flash PROM.

Figura: Bypass da configurao dos demais dispositivos.

Figura: Bypass da configurao dos demais dispositivos.

Uma janela apresentando um relatrio final (figura abaixo) deve surgir, e o aluno
dever clicar apenas na opo Ok.

Figura: Viso geral da configurao.

Para efetivamente programar o dispositivo, o usurio dever selecionar o mesmo com


o mouse e clicar com o boto direito, selecionando a opo de programao destacada na
figura abaixo.

Figura: Ordenando a programao.

Caso a programao seja bem sucedida, a FPGA passa a apresentar o novo hardware
configurado o qual pode ser testado fisicamente e a mensagem de sucesso abaixo ser
visvel.

Figura: Sucesso na programao.

NOTA: o processo acima destacado aplicvel diretamente ao ISE WebPack 11.1. Mas destacase que, alm da documentao do software, as mudanas observadas a cada verso no so
to significativas e o processo permanece relativamente estvel entre elas. Para verses
distintas, favor referir a devida documentao.

Introduzindo novos sinais nos sistemas


Consideremos agora o circuito abaixo. Para tanto, no se esquea de criar um novo
projeto, com os mesmos cuidados tomados anteriormente.

C
Y
D

Figura: Circuito combinacional exemplo.

Efetivamente, identificamos que esse circuito apresenta 5 sinais de entrada A, B, C,


D, E e um sinal de sada Y. A declarao de sua entidade ser, portanto, na forma:
entity ckt2 is
port(
A,B,C,D,E: in std_logic;
Y: out std_logic);
end ckt2;

Ao visualizamos a implementao da funo do circuito via arquitetura, evidente que


podemos recorrer tcnica anterior, porm o cdigo ficar de difcil visualizao, em razo do
tamanho da funo lgica resultante.
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ckt2 is
port(

A,B,C,D,E: in std_logic;
Y: out std_logic);
end ckt2;
architecture imp of ckt2 is
begin
y <= ((a and b) xor (not(a) and c)) and ((c and d) and (d nor e));
end imp;

Evidentemente o cdigo acima difcil visualizao e sujeito a erros. Se lembrarmos


que o VHDL uma linguagem que descreve um hardware, podemos criar uma viso
alternativa, onde pensamos nas portas e nas trilhas ou fios que conectam esses
dispositivos. Efetivamente, todo caminho fsico entre dois pontos em VHDL um sinal.
Novos sinais ou sinais de apoio podem ser declarados na seo de declaraes de uma
arquitetura, a qual ocorre antes do Begin. A sintaxe bsica existem outras opes que
ainda no iremos explorar:
signal nome1, nome2, nome3 : tipo;

Isso deve ser feito na seo de declaraes da arquitetura:


ARCHITECTURE nome_da_arquitetura OF nome_da_entidade IS
[declaraes diversas]
BEGIN
[cdigo]
END nome_da_arquitetura;

Olhando o circuito, podemos identificar e nomear todos os caminhos intermedirios,


conforme destaca a figura abaixo:

A
T1
B

T2
T3

T4

C
Y
T6
D

T5

T7
E

Figura: Trilhas de conexo entre as portas lgicas.

Ou seja, baseada na figura acima, temos 7 sinais adicionais. Adicionando os mesmos na


nossa arquitetura, temos:
architecture imp of ckt2 is
signal T1, T2, T3, T4, T5, T6, T7: std_logic;
begin
end imp;

Refletindo as relaes lgicas intermedirias visveis a cada uma das trilhas ressaltadas,
temos, ento:

architecture imp of ckt2 is


signal T1, T2, T3, T4, T5, T6, T7: std_logic;
begin
T1 <= a and b;
T2 <= not a;
T3 <= T2 and c;
T4 <= T1 xor T3;
T5 <= T6 and T7;
T6 <= c and d;
T7 <= d nor e;
Y <= T4 and T5;
end imp;

Note que o cdigo acima, associado com a viso do hardware de correo muito
mais fcil e permite a criao de circuitos de tamanho arbitrariamente grande. Porm iremos
ver outro recurso para conectar entidades distintas que ir tornar esse mecanismos ainda mais
flexvel, permitindo a descrio de um esquemtico arbitrrio de um circuito digital.
Uma observao de EXTREMA importncia deriva do fato que o cdigo acima no tem
ORDEM de interpretao ou execuo. Execuo no se aplica, pois o cdigo no ser
executado  de fato, ser gerado um circuito fsico a partir da representao do cdigo.
Todos os princpios aplicveis a um circuito fsico digital tambm se aplicam, portanto, ao
cdigo. Dessa forma, no existe (nesse nvel de cdigo) precedncia de um comando sobre o
outro  TODOS as atribuies esto ocorrendo ao mesmo tempo, independentemente ou
concorrentemente umas com as outras. Por essa razo, afirma-se que o cdigo no nvel de
encapsulamento do arquitetura um cdigo PARALELO ou CONCORRENTE. De fato,
exatamente o mesmo resultado ou seja, o mesmo circuito obtido na forma:
architecture imp of ckt2 is
signal T1, T2, T3, T4, T5, T6, T7: std_logic;
begin
Y <= T4 and T5;
T4 <= T1 xor T3;
T1 <= a and b;
T3 <= T2 and c;
T5 <= T6 and T7;
T6 <= c and d;
T7 <= d nor e;
T2 <= not a;
end imp;

ou em qualquer outra ordem de escrita. Ou seja, a ordem dos comandos em VHDL, no nvel
direto da arquitetura no altera o resultado fsico obtido. Isso necessrio para representar
efetivamente o comportamento de um circuito lgico combinacional, onde, efetivamente,
uma porta no apresenta relao de precedncia sobre as demais, sendo que todas operam
em conjunto.

Lista de palavras reservadas em VHDL 87 e VHDL 93 (com asterisco)


Lembrando que esses nomes no so vlidos como identificadores:

abs
access

disconnect label
downto
library

package
port

sll*
sra*

after
alias
all
and
architecture
array
assert
attribute
begin
block
body
buffer
bus
case
component
configuration
constant

else
elsif
end
entity
exit
file
for
function
generate
generic
group*
guarded
if
impure*
in
inertial*
inout
is

linkage
literal*
loop
map
mod
nand
new
next
nor
not
null
of
on
open
or
others
out

postponed*
procedure
process
pure*
range
record
register
reject*
rem
report*
return
rol*
ror*
select
severity
signal
shared*
sla*

srl*
subtype
then
to
transport
type
unaffected*
units
until
use
variable
wait
when
while
with
xnor*
xor

Resumo
Estrutura
Comentrios
Entidades

Identificadores

Modos
portas

de

Sintaxe
-- Comentrio
entity nome_da_entidade is
port(
nome1,nome2: modo tipo;
nome3: modo tipo);
end nome_da_entidade;
Qualquer nome iniciado por
letra ou por underline e que
no
seja
uma
palavra
reservada da linguagem
IN ou OUT

Tipos de dados

std_logic
bit

Atribuio
simples
de
sinais
Operadores
lgicos
Declarao de
novos sinais

identificador <= expresso;

and, or, not, xor, nand, nor,


xnor
signal nome1, nome2, nome3 :
tipo;

Exemplo
-- Isso um comentrio de uma linha
entity ckt_top is
port(
A,B,C: in std_logic;
Y: out std_logic);
end ckt_top;
Vlido: um_nome
Invlido: 3nome

port(
A,B,C: in std_logic;
Y: out std_logic);
Valor para um nico bit:
0 ou 1
Valor para uma sequncia de bits
00011
Y <= a xor b;

Y <= (a and b) xor c;


architecture imp of ckt2 is
signal A: std_logic;
begin

Вам также может понравиться