# Arranjo de porta programável em campo

Um arranjo de porta programável em campo, em inglês field programmable gate array (sigla FPGA), é um circuito integrado projetado para ser configurado por um consumidor ou projetista após a fabricação – de onde advém "programável em campo". A grande maioria dos chips que encontramos em nosso dia-a-dia, circuitos que acompanham as televisões, celulares, etc., já vêm todos pré-programados (ASIC), isto é, com as suas funcionalidades todas definidas no ato de fabricação. Surgiu então uma categoria nova de hardware reconfigurável, o qual têm as suas funcionalidades definidas exclusivamente pelos usuários e não pelos fabricantes.

## Arquitetura

Um FPGA é um dispositivo semicondutor que é largamente utilizado para o processamento de informações digitais. Foi criado pela Xilinx Inc., e teve o seu lançamento no ano de 1985 como um dispositivo que poderia ser programado de acordo com as aplicações do usuário (programador). O FPGA é composto basicamente por três tipos de componentes: blocos de entrada e saída (IOB), blocos lógicos configuráveis (CLB) e chaves de interconexão (Switch Matrix). Os blocos lógicos são dispostos de forma bidimensional, as chaves de interconexão são dispostas em formas de trilhas verticais e horizontais entre as linhas e as colunas dos blocos lógicos.
* CLB (Configuration Logical Blocks): Circuitos idênticos, construído pela reunião de flip-flops (entre 2 e 4) e a utilização de lógica combinacional. Utilizando os CLBs, um usuário pode construir elementos funcionais lógicos.
* IOB (Input/Output Block): São circuitos responsáveis pelo interfaceamento das saídas provenientes das saídas das combinações de CLBs. São basicamente buffers, que funcionarão como um pino bidirecional entrada e saída do FPGA.
* Switch Matrix (chaves de interconexões): Trilhas utilizadas para conectar os CLBS e IOBS. O terceiro grupo é composto pelas interconexões. Os recursos de interconexões possuem trilhas para conectar as entradas e saídas dos CLBs e IOBs para as redes apropriadas. Geralmente, a configuração é estabelecida por programação interna das células de memória estática, que determinam funções lógicas e conexões internas implementadas no FPGA entre os CLBs e os IOBs. O processo de escolha das interconexões é chamado de roteamento.

## Tecnologia do FPGA

A FPGA é um chip que suporta a implementação de circuitos lógicos relativamente grandes. Consiste de um grande arranjo de células lógicas ou blocos lógicos configuráveis contidos em um único circuito integrado. Cada célula contém capacidade computacional para implementar funções lógicas e realizar roteamento para comunicação entre elas. O primeiro FPGA disponível comercialmente foi desenvolvido pela empresa Xilinx Inc, em 1983.
Os FPGAs não possuem planos OR ou AND, consistem de um grande arranjo de células configuráveis que podem ser utilizadas para a implementação de funções lógicas. Um FPGA basicamente é constituído por blocos lógicos, blocos de entrada e saída, e chaves de interconexão. Os blocos lógicos formam uma matriz bidimensional, e as chaves de interconexão são organizadas como canais de roteamento horizontal e vertical entre as linhas e colunas dos blocos lógicos. Os canais de roteamento possuem chaves de interligação programáveis que permitem conectar os blocos lógicos de maneira conveniente, em função das necessidades de cada projeto.
No interior de cada bloco lógico do FPGA existem vários modos possíveis para implementação de funções lógicas. O mais utilizado pelos fabricantes de FPGA como, por exemplo, a empresa Altera Corp, é o bloco de memória LUT (Look-Up Table). Esse tipo de bloco lógico contém células de armazenamento que são utilizadas para implementar pequenas funções lógicas. Cada célula é capaz de armazenar um único valor lógico: zero ou um.
Nos FPGAs disponíveis comercialmente como, por exemplo, da empresa Altera Corp., os blocos lógicos LUTs possuem geralmente quatro ou cinco entradas, o que permite endereçar 16 ou 32 células de armazenamento. Quando um circuito lógico é implementado em um FPGA, os blocos lógicos são programados para realizar as funções necessárias, e os canais de roteamento são estruturados de forma a realizar a interconexão necessária entre os blocos lógicos.
As células de armazenamento dos LUTs de um FPGA são voláteis, o que implica perda do conteúdo armazenado, no caso de falta de suprimento de energia elétrica. Dessa forma, o FPGA deve ser programado toda vez que for energizado. Geralmente utiliza-se uma pequena memória FLASH EEPROM (Electrically Erasable Programmable Read Only Memory) cuja função é carregar automaticamente as células de armazenamento, toda vez que o FPGA for energizado.
Granularidade é uma característica dos FPGAs relacionada com o grão. A fim de classificar os FPGAs quanto ao bloco lógico, foram criadas algumas categorias:
a) Grão grande: os FPGAs dessa categoria podem possuir como grão unidades lógicas e aritméticas, pequenos microprocessadores e memórias.
b) Grão médio: os FPGAs de grão médio freqüentemente contêm duas ou mais LUTs e dois ou mais flip-flops. A maioria das arquiteturas de FPGAs implementam a lógica em LUTs de quatro entradas.
c) Grão pequeno: os FPGAs de grão pequeno contêm um grande número de blocos lógicos simples. Os blocos lógicos normalmente contêm uma função lógica de duas entradas ou um multiplexador 4x1 e um flip-flop.
A arquitetura de roteamento de um FPGA é a forma pela qual os seus barramentos e as chaves de comutação são posicionados para permitir a interconexão entre as células lógicas. Essa arquitetura deve permitir que se obtenha um roteamento completo e, ao mesmo tempo, uma alta densidade de portas lógicas. Para uma melhor compreensão dessa arquitetura é necessária a definição de alguns conceitos básicos como:
* Pinos: entradas e saídas dos blocos lógicos.
* Conexão: ligação elétrica de um par de pinos.
* Rede: um conjunto de pinos que estão conectados.
* Segmento de trilha: segmento não interrompido por chaves programáveis.
* Bloco de Comutação: utilizado para conectar dois segmentos de trilha.
* Canal de roteamento: grupo de duas ou mais trilhas paralelas.
* Bloco de conexão: permite a conectividade das entradas e saídas de um bloco lógico com os segmentos de trilhas nos canais.
As chaves programáveis de roteamento apresentam algumas propriedades, tais como, tamanho, resistência, capacitância e tecnologia de fabricação, que afetam principalmente a velocidade e o tempo de propagação dos sinais, e definem características como volatilidade e capacidade de reprogramação.Na escolha de um dispositivo reconfigurável, esses fatores devem ser avaliados. Basicamente existem três tipos de tecnologia de programação das chaves de roteamento:
a) SRAM (Static Random Access Memory): nessa tecnologia, a chave de roteamento ou comutador é um transistor de passagem ou um multiplexador controlado por uma memória estática de acesso aleatório SRAM. Devido à volatilidade dessas memórias, os FPGAs que se utilizam dessa tecnologia precisam de uma memória externa tipo FLASH EEPROM. Essa tecnologia ocupa muito espaço no circuito integrado, entretanto é rapidamente reprogramável.
b) Antifuse: essa tecnologia baseia-se num dispositivo de dois terminais, que no estado não programado apresenta uma alta impedância (circuito aberto). Aplicando-se uma tensão, por exemplo, entre 11 e 20 Vdc, o dispositivo forma um caminho de baixa impedância entre seus terminais.
c) Gate flutuante: a tecnologia Gate flutuante baseia-se em transistores MOS (Metal Oxide Semiconductor), especialmente construído com dois gates flutuantes semelhantes aos usados nas memórias EPROM (Erasable Programmable Read Only Memory) e EEPROM (Electrical EPROM). A maior vantagem dessa tecnologia é a sua capacidade de programação e a retenção dos dados. Além disso, da mesma forma que uma memória EEPROM, os dados podem ser programados com o circuito integrado instalado na placa, característica denominada ISP (In System Programmability).

## Tipos

Atualmente no mercado podemos encontrar três tipos de FPGA’s, onde cada um terá melhor desempenho dependendo da aplicação para a qual o mesmo será utilizado. Os três tipos são:
* RAM Estática: FPGA na qual suas conexões entre as portas são feitas entre blocos lógicos por meio de portas de transmissão ou multiplexadores controladas por células SRAM. Tem como vantagem a possibilidade de ser rapidamente configurada, porém exige hardware externo auxiliar que deve ser montado junto com os blocos lógicos.
* Transistores de Passagem: Essa é uma opção mais barata que a opção de RAM estática, composta por uma grande concentração de transistores que são configurados em modo de corte ou modo de condução.
* EPROM/EEPROM: Baseada na tecnologia de criação de memórias EPROM/EEPROM. Sua principal vantagem é permitir a reprogramação sem que se precise armazenar a configuração externa.

## FPGAs x CPLDs

Ambos são dispositivos lógico programáveis e ambos, muitas vezes, são produzidos pelas mesmas empresas. Porém, existem muitas diferenças entre estas tecnologias:
* FPGAs contém muitos pequenos blocos lógicos com flip-flops (até da ordem de 1.000.000). CPLDs são compostos por um pequeno número (algumas centenas) de grande blocos lógicos.
* FPGAs, tipicamente, são baseados em RAM. Isto significa que eles precisam ser reconfigurados (ou reprogramados) após cada corte de energia (existem FPGAs com programação persistente baseados em Flash ou EEPROM). CPLDs são, tipicamente, baseados em EEPROM. Eles já estão ativos ao serem ligados (desde que tenham sido programados pelo menos uma vez).
* CPLDs têm um tempo de resposta melhor, por ser composto de alguns poucos grande blocos lógicos. Em contrapartida esta característica lhe dá menos flexibilidade.
* FPGAs têm recursos de roteamento especiais para implementar de maneira eficiente funções aritméticas e RAM. CPLDs não têm.
* FPGAs podem ser usados em projetos grandes e complexos, enquanto CPLDs estão restritos a projetos bem menores.

## Pesquisas em FPGA

* Navarre AsyncArt. Asynchronous-SOPC research. Universidade de Navarre
* Reconfigurable Network Group da Universidade de Washington
* Circuits and Systems Group, Imperial College London
* Central de FPGA: Vendedor, Forum, IP, Webcast, notícia
* MEANDER FPGA Design Framework from the Democritus University of Thrace (Greece)
* Pesquisas em FPGA da Universidade de British Columbia
* Pesquisas em FPGA da Universidade de Toronto
* Pesquisas em FPGA da Northeastern University
* Pesquisas em FPGA da Universidade de Sao Paulo - LCR/ICMC/USP
* FPGA Reliability Studies, Brigham Young University
* FPGA Research Groups- Uma lista de universidades e grupos de pesquisas no desenvolvimento de FPGA.
* The Virginia Tech Configurable Computing Laboratory
* Computer System Design Lab da Universidade de Kansas
* GRECO - Grupo de Engenharia da Computação - Centro de Informática da UFPE
* LAD - Laboratório de Arquiteturas Dedicadas - Grupo de Arquiteturas Dedicadas - Centro de Engenharia Elétrica e Informática - UFCG
* FPGA Database

## Fabricantes e especialistas em FPGA

* Xilinx. Maior fabricante de FPGA, e lider do mercado.
* PI Componentes. PI Componentes era o principal distribuidor da Altera no Brasil.
* Altera. Segundo maior fabricante de FPGA.
* Lattice Semiconductor é o terceiro fabricante a lançar FPGAs 90 nm.
* Actel
* QuickLogic
* Atmel
* Achronix Semiconductor
* MathStar, Inc.
* Clusters FPGA