FPGA – A flexibilidade no projeto de hardware. Parte 1 de 3.
Introdução ao FPGA
A FPGA como solução para projetos de hardware adaptável. Em meados dos anos 80, a empresa Xilinx e Gerald Estrin anuncia uma nova arquitetura de circuitos que utilizava a lógica programável. Isso foi um choque para a época pois cria-se então um novo paradigma de projetos de circuitos integrados, o circuito reconfigurável
Inicialmente, chamado de Logic Cell Array (LCA), o FPGA, que será descrito neste blog em várias partes, consiste em uma matriz de blocos/células lógicos independentes, cercada por blocos de entrada e saída também são independentes, além de um conjunto de recursos de interconexão que permite a ligação arbitrária de todos os blocos (comutadores) criando assim um fluxo de conexões. Sua principal propriedade é que cada bloco pode ser programado individualmente para desempenhar funções específicas e podem ser alterados a qualquer momento (COSTA; MESQUITA; PINHEIRO, 2011).
Tocci, Widmer e Moss (2003) mencionaram que a grande maioria “dessas maravilhas de flexibilidade de projeto” se baseia da tecnologia CMOS (CMOS 65 nm com camadas metálicas exclusivamente de cobre) dando uma série de padrões de entrada e saída e estão disponíveis em diferentes graus de velocidade no mercado. É feita a partir de uma matriz de blocos ao invés de uma pilha de blocos (comumente utilizados) e portanto, a quantidade de blocos disponíveis é superior sendo que cada um deles é menor e mais sofisticado (PEDRONI, 2010).
Resumindo, atualmente, os FPGAs são os dispositivos lógicos programável com alta velocidade que permitem desenvolver um protótipo de circuito integrado para a realização de testes antes da fabricação em massa (SKLIAROVA; FERRARI, 2003).
Definição do FPGA
O Arranjo de Portas Programáveis em Campo (Field Programmable Gate Array) rotulado como FPGA, pode-se resumir como uma arquitetura de computador que combina a flexibilidade e mudança contínua do software com a alta performance da placa. Pode ser reprogramada para o uso de vários projetos eletrônicos.
Sendo reprogramados, o usuário pode utilizá-la num projeto e logo após a sua execução, reprogramá-lo para que execute outro projeto não dependente do anterior sem que este, anterior, interfira no projeto a ser desenvolvido. Tudo isso somente reprogramando suas funções de uma forma simples usando Linguagem de Descrição de Hardware ou mesmo desenvolvendo circuitos assistidos pelo computador. Seu custo em relação a ASIC e tempo total gasto desde a especificação do projeto até no qual ele é realmente projetado é menor em relação a um projeto feito utilizando a tecnologia ASIC tendo sempre em mente que qualquer erro nesta, deve-se reiniciar todo o processo de desenvolvimento sendo que no FPGA isso levaria talvez algumas horas/minutos e custo zero.
Mas somente em meados de 90 que se começou a focar sobre sua poderosa capacidade de sintetizar circuitos.
Sua principal diferença entre os microprocessadores comumente conhecidos é a sua capacidade de alterar seus caminhos de dados e fluxos de controle habilitando e desabilitando somente os determinados módulos do projeto por meio de configurações deste (MOREIRA; CINTO, 2013; MOREIRA, 2008). O FPGA é um arranjo de blocos lógicos configuráveis e de células lógicas que estão dispostas em uma única placa (circuito integrado) e em definições técnicas, ele é composto principalmente por três módulos de componentes: blocos de entrada e saída (Input/Output Blocks), blocos lógicos configuráveis (Configuration Logical Blocks) e chaves de interconexão (Switch Matrix). A Figura 1 exibe um esquema de como esses blocos estão situados dentro do FPGA.

Figura 1: Esquemático Simples do FPGA. Fonte: http://www.eetimes.com/document.asp?doc_id=1274496. Acessado em dez. 2015.
-
Blocos de entrada e saída (Input/Output Blocks): são os módulos no qual são feitas as interconexões dos dados de entrada como os resultados dos blocos lógicos configuráveis. Podemos assimilar sua definição com as funcionalidades de um buffer de teclado por exemplo no qual transmite os dados oriundo do teclado mas que também além de enviar, poderia receber dados. Blocos quadrados menores de cor verde.
-
Blocos Lógicos Configuráveis (Configuration Logical Blocks): são fabricados de forma bidimensional criando pequenos ‘módulos funcionais’ de circuitos. São organizados com conjuntos de flip-flop com a lógica combinacional. Sobre uma definição mais geral, eles comportam-se como uma tabela verdade no qual é possível, com determinada estimulação, produzir determinada saída. Este conceito será descrito mais detalhado no decorrer deste documento. Blocos quadrados maiores de cor laranja.
-
Chaves de interconexão (Switch Matrix): são as trilhas que formam a conexão entre os blocos de entrada e saída com os blocos lógicos configuráveis. Células de memória estáticas são configuradas pelo próprio compilador da placa determinando as funções lógicas que serão utilizadas e as conexões internas. Além da função de conectar os pinos externos aos blocos lógicos, elas também fazem o papel de interconexão de blocos. Linhas de cor azul.
Contendo um número de milhares de unidades lógicas idênticas, essas unidades podem ser configuradas independentemente e conectas a partir da matriz de linhas condutoras e os switches. O FPGA é um array de unidades lógicas com uma matriz de interconexões que pode ser configurados pelo usuário (ARANTES; CARDOSO, 2008). Um exemplo da conexão desses em um sistema de grande porte é mostrado na Figura 2.
Figura 2: Exemplo de roteamento de um projeto de médio/grande porte.
Fonte: https://hes.elis.ugent.be/studentprojects/towards-optimal-fpga-routing-architecture. Acessado em dez. 2015.
O FPGA pode ter uma densidade de seus circuitos após finalizado como um circuito feito em ASIC, possui velocidade muito elevada mas imprevisível. Outra característica de um projeto sintetizado é que seu consumo de energia muito baixo pelo fato do próprio componente ser eficiente no quesito de energia.
Costa, em seu livro (COSTA; MESQUITA; PINHEIRO, 2011, pág 204) afirma:
Atualmente a principal alternativa para implementar algoritmos processadores de sinais digitais de alto desempenho é a utilização lógica programável em dispositivo FPGA. Por exemplo, a visão computacional é uma das áreas em que algoritmos processadores de sinais digitais implementados em hardware FPGA têm mostrando um desempenho melhor que aqueles implementados em processador tradicional de processadores de sinais digitais.
Projetistas de circuitos digitais têm aperfeiçoado seus projetos por meio de circuitos integrados ASIC, ou processadores de sinais digitais, porém hoje em dia eles estão migrando para FPGA.
Bibliografia
ARANTES, D.; CARDOSO, F. FPGA e Fluxo de Projeto. Disponível em: <http://www.decom.fee.unicamp.br/~cardoso/ie344b2008s2/Introducao_FPGA_Fluxo_de_Projeto.pdf>. Acesso em: 18 jan. 2014.
COSTA, C.; MESQUITA, L.; PINHEIRO, E. Elementos de Lógica Programável com VHDL e DSP. Érica, 1o ed, São Paulo, 2011.
MOREIRA, V. Plataforma reconfigurável para ensino e pesquisa em laboratório de sistemas digitais a distância. Anais do Simpósio …, 2008.
MOREIRA, V.; CINTO, T. Aprimorando o Ensino de Engenharia com Novas Abordagens Usando Recursos Computacionais. Proceedings of VI …, 2013.
PEDRONI, V. Eletrônica digital moderna e VHDL. Rio de Janeiro, RJ: Elsevier, 2010.
SKLIAROVA, I.; FERRARI, A. Introdução à computação reconfigurável. Electrónica e Telecomunicações, 2003.
TOCCI, R.; WIDMER, N.; MOSS, G. Sistemas digitais: princípios e aplicações. 2003.


[…] Caso ainda não tenha visto o post anterior, leia-o em http://www2.decom.ufop.br/imobilis/fpga-o-prodigio-de-flexibilidade/ :p. […]
[…] Podemos dizer que o FPGA se utiliza da programação de mais "baixo" nível (no bom sentido da palavra). Utiliza de uma linguagem declarativa chamada VHDL ou Verilog, dependendo do FPGA a ser programado. Não há nenhum padrão de conexão com outros dispositivos, ou sensores. O desenvolvedor está totalmente livre para fazer o que bem entender, tendo como limite apenas a comunicação física entre o FPGA e os sensores/atuadores. Obviamente o nível de conhecimento em eletrônica aqui é de intermediário para avançado, e a linguagem de programação, parecida com o C, não é difícil mas está totalmente amarrada na construção física do funcionamento do hardware. Para ter uma ideia, a programação é feita através de portas lógicas (AND, OR, XOR, etc) e outros componentes de eletrônica digital (MUX, DEMUX, etc). Nesse nível a liberdade é total, é possível fazer um sistema embarcado totalmente customizado, com total controle do que está sendo executado no mesmo. É isso que procura? Recomendo então a visita ao laboratório iMobilis da Universidade Federal de Ouro Preto, com bastante informação introdutória sobre FPGA, […]