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

1

UNIVERSIDADE FEDERAL DO ESPRITO SANTO UFES


CENTRO UNIVERSITRIO DO NORTE DO ESPRITO SANTO CEUNES
DEPARTAMENTO DE ENGENHARIA E COMPUTAO DECOM
LABORATRIO DE CIRCUITOS ELTRICOS






FPGA COM A PLACA EXSTO
EP2C8Q208C8









Apostila desenvolvida por
Arthur Carlos Calvi de Bone
e Mariniel Souza Galvo







So Mateus
Maro 2013
2

Sumrio
1. INTRODUO .................................................................................................................................. 4
1.1. ARQUITETURA.......................................................................................................................... 6
1.2. DESIGN DIGITAL ....................................................................................................................... 6
1.3. APLICAES ............................................................................................................................. 8
1.4. INTRODUO AO KIT DE DESENVOLVIMENTO .......................................................................... 9
1.4.1. A PLATAFORMA FPGA ...................................................................................................... 9
1.4.2. SWITCHES ...................................................................................................................... 10
1.4.3. CHAVES .......................................................................................................................... 11
1.4.4. DISPLAY DE SETE SEGMENTOS ........................................................................................ 12
1.4.5. LEDs ............................................................................................................................... 13
1.4.6. DISPLAY LCD ................................................................................................................... 14
1.4.7. COMUNICAO SERIAL RS-232 ....................................................................................... 15
1.4.8. MEMRIA FLASH ............................................................................................................ 16
1.4.9. PORTAS DE EXPANSO ................................................................................................... 17
1.4.10. OSCILADOR .................................................................................................................... 19
1.4.11. RESET ............................................................................................................................. 19
2. DESING DIGITAL ............................................................................................................................ 20
2.1. LINGUAGEM DE DESCRIO DE HARDWARE .......................................................................... 20
2.1.1. Componentes de um projeto VHDL ................................................................................ 21
2.2. SINAIS .................................................................................................................................... 26
2.3. Semntica da linguagem VHDL ............................................................................................... 27
2.3.1. Elementos Lxicos .......................................................................................................... 27
2.3.2. Estruturas para descrio de comportamento ................................................................ 30
2.3.3. Expresses e operadores ................................................................................................ 32
2.4. Descrio de Comportamento (Process) ................................................................................. 38
2.5. Controle da Sequncia ........................................................................................................... 41
2.5.1. Comando if then............................................................................................................. 42
2.5.2. Comando if then else...................................................................................................... 42
2.5.3. Comando Case ............................................................................................................... 43
2.5.4. COMANDO WHILE LOOP................................................................................................. 44
2.5.5. COMANDO FOR LOOP .................................................................................................... 45
2.5.6. COMANDO NEXT E EXIT .................................................................................................. 45
3

3. TUTORIAL QUARTUS II .................................................................................................................. 47
3.1. INTRODUO ......................................................................................................................... 47
3.2. INSTALAO DE HARDWARE .................................................................................................. 47
3.3. INSTALAO DE SOFTWARE ................................................................................................... 47
3.4. PROGRAMA TESTE ................................................................................................................. 47
3.5. COMPILANDO E QUEIMANDO O PROJETO. ......................................................................... 50
3.6. PROJETOS .............................................................................................................................. 51
3.6.1. CRIAO DO PROJETO DE UM CIRCUITO LGICO ........................................................... 51
3.6.2. CRIAO DE BLOCOS LGICOS A PARTIR DE CDIGO VHDL ............................................ 54
3.6.3. SIMULAO ................................................................................................................... 56
3.7. DECLRAO DE COMPONENTES ............................................................................................. 62
3.8. ARQUITETURAS MULTI-PROCESSO ......................................................................................... 63
3.8.1. PROCESS SIMPLIFICADO ................................................................................................. 64
3.8.2. DRIVERS E ATRIBUIO DE SINAL ................................................................................... 66
3.8.3. SINAIS COM MAIS DE UM DRIVER ................................................................................... 68
3.9. ESPECIFICAO DA ESTRUTURA DO SISTEMA ......................................................................... 70
3.9.1. INSTANCIAO DIRETA................................................................................................... 72
3.9.2. COMPONENTES E CONFIGURAES ............................................................................... 74
4. APLICAES E PRTICAS ............................................................................................................... 77
4.1. PRTICA 1 .............................................................................................................................. 77
5. BILIOGRAFIA ................................................................................................................................. 79










4

1. INTRODUO

A grande maioria dos chips que encontramos em nosso dia-a-dia, circuitos que
acompanham as televises, celulares, etc., j vem todos pr-programados, isto , com
as suas funcionalidades todas definidas no ato de fabricao. Surgiu ento uma
categoria nova de hardware reconfigurvel, o qual tem as suas funcionalidades
definidas exclusivamente pelos usurios e no pelos fabricantes. Dentre uma grande
gama de hardware reconfigurvel podemos destacar o Arranjo de Portas Programvel
em Campo FPGA (Field Programmable Gate Array).
Um FPGA um dispositivo semicondutor que largamente utilizado para o
processamento de informaes digitais. Foi criado pela Xilinx Inc., e teve o seu
lanamento no ano de 1985 como um dispositivo que poderia ser programado de
acordo com as aplicaes do usurio (programador). O FPGA composto basicamente
por trs tipos de componentes: blocos de entrada e sada (IOB), blocos lgicos
configurveis (CLB) e chaves de interconexo (Switch Matrix). Os blocos de entrada e
sada (I/O) formam uma borda ao redor do dispositivo. Cada um desses blocos pode
servir como entrada, sada ou acesso bi-direcional a outros pinos de I/O. Os blocos
lgicos so dispostos de forma bidimensional, as chaves de interconexo so dispostas
em formas de trilhas verticais e horizontais entre as linhas e as colunas dos blocos
lgicos como mostrado na figura.


5

CLB (Configuration Logical Blocks): Circuitos idnticos, construdos pela
reunio de flip-flops (entre 2 e 4) e a utilizao de lgica combinacional. Utilizando os
CLBs, um usurio pode construir elementos funcionais lgicos.
IOB (Input/Output Block): So circuitos responsveis pelo interfaceamento das
sadas provenientes das sadas das combinaes de CLBs. So basicamente buffers,
que funcionaro como um pino bidirecional entrada e sada do FPGA.
Switch Matrix (chaves de interconexes): Trilhas utilizadas para conectar os
CLBS e IOBS. O terceiro grupo composto pelas interconexes. Os recursos de
interconexes possuem trilhas para conectar as entradas e sadas dos CLBs e IOBs
para as redes apropriadas. Geralmente, a configurao estabelecida por
programao interna das clulas de memria esttica, que determinam funes lgicas
e conexes internas implementadas no FPGA entre os CLBs e os IOBs. O processo de
escolha das interconexes chamado de roteamento.
Programao de FPGAs: Tipicamente, a etapa inicial do projeto seguida de
uma simulao funcional. Este o perodo onde um simulador utilizado para a
execuo do projeto para confirmar as sadas com as diversas entradas de teste. A
compilao somente se inicia quando j existe uma representao funcional correta do
hardware. Esta compilao se divide em duas etapas. A primeira, chamada de sntese
(synthesys), onde o compilador tem uma idia de como implementar o projeto e falta
apenas posicionar e rotear as estruturas lgicas em macroclulas, interconexes e
pinos de entrada e sada, que a segunda etapa. Feita a compilao, um bitstream
criado, ou seja, j sabemos quais so os dados binrios que devero ser carregados
no FPGA para fazer com que o chip execute um projeto em particular. Geralmente, as
empresas que desenvolvem dispositivos programveis, fornecem tambm softwares
capazes de carregar o bitstream no hardware utilizando linguagens de descrio de
hardware (Hardware Description Language HDL).




6

1.1. ARQUITETURA
A arquitetura de um FPGA predominantemente lgica, na forma de elementos
lgicos, dispostos em malhas ao longo do dispositivo. Os elementos lgicos possuem
duas partes: Look-Up Tables (LUT), que podem implementar funes comuns de
lgica, tais como portas E ou OU; e registros que podem implementar lgica sncrona,
como flip-flop.
Alm dos elementos lgicos, outras estruturas de hardware dedicadas esto
presentes para auxiliar na implementao de funes definidas pelo usurio e
aumentar o desempenho. Estes recursos esto geralmente dispostos em colunas ao
longo da FPGA. Um dos tipos de recursos dedicados so as memrias embutidas. Este
recurso pode variar tanto na capacidade quanto na disposio (srie ou paralelo), com
a finalidade de obter memrias mais robustas. Multiplicadores embutidos eles podem
ser cascateados de tal sorte a facilitar o processamento digital de sinais (PDS),
auxiliando na implementao de funes avanadas de PDS. A maioria dos
dispositivos contm Loops de Fase Fixa para implementar instrues de clock mais
refinadas.
As FPGAs contam com elementos de entrada e sada, cuja disposio e uso so
definidos pela escolha do usurio. Estes elementos podem ser posicionados e
configurados para comunicar o FPGA com outros dispositivos externos presentes no
circuito impresso.
Todos estes elementos esto conectados atravs de uma planta contendo rotas
reconfigurveis e registros de configurao. Estas rotas so extremamente flexveis,
assegurando que os requerimentos de hardware para um design em particular sero
conectados corretamente e de tal forma que atinjam todas as metas de
desenvolvimento.

1.2. DESIGN DIGITAL
Design digital o processo de criao de uma nova estrutura lgica utilizando
dispositivos lgicos programveis.
O processo de design digital comea com a ideia. Seja ela em nvel de sistema
ou em nvel de design especfico para uma FPGA. Esta ideia geralmente
7

documentada em um formulrio para especificar as caractersticas do que a FPGA
deveria fazer e a forma como ela deveria trabalhar.
O prximo passo seria descrever esta ideia utilizando um formulrio digital que
possa ser entendido pelo programa de design de FPGAs e que possa ser traduzido
para as estruturas fsicas encontradas no dispositivo alvo. Esta descrio
normalmente feita em uma linguagem de alto nvel para descrio de hardware.
Verilog HDL e VHDL so as linguagens mais popularmente utilizadas na criao de
designs para FPGAs.
Agora utilizamos um programa de design de FPGAs para pegar este cdigo e
realizar um processo conhecido como compilao. A compilao, em design digital,
composta de dois passos principais Sntese e Place and Route (P&R):
Sntese: Traduz o cdigo de descrio nas estruturas de hardware disponveis
dentro do dispositivo.
P&R: Escolhe a posio atual das estruturas fsicas e as conecta usando a
planta de rotas configurveis.
No processo de compilao ainda est inserida a checagem de erros no design,
esta etapa assegura que o design se encaixa corretamente no FPGA alvo e garante
que o design opera no desempenho especificado pelo usurio. O software gera um
programa binrio que contm todas as informaes necessrias para programar uma
FPGA com o design. Por ltimo o usurio faz um download do programa no dispositivo.
Dois itens so necessrios para que esta etapa ocorra, o programa binrio e as
funcionalidades do depurador de design (este ltimo faz parte do software de design).
Este download feito diretamente no hardware. A programao ocorre atravs de uma
memria FLASH ou atravs de uma conexo direta entre um computador e uma FPGA.
Se houver qualquer problema ou alterao no design basta voltar ao cdigo de
descrio ou s configuraes do software de design realizar as mudanas, recompilar
o design e reprogramar o novo binrio na FPGA. Como podemos notar este processo
torna fcil a correo de problemas e mudanas de design num curto perodo de
tempo.
8



1.3. APLICAES
Os FPGAs so aplicveis em qualquer circuito que empregue lgica digital. As
aplicaes de FPGA podem ser descritas nas seguintes grandes reas:
Prottipos: Pela sua habilidade de reconfigurao, FPGAs so utilizados em
prototipagens de sistemas. Aliado ao design digital possvel obter prottipos de
circuitos lgicos simples ou at de processadores mais avanados.
Design Digital: Criao de qualquer circuito lgico a partir de design digital.
Vrias reas da engenharia so afins utilizao de circuitos lgicos.
Ensino de Tecnologias e Conceitos: A FPGA pode ter um importante papel
em vrias disciplinas da engenharia. Este papel pode ser tanto didtico, quanto no
auxlio de implementaes nestes tpicos. Dentre as disciplinas podemos citar:
Eletrnica Digital, Robtica, Controle Digital, Eletrnica de Potncia, Inteligncia
Artificial, Arquitetura e Organizao de Computadores, Processamento Digital de
Sinais.
Ncleos Embutidos: Ncleos de processamento especializados em uma tarefa,
capazes de realizar as operaes em tempo real visto que as mesmas so efetuadas
em hardware. Ncleos Embutidos utilizando FPGA so inclusive reconfigurveis,
tornando-os versteis.
Chips Hbridos: Combinam partes de lgica fixa e partes de lgica programvel.
Geralmente a parte de lgica fixa dedicada comunicao perifrica ou a algumas
9

rotinas comuns. Por sua vez a parte programvel possuir a flexibilidade j conhecida
da FPGA.

1.4. INTRODUO AO KIT DE DESENVOLVIMENTO
O kit de FPGA formado por perifricos que possibilitam sua interao com
sinais de udio, display grfico e alfanumrico, comunicao serial e USB, codec de
udio, chaves para simulao e reset, leds para uso geral bem como barramento de
acesso a quarenta pinos de entrada e sada do componente.
1.4.1. A PLATAFORMA FPGA
O chip empregado no kit o EP2C8Q208C8 fabricado pela Altera, sistema da
famlia Cyclone II, com 8256 elementos lgicos, dois PLLs (Phase-Locked Loop), 36
blocos de 4Kbit de memria e com 18 elementos lgicos de multiplicao embarcados.

Figura 1.1 Viso Geral da Placa
Abaixo sero mostrados os componentes presentes na placa, contendo uma
breve descrio dos mesmos, modelo esquemtico e tabela de referncia contendo as
ligaes equivalentes dos pinos de cada componente no FPGA.
10

1.4.2. SWITCHES
Foram implementadas no Kit de FPGA um conjunto de Switches, totalizando 16,
para simular acionamentos diversos. Os Switches foram os nveis lgicos alto e baixo
diretamente no pino onde esto conectadas, garantindo nveis estveis para uma
simulao eficaz durante o desenvolvimento e estudos realizados com o kit.

Figura 1.2 Esquemtico dos circuitos dos Switches
Pino Componente Pino FPGA Descrio
CH1 PIN_68 Switch SW [0]
CH2 PIN_69 Switch SW [1]
CH3 PIN_70 Switch SW [2]
CH4 PIN_72 Switch SW [3]
CH5 PIN_74 Switch SW [4]
CH6 PIN_75 Switch SW [5]
CH7 PIN_76 Switch SW [6]
CH8 PIN_77 Switch SW [7]
CH9 PIN_80 Switch SW [8]
CH10 PIN_81 Switch SW [9]
CH11 PIN_82 Switch SW [10]
CH12 PIN_84 Switch SW [11]
CH13 PIN_86 Switch SW [12]
CH14 PIN_87 Switch SW [13]
CH15 PIN_88 Switch SW [14]
CH16 PIN_89 Switch SW [15]
Tabela 1.1 Pinagem correspondentes aos Switches do FPGA
11

1.4.3. CHAVES
Para a simulao de experincias que exijam teclas ou aes provenientes de
transientes de nvel, fora especificado um mdulo de chaves que esto diretamente
ligadas ao FPGA j com os devidos filtros anti-bouncing em cada dispositivo.

Figura 1.3 Esquemtico dos circuitos das Chaves
Pino Componente Pino FPGA Descrio
P0 PIN_90 Chave CH1
P1 PIN_92 Chave CH2
P2 PIN_94 Chave CH3
P3 PIN_95 Chave CH4
P4 PIN_96 Chave CH5
P5 PIN_97 Chave CH6
P6 PIN_99 Chave CH7
P7 PIN_101 Chave CH8
Tabela 1.2 Pinagem correspondentes as Chaves do FPGA

12

1.4.4. DISPLAY DE SETE SEGMENTOS
Para este kit foram previstas operaes lgicas bsicas, dentre elas operaes
com Displays de Sete Segmentos. O mdulo de display foi implementado para operar
em modo multiplexado, nesse modo cada display acessado pelo mesmo barramento,
sendo necessrio o acionamento do display no qual se deseja controlar.
Para que se obtenha o acionamento de todos os displays, se faz necessria
escrita constante em cada um deles a uma taxa de atualizao de 100 Hz, nessa
frequncia a multiplexao se torna transparente ao usurio. Cada segmento dos
displays aceso com nvel lgico 0.

Figura 1.4 Esquemtico do circuito do Display de sete segmentos


Figura 1 Posio dos segmentos do Display



13

Pino Componente Pino FPGA Descrio
D0 PIN_102 Segmento a
D1 PIN_103 Segmento b
D2 PIN_104 Segmento c
D3 PIN_105 Segmento d
D4 PIN_106 Segmento e
D5 PIN_107 Segmento f
D6 PIN_110 Segmento g
D7 PIN_112 Ponto
DISPLAY_1 PIN_113 Ativa o Display DP1
DISPLAY_2 PIN_114 Ativa o Display DP2
DISPLAY_3 PIN_115 Ativa o Display DP3
DISPLAY_4 PIN_116 Ativa o Display DP4
Tabela 1.3 Pinagem correspondente ao Display de sete segmentos do FPGA
1.4.5. LEDs
Esto disponveis 16 LEDs diretamente ligados aos pinos do FPGA para que
possa servir de interface para usurio durante o desenvolvimento de projetos diversos,
esses LEDs so acionados com nvel lgico alto.

Figura 1.5 Esquemtico do circuito dos LEDs



14

Pino Componente Pino FPGA Descrio
LD1 PIN_127 LED LD1
LD2 PIN_128 LED LD5
LD3 PIN_133 LED LD7
LD4 PIN_134 LED LD9
LD5 PIN_135 LED LD11
LD6 PIN_137 LED LD13
LD7 PIN_138 LED LD15
LD8 PIN_139 LED LD3
LD9 PIN_141 LED LD2
LD10 PIN_142 LED LD4
LD11 PIN_143 LED LD6
LD12 PIN_144 LED LD8
LD13 PIN_145 LED LD10
LD14 PIN_146 LED LD12
LD15 PIN_147 LED LD14
LD16 PIN_149 LED LD16
Tabela 1.4 Pinagem correspondente aos LEDs do FPGA
1.4.6. DISPLAY LCD
O Kit possui os conectores para controle e operao com displays alfanumricos
e grficos, estabelecendo uma interface visual com o usurio.
Para se ajustar o contraste do display, basta utilizar o trimpot contraste, que
est identificado no kit, do lado direito. Este contraste compartilhado tanto pelo
display alfanumrico quando o grfico por isso altera-se o nvel de contraste de ambos
os displays de cristal lquido.

15


Figura 1.6 Esquemtico dos conectores para Display LCD
Pino Componente Pino FPGA Descrio
RD0 PIN_164 Palavra para o LCD [0]
RD1 PIN_163 Palavra para o LCD [1]
RD2 PIN_162 Palavra para o LCD [2]
RD3 PIN_161 Palavra para o LCD [3]
RD4 PIN_160 Palavra para o LCD [4]
RD5 PIN_152 Palavra para o LCD [5]
RD6 PIN_151 Palavra para o LCD [6]
RD7 PIN_150 Palavra para o LCD [7]
EN PIN_165 Habilita o LCD
RS PIN_168 Seleciona Dado ou Comando, 0 = Comando, 1 = Dado
RW PIN_169 Seleciona Leitura ou Escrita, 0 = Escrita, 1 = Leitura
CS1 PIN_118 -
CS2 PIN_117 -
VOUT - No possui ligao no FPGA
RESET - Chave RESET presente na placa
Tabela 1.5 Pinagem correspondente aos LEDs do FPGA
1.4.7. COMUNICAO SERIAL RS-232
O kit possui um adaptador para comunicao serial padro RS232, efetuando a
comunicao direta do kit com qualquer dispositivo serial utilizando o mesmo padro,
incluindo computadores, usando o circuito MAX3232. A comunicao serial pode ser
configurada para operar nas taxas de comunicao padro para este tipo de
dispositivo.
16


Figura 1.7 Esquemtico do circuito MAX3232
Pino Componente Pino FPGA Descrio
RTS PIN_207 -
CTS PIN_208 -
RX PIN_206 -
TX PIN_205 -
Tabela 1.6 Pinagem correspondente ao MAX3232
1.4.8. MEMRIA FLASH
A memria flash para expanso de memria de dados do FPGA tem o intuito de
possibilitar gravaes e leituras de dados com velocidade elevada, sendo utilizada para
expanso da memria interna do FPGA e tambm possibilitando a gravao dos dados
j processados.
O dispositivo especificado foi o AT45DB081D, fabricado pela ATMEL, com
capacidade de 8Mb, taxa de comunicao SPI de at 66MHz e modo programao de
pgina inteligente.

Figura 1.8 Esquemtico do circuito da Memria Flash

17

Pino Componente Pino FPGA Descrio
CS_FLASH PIN_203 -
SCK_FLASH PIN_200 -
DATAIN_FLASH PIN_199 Entrada de dados da memria flash
DATAOUT_FLASH PIN_198 Sada de dados da memria flash
RESET - Chave RESET presente na placa
Tabela 1.7 Pinagem correspondente Memria Flash
1.4.9. PORTAS DE EXPANSO
O kit possui 50 pinos de expanso divididos em: 41 pinos de Entrada/Sada de
uso geral, 6 pinos para sinais de Clock externos, 1 pino que fornece 3.3V e 2 pinos de
aterramento.

Figura 1.9 Esquemtico do circuito das Portas de Expanso
18

Pino Componente Pino FPGA Descrio
IO0 PIN_170 Pino de Expanso IO0
IO1 PIN_171 Pino de Expanso IO1
IO2 PIN_173 Pino de Expanso IO2
IO3 PIN_175 Pino de Expanso IO3
IO4 PIN_176 Pino de Expanso IO4
IO5 PIN_179 Pino de Expanso IO5
IO6 PIN_180 Pino de Expanso IO6
IO7 PIN_181 Pino de Expanso IO7
IO8 PIN_182 Pino de Expanso IO8
IO9 PIN_185 Pino de Expanso IO9
IO10 PIN_187 Pino de Expanso IO10
IO11 PIN_188 Pino de Expanso IO11
IO12 PIN_189 Pino de Expanso IO12
IO13 PIN_191 Pino de Expanso IO13
IO14 PIN_193 Pino de Expanso IO14
IO15 PIN_3 Pino de Expanso IO15
IO16 PIN_4 Pino de Expanso IO16
IO17 PIN_5 Pino de Expanso IO17
IO18 PIN_6 Pino de Expanso IO18
IO19 PIN_8 Pino de Expanso IO19
IO20 PIN_10 Pino de Expanso IO20
IO21 PIN_11 Pino de Expanso IO21
IO22 PIN_12 Pino de Expanso IO22
IO23 PIN_13 Pino de Expanso IO23
IO24 PIN_14 Pino de Expanso IO24
IO25 PIN_15 Pino de Expanso IO25
IO26 PIN_30 Pino de Expanso IO26
IO27 PIN_31 Pino de Expanso IO27
IO28 PIN_33 Pino de Expanso IO28
IO29 PIN_34 Pino de Expanso IO29
IO30 PIN_35 Pino de Expanso IO30
IO31 PIN_37 Pino de Expanso IO31
IO32 PIN_39 Pino de Expanso IO32
IO33 PIN_40 Pino de Expanso IO33
IO34 PIN_41 Pino de Expanso IO34
IO35 PIN_43 Pino de Expanso IO35
IO36 PIN_44 Pino de Expanso IO36
IO37 PIN_45 Pino de Expanso IO37
IO38 PIN_46 Pino de Expanso IO38
IO39 PIN_47 Pino de Expanso IO39
IO40 PIN_48 Pino de Expanso IO40
CLK2 PIN_27 Pino para sinal de clock externo CLK2
CLK3 PIN_28 Pino para sinal de clock externo CLK3
CLK4 PIN_132 Pino para sinal de clock externo CLK4
CLK5 PIN_131 Pino para sinal de clock externo CLK5
CLK6 PIN_130 Pino para sinal de clock externo CLK6
CLK7 PIN_129 Pino para sinal de clock externo CLK7
Tabela 1.8 Pinagem correspondente as Portas de Expanso
19

1.4.10. OSCILADOR
O kit possui um oscilador que produz um sinal de clock com frequncia de 24
MHz j integrada a placa.
Pino Componente Pino FPGA Descrio
OSCILADOR PIN_23 Sinal de clock de 25 MHz
Tabela 1.9 Pinagem correspondente ao sinal de Clock
1.4.11. RESET
A chave RESET presente na placa j est ligada ao mdulo de Memria Flash e
ao conector de Display Grfico exercendo a funo de suas respectivas entradas de
RESET, mas ela tambm est disponvel para ser usada em qualquer sistema
implementado no FPGA.
Pino Componente Pino FPGA Descrio
RESET PIN_201 Chave RESET
Tabela 1.10 Pinagem correspondente chave Reset















20

2. DESING DIGITAL

2.1. LINGUAGEM DE DESCRIO DE HARDWARE
Este tpico tem como objetivo introduzir conceitos bsicos de VHDL (Linguagem
de Descrio de Hardware com nfase em Circuitos Integrados de Altssima
Velocidade). VHDL uma forma de se descrever, atravs de um programa, o
comportamento de um circuito ou componente digital.
Uma linguagem de descrio de hardware descreve o que um sistema faz e
como ele o faz. Esta descrio um modelo do sistema hardware, que ser executado
em um software chamado simulador. Um sistema descrito em linguagem de hardware
pode ser implementado em um dispositivo programvel (FPGA - Field Program Gate
Array), permitindo assim o uso em campo do seu sistema, tendo a grande vantagem da
alterao do cdigo a qualquer momento.
Vantagens e Desvantagens de se utilizar VHDL
A descrio de um sistema em VHDL apresenta inmeras vantagens, tais como:
Intercmbio de projetos entre grupos de pesquisa sem a necessidade de
alterao;
Permite ao projetista considerar no seu projeto os delay's comuns aos circuitos
digitais;
A linguagem independe da tecnologia atual, ou seja, voc pode desenvolver um
sistema hoje e implement-lo depois;
Os projetos so fceis de serem modificados;
O custo de produo de um circuito dedicado elevado, enquanto que usando
VHDL e Dispositivos Programveis, isto passa a ser muito menor;
Reduz consideravelmente o tempo de projeto e implementao.

Quanto as desvantagens, apenas uma relevante:
VHDL no gera um hardware otimizado.
21

2.1.1. Componentes de um projeto VHDL

A estrutura de um programa VHDL, baseia-se em 4 blocos.
PACKAGE (Pacote): so declaradas as constantes, tipos de dados,
subprogramas;
ENTITY (Entidade): declarao dos pinos de entrada e sada;
ARCHITECTURE (Arquitetura): define as implementaes do projeto;
CONFIGURATION (Configurao): define as arquiteturas que sero utilizadas.
Todo sistema necessita de uma interface com o mundo externo. Em VHDL esta
interface a entity, e fundamental para todo e qualquer sistema.
Para se atingir a funcionalidade desejada, os dados devem sofrer
transformaes dentro do sistema. Esta parte interna do sistema responsvel pelas
transformaes dos dados chamada de corpo ou architecture. Qualquer que seja o
sistema, independente de sua complexidade, necessita de uma interface (entity) e de
um corpo (architecture).
Algumas vezes, alguns sistemas necessitam de funcionalidades adicionais, que
so conhecidas como package.

22


Figura 2.1: Representao de uma descrio feita utilizando VHDL
PACKAGE (Pacotes)
Quando for necessrio utilizar algo no definido nas bibliotecas do VHDL
padro, faz-se uso do package (similar aos includes da Linguagem C). A nica
restrio que o package deve ser previamente definido, antes do inicio da entity. O
uso do package feito por meio de duas declaraes: library e use.
Dos vrios packages existentes, o mais conhecido e usado o
STD_LOGIC_1164 da IEEE que contm a maioria dos comandos adicionais mais
usados em VHDL. O uso deste package dado por:
library IEEE;
use IEEE.std_logic_1164.all;

Observao: .all significa que todos os elementos da bibliotecas devem ser utilizados,
caso no seja acrescentado .all deve-se especificar os elementos que sero utilizados.
23

Pacotes normalmente usados podem ser vistos na figura 2.2.

Figura 2.2: Pacotes mais usuais

ENTITY (Entidade)
A entity a parte principal de qualquer projeto, pois descreve a interface do
sistema. Tudo que descrito na entity fica automaticamente visvel a outras unidades
associadas com a entity. O nome do sistema o prprio nome da entity. Assim, deve-
se sempre iniciar um projeto em VHDL pela entity.
Como exemplo, considere a Figura 2.3, onde h 8 linhas de transmisso
associadas ao sistema A, que formado por trs sub-sistemas; B, C e D. Somente as
linhas TL1, TL2, TL3, TL7e TL8 sero descritas na entity do sistema A. As demais
linhas no so necessrias, pois so internas ao sistema.

Figura 2.3 - Sistema Genrico.
A entity composta de duas partes: parameters e connections.
24

Parameters refere-se aos parmetros vistos do mundo externo, tais como
largura de barramento e frequncia de operao, e que so declarados como generics.
Connections refere-se a onde e como ocorre a transferncia de informaes
para dentro e fora do sistema, e so declarados por ports.
Tipo de Portas:
IN: Porta de Entrada; (No pode receber atribuio de valor dentro do programa).
OUT: Porta de Sada; (No pode ser utilizada como entrada para o outro circuito).
INOUT: Porta de entrada e sada;
BUFFER: Porta de sada que pode ser atualizada por mais de uma fonte;
LINKAGE: O valor da porta pode ser lido e atualizado.
Um exemplo pode ser visto na figura 2.4:

Figura 2.4: Entidade
A varivel <tipo> pode ser: bit, bit_vetor, std_logic, std_logic_vector, boolean,
real; Como mostra a figura 2.5

Figura 2.5: Tipos de sinais



25

ARCHITECTURE (Arquitetura)
A entity de um sistema to importante que a architecture especificada na
forma de architecture of entity. Um sistema pode ser descrito em termos de
funcionalidade, isto , o que o sistema faz, ou em termos de estrutura, isto , como o
sistema composto.
A descrio funcional especifica as respostas nas sadas em termos das
excitaes aplicadas nas entradas. Neste caso no h nenhuma informao de como o
sistema dever ser implementado. A descrio estrutural, por sua vez, especifica quais
componentes devem ser usados e como devem ser ligados. Esta descrio mais
facilmente sintetizada, porm exige mais experincia do projetista.
Desta forma, pode-se ter vrias architectures capazes de implementar um
mesmo circuito.
Uma entity pode ser formada por mais de uma architecture!
Arquitetura Simples: A arquitetura simples contm apenas um processo, ou seja,
apenas um bloco (figura. 2.6).

Figura 2.6: Arquitetura Simples

Arquitetura Concorrente: A arquitetura concorrente uma forma mais complexa de
descrever um sistema, geralmente apresenta vrios processos dentro de uma
arquitetura.
26

CONFIGURATION (Configurao)
Uma mesma entidade pode ter varias arquiteturas. Veja figura 2.7

Figura 2.7: Configurao
2.2. SINAIS

Os sinais so de vital importncia em virtualmente todos os sistemas eletrnicos,
podendo transmitir dados internamente ou externamente ao sistema, assumindo assim
um papel muito importante em VHDL. Os sinais externos so apresentados na entity e
os sinais internos so apresentados na architecture.
Os sinais podem ser uma linha (transmisso de um sinal por vez) ou um
barramento, tambm chamado de vetor (transmisso de vrias informaes
simultaneamente). Em VHDL estes sinais so chamados de bit e bit_vector,
respectivamente. No caso de bit_vector, a ordem dos bits de vital importncia. Como
exemplo, se o bit7 for o mais significativo e o bit0 o menos significativo, em VHDL isto
seria representado por bit_vector(7downto0).
Os sinais externos so apresentados na entity pelo comando port. Os ports
funcionam como canais dinmicos de comunicao entre a entity e o ambiente. Cada
sinal deve ter nome e tipo nicos. A direo do sinal, que de vital importncia,
tambm deve estar presente e pode ser de entrada (input), sada (output) ou
bidirecional (in-out). A forma de uso do comando port dada por:
port ( nome_port : modo tipo_port )
27

Tem-se o nome do port, seguido por dois pontos, o modo ou direo do sinal, o
tipo do port, seguido opcionalmente por um valor inicial (precedido pelo smbolo :=) e
tambm opcionalmente por algum comentrio. A listagem a seguir ilustra um exemplo
do comando port. Observe que neste caso h mais de um port, e esto separados por
ponto-e-vrgula.
port ( RESULT : inout bit_vector (0 to 7);
z : in bit;
EXTBUS : out bit_vector (4 downto 0));
Por outro lado, os sinais internos so apresentados na architecture, pelo
comando signal. A listagem a seguir ilustra um exemplo do comando signal.
signal x, y : bit
Observe que no h a necessidade de se especificar o modo de um signal (in,
out ou inout), pois interno ao sistema.
A visibilidade ou disponibilidade dos sinais depende do local onde foi
declarado. Um sinal declarado em um package visvel em todos os projetos que
usam este package. Um sinal declarado como port de uma entity visvel em todas
architectures desta entity. J um sinal declarado como parte de uma architecture s
visvel internamente a esta architecture. Finalmente, se um sinal for declarado dentro
de um bloco em uma architecture, s ser visvel dentro deste bloco.
2.3. Semntica da linguagem VHDL
2.3.1. Elementos Lxicos

O nome de uma entity, que o seu identificador serve basicamente para
documentao, e assim, deve-se preferencialmente usar nomes associados com a
descrio do sistema. O nome pode ser composto por letras e nmeros, sendo que
deve iniciar por uma letra.
Toda entity deve terminar com o comando end. Para se evitar erros, o comando
end deve ser seguido do nome da entity.
28

Quando se escreve um programa em VHDL, devem-se tomar certos cuidados,
com os identificadores, na figura 2.8 so apresentados alguns identificadores vlidos e
invlidos.

Figura 2.8: Identificadores
COMENTRIOS
Todo projeto em VHDL deve apresentar uma boa documentao. Isto pode ser
feito pela incluso de comentrios ao longo da descrio. Os comentrios em VHDL
so iniciados por dois traos -- e terminam ao final da linha. Uma boa prtica tambm
a incluso no incio da listagem VHDL da descrio do projeto, indicao de
bibliotecas, nomes dos autores e qualquer outra informao relevante. Os comentrios
so mais relevantes ao nvel de sistema. A seguir apresentada a descrio de uma
ULA genrica, conforme ilustrada na Figura 2.9. Observe os comentrios em cada
linha.

29


Figura 2.9 - ULA Genrica.
entity ULA is
port (
In1 : in bit_vector (3 downto 0); -- operando 1
In2 : in bit_vector (3 downto 0); -- operando
Sel : in bit_vector (3 downto 0); -- seleo de operao
Ci : in bit; -- carry in
Modo : in bit; -- modo (aritmtico/lgico)
Out : out bit_vector (3 downto 0); -- resultado da operao
Co : out bit; -- carry out
Igual : out bit; -- igualdade de In1 e In2
);
end entity ULA;

COMANDO GENERIC
O comando generic serve para descrever o valor de uma constante, que por sua
vez, serve para estabelecer valores de temporizaro, largura de barramentos, nmero
de bits em somadores e comparadores, etc. O comando generic posicionado dentro
da entity, normalmente antes dos ports. O comando generic consiste dos seguintes
elementos:
Nome da generic seguido por dois pontos,
Tipo da generic,
Opcionalmente, o valor da generic precedida por :=.
A listagem a seguir ilustra o uso de generic:

30

generic ( BusWidth : integer := 8;
MaxDelay : time :=20 us );

2.3.2. Estruturas para descrio de comportamento

TYPE
Um dos tipos de estruturas de dados em VHDL o scalar type (tipo escalar) ou
scalar.
O scalar type no tem elemento ou estrutura interna, e todos seus valores so
ordenados e esto em uma certa faixa, ou so explicitamente listados. O VHDL j tem
previamente definido alguns scalar type, que so apresentados na Tabela 1.

Tipo Exemplo Observao
Boolean True, False Diferente de Bit
Character 0, +, A, \ Letras, Nmeros e Caracteres.
Integer -12, 0, 347557 Nmeros inteiros (de -2147483647 a
2147483647)
Real 0.0, 1.0001, -1.0E-5 Nmeros em ponto flutuante (de 1.0E308 a
1.0E308)
Bit 0, 1 Valores lgicos 0 e 1
Tabela 2.1 - Tipos Escalares em VHDL.
O usurio tambm pode definir algum outro tipo escalar, chamado user defined
type. Considere como exemplo a condio em que se deseja projetar uma mquina de
estados, com 4 estados distintos; esperar, buscar, decodificar e executar. A declarao
deste tipo seria:
type MEstado is (Esperar, Buscar, Decodificar, Executar);
Outros exemplos de definidos pelo usurio seriam:
Type dedos is range1to10
Type dedinho is range10downto1
Type pos_neg is range-1to1

Outro tipo o physical type que serve para especificar valores fsicos.
Entretanto, este tipo previamente definido em VHDL somente para tempo. A listagem
a seguir ilustra a descrio do tipo time.
31

type time is range 2147483647 to 2147483647
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hour = 60 min;
end units;

PREDEFINED ARRAYS
Estruturas regulares consistindo de elementos do mesmo tipo so chamadas de
Arrays. H dois tipos de arrays pr-definidos em VHDL: bit-vector (elementos do tipo
bit) e string (elementos do tipo character). Um nico elemento, em ambos os tipos de
arrays especificado por (apstrofe), e dois ou mais elementos so especificados por
(aspas). A listagem a seguir ilustra a declarao de um array e as duas maneiras de
se especificar seus elementos.

Signal BusDados : bit_vector (7 downto 0);
BusDados = 00110101
BusDados(7) = 0
BusDados(6) = 0
BusDados(5) = 1
BusDados(4) = 1
BusDados(3) = 0
BusDados(2) = 1
BusDados(1) = 0
BusDados(0) = 1


32

USER-DEFINED ARRAY
Os arrays predefinidos so unidimensionais (tambm chamados de vetoriais),
entretanto, s vezes se torna necessrio definir um array de dimenses maiores.
Considere como exemplo de aplicao uma memria. So necessrias duas
dimenses para se especificar uma memria, isto , nmero de posies e nmero de
bits em cada posio. A descrio de uma memria de 2Kbytes de 8 bits seria:
signal memoria2K8 : array (0 to 2047) of bit_vector (7 downto 0);
2.3.3. Expresses e operadores

Tipos de dados no lgicos
Abaixo so listados alguns tipos de dados no lgicos:
BIT: Assume valores 0 e 1
Boolean: Assume valores true ou false.
Real: Representam valores reais. Exemplo: -3.2, 4.56, 6.0, -2.3E+2;
Integer: Representam valores inteiros. Exemplo: 3, 546, -349;
Physical: Representam uma medida fsica: voltagem, capacitncia, tempo.
Tipos pr-definidos: ps, ns, um, ms, sc, min, hr.
Intervalos: Permite determinar um intervalo de utilizao dentro de um
determinado tipo.
range <valor_menor> to <valor_maior>
range <valor_maior> downto <valor_menor>
Array: em VHDL um array definido como uma coleo de elementos do
mesmo tipo.
type word is array (31 downto 0) of bit;
type memory is array (address) of word;
type transform is array (1 to 4, 1 to 4) of real;
type vector is array (integer range < > ) of real;
type string is array (positive range < >) of character
type b is array (1 to 5) of character ;
(t, e, s, t, e)
(1 => t, 5 => e, 2 => e, 3 => s, 4 => t )
33

(3 => s, 2 => e, 5 => e, others => t)
Record: semelhante a struct da Linguagem C, ou seja, uma coleo de
elementos de tipos diferentes.

Figura 2.10: Record

EXPRESSES E OPERADORES
Operadores Lgicos
Como os sinais em VHDL so tipicamente lgicos, os operadores lgicos so os
mais usados. Os operadores and, or, nand, nor, xor e xnor exigem dois operandos e
o operador not necessita de apenas um. Essas operaes lgicas so definidas para
os tipos bit, boolean e bit_vector, e exige-se que os operandos sejam do mesmo tipo.
No caso de vetores, estas operaes so efetuadas bit a bit.

Operadores de Deslocamento
As operaes de deslocamento so restritas a arrays, cujos elementos devem
ser bit ou boolean. Estas operaes exigem dois operandos. Um sendo o array e o
outro, do tipo integer, que determina o numero de posies a serem deslocadas. Se o
valor do segundo operando for negativo, o sentido do deslocamento fica invertido.
As operaes de deslocamento, conforme indicadas na Figura 2.11 so:
sll: shift left logical(deslocamento lgico a esquerda),
srl: shift right logical(deslocamento lgico a direita),
34

sla: shift left arithmetic (deslocamento aritmtico a esquerda),
rla: shift right arithmetic (deslocamento aritmtico a direita),
rol: rotate left logical (rotacionamento lgico a esquerda),
ror: rotate right logical (rotacionamento lgico a direita).

Figura 2.11 - Operaes de Deslocamento.

Operadores Numricos
As operaes de adio (+), subtrao (-), multiplicao (*), diviso (/),
modulo (mod), valor absoluto (abs), resto (rem) e potncia (**) so aplicados aos
tipos integer e real. Os operandos devem ser do mesmo tipo. O tipo time exige que os
operandos sejam iguais nas operaes de adio e subtrao, mas um operando time
pode ser multiplicado ou dividido por um operando integer ou real.
35

Comparaes
As comparaes entre dois objetos podem ser igual (=), diferente (/=), menor
(<), menor ou igual (<=), maior (>), e maior ou igual (>=). Os objetos comparados
devem ser do mesmo tipo e podem ser boolean, bit, character, integer, real, time, string
ou bit_vector, entretanto o resultado sempre boolean (true ou false). Ao se comparar
dois vetores de tamanhos diferentes, eles so primeiramente justificados no tamanho
do menor.

Concatenao
Concatenao uma forma conveniente de se unir dois ou mais vetores, criando
um novo vetor, cujo tamanho a soma dos vetores dos operandos. Os vetores devem
ser do mesmo tipo e pode-se unir tambm um bit a um vetor. A listagem a seguir ilustra
a situao em que se une parte de dois vetores e um bit para formar um novo vetor.
NovoVetor <= ( Vetor1(0 to 3)
& Vetor2(3 to 5)
& Bit1);
Atribuio de Sinais
Eventualmente os resultados das operaes em VHDL devem ser atribudas s
sadas. Isto feito pelo smbolo <=em que o valor da expresso a direita atribudo
expresso esquerda. Para auxiliar na memorizao desta operao, basta observar
que a seta formada indica o fluxo da informao. A listagem a seguir ilustra alguns
exemplos de atribuio.
x <= y <= z;
a <= b or c;
k <= 1;
m <= 0101;
n <= m & k;
Tendo em vista que nada instantneo no mundo real, em VHDL tambm
possvel modelar estes atrasos naturais por meio da expresso after. A expresso
after determina o tempo aps o qual uma expresso se torna efetiva. A declarao a
seguir ilustra o uso da atribuio de sinal com atraso empregando after.

36

luz <= chave after 3 s;

Atraso Inercial
Atraso inercial tempo mnimo que um pulso deve durar para que seja aceito
por um dado circuito. Esta caracterstica de circuitos reais faz parte do modelo de
atrasos em VHDL. Assim, para o caso anterior, observe na Figura 2.12.a o
comportamento do circuito para um pulso de 2s, e na Figura 2.12.b a mesma anlise
para um pulso de 4s.

(a)

(b)
Figura 2.12 - Efeito de Atraso Inercial para (a) um Pulso de 2s, e (b) um Pulso de
4s.
Como na Figura 2.12.a o pulso de entrada tem uma durao de apenas 2s, no
o suficiente para vencer o atraso inercial e efetivamente acionar a sada luz. J na
Figura 2.12.b o pulso de entrada tem uma durao de 4s, o que maior que o atraso
inercial e consegue acionar a sada luz.
37

Outro problema do mundo real o atraso que ocorre em linhas de transmisso.
Neste caso no h uma durao mnima do pulso, mas sempre h um atraso no
transporte do sinal. Isto modelado em VHDL pela incluso do termo transport antes
da especificao de valor e atraso, conforme ilustrado a seguir.
luz <= transport chave after 3 s;
Para melhor ilustrar este conceito, considere o exemplo anterior, agora usando
este conceito de atraso de transporte, conforme ilustrado na Figura 2.13.

Figura 2.13 - Comando Transport Aplicado em um Pulso de 2s.

Constantes
As constantes desempenham o mesmo papel que as generics. Ao contrrio da
generic que declarada na entity, a constant declarada na architecture. A
declarao de uma constant consiste do comando constant seguido do nome da
constante, dois pontos, tipo da constante e o smbolo :=, conforme ilustrado a seguir.
constant N : integer := 123
A constant serve para atribuir valores locais, tornando o projeto mais simples,
mais fcil de se ler e de efetuar manutenes/alteraes. Como a constant declarada
na architecture, no pode ser usada para definir dimenses de vetores. Da mesma
forma, a constant s pode ser usada dentro da architecture na qual foi declarada. Por
outro lado, a generic que declarada na entity usada por todas as architectures.

38

2.4. Descrio de Comportamento (Process)

O comportamento, ou funcionalidade, de um sistema corresponde a uma lista de
operaes a serem executadas para se obter um determinado resultado. Process o
modo formal de se fazer uma lista sequencial dessas operaes, e tem um formato
estruturado. Existem algumas regras para se fazer uma descrio process.
Inicialmente, deve-se especificar que a listagem corresponde a um process, e
isto feito pelo comando process, que fica posicionado aps o nome e os dois pontos.
Da mesma forma este nome deve ser colocado aps a declarao end of process.
Para separar as operaes sequenciais de comandos tais como variable ou constant,
a declarao begin usada para marcar o inicio da listagem das operaes
sequenciais.
Ao contrrio de linguagens de programao convencionais, processos descritos
em VHDL no terminam. Aps a execuo do ltimo comando, process executado
novamente desde o primeiro comando.
Circuitos eletrnicos em geral operam em modo contnuo, aguardando
ocorrncia de certas condies de entrada, executando tarefas, suspendendo as
atividades quando se completa o servio, e novamente retomando o servio na
ocorrncia de certas condies de entrada.
Em VHDL suspende-se um processo pelo comando wait. Este comando pode
suspender o processo incondicionalmente, ou apresentar uma lista de condies a
serem satisfeitas para ser e tomar a operao normal. O comando wait pode aparecer
em trs formas distintas.
Na primeira forma, ou wait for o processo suspenso por um certo intervalo de
tempo.
Na segunda, ou wait until o processo suspenso at que uma certa condio
seja verdadeira devido a mudana dos sinais envolvidos nesta condio. Observe que
se no houver mudana nos sinais, o processo continua suspenso.
39

Na terceira forma, ou wait on o processo suspenso at que um evento da lista
de sinais ocorra. Isto , o processo continua quando ocorrer qualquer uma das
condies de sua lista. Eventualmente pode ocorrer uma mistura destas formas.
As duas listagens a seguir ilustram exemplos destes casos.
wait for 10 ns;
wait for periodoCLK / 2;
wait until CLK = 1;
wait until CE and (not RST);
wait until dado > 16;
wait on CLK;
wait on dado;
wait on dado until CLK = 1;
wait until CLK=1 for 10 ns;
Como j mencionado, os comandos de um process so executados
constantemente e ciclicamente. Pode parecer, portanto, que no faz diferena de onde
se coloca um wait. Na verdade, de vital importncia o seu posicionamento adequado.
Se uma instruo wait for colocada no incio de um process, nada ocorre at que as
condies do wait sejam satisfeitas.
Se este mesmo wait for colocado no final de um process, todos os comandos
anteriores ao wait sero executados.
A forma wait on usado com mais frequncia que as demais. Ao invs de se
utilizar o wait on no final de um process, pode-se usar o conceito de sensitivity list, ou
lista de sensitividade, que consiste simplesmente em colocar as condies do wait on
ao lado do comando process (entre parnteses), e se obtm os mesmos resultados.
Neste caso, o process no pode conter nenhum wait. A listagem a seguir ilustra o uso
de process para se implementar um multiplexador 2x1. Observe que os sinais A, B e
Sel foram colocados na sensitivity list.
MUX2x1: process (A, B, Sel)
constant High : Bit := 1;
begin
y <=A;
if (Sel = 1) then Y <= B;
end if;
end process MUX2x1;
Deve-se ressaltar que neste caso, os comandos do process so executados
uma vez, e o processo fica suspenso. Ao haver mudana em qualquer uma das
40

variveis do wait on (listados no final do process) ou variveis listadas ao lado do
comando process (sensitivity list), o process executado mais uma vez.
A descrio de comportamento em VHDL empregada para descrever a reao
das sadas s entradas. Entretanto, qualquer novo valor atribudo a uma varivel s
passa a valer efetivamente quando o processo suspenso. Adicionalmente, somente a
ltima atribuio a uma varivel vlida. Como entradas e sadas so sinais, qualquer
variao de sada tido como variao de sinal e novamente o processo executado.
Para entender melhor este conceito, considere o exemplo listado a seguir.
process (sinal1, sinal2)
begin
sinal2 <= sinal1 + 5;
end process;
Uma vez iniciado o processo, pode-se ver que o Sinal2 recebe o valor de Sinal1
acrescido de 5. Como houve uma variao em Sinal2, o processo executado
novamente. Desta vez, como no h variao em nenhuma varivel (Sinal2 continua
com o valor de Sinal1 acrescido de 5), o process suspenso. Neste momento Sinal2
efetivamente recebe o novo valor.
Infelizmente h srias limitaes no process. No se pode declarar sinais dentro
do process. Outra grave limitao que somente o ltimo valor atribudo um sinal se
torna efetivo, e ainda assim, somente quando o processo suspenso.
Considere, como exemplo, a descrio apresentada a seguir. Considere o valor
inicial de todos os sinais como sendo 1. Quando D mudar para 2, o processo
iniciado. Quais seriam os valores quando o processo for suspenso?
process (C, D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;
Os valores finais das variveis so:
A = 3; B = 2; C = 1; D = 2; E = 2;
41

Esta limitao do process eliminada com o uso de variables, que podem ser
declaradas dentro do process. O valor atribudo a uma variable vlido imediatamente
aps a sua atribuio, e pode receber vrias atribuies no mesmo process. A listagem
a seguir ilustra como se declara e utiliza as variables.
process (C, D)
variable At, Bt, Et: integer := 0;
begin
At := 2;
Bt := At + C;
At := D + 1;
Et <= A * 2;
A <= At;
B <= Bt;
E <= Et;
end process;
Considere os mesmos valores iniciais do exemplo anterior. Observe que a
atribuio de valores de uma varivel feita utilizando-se :=. Compare os resultados
deste exemplo, apresentados a seguir os do exemplo anterior. Os valores finais das
variveis so:
A = 3; B = 3; C = 1; D = 2; E = 6;
Para um melhor entendimento, a Tabela 2 apresenta uma comparao entre
signal e variable, observe a tabela a seguir que ilustra suas semelhanas e
diferenas.
Signal Variable
Declarao Em architecture ou como port na entity. Dentro de process.
Atribuio Recebe valor atribudo na suspenso do
process. Somente a ltima atribuio
vlida.
Ex: A<= B + C
Recebe valor atribudo
imediatamente. Toda
atribuio vlida.
Ex: A:= B + C
Atraso Inercial e Transporte No h
Tabela 2.2 - Comparao entre Variables e Signals.
2.5. Controle da Sequncia

Como os processes representam sistemas reais esto sujeitos a constantes
mudanas externas e assim, normalmente no executam todas as instrues. Estas
mudanas externas podem ser modeladas em VHDL pelos comandos condicionais.
42

2.5.1. Comando if then
Algumas operaes so executadas somente se certas condies forem
satisfeitas, e so chamadas de operaes condicionais.
Se a condio for verdadeira, ento a lista de operaes executada. As
operaes desta lista devem estar separadas por ponto-e-vrgula. Ao trmino destas
operaes deve ser colocado o end if. Considere como exemplo o process de um
flip-flop D ativo por rampa de subida mostrado na figura 2.14.

Figura 2.14: Comando if-else
2.5.2. Comando if then else
O comando if then po de ser modificado para se obter maior flexibilidade atravs
do comando if then else.
Se a condio for verdadeira, a primeira operao executada, caso contrario, a
segunda operao executada. Na verdade, cada condio podem ser varias
operaes separadas por ponto-e-vrgula.
Para uma maior flexibilidade ainda, este comando pode incluir novos testes
atravs do elsif. A listagem da figura 2.15 ilustra como exemplo o process de um flip-
flop tipo D ativo por rampa de subida, com linha de reset ativa por 1.

43


Figura 2.15: Comando If-Then-Else
2.5.3. Comando Case
O uso do comando if then else com outros if aninhados serve para selecionar
uma ramificao, mas pode ficar complicado se o nmero de opes se tornar maior
que trs. Para esta situao utiliza-se o comando case.
Ao invs de se avaliar uma expresso booleana, o comando case verifica as
condies de uma expresso discreta ou um array. Cada alternativa composta por:
when alternativa => operao
Considere como exemplo a listagem a seguir. O circuito apresenta trs entradas
de seleo (Modo), duas entradas de dados (In1e In2) e uma sada Out. Dependendo
dos valores presentes nas entradas de seleo, diferentes operaes so executadas
nos dados. Pode-se observar o recurso de se utilizar a opo when others para
situaes no previstas pelas demais opes.
44


Figura 2.16: Comando Case
2.5.4. COMANDO WHILE LOOP
O comando while loop condicional funciona deforma similar ao comando if then.
Ele inicia com uma condio lgica, porm tem na ltima linha um jump para o incio
do loop.
O loop executado enquanto a condio presente no seu inicio for vlida. A
condio verificada e ser for satisfeita, os comandos presentes no loop so
executados, caso contrrio, o loop considerado completo e o comando passa para a
instruo seguinte ao loop.
Na listagem seguinte faz-se a contagem das transies positivas do sinal de
clock desde que o sinal Nivel esteja em 1. Observe que como no h sensitivity list, o
process continua sendo executado continuamente.
process
variable conta : integer := 0;
begin
wait until Clk = 1;
while Nivel = 1 loop
conta := conta + 1;
wait until Clk = 0;
end loop;
end process;

45

2.5.5. COMANDO FOR LOOP
O comando for loop se repete por um nmero especifico de vezes. Este
comando usa um contador, e desde que o valor do contador esteja em uma certa faixa,
o loop executado. Ao trmino de cada execuo do loop, o contador atualizado.
O contador no precisa ser declarado e tratado como uma constante, e s
existe dentro do loop.
A listagem da figura 2.17 ilustra um exemplo de uso deste comando.

Figura 2.17: Comando For-Loop
2.5.6. COMANDO NEXT E EXIT
Algumas vezes se torna necessrio pular alguns comandos do loop e ir
diretamente para a prxima interao. Esta situao pode ser obtida pelo comando
next. As formas deste comando so apresentadas a seguir:
next;
next nome_loop ;
next when expresso ;
next nome_loop when expresso ;
Considere como exemplo deste comando, a descrio dada a seguir.








46

other : process (flag)
variable a, b : integer := 0 ;
begin
a := 0 ; b := 3 ;
alfa : for i in 0 to 7 loop
b := b + 1 ;
if i = 5 then next alfa ;
end if ;
a := a + b ;
end loop alfa ;
end process other
Dependendo da situao pode ser necessrio terminar o loop, que pode ser
conseguido pelo comando exit. Este comando pode ter um dos seguintes formatos:
exit ;
exit nome_loop ;
exit when expresso ;
exit nome_loop when expresso ;
A Tabela 3 apresenta dois exemplos equivalentes, usando este comando.
show1: process (flag)
variable sun, cnt : integer := 0 ;
begin
sum := 0; cnt := 0;
um : loop
cnt := cnt +1 ;
sum := sum + cnt ;
exit when sum > 100 ;
end loop um ;
end process ;
show2: process (flag)
variable sun, cnt : integer := 0 ;
begin
sum := 0; cnt := 0;
dois : loop
cnt := cnt +1 ;
sum := sum + cnt ;
if cnt > 100 then exit ;
end if ;
end loop dois ;
end process ;
Tabela 3 - Exemplo de Usos Equivalentes do Comando Exit.







47

3. TUTORIAL QUARTUS II

O software Quartus II uma ferramenta importante no design digital. Esta seo
serve como guia para princpios bsicos necessrios ao design digital.
3.1. INTRODUO
Esse pequeno tutorial mostra como colocar o Kit em funcionamento e test-lo com
um exemplo de um programa real.
3.2. INSTALAO DE HARDWARE
1 - Ligar o cabo paralelo;
O cabo paralelo conectado ao JTAG;
O JTAG se conecta ao FPGA por um cabo flat de 10 vias onde ligado nos
pinos marcados como JTAG (CN8).
2 - Ligar os cabos de alimentao.
3.3. INSTALAO DE SOFTWARE
Acesse o site da Altera (www.altera.com), obtenha um Login e uma Senha (cada
instalao requer uma licena diferente) e solicite uma licena para instalao do
Quartus II Web Edition que ser enviada por email. Baixe a licena e deixe o arquivo
em um diretrio criado em .../Meus Documentos/Altera/lic.
Com a licena em mos execute o instalador do Quartus II, depois de instalado,
execute o Quartus II e quando requerido, indicar o caminho para o arquivo .dat da
licena.

3.4. PROGRAMA TESTE
Com o Quartus II funcionando, siga os passos a seguir:
Clique no menu File -> New ;
Selecione a opo VHDL File;
Na tela que aparecer digite o programa abaixo que simula um contador:
48

Library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity CONTADOR is
port(CLOCK: in STD_LOGIC;
LEDS : out BIT_VECTOR(7 downto 0);
select_display: out bit_vector(3 downto 0));
end CONTADOR;

architecture PRINCIPAL of CONTADOR is

signal AUX1: BIT_VECTOR(7 downto 0):="00000001";
signal CLOCKD: STD_LOGIC;

PROCEDURE decoder (contador: integer) is
begin
case contador is
when 0 => LEDS <="00111111"; -- 0
when 1 => LEDS <="00000110"; -- 1
when 2 => LEDS <="01011011"; -- 2
when 3 => LEDS <="01001111"; -- 3
when 4 => LEDS <="01100110"; -- 4
when 5 => LEDS <="01101101"; -- 5
when 6 => LEDS <="01111101"; -- 6
when 7 => LEDS <="00000111"; -- 7
when 8 => LEDS <="01111111"; -- 8
when 9 => LEDS <="01101111"; -- 9
when others => LEDS <="01101111"; -- 9
end case;
end decoder;
begin

MAIN:process(CLOCKD)
variable contador: integer range 0 to 3:=0;-- range 0 to 9:=0;
variable CONT, CONT1, CONT2, CONT3: integer range 0 to 10:=0;
begin
if RISING_EDGE(CLOCKD) then
CONT:=CONT+1;
case contador is
when 0 =>
select_display <="1000"; -- 3
decoder(CONT);
contador:=1;
when 1 =>
select_display <="0100"; -- 3
decoder(CONT1);
contador:=2;
when 2 =>
select_display <="0010"; -- 3
49

decoder(CONT2);
contador:=3;
when 3 =>
select_display <="0001"; -- 3
decoder(CONT3);
contador:=0;
when others => contador:=0;
end case;
if CONT = 10 then
CONT:=0;
CONT1:=CONT1+1;
if CONT1 = 10 then
CONT1:=0;
CONT2:=CONT2+1;
if CONT2 = 10 then
CONT2:=0;
CONT3:=CONT3+1;
if CONT3 = 10 then
CONT3:=0;
end if;
end if;
end if;
end if;

end if;
end process MAIN;
clockdiv:process(CLOCK)
variable AUX2: INTEGER range 0 to 500:=0;
variable AUX3: INTEGER range 0 to 200:=0;
begin
if RISING_EDGE(CLOCK) then
AUX2:=AUX2+1;
if AUX2=500 then
CLOCKD<='0';
AUX2:=0;
AUX3:=AUX3+1;
if AUX3=200 then
AUX3:=0;
CLOCKD<='1';
end if;
end if;
end if;
end process;
end PRINCIPAL;
Salve o arquivo como CONTADOR;
Selecione Next at a janela New Project Wizard: Family & Device Settings [
Page 3 of 5 ];
50

Nessa janela, escolher:
Family: Cyclone II
Available devices: EP2C8Q208C8
Clicar em Finish.
3.5. COMPILANDO E QUEIMANDO O PROJ ETO.
Para que o cdigo funcione na placa FPGA siga os demais passos:
Clique em (Start Compilation) corrija os eventuais erros e clique novamente
no cone at que o programa compile com sucesso;
Clique no menu Assigments e depois em Pin Planer, ou clique no cone ;
Faa a seguinte associao dos pinos:


Compile novamente;
Clique em ;
Clique em ;
Selecione em Add Hardware a opo ByteBlaster
51

o Caso no haja a opo ByteBlaster selecione a opo
ByteBlasterII;
Retorne;
Marcar as reas: Program/Configure; Verify; Blank-Check (caso
alguma opo no esteja habilitada para marcar prossiga sem marcar);
Clique em para fazer o download do programa para o
FPGA e verifique o seu funcionamento.

3.6. PROJ ETOS
3.6.1. CRIAO DO PROJ ETO DE UM CIRCUITO LGICO
Neste tpico iremos criar um arquivo Diagrama de Blocos (.gdf), o qual servir
de base para a criao do circuito lgico. Para tanto siga os passos a seguir:
- Clique em New e escolha a opo Block Diagram/Schematic File, e clique em
OK.
Ser aberta uma tela semelhante a da Figura 3.1.

Figura 3.1 Tela Diagrama de Blocos Quartus II
52

- Salve o projeto.
ULTILIZAO DE BLOCOS LGICOS EXISTENTES
Para utilizar Blocos Lgicos Existentes clique no boto Symbol Tool como
mostrado na Figura 3.2.


Figura 3.2 Boto Symbol Tool
Com a abertura da tela, temos que expandir o diretrio primitives. Dentro deste
expandiremos o diretrio logic, escolhendo ento a porta lgica a ser inserida.
Neste caso exemplo usaremos a porta AND2, como mostrado na Figura 3.3.

Figura 3.3 Diretrio Logic do Quartus II
53

A porta lgica utilizada uma porta AND com 2 entradas. No diagrama de
blocos, ao posicionar a quanti-dade de componentes desejados, basta apertar a tecla
ESC do teclado para cancelar este modo.
Como exemplo posicionaremos apenas uma porta AND.
Clicando mais uma vez no boto Symbol Tool e agora no diretrio PIN em
PRIMITIVES voc pode selecionar input para adicionar ao seu projeto duas entradas
lgicas e depois output para configurar uma sada, ficando o circuito como mostrado na
Figura 3.4.

Figura 3.4 Pinos Input e Output
Para fazer ligaes utilize a ferramenta Orthogonal Node Tool (Figura 3.5).
Com a ferramenta selecionada, basta clicar no n de origem e depois no n de destino.

Figura 3.5 Orthogonal Node Tool
Para nomear um pino tanto de entrada quanto de sada, clique duas vezes sobre
ele. Uma janela como a da Figura 3.6 aparecer.
54

No campo Instance Name d seu novo nome. Geralmente utiliza-se letras do
alfabeto maisculas em projetos simples.

Figura 3.6 Propriedades dos pinos
Aps criar o circuito salve o seu projeto.
3.6.2. CRIAO DE BLOCOS LGICOS A PARTIR DE CDIGO VHDL
Para criar blocos lgicos prprios utilizando cdigos em VHDL, voc deve
realizar os passos que se seguem. Esta ferramenta muito importante, pois aqui o
usurio ficar livre para criar o componente especfico necessrio sua aplicao.
- Clique em New e escolha a opo VHDL File, e clique em OK.
Na janela aberta, o cdigo referente uma porta lgica OR deve ser includo.
Library IEEE;
use IEEE.STD_LOGIC_1164.all;

ENTITY vhdl_or IS
PORT ( A,B: IN BIT;
S : OUT BIT);
END vhdl_or;
ARCHITECTURE arch_or OF vhdl_or IS
BEGIN
PROCESS(A,B)
BEGIN
S<= A OR B;
END PROCESS or_process;
END ARCHITECTURE arch_or;
55

Salve o arquivo, escolhendo o mesmo nome da entidade. Agora v ao menu
FILE, selecione CREATE/UPDATE e CREATE SYMBOL FILES FOR CURRENTE
FILE.
Um processo de compilao se iniciar. Aguarde a concluso e depois feche a
aba COMPILATION REPORT que aparecer.
A aba do cdigo fonte em VHDL no ser mais necessria, feche-a tambm.
Na aba do arquivo de diagrama de blocos clique mais uma vez no boto Symbol
Tools. Clique no boto mostrado na Figura 2.7, para procurar o diretrio onde o
smbolo da porta OR feita em VHDL foi salvo.

Figura 3.7 Diretrio Symbol Tools
Uma janela de procura de diretrios se abrir. Escolha o diretrio e o arquivo e
clique em abrir.
O smbolo referente ao cdigo que o usurio criou aparecer imediatamente do
lado direito da janela Symbol. Clique em OK e posicione o bloco vhdl_or no arquivo de
diagrama de blocos como indicado na Figura 3.8.

56


Figura 3.8 vhdl_or no diagrama de blocos

3.6.3. SIMULAO
Precisamos saber se o circuito est funcionando antes de grav-lo na FPGA.
Para isso precisamos simular o circuito criado.
No Quartus II preciso criar um arquivo do tipo VECTOR WAVEFORM FILE
(.vwf) para realizar simulaes.
Antes de prosseguir criando o VECTOR WAVEFORM FILE precisamos realizar
uma etapa de compilao parcial do diagrama de blocos. Para tal v ao menu
PROCESSING e escolha a opo START COMPILATION ou Clique em .
Agora acesse o menu FILE, opo NEW. Na janela que se abrir, clique na aba
OTHER FILES e selecione VECTOR WAVEFORM FILE.
A tela da Figura 3.9 aparecer. Antes de prosseguir salve este arquivo com o
mesmo nome do projeto (o nome sugerido serve apenas para facilitar a identificao).
57


Figura 3.9 Vector Waveform File
Agora precisamos configurar o tempo mximo de simulao para indicarmos ao
Quartus II como ele deve proceder. Para isso v ao menu EDIT e acesse a opo END
TIME.
A janela da Figura 3.10 aparecer. Como exemplo configuraremos o tempo final
de simulao como 10ms. H um campo para digitar o valor e uma caixa de seleo
para escolher a unidade (segundos, milisegundo, microsegundos, nanosegundos e
picosegundos). Clique em OK e retorne janela de simulao.

58


Figura 3.10 J anela END TIME
Clicando com o boto direito na campo NAME, um menu de contexto aparecer.
Acesse a opo INSERT e no submenu a opo INSERT NODE OR BUS. Uma janela
aparecer, clique no boto NODE FINDER.
A janela da Figura 3.11 aparecer. No campo NAMED coloque um asterisco
caso esteja preenchido de outra forma ou vazio, isso far com que o NODE FINDER
no se restrinja ao nome do n. Na opo FILTERS selecione a opo PINS: ALL.
59


Figura 3.11 Node Finder
Clique em LIST e a janela da Figura 3.12 aparecer. Voc pode utilizar o boto
circulado em vermelho para incluir os ns um a um ou o boto circulado em verde para
incluir todos os ns. Para a nossa simulao incluiremos todos os ns.

Figura 3.12 Seleo na janela Node Finder
60

Aps realizadas estas operaes clique em OK nas janelas NODE FINDER e
INSERT NODE OR BUS. Voc retornar tela do VECTOR WAVEFORM FILE.
Com as teclas de atalho Ctrl+Shift+Space ou Ctrl+Space podemos aproximar e
afastar o grid de simulao para melhor ver os sinais de entrada (e futuramente sada).
O grid da Figura 2.13 est com as variveis de entrada j configuradas.

Figura 3.13 Grid de simulao com entradas definidas
Para configurar as variveis do grid clique no boto OVERWRITE CLOCK do
menu de simulao (marcado em vermelho na Figura 3.14).

Figura 3.14 Menu e OVERWRITE CLOCK
61

A janela da Figura 3.15 se abrir. Nela especificaremos os padres de sinais de
entrada que se alteram ciclicamente. O campo START TIME indicar quando o ciclo
comea a ser executado (no nosso caso no tempo 0 em qualquer unidade). O campo
END TIME indica quando o ciclo se encerrar (no nosso caso tempo 10 ms pois
desejamos que o ciclo se repita ao longo de todo o tempo de simulao).

Figura 3.15 J anela CLOCK
Se o radial button TIME PERIOD no estiver selecionado, selecione-o. Isto te
dar acesso aos campos PERIOD, OFFSET e DUTY CYCLE. Em PERIOD voc
determina o ciclo de repetio do DUTY CYCLE. Por enquanto no exploraremos o
recurso OFFSET, ele desloca o incio do ciclo que seria igual ao START TIME para o
valor indicado no campo. Por fim DUTY CYCLE corresponde porcentagem do
perodo no qual a onda ficar em nvel lgico alto.
Como dica para a criao de uma tabela verdade sugere-se que a cada nova
entrada, seja usado como perodo um valor correspondente metade do anterior.
Em nossa simulao temos ciclos de 10 ms, 5 ms e 2,5 ms para as portas A, B e
C respectivamente.
Realizaremos agora mais uma etapa de compilao parcial ( ).
Por fim realizaremos a simulao clicando no boto .
62

Voc obter uma janela de resultados, que muito similar de simulao,
porm no possvel alterar os formatos de entrada e/ou sada. (Figura 3.16).

Figura 3.16 Resultados de simulao
Podemos constatar que o circuito funciona conforme o esperado. Aps tal
constatao as janelas de resultado e do VECTOR WAVEFORM FILE, podem ser
fechadas e agora temos certeza que a parte de cdigo do projeto funcionra. E hora de
partir para a implementao em hardware.

3.7. DECLRAO DE COMPONENTES
Em VHDL pode-se reutilizar cdigos feitos em outros projetos, para explicar
melhor vamos tomar por base o exerccio 6 do laboratrio 1.
Esse exerccio basicamente usa um multiplexador 3 para 1 de dois bits de
largura para habilitar a seleo de quatro caracteres so mostrados num display de 7-
segmetos. Para a criao deste projeto foram reutilizados cdigos de um multiplexador,
do display de 7-segmentos e de um contador para acender os 4 displays
O arquivo principal chamado de parte6, nele devem ser declarados os arquivos
que compem o projeto, que em nosso caso seriam os arquivos do multiplexador, do
display de 7-segmentos e do contador.
Um componente de um projeto deve ser declarado dentro de ARCHITECTURE
da seguinte forma:
COMPONENT nome_entidade Nome igual ao da entity do arquivo utilizado
PORT (a_in, b_in: IN STD_LOGIC; Declarar as portas de entrada que sero
utilizadas.
C_out: OUT STD_LOGIC); --Declarar as portas de sada que sero utilizadas.
END COMPONENT;
63

No exerccio utilizado como exemplo as entidades doas arquivos de multiplexador,
display e contador possuem os seguintes nomes respectivamente: mux_2bit_3to1,
char_7seg e contador. Logo so declaradas do seguinte modo no arquivo parte6:
ARCHITECTURE Behavior OF parte6 IS
COMPONENT mux_2bit_3to1
PORT ( S, U, V, W : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
M : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END COMPONENT;

COMPONENT char_7seg
PORT ( C : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
Display : OUT STD_LOGIC_VECTOR(0 TO 6));
END COMPONENT;

COMPONENT contador
PORT ( CLOCK: IN STD_LOGIC;
do_mux : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
pro_char7 : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
D : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END COMPONENT;

3.8. ARQUITETURAS MULTI-PROCESSO
Por inmeras vezes, vrios eventos ocorrem ao mesmo tempo, ou de forma
concorrente. Da mesma forma, muitas vezes alguns sistemas so concorrentes
internamente.
Em VHDL, possvel especificar sistemas como sendo um conjunto de
subsistemas concorrentes, onde cada subsistema um process individual. O nvel de
detalhes de cada process depende das necessidades. Como exemplo, um processador
ou como uma porta lgica podem ser especificados como um process. Assim, a
descrio comportamental de um sistema dada como sendo um conjunto de
processes sequenciais concorrentes.
Uma arquitetura comportamental composta por um cabealho e por um corpo.
O cabealho especifica que se trata de uma arquitetura e estabelece um nome. No
cabealho tambm se indica a qual entity pertence. No corpo esto listados os
processes e seus contedos, vale lembrar que mesmo sendo listado sequencialmente,
os processes de uma architecture so executados de forma concorrente. Visualmente,
64

isto equivale a escrever todos os processes em paralelo, o que no feito por questes
de espao.
Vale ressaltar que quando ocorre a mudana de um sinal, todos os processes
que tm este sinal em sua lista de sensitividade so ativados. Como os processes no
tem como distinguir entre sinais modificados externamente e sinais modificados
internamente, sinais que ativam alguns processes podem ser gerados por outros
processes. Assim, toda vez que um sinal em uma lista de sensitividade modificado,
independente da origem da mudana, o process ativado.
Note que somente sinais podem ser usados para transferir informaes entre
processes. As variveis so internas aos processes e no podem transferir informao
entre processes.

3.8.1. PROCESS SIMPLIFICADO
Para se especificar uma simples porta lgica (ex: OUT <= A + B), pode-se usar
um process. Entretanto, para isso seriam necessrios trs comandos adicionais
(cabealho do process, comando begin e comando end), o que na verdade seria um
desperdcio. O VHDL permite que se use processes de uma nica linha, chamados
concurrent signal assigment. Este comando de uma nica linha pode ser
posicionado dentro de uma architecture, em paralelo com alguns processes e so
executados de forma concorrente com os demais comandos. Os comandos comuns
so executados na sequncia dada, entretanto os concurrent signal assignment so
executados de forma concorrente.
Os processes tm lista de sensitividade e comandos wait, mas o mesmo no
ocorre com o concurrent signal assignment. Na verdade o VHDL interpreta como lista
de sensitividade tudo que esta direita do smbolo de atribuio (<=) do concurrent
signal assignment. Da mesma forma, um comando pode ser atrasado pelo uso do
comando after. A Figura 3.17 ilustra um circuito multiplexador e a seguir a sua
respectiva descrio usando os recursos apresentados.

65


Figura 3.17 Estrutura interna de um MUX 2x1.
architecture Portas of Mux2x1 is
signal AOK, BOK, NS : bit;
begin
AOK <= A and S after 1 ns;
BOK <= B and NS after 1 ns;
NS <= not S after 1 ns;
Z <= AOK or BOK after 1 ns;
end architecture Portas;
Algumas vezes se torna necessrio utilizar um comando condicional. Como o
comando if then um comando sequencial e restrito a process, deve-se usar
conditional signal assignment que pode ser usado diretamente na architecture. Este
comando tem sintaxe direta, isto , um sinal recebe um certo valor quando uma certa
condio for atendida. possvel usar else ninhados. As duas listagens seguintes
ilustram o uso da conditional signal assignment e process para executar a mesma
funo, correspondente ao circuito da Figura X.
architecture Processo of Mux2x1 is
begin
Mux : process (A, B, S);
begin
if S = 1
then Z <= A;
else Z <= B;
endif;
end process Mux;
end architecture Process;
architecture Condicional of Mux2x1 is
begin
Z <= A when S = 1 else
B;
end architecture Condicional;

66

Quando for necessrio selecionar um valor, dentre vrias opes, para um sinal,
usa-se a estrutura selected signal assignment. Esta estrutura no pode ser usada
dentro dos processes, onde se usa o comando case, e da mesma forma, o contrrio
tambm no vlido.
As duas listagens a seguir so equivalentes, sendo que a primeira faz uso de
selected signal assignment, e equivalente a segunda, que faz uso de Process.
architecture Selecao of PortaProgramavel is
begin
with Modo select
Out <=
In1 and In2 when 000,
In1 or In2 when 001,
In1 nand In2 when 010,
In1 nor In2 when 011,
not In1 when 100,
not In2 when 101,
0 when others;
end architecture Selecao;

Architecture Case of PortaProgramavel is
PortaProg : process (Modo, In1, In2)
begin
case Modo is
when 000 => Out <= In1 and In2;
when 001 => Out <= In1 or In2;
when 010 => Out <= In1 nand In2;
when 011 => Out <= In1 nor In2;
when 100 => Out <= not In1;
when 101 => Out <= not In2;
when others => Out <= 0;
end case;
end process PortaProgr;
end architecture PortaProgramavel;

3.8.2. DRIVERS E ATRIBUIO DE SINAL
Em um process, os sinais recebem os seus novos valores apenas quando o
process suspenso. Enquanto o process est ativo, os valores que devem ser
atribudos aos sinais ficam armazenados em drivers. Quando o process suspenso, o
valor dos drivers so transferidos aos respectivos sinais. Se durante o process houver
mais de uma atribuio ao mesmo sinal, somente a ltima atribuio vlida.
67

Alm do valor presente, os drivers tambm permitem que os sinais tenham
valores passados e futuros. Os drivers podem especificar os valores de uma forma de
onda de sada esperada para um sinal. Esta forma de onda consiste de transies, que
por sua vez consistem de valores e tempos. O tempo especifica quando um novo valor
dever ser atribudo pela transio. Assim, uma forma de onda pode ser explicitamente
especificada como sendo uma sequncia de valores e seus correspondentes atrasos
com relao ao mesmo ponto no tempo. Assim, as formas de onda podem ser
consideradas como valores projetados dos sinais. Tendo em vista que os simuladores
armazenam as transies para cada sinal, tem-se na verdade uma histria dos sinais.
A histria de um sinal importante para que se possa determinar se houve
mudana no sinal, ou para verificar se ocorreu uma transio positiva ou negativa. A
histria de um sinal representada pelos seus atributos, que so informaes
associadas a um sinal e so atualizadas automaticamente. A Figura 3.18 ilustra uma
forma de onda e a seguir apresentada a sua respectiva descrio.

Figura 3.18 Forma de onda genrica
Exemplo <= 0 after 2s,
1 after 5 s,
0 after 6s,
1 after 8 s;
A expresso after determina o tempo aps o qual uma expresso se torna
efetiva, tomando como base uma referncia de tempo. Se nada for especificado, a
referncia a origem (t=0). J o comando wait suspende processo por um tempo
determinado, o que permite especificar uma nova referncia.
Assim, esses comandos podem ser usados individualmente, ou de forma
associada para a gerao de formas de onda. O processa seguir usado para a
gerao da forma de onda da Figura 3.19. Observe que foi usada uma composio de
after e wait.

68

forma_de_onda : process
begin
s <= 0;
wait for 5ns;
s <= 1 after 3ns;
wait for 10ns;
s <= 0, 1 after 10ns, 0 after 20ns;
wait;
end process;

Figura 3.19 Forma de onda gerada pelo Process forma_de_onda

3.8.3. SINAIS COM MAIS DE UM DRIVER
Quando um sinal tem apenas um driver fcil determinar o seu valor. Entretanto
existem situaes onde se torna necessrio mais de um driver para um mesmo sinal.
Considere o caso do barramento de um microprocessador onde h vrias fontes de
dados, tais como o processador, a memria, os dispositivos de entrada/sada e outros.
Existem situaes onde se torna difcil determinar se somente uma das fontes de sinal
estar excitando o sinal ao mesmo tempo. Em alguns casos isto ocorre sempre,
entretanto, em outros pode ser necessrio misturar os sinais de diferentes fontes,
emulando nestes casos, E ou OU por fios. Nestas situaes, necessrio
estabelecer um mtodo para se determinar o valor resultante. Em VHDL, a
determinao do valor resultante quando se misturam sinais conhecida como
resolving.
Em algumas situaes, dependendo da escolha do tipo de sinais, estes no
podem ser misturados. Considere que se deseja descrever um sistema de
microprocessador, para este caso no possvel utilizar bit e/ou bit_vector, pois no se
tem como misturar 0 e 1. Estes tipos so chamados de tipos unresolved e no
podem ser usados com sinais de mltiplos drivers.
Somente 0 e 1 no so suficientes para sinais de um ou de mltiplos drivers,
inclusive para o caso dos barramentos. Os circuitos reais exigem alguns outros tipos de
dados:
69

- Algumas vezes no importa o valor de um sinal. Isto representado por no-
interessa ou dont care.
- Buffres tri-state apresentam linhas de sada de alta impedncia (no so 0 ou
1).
- Ocasionalmente um sistema pode no ter um valor especificado (unassigned)
ou no ter um valor conhecido (unknown), que so diferentes de no interessa.
Estes e alguns outros tipos de dados comumente usados so especificados pelo
tipo std_ulogic, definido no package Std_Logic_1164. Este package tambm tem os
tipos std_ulogic_vector que so os seus equivalentes vetoriais. Ambos tm um conjunto
de operaes lgicas definidas para eles. A letra u indica tipos unresolved, isto , no
podem ser usados com sinais de mltiplos drivers. As listagens a seguir apresentam os
valores do tipostd_ulogic do package Std_Logic_1164para um bit e para barramento.
TYPE std_ulogic is
( U, -- No inicializado
X, -- Fora a 0 ou 1
0, -- Fora a 0
1, -- Fora a 1
Z, -- Alta impedncia
W, -- 0 ou 1 fraco
L, -- 0 fraco (para ECL com emissor aberto)
H, -- 1 fraco (para Coletor ou Dreno aberto)
-, -- No interessa
);
TYPE std_ulogic vector IS ARRAY
( NATURASL RANGE <> ) of std_ulogic;
Convm mencionar que ostd_ulogice o std_ulogic-vectorno so definidos no
VHDL padro e deve-se usar um package, como por exemplo, o IEEE, tal como
ilustrado a seguir. Invoca-se o package antes do cabealho da entity.
library IEEE;
use IEEE.Std_Logic_1164.all;



70

3.9. ESPECIFICAO DA ESTRUTURA DO SISTEMA
Em VHDL, a descrio comportamental especifica o sistema em termos de sua
operao. J a descrio estrutural especifica como o sistema composto, como os
componentes so constitudos e como so interconectados.
A descrio estrutural permite a existncia de vrios nveis hierrquicos e um
componente pode ser especificado por sua descrio comportamental ou estrutural.
Esta, por sua vez, pode ser especificada como um sub circuito, e assim
sucessivamente at o ltimo nvel, em que cada componente especificado pelo seu
comportamento.
A especificao estrutural consiste de componentes conectados entre si e com o
ambiente externo atravs de signals. Uma especificao estrutural requer dois grupos
de elementos:
O componente pode ser um sistema individual, especificado por architecture e
entity individuais e pode ser definido em uma architecture pela declarao de
componente.
Em ambos os casos a declarao de componente tratada como uma
especificao genrica, tal como um item de uma lista ou de um catlogo. Para serem
usados, estes itens devem ser invocados, ou instanciados na especificao estrutural.
Assim, a instanciao de um componente a declarao bsica da arquitetura
estrutural. Da mesma forma que outros elementos de uma architecture, os
componentes instanciados so concorrentes.
Geralmente um componente um modulo qualquer especificado de forma
estrutural ou comportamental. Na sua forma mais simples, um componente uma
entity e sua respectiva architecture. Antes que o componente possa ser usado, ele
deve ser instanciado. A instanciao a seleo de uma especificao compilada de
uma biblioteca, e associando-a com a architecture onde ser usada. Cada instanciao
consiste do seguinte:
nome_da_instance: entity
biblio.nome_entity(nome_architecture)
Onde biblio o nome da biblioteca onde os itens esto localizados.
71

A instanciao de um componente no completa sem o port map, que uma
referncia ao nome real do port no nvel de descrio estrutural mais alto, e
formalmente especificado pelo comando port. Sinais nos port maps podem ser
especificados como port ou como internos ao sistema, sendo que neste ltimo caso,
devem ser declarados na architecture.
Quando os sinais nos port maps so especificados como port, diz-se que h
uma associao por nome. Uma forma mais simples seria pela associao posicional,
onde os sinais no port map so listados na mesma sequncia que os ports na
declarao de componentes da entity.
A Figura 3.20 apresenta um circuito de um latch D com entrada habilitadora
(enable). O circuito composto por dois sub circuitos; uma porta lgica E e por um
latch D, cujas descries so apresentadas a seguir. Aps estas duas descries,
apresentada a descrio do latch D da Figura 3.20 usando instanciao dos
componentes anteriores. Observe que foi usada associao por nome no port map, e
os componentes esto na biblioteca work.

Figura 3.20 - LacthD Formado por Dois Sub-Circuitos.
entity LatchD is
port (D, CLK : in Bit;
Q : out Bit);
end entity LatchD;
architecture Beta of LatchD is
begin
process(CLK, D)
begin
if CLK = 1 then
Q <= D after 3 ns;
end if;
end process;
end architecture Beta;
72

entity And2 is
port (In1, In2 : in Bit;
Out1 : out Bit);
end entity And2;
architecture Alfa of And2 is
begin
Out1 <= In1 and In2 after 2 ns;
end architecture Alfa;

entity LatchD_En is
port (Din, CLK, En : in Bit;
Qout : out Bit);
end entity LatchD_En;
architecture Delta of LatchD_En is
signal ClkInt : Bit;
begin
process(CLK, D)
begin
gate : entity work.And2(Alfa)
port map (In1 => CLK,
In2 => En,
Out1 => ClkInt);
Latch : entity work.LatchD(Beta)
port map (D => Din,
CLK => ClkInt,
Q => Qout);
end architecture Delta;

3.9.1. INSTANCIAO DIRETA
Instanciao direta a forma mais simples de se especificar um sistema estrutural.
So necessrios apenas uma especificao do componente compilado e sua
respectiva chamada. O comando de instanciao direta consiste de:
Um nome para o componente a ser instanciada. O nome obrigatrio,
pois o mesmo componente pode ser instanciado mais de uma vez na
mesma architecture.
O termo entity seguido pelo nome da biblioteca e da entity que contm
a especificao do componente.
Opcionalmente o nome da architecture dentro de colchetes e especificao de port
map. O nome da architecture s necessria quando h vrias architectures dentro de
uma mesma entity.
Cada port map especifica as conexes entre ports de uma entity (componente) e
sinais na architecture onde o componente foi instanciada. Como j mencionado, h
duas forma de se fazer port map, associao posicional e associao por nome.
73

Na associao posicional os sinais so listados na mesma ordem dos ports na
declarao da entity do componente. Desta forma, as conexes entre os sinais e os
ports so especificados por suas posies. Naturalmente os sinais devem ser do
mesmo tipo de seus respectivos ports.
A associao posicional parece ser natural, mas eventualmente pode haver
dificuldades para se determinar quais sinais so conectados a quais ports. Isto pode
ocorrer quando h muitos sinais em uma lista. Uma soluo a associao por nome,
onde so atribudos os nomes dos ports aos sinais. Desta forma, a ordem dos ports
irrelevante e a relao correta sempre obtida.
A associao entre ports e os sinais representada pelo smbolo =>. Observe que
este smbolo no implica em direo de fluxo de informao. A listagem a seguir ilustra
o trecho de uma architecture onde se faz uma instanciao direta.
architecture Gama of Sistema is
begin
...
GateX : entity work.And2
Port map (A, B, C);
...
end architecture Gama;
Apesar de ter sido mencionado apenas sinais de um bit, pode-se tambm fazer
instanciao de sinais complexos, tais como arrays e records. Pode-se fazer a
instanciao por elemento ou por segmento. Qualquer combinao de ports e sinais
so permitidos, desde que haja compatibilidade entre ports e sinais. Entretanto, todos
os elementos do port composto devem ser associados a algum sinal.
Os ports no conectados podem ser especificados como open no port map.
Adicionalmente, um port no usado pode ser deixado omitido no port map. Apesar de
poder ser empregado em VHDL, no recomendado, pois no h garantia que tenha
sido omitido de propsito. Mesmo projetistas experientes em VHDL podem esquecer
alguns ports. Assim, recomenda-se o uso de open para todos os ports no usados no
port map. A Figura 3.21 ilustra um circuito com uma sada aberta e a seguir a sua
respectiva instanciao onde se pode visualizar o uso de open no port map.
74


Figura 3.21 - Circuito Genrico com Sada Aberta.
Comp1: entity work.sistema
port map ( Input1 => SigA,
Input2 => SigB,
Input3 => SigC,
Input4 => SigD,
Output1 => open,
Output2 => SigF);

3.9.2. COMPONENTES E CONFIGURAES
No caso de uma simples descrio estrutural onde todos componentes so
previamente conhecidos, a instanciao direta adequada. Entretanto, em sistemas
maiores, os componentes so criados de forma concorrente, e eventualmente pode ser
necessrio relaciona-los a implementaes estruturais ou comportamentais ainda no
definidos.
Na situao de uma especificao estrutural, basta ter a declarao da interface
dos componentes, feita no cabealho da architecture.
A sintaxe de declarao de interface de componentes e a entity so similares. Isto
no coincidncia, pois component e entity desempenham papeis semelhantes na
definio de interfaces externas dos mdulos. H, entretanto, uma grande diferena
entre estas duas construes.
A declarao da entity define a interface de um circuito real, o circuito um
sistema separado e pode ser individualmente simulado, analisado e
sintetizado.
75

A declarao de component define a interface de um mdulo virtual,
especificado dentro de uma architecture e funciona mais como o que se
espera de uma interface do que a descrio de um circuito.
A listagem a seguir ilustra como se declara um component. Pode-se observar
que a sua estrutura muito similar a declarao de uma entity.
component DFF is
generic (t_prop : time;
tset_up : time);
port (D : in bit;
Clk : in bit;
Rst : in bit;
Q : out bit);
end component DFF;
Da mesma forma, a instanciao do componente muito similar da entity e
composta de:
Rtulo seguido por dois pontos, sendo que o rtulo obrigatrio, pois
serve para identificar a instanciao.
O termo componente que opcional, mas altamente recomendado.
O nome do component, como especificado na declarao do component.
O comando generic map que lista valores para as variveis generics do
component.
O comando port map que especificada da mesma forma que na
instanciao direta.
Deve-se observar que no h ponto-e-vrgula depois do nome do component e
depois do comando port map. Toda a instanciao forma um comando, e somente
aps este comando aparece o ponto-e-vrgula.
A listagem seguinte apresenta a entity de um registrador de 4 bits que faz uso de
instanciao de componente em sua architecture, conforme j apresentado.
entity Reg4 is
port(RegD : in bit_vector (3 downto 0);
Clk, Rst : in bit;
RegQ : out bit_vector (3 downto0));
end entity Reg4;

architecture Gama of Reg4 is
component DFF is
generic (t_prop : time; t_setup : time);
port (D, Clk, Rst : in bit;
76

Q : out bit);
end component DFF;
begin
bit0: component DFF
generic map (t_prop => 2ns, t_setup => 1 ns)
port map (D => RegD(0), Clk => Clk, Rst => Rst, Q => RegQ(0));
bit1: component DFF
generic map (t_prop => 2ns, t_setup => 1 ns)
port map (D => RegD(1), Clk => Clk, Rst => Rst, Q => RegQ(1));
bit2: component DFF
generic map (t_prop => 2ns, t_setup => 1 ns)
port map (D => RegD(2), Clk => Clk, Rst => Rst, Q => RegQ(2));
bit3: component DFF
generic map (t_prop => 2ns, t_setup => 1 ns)
port map (D => RegD(3), Clk => Clk, Rst => Rst, Q => RegQ(3));
end architecture Gama;
A declarao de um component e sua instanciao no so suficientes para uma
completa especificao de uma arquitetura estrutural, pois fica faltando ainda a
descrio de implementao dos componentes. A informao que une o componente a
architectures e entities especificada em configuration.
Uma anlise mais cuidadosa revela que isso similar a instanciao direta de
entity, porm mais fcil e mais flexvel de manter se uma implementao diferente do
component deve ser usada. Se no h mudanas, devem apenas ser introduzidas no
arquivo de configurao, que relativamente fcil. A listagem a seguir ilustra um caso
simples de configuration.
configuration Reg4_conf of Reg4 is
for Gama
for Bit0 : DFF
use entity Dflipflop(fast);
end for;
for others : DFF
use entity Dflipflop(normal);
end for ;
end for;
end configuration Reg4_conf;




77

4. APLICAES E PRTICAS

4.1. PRTICA 1
Esta experincia tem por objetivo a familiarizao com portas lgicas AND e
NOT, a fim de acionar um indicador de alerta de cinto de segurana em um carro.
Se o motorista estiver presente E NO estiver usando cinto, E a ignio estiver
acionada, ENTO, acenda a luz de advertncia.
Descreva o circuito usando lgebra booleana, diagramas de smbolos lgicos,
tabelas-verdade e diagramas de tempo.
SOLUO
Expresso Booleana:
Luz_De_Advertencia = motorista presente * NOT cinto_em_uso * ignio_ligada
Cdigo em VHDL:
Library IEEE;
use IEEE.STD_LOGIC_1164.all;

ENTITY alarme_cinto_seguranca IS Declaracao do nome da entidade
PORT (motorista_presente, cinto_em_uso, ignicao_ligada : IN BIT; -- Entradas
Luz_de_advertencia : OUT BIT); -- Saidas
END alarme_cinto_seguranca;

ARCHITECTURE processo of alarme_cinto_seguranca IS Declaracao da arquitetura
SIGNAL m : BIT; -- Define um sinal intermedirio
BEGIN
PROCESS (motorista_presente, cinto_em_uso, ignicao_ligada, m) BEGIN
M <= NOT cinto_em_uso; --Termo para no uso do cinto de segurana
Luz_de_advertencia <= m AND motorista_presente AND ignio_ligada;
END PROCESS;
END ARCHITECTURE processo;

78


Figura 4.1 Tabela Verdade

Figura 4.2 Diagrama Esquemtico

79


Figura 4.3 Diagrama de Tempo
Resolva os exerccios propostos nos arquivos de laboratrio. Todos os
arquivos possuem soluo dos exerccios.
5. BILIOGRAFIA

1. MALAGONI, Juliana A., FRANA, Marco A., WANDERLEY, Rafael R. V. N.,
JNIOR, Silmrio, FERREIRA, Thoms B., Design Digital Utilizando FPGA,
2009, Universidade Federal de Uberlndia-MG.
2. SMITH, Gina R., FPGAs 101 Everything you need to know to get started, 2010.
3. Grupo de microeletrnica, Tutorial VHDL, Universidade Federal de Itajub-MG

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