Sei sulla pagina 1di 85

UNIVERSIDADE FEDERAL DO ESPRITO SANTO UFES CENTRO UNIVERSITRIO DO NORTE DO ESPRITO SANTO CEUNES DEPARTAMENTO DE ENGENHARIA E COMPUTAO DECOM

COM 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


1

SUMRIO
1. INTRODUO .................................................................................................................................. 4 1.1. 1.2. 1.3. 1.4. ARQUITETURA.......................................................................................................................... 6 DESIGN DIGITAL ....................................................................................................................... 7 APLICAES ............................................................................................................................. 8 INTRODUO AO KIT DE DESENVOLVIMENTO .......................................................................... 9 A PLATAFORMA FPGA ...................................................................................................... 9 SWITCHES ...................................................................................................................... 10 CHAVES .......................................................................................................................... 12 DISPLAY DE SETE SEGMENTOS ........................................................................................ 13 LEDs ............................................................................................................................... 14 DISPLAY LCD ................................................................................................................... 15 COMUNICAO SERIAL RS-232 ....................................................................................... 17 MEMRIA FLASH ............................................................................................................ 18 PORTAS DE EXPANSO ................................................................................................... 19 OSCILADOR .................................................................................................................... 21 RESET ............................................................................................................................. 21

1.4.1. 1.4.2. 1.4.3. 1.4.4. 1.4.5. 1.4.6. 1.4.7. 1.4.8. 1.4.9. 1.4.10. 1.4.11. 2.

DESIGN DIGITAL ............................................................................................................................ 22 2.1. LINGUAGEM DE DESCRIO DE HARDWARE .......................................................................... 22 COMPONENTES DE UM PROJETO VHDL .......................................................................... 23

2.1.1. 2.2. 2.3.

SINAIS .................................................................................................................................... 28 SEMNTICA DA LINGUAGEM VHDL ........................................................................................ 30 ELEMENTOS LXICOS ...................................................................................................... 30 ESTRUTURAS PARA DESCRIO DE COMPORTAMENTO .................................................. 32 EXPRESSES E OPERADORES .......................................................................................... 34

2.3.1. 2.3.2. 2.3.3. 2.4. 2.5.

DESCRIO DE COMPORTAMENTO (PROCESS) ....................................................................... 41 CONTROLE DA SEQUNCIA..................................................................................................... 45 COMANDO IF THEN ........................................................................................................ 45 COMANDO IF THEN ELSE ................................................................................................ 46 COMANDO CASE ............................................................................................................ 46 COMANDO WHILE LOOP................................................................................................. 47 COMANDO FOR LOOP .................................................................................................... 48 COMANDOS NEXT E EXIT ................................................................................................ 49 2

2.5.1. 2.5.2. 2.5.3. 2.5.4. 2.5.5. 2.5.6.

3.

TUTORIAL QUARTUS II .................................................................................................................. 51 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. INTRODUO......................................................................................................................... 51 INSTALAO DE HARDWARE .................................................................................................. 51 INSTALAO DE SOFTWARE ................................................................................................... 51 PROGRAMA TESTE ................................................................................................................. 52 COMPILANDO E QUEIMANDO O PROJETO. ......................................................................... 54 PROJETOS .............................................................................................................................. 56 CRIAO DE PROJETO DE UM CIRCUITO LGICO ............................................................ 56 CRIAO DE BLOCOS LGICOS A PARTIR DE CDIGOS EM VHDL .................................... 59 SIMULAO ................................................................................................................... 61

3.6.1. 3.6.2. 3.6.3. 3.7. 3.8.

DECLRAO DE COMPONENTES ............................................................................................. 67 ARQUITETURAS MULTI-PROCESSO ......................................................................................... 68 PROCESS SIMPLIFICADO ................................................................................................. 69 DRIVERS E ATRIBUIO DE SINAL ................................................................................... 72 SINAIS COM MAIS DE UM DRIVER................................................................................... 73

3.8.1. 3.8.2. 3.8.3. 3.9.

ESPECIFICAO DA ESTRUTURA DO SISTEMA ......................................................................... 75 INSTANCIAO DIRETA................................................................................................... 78 COMPONENTES E CONFIGURAES ............................................................................... 80

3.9.1. 3.9.2. 4.

APLICAES E PRTICAS ............................................................................................................... 83 4.1. PRTICA 1 .............................................................................................................................. 83

5.

BILIOGRAFIA ................................................................................................................................. 85

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 bidirecional 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.

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 ideia 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).

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 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.
7

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.

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.
8

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 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.

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.

10

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 Seleciona Dado ou Comando, 0 = Comando, 1 = Dado RS PIN_168 Seleciona Leitura ou Escrita, 0 = Escrita, 1 = Leitura RW PIN_169 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

16

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.

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

17

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

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

18

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

19

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
20

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

21

2. DESIGN 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.

22

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

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.

23

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;

24

Observao: .all significa que todos os elementos das bibliotecas devem ser utilizados, caso no seja acrescentado .all deve-se especificar os elementos que sero utilizados. 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, devese 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 subsistemas; 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.


25

A entity composta de duas partes: parameters e connections. 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. Tipos 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

26

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, podem-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.
27

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:
28

port (nome_port : modo tipo_port)

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.

29

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. 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
30

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.

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:
31

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:

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 certa faixa, ou so explicitamente listados. O VHDL j tem previamente definido alguns scalar type, que so apresentados na Tabela 1.

Tipo Boolean Character Integer Real Bit

Observao Diferente de Bit Letras, Nmeros e Caracteres. Nmeros inteiros (de -2147483647 a 2147483647) 0.0, 1.0001, -1.0E-5 Nmeros em ponto flutuante (de 1.0E308 a 1.0E308) 0, 1 Valores lgicos 0 e 1 Tabela 2.1 - Tipos Escalares em VHDL.

Exemplo True, False 0, +, A, \ -12, 0, 347557

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);


32

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.

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
33

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
34

type b is array (1 to 5) of character ; (t, e, s, t, e) (1 => t, 5 => e, 2 => e, 3 => s, 4 => t ) (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.

35

As operaes de deslocamento, conforme indicadas na Figura 2.11 so: sll: shift left logical(deslocamento lgico esquerda), srl: shift right logical(deslocamento lgico direita), sla: shift left arithmetic (deslocamento aritmtico esquerda), rla: shift right arithmetic (deslocamento aritmtico direita), rol: rotate left logical (rotacionamento lgico esquerda), ror: rotate right logical (rotacionamento lgico direita).

Figura 2.11 - Operaes de Deslocamento.

36

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.

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

37

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.

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.

38

(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. 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;

39

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 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.

40

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 certo intervalo de tempo. Na segunda, ou wait until o processo suspenso at que certa condio seja verdadeira devido mudana dos sinais envolvidos nesta condio. Observe que se no houver mudana nos sinais, o processo continua suspenso. 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.
41

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;

42

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 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 a 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;
43

Os valores finais das variveis so: A = 3; B = 2; C = 1; D = 2; E = 2; 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 Em architecture ou como port na entity. Dentro de process. Recebe valor atribudo na suspenso do Recebe valor atribudo process. Somente a ltima atribuio imediatamente. Toda vlida. atribuio vlida. Ex: A<= B + C Ex: A:= B + C Inercial e Transporte No h Tabela 2.2 - Comparao entre Variables e Signals.

Declarao Atribuio

Atraso

44

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.

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

45

2.5.2. COMANDO IF THEN ELSE

O comando if then pode 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 flipflop tipo D ativo por rampa de subida, com linha de reset ativa por 1.

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 tornarem 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


46

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.

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.

47

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;

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 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

48

2.5.6. COMANDOS 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. 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 ;

49

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.

50

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.
51

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:

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
52

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 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;
53

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 ]; Nessa janela, escolher: Family: Cyclone II Available devices: EP2C8Q208C8 Clicar em Finish.

3.5. COMPILANDO E QUEIMANDO O PROJETO.


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: ;

54

Compile novamente; Clique em Clique em ; ;

Selecione em Add Hardware a opo ByteBlaster 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.

55

3.6. PROJETOS

3.6.1. CRIAO DE PROJETO 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 - Salve o projeto.

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

56

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 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.

57

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. No campo Instance Name d seu novo nome. Geralmente utiliza-se letras do alfabeto maisculas em projetos simples.

58

Figura 3.6 Propriedades dos pinos Aps criar o circuito salve o seu projeto.

3.6.2. CRIAO DE BLOCOS LGICOS A PARTIR DE CDIGOS EM 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 a 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;
59

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.

60

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).

61

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, milissegundo, microssegundos, nano segundos e Pico segundos). Clique em OK e retorne janela de simulao.

62

Figura 3.10 Janela 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.

63

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


64

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


65

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 Janela 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 usada 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
. 66

).

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 7segmetos. 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;
67

No

exerccio utilizado

como

exemplo as

entidades

dos 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 especificadas como um process. Assim, a descrio comportamental de um sistema dada como sendo um conjunto de process 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
68

processes e seus contedos, vale lembrar que mesmo sendo listado sequencialmente, os processes de uma architecture so executados de forma concorrente. Visualmente, 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 process 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.
69

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 certo valor quando 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;
70

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;

71

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. 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;

72

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.

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,
73

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: - Algumas vezes no importa o valor de um sinal. Isto representado por nointeressa 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.

74

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;

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:
75

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. 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
76

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; 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
77

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 instanciado. Como j mencionado, h duas forma de se fazer port map, associao posicional e associao por nome. 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.

78

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.

Figura 3.21 - Circuito Genrico com Sada Aberta.

79

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. 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;
80

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; 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;
81

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;

82

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;

83

Figura 4.1 Tabela Verdade

Figura 4.2 Diagrama Esquemtico

84

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

85

Potrebbero piacerti anche