Descubra o que é uma FPGA, como funciona, suas diferenças para CPUs e GPUs, e onde essa tecnologia é usada. Veja os benefícios, desafios e aplicações desse microchip programável em setores como indústria, telecomunicações e data centers.
FPGA (Field Programmable Gate Array) é um tipo de microchip programável cuja lógica interna pode ser configurada mesmo após a fabricação. Ao contrário de um processador tradicional, onde o programa é executado em núcleos previamente projetados, a FPGA permite alterar a própria estrutura das conexões de hardware, criando um circuito digital otimizado para uma tarefa específica dentro do chip.
A sigla significa Field Programmable Gate Array - ou matriz de portas programável pelo usuário. Esses chips ocupam uma posição única entre os CPU universais e os ASICs especializados: é possível reconfigurá-los diversas vezes, mas também executar algumas operações quase como se fossem dispositivos feitos sob medida.
Neste artigo, você vai entender o que é uma FPGA, como ela funciona, como é programada e por que em certas aplicações ela pode ser mais eficiente que CPUs e GPUs.
O nome Field Programmable Gate Array resume bem a principal característica da tecnologia. "Field Programmable" significa que a configuração do chip pode ser alterada mesmo após sua fabricação e instalação no dispositivo, sem necessidade de produzir um novo circuito em fábrica.
No núcleo da FPGA está uma grande quantidade de pequenos elementos lógicos programáveis. Eles podem ser configurados para executar funções lógicas e interligados para formar o circuito digital desejado.
De maneira simplificada, uma FPGA é como um grande "lego eletrônico". O fabricante fornece blocos lógicos, memórias e linhas de interconexão, e o desenvolvedor define quais blocos usar e como eles vão interagir.
A maioria dos chips digitais possui arquitetura fixa. Se um processador tem determinado número de núcleos, caches e unidades de execução, não é possível alterar fisicamente esses componentes via software. O programa apenas informa ao hardware quais instruções executar.
Na FPGA, a lógica é diferente. Após carregar a configuração, parte dos elementos lógicos pode funcionar, por exemplo, como um contador, outra parte como controlador de interface e outra como bloco de processamento digital de sinais. As conexões entre eles também são definidas pelo desenvolvedor.
Assim, modificar o projeto da FPGA pode transformar o mesmo chip em dispositivos digitais totalmente diferentes. Hoje ela pode processar vídeo; com uma nova configuração, pode manipular pacotes de rede ou controlar equipamentos industriais.
Vale ressaltar que não há mudança física dos transistores - sua disposição permanece igual. O que muda é a configuração dos blocos lógicos e conexões programáveis, direcionando os sinais elétricos por caminhos distintos.
O principal benefício da FPGA aparece em aplicações que exigem executar operações específicas com baixíssima latência ou processar múltiplos fluxos de dados em paralelo.
Por exemplo, se um fluxo de dados precisa passar por várias etapas sequenciais de processamento, é possível criar um pipeline de hardware dentro da FPGA. Assim, enquanto uma porção dos dados está em uma etapa, outra já está sendo processada na anterior, e os resultados surgem praticamente a cada ciclo de clock.
Outro destaque é a latência previsível. A FPGA não precisa alternar entre vários processos de software como um processador universal. Se o circuito é projetado para uma operação específica, o sinal percorre blocos de hardware definidos.
Por isso, FPGAs são usadas onde importa o processamento em tempo real, alta velocidade de resposta e a flexibilidade de modificar o dispositivo após lançado: equipamentos de rede, telecomunicações, automação industrial, sistemas de vídeo e sinais, instrumentação, data centers e aceleradores computacionais.
A base da arquitetura da FPGA são os blocos lógicos programáveis. Eles contêm pequenas tabelas de correspondência (LUTs), flip-flops e lógica auxiliar. A partir desses elementos, constrói-se circuitos digitais mais complexos.
O LUT funciona como uma pequena tabela que armazena previamente o resultado de uma operação lógica para diferentes combinações de sinais de entrada. Assim, o mesmo bloco pode executar funções AND, OR, XOR e outras, dependendo da configuração carregada.
Flip-flops armazenam bits de estado e sincronizam o funcionamento do circuito. Combinando LUTs, flip-flops e outros elementos, é possível criar contadores, registradores, máquinas de estado, controladores de interface e até núcleos de processadores completos.
Os elementos lógicos precisam ser interligados. Por isso, boa parte da área da FPGA é ocupada por uma rede de linhas e switches programáveis.
A configuração define não apenas a função de cada bloco, mas também o caminho dos sinais entre eles. Assim, monta-se um circuito digital específico para a tarefa dentro do chip.
No CPU tradicional, as rotas entre os blocos de execução são fixadas no projeto. Na FPGA, o desenvolvedor pode controlar profundamente a estrutura computacional, permitindo múltiplas operações simultâneas em diferentes regiões do chip, sem competição por um único núcleo.
As FPGAs modernas possuem mais que lógica universal: contam com elementos especializados para operações comuns de forma mais eficiente.
O Block RAM são blocos de memória interna rápida, usados para buffers, tabelas, filas e resultados intermediários.
Há também blocos DSP para multiplicação, soma e outras operações matemáticas, úteis no processamento de sinais digitais, imagens, rádio e até algoritmos de aprendizado de máquina.
Além disso, FPGAs podem incluir transceptores de alta velocidade, controladores de memória e blocos de interface prontos, dispensando a montagem de cada função a partir do zero.
Antes de funcionar, a FPGA recebe um arquivo especial de configuração (bitstream), que define o estado dos blocos lógicos, LUTs, conexões e outros elementos programáveis.
Com isso, monta-se a estrutura de hardware desejada. Aqui está uma das principais diferenças para a CPU: o processador executa instruções sequenciais, enquanto a FPGA, uma vez configurada, já contém o circuito dedicado à operação.
Se for preciso processar vários fluxos de dados simultaneamente, por exemplo, é possível criar múltiplos pipelines de hardware, cada qual usando seus próprios recursos lógicos.
Essa arquitetura garante baixíssima e previsível latência, mas a eficiência depende da qualidade do projeto e do uso dos recursos do chip.
As FPGAs não são programadas como CPUs. Em vez de uma sequência de instruções, descreve-se o circuito digital que será implementado no chip.
Para isso, usam-se linguagens de descrição de hardware (HDL), como Verilog e VHDL. Com elas, o desenvolvedor define registradores, operações lógicas, condições, interligações e o comportamento do circuito no tempo.
O código HDL pode parecer um programa comum, mas sua lógica é diferente: várias instruções podem descrever blocos de hardware que operam em paralelo, enquanto em programação tradicional seriam executadas em sequência por um núcleo de CPU.
Por isso, desenvolver para FPGA requer um novo modo de pensar - não só o algoritmo, mas a estrutura física que ele formará após a síntese.
O código HDL não pode ser carregado diretamente na FPGA. Primeiro, ele passa por diversas etapas:
Além da lógica, o tempo de propagação dos sinais é analisado: se o caminho for longo demais, a operação pode não ser concluída em um ciclo de clock. As ferramentas verificam se o projeto opera de forma estável na frequência desejada.
Após essas etapas, gera-se um bitstream - o arquivo de configuração que será carregado na FPGA, determinando como blocos, memórias e conexões funcionarão.
O fluxo, então, é: o desenvolvedor descreve a lógica, as ferramentas sintetizam o circuito, o posicionam no chip, constroem as rotas e criam a configuração final.
O desenvolvimento FPGA não se limita a Verilog e VHDL. Existem ferramentas de High-Level Synthesis (HLS) que permitem descrever algoritmos em linguagens de alto nível, como C ou C++, convertendo-os automaticamente em circuitos de hardware.
Isso facilita a entrada de novos desenvolvedores e agiliza o desenvolvimento de aceleradores, especialmente para algoritmos matemáticos, processamento de imagens ou dados em fluxo.
No entanto, o HLS não torna a FPGA um processador comum. O código fonte sempre será convertido em estrutura física, limitada pelos recursos do chip e pelos requisitos de latência e frequência.
Além disso, a síntese automática nem sempre gera o circuito mais eficiente. Para máxima performance, o desenvolvedor ainda precisa considerar a arquitetura do chip: largura de barramentos, quantidade de memória, número de blocos DSP, profundidade de pipelines e paralelismo.
Assim, programar FPGA fica na fronteira entre desenvolvimento de software e projeto de eletrônica digital. Não basta escrever o algoritmo correto - é preciso compreender como ele será implementado fisicamente.
CPUs, GPUs e FPGAs podem executar as mesmas tarefas computacionais, mas cada uma faz isso de forma fundamentalmente diferente. A principal distinção está no quão rígida é a arquitetura do chip e como os cálculos são organizados internamente.
A CPU é um processador universal, projetado para rodar programas variados. Seus núcleos leem e decodificam instruções sequencialmente e as enviam aos blocos de execução apropriados.
Processadores modernos podem executar várias instruções em paralelo, usar múltiplos núcleos e lidar com muitos fluxos. Porém, sua estrutura interna é definida pelo fabricante. O desenvolvedor pode alterar o programa, mas não pode reconfigurar fisicamente os blocos de execução para um algoritmo específico.
O ponto forte da CPU é a versatilidade: o mesmo chip pode rodar sistema operacional, jogos, servidor, aplicativos de escritório e muito mais. Por isso, ela segue como o pilar da computação.
No entanto, essa flexibilidade exige lógica de controle complexa, caches, predição de saltos e outros mecanismos. Se for preciso executar bilhões de vezes a mesma operação, parte dos recursos da CPU pode ser subutilizada.
A tendência é dividir tarefas entre diferentes aceleradores de hardware. Esse movimento é abordado com mais detalhes no artigo Por que o futuro da computação está nos processadores especializados.
A GPU também possui arquitetura fixa, mas voltada para cargas de trabalho diferentes. Em vez de poucos núcleos poderosos, a placa gráfica tem centenas ou milhares de blocos de processamento capazes de executar operações similares em grandes volumes de dados simultaneamente.
Esse modelo surgiu da necessidade da computação gráfica, onde é preciso realizar uma quantidade massiva de cálculos para vértices, pixels e texturas. Mais tarde, descobriu-se que esse paralelismo também é útil para pesquisa científica e aprendizado de máquina.
Quando a mesma operação precisa ser aplicada a milhões de elementos, a GPU normalmente supera a CPU em eficiência. Porém, o algoritmo precisa se dividir facilmente em muitos fluxos paralelos.
O desenvolvedor utiliza a arquitetura fixa do chip gráfico, distribuindo tarefas entre os blocos disponíveis, mas sem poder alterar sua organização física.
A FPGA segue outro caminho. Em vez de executar programas sobre núcleos fixos, o desenvolvedor monta sua própria estrutura de hardware a partir dos elementos lógicos disponíveis.
Suponha um algoritmo com várias etapas sequenciais: receber dados, validar, multiplicar, transformar o resultado, enviar adiante. A CPU executa instruções correspondentes usando seus blocos universais. A GPU pode processar muitos conjuntos desses dados em paralelo.
Já na FPGA, é possível criar blocos de hardware dedicados para cada etapa e conectá-los em pipeline. Assim, cada parte do circuito processa dados diferentes simultaneamente, sem a necessidade de ler e decodificar instruções constantemente.
Também é possível replicar o mesmo circuito várias vezes, se houver recursos suficientes. O grau de paralelismo depende não da quantidade de núcleos fixos, mas do quanto de hardware o projeto consegue acomodar na FPGA.
| Característica | CPU | GPU | FPGA |
|---|---|---|---|
| Arquitetura | Fixa | Fixa | Reconfigurável |
| Princípio principal | Execução sequencial de instruções | Execução massiva em paralelo | Criação de circuito dedicado para a tarefa |
| Versatilidade | Muito alta | Alta | Depende da configuração |
| Paralelismo | Limitado por núcleos e threads | Muito alto | Definido pelo projeto do circuito |
| Latência | Depende do sistema e do software | Eficiente com grandes lotes de dados | Pode ser muito baixa e previsível |
| Desenvolvimento | Relativamente simples | Exige programação paralela | Requer projeto de hardware |
| Eficiência energética em tarefas especializadas | Média | Alta | Pode ser altíssima |
Isso não significa que a FPGA seja sempre mais rápida que CPU ou GPU - tudo depende da tarefa. Se o algoritmo muda constantemente ou é logicamente complexo, a CPU pode ser mais prática. Para operações massivas e paralelismo extremo, a GPU normalmente é melhor.
A FPGA se destaca quando o processamento pode ser representado como um pipeline dedicado de hardware e a latência mínima é crucial. Por isso, ocupa uma "zona intermediária" entre processadores universais e chips totalmente especializados.
FPGAs são ideais para sistemas onde dados chegam em fluxo contínuo e precisam ser processados com mínima latência, por isso são comuns em equipamentos de rede e telecomunicações.
É possível implementar blocos de hardware para processamento de pacotes, filtragem de tráfego, codificação/decodificação de sinais e interfaces de alta velocidade. Várias etapas podem ocorrer em paralelo, sem intervenção do processador central.
O destaque é a flexibilidade: a lógica do equipamento pode ser atualizada após o lançamento. Se houver mudanças de protocolo ou necessidade de novas funções, basta carregar uma nova configuração, sem trocar a plataforma física.
Outro grande uso da FPGA está em sistemas de tempo real. Em equipamentos industriais, o chip pode ler dados de sensores, controlar atuadores e processar sinais digitais ao mesmo tempo.
Nesses casos, a latência previsível é mais importante que o poder máximo de processamento. Se for preciso reagir a um evento em tempo determinado, o circuito dedicado da FPGA evita atrasos causados por sistemas operacionais ou agendadores de tarefas.
O mesmo vale para instrumentos de medição, vídeo, radares, eletrônica automotiva e dispositivos de processamento de sinais. Diferentes partes da FPGA realizam funções distintas simultaneamente.
FPGAs também estão presentes em data centers, atuando como aceleradores especializados. O processador central pode gerenciar a aplicação, enquanto operações repetitivas são delegadas à lógica programável.
É possível configurar FPGAs para tratar fluxos de rede, compressão, criptografia ou etapas do processamento de redes neurais, aliviando a CPU e obtendo pipelines dedicados sem precisar de chips exclusivos.
Por isso, sistemas modernos de computação tendem a combinar múltiplos aceleradores, não apenas CPUs. Esse conceito é detalhado no artigo Sistemas computacionais híbridos: como CPU, GPU, NPU e FPGA funcionam juntos.
Mesmo assim, a FPGA nem sempre é a melhor opção para inteligência artificial. GPUs são mais fáceis de programar e contam com ecossistema robusto para treinamento e inferência, enquanto aceleradores de IA dedicados podem superar a FPGA em tarefas específicas.
A diferença entre FPGA e ASIC é tratada em detalhes no artigo ASIC: por que processadores dedicados são mais rápidos e eficientes.
ASICs não possuem a rede programável e recursos de reconfiguração das FPGAs, portanto podem ser mais compactos e econômicos, mas sua arquitetura é imutável após a fabricação e o custo de desenvolvimento é muito maior.
Por isso, a FPGA ocupa um espaço intermediário: mais flexível que um ASIC, mais adaptável que CPU ou GPU, mas com custo, complexidade e ecossistema próprios.
A FPGA se diferencia de CPUs e GPUs principalmente porque o desenvolvedor pode configurar não só o algoritmo, mas também a estrutura de hardware que realiza os cálculos. Blocos lógicos, memórias e conexões são combinados em um circuito especializado, capaz de processar dados em paralelo, com latência previsível.
O CPU segue sendo a melhor escolha para programas gerais e lógica sequencial complexa, enquanto GPU reina no paralelismo massivo. A FPGA é indicada quando é necessário um pipeline de hardware para uma tarefa específica, alta velocidade de resposta ou a capacidade de atualizar o dispositivo sem fabricar um novo chip.
No entanto, a FPGA não substitui CPUs ou GPUs em todas as situações. O desenvolvimento é mais complexo e a eficiência depende fortemente da aplicação. Na prática, microchips programáveis costumam trabalhar em conjunto com CPUs, GPUs e outros aceleradores, executando apenas as partes das tarefas para as quais sua arquitetura é mais vantajosa.