Publicado em: 8 de maio de 2024
Com a colaboração de: Josh Schneider, Ian Smalley
FPGA (Field programmable gate array) é um tipo de circuito integrado versátil projetado para ser programável (e muitas vezes reprogramável), usado para atender a diferentes propósitos, principalmente computação de alto desempenho (HPC) e prototipagem.
FPGA se diferencia dos dispositivos lógicos tradicionais que não são programáveis, como o nome em português sugere: matriz de portas programáveis em campo, onde "programável em campo" refere-se à capacidade de um FPGA de ser programado no campo de uso ou após o chip ter sido liberado pelo fabricante. A Xilinx, um fabricante da área de tecnologia, apresentou os FPGAs pela primeira vez em 1985.
Os FPGAs podem ser adaptados para atender a vários casos de uso, incluindo propósitos novos ou experimentais, sem a necessidade de modificar ou alterar fisicamente o hardware.
Essa versatilidade reconfigurável é alcançada por meio de uma matriz de blocos lógicos programáveis (PLBs) fixos e interconexões flexíveis que podem ser configuradas para realizar operações complexas ou servir como portas lógicas simples. Os FPGAs também incluem elementos de memória, que vão desde flip-flops de um bit até matrizes de memória muito densas, para armazenamento digital de dados dentro do dispositivo.
Os FPGAs são muito valorizados por sua combinação de alto desempenho e extrema versatilidade. Eles são particularmente úteis em aplicações que exigem alto desempenho, baixa latência e flexibilidade em tempo real. Por esse motivo, são comumente usados nos segmentos de telecomunicações, automotivo e aeroespacial.
Os FPGAs e os ASICs têm finalidades diferentes.
Um ASIC é desenvolvido e otimizado para uma aplicação específica e não pode ser reconfigurado.
Seus elementos do circuito interno (transistores) são dispostos em uma estrutura fixa com uma interconexão (fiação) fixa e imutável entre eles.
Como um ASIC serve para apenas uma finalidade, incorpora apenas os elementos lógicos necessários para essa finalidade, por exemplo, se um multiplicador de ponto flutuante não for necessário, ele não será incorporado ao design.
Por outro lado, um FPGA pode ser configurado e reconfigurado para qualquer aplicação possível.
Da mesma forma que um ASIC, seus elementos de circuito interno são organizados em uma estrutura fixa (blocos lógicos programáveis ou PLBs), mas com interconexões reconfiguráveis entre eles. Os elementos lógicos de um FPGA são selecionados para suportar uma ampla variedade de aplicações, mas sofrem com o processo de "usar ou perder" quando elementos lógicos específicos não são usados.
Se um multiplicador de ponto flutuante não for necessário para uma aplicação específica, mas o FPGA já possua um, então esse recurso fica desconectado e representa "espaço desperdiçado" dentro do FPGA.
Embora ambos os dispositivos possam conter centenas de milhões de transistores, um ASIC pode usar esses transistores para oferecer alta eficiência e desempenho em detrimento da flexibilidade. As cobranças iniciais de NRE para desenvolver um ASIC podem ser exorbitantes, enquanto os custos unitários podem ser relativamente baixos.
Um FPGA usa os transistores para entregar alta eficiência e alto desempenho com muita flexibilidade.
As cobranças iniciais de NRE para desenvolver um FPGA podem ser extremamente baixas, enquanto os custos unitários são geralmente mais altos. É importante observar que essas não são regras definitivas e inflexíveis. Na questão de desempenho, por exemplo, os FPGAs recentes evoluíram para fornecer taxas de clock de mais de 500 MHz e são geralmente fabricados em geometrias de processo de silício de última geração. Em resumo, a fronteira entre FPGAs e ASICs torna-se cada vez mais indistinta com cada nova geração de FPGA.
Um FPGA se torna um dispositivo de hardware personalizado ao configurar seus PLBs e interconexões usando uma linguagem de descrição de hardware padrão (HDL), como Verilog ou VHDL.
Funções específicas baseadas em FPGA, bem como as interconexões entre essas funções, são "descritas" em um HDL. A descrição é compilada para formar um arquivo de configuração de FPGA. Usando uma linguagem de descrição de hardware, é possível usar recursos FPGA integrados (matrizes de memória, núcleos PCI, entre outros), bem como criar circuitos lógicos personalizados (somadores, multiplexadores e outras funções específicas da aplicação) a partir de elementos mais primitivos de FPGA.
Em um processo conhecido como síntese, o código HDL é traduzido em uma netlist, uma descrição efetiva das portas lógicas e interconexões necessárias para implementar o código HDL. A netlist é então mapeada para os PLBs e interconexões que formam fisicamente o circuito exclusivo.
Os FPGAs modernos produzidos por fabricantes como Intel e Altera oferecem uma ampla gama de funcionalidades digitais e analógicas, incluindo densidades lógicas notáveis, memória flash, processadores embarcados e blocos de processamento de sinal digital (DSP). Os FPGAs podem ser configurados e reconfigurados modificando as entradas e saídas elétricas, escolhendo quais recursos internos são utilizados e determinando como esses recursos são conectados por meio de recursos de roteamento configuráveis. O resultado final é uma solução de hardware dedicada para resolver um problema específico.
Assim como acontece com o software, o desenvolvimento de projetos complexos de FPGA pode ser simplificado pelo uso de bibliotecas pré-projetadas de várias funções e circuitos digitais, conhecidos como núcleos de propriedade intelectual (PI). Essas bibliotecas estão disponíveis para compra ou aluguel de fornecedores de FPGA e fornecedores terceirizados, que geralmente são especializados no desenvolvimento de diversas funções.
Além de componentes de circuitos tradicionais, como microcontroladores e conversores, para realizar as funções reconfiguráveis, os dispositivos FPGA modernos usam uma combinação de vários elementos programáveis.
Esses elementos são principalmente blocos lógicos configuráveis (CLBs), interconexões programáveis, roteamento programável, blocos de entrada/saída programáveis (IOBs), memória on-chip e blocos de processamento de sinal digital (DSPs).
Os blocos lógicos configuráveis (CLBs) são o componente principal dos FPGAs. Os CLBs geralmente contêm alguns elementos lógicos primitivos (portas lógicas, pequenas tabelas de consulta, flip-flops, multiplexadores, entre outros).
Dentro do CLB, um flip-flop geralmente serve como principal elemento de armazenamento de dados, embora famílias de dispositivos mais recentes também possam incorporar elementos de memória com capacidade limitada no CLB.
As ligações construídas a partir de segmentos de fio unidos por chaves eletricamente programáveis fornecem caminhos de roteamento entre os blocos lógicos do FPGA.
As caixas de switch contendo vários switches semicondutores básicos são comumente usadas para estabelecer a interconexão programável de um FPGA. Essas interconexões permitem que as saídas de uma unidade específica ou um de terminal de entrada sejam ligados a qualquer outra célula ou terminal dentro do circuito.
Segmentos de fio pré-fabricados são unidos (ou são deixados desconectados) pelas interconexões programáveis para fornecer uma infraestrutura de roteamento totalmente programável dentro de um FPGA.
Os recursos de roteamento são de natureza hierárquica, com uma combinação de fios longos, médios e curtos abrangendo vários “comprimentos” dentro do FPGA. Essa infraestrutura de roteamento programável, possibilitada pelas interconexões programáveis, permite que os usuários configurem recursos FPGA para a implementação de uma tarefa ou aplicação específica.
A interface entre um FPGA e outros dispositivos externos é habilitada por blocos de entrada/saída (E/S) (IOBs). Os IOBs são recursos de entrada e saída programáveis configurados para corresponder aos protocolos de quaisquer dispositivos externos aos quais o FPGA se conecta. Todos os sinais que entram ou saem do FPGA passam pelos pinos do dispositivo e pelos IOBs associados.
Os primeiros FPGAs usavam apenas flip-flops (FFs) para integrar a memória aos blocos lógicos do FPGA. No entanto, à medida que os recursos do FPGA aumentaram, projetos cada vez mais complexos exigiram memória on-chip dedicada para armazenamento em buffer e reutilização de dados.
Os FPGAs modernos usam grandes matrizes de memória SRAM, pequenas tabelas de consulta (LUTs) e elementos flip-flop tradicionais para fornecer o armazenamento necessário para uma aplicação específica.
Nos primeiros FPGAs, os únicos recursos aritméticos disponíveis eram somadores simples, qualquer recurso mais complexo era construído a partir de elementos lógicos mais primitivos. No entanto, à medida que a tecnologia de silício avançou, recursos aritméticos mais complexos foram incorporados aos FPGAs, gerando o moderno bloco FPGA DSP.
Os blocos DSP fornecem recursos altamente otimizados (multiplicadores, acumuladores, dentre outros) para a implementação de funções aritméticas de alto desempenho.
Seu uso elimina a necessidade de implementar essas funções em CLBs de uso geral, liberando-os assim para outros fins. Operações como filtragem digital, convolução, transformadas de Fourier, operações trigonométricas e muitas outras podem aproveitar esses recursos para obter desempenho em tempo real em aplicações que vão desde processamento de radar, formação de feixe, reconhecimento de padrões, entre outros.
Os FPGAs estão disponíveis em diversas variedades, que oferecem vários tipos de configurabilidade, consumo de energia, elementos programáveis e memória on-chip.
Versáteis por natureza, os FPGAs são adequados para várias aplicações diferentes.
Os FPGAs são preferidos para processamento de sinais e aquisição de dados devido à sua capacidade de processamento paralelo de alta velocidade.
Os algoritmos de processamento de sinal de alta velocidade tornam os FPGAs adequados para realizar tarefas de controle de voo, processamento de sensores e comunicação usadas em aeronaves não tripuladas, como drones.
Os sistemas de controle industrial usados para monitorar infraestruturas como redes elétricas, refinarias de petróleo e estações de tratamento de água usam FPGAs, que podem ser facilmente otimizados para atender às necessidades específicas de vários segmentos. Nesses segmentos críticos, os FPGAs podem ser usados para implementar várias automações e funcionalidades de criptografia baseados em hardware para uma cibersegurança eficiente.
Embora os FPGAs sejam soluções úteis para tarefas que exigem flexibilidade, os ASICs específicos de tarefas geralmente são mais adequados para operações padronizadas. À medida que novos sistemas são desenvolvidos, os FPGAs são importantes para o desenvolvimento e prototipagem de novos ASICs para tecnologias que estão surgindo.
Os FPGAs agregam valor aos data centers por facilitarem a infraestrutura de servidores de banda larga, baixa latência, redes e armazenamento.
Armazenamento de classificação corporativa pronto para crescer com você. O IBM Storage FlashSystem 5300 é uma opção de armazenamento NVMe para empresas de nível inicial que precisam de armazenamento compacto e poderoso. Ele unifica o gerenciamento de dados no núcleo, na nuvem e na borda, e é projetado em um formato revolucionário de 1U.
Um coprocessador que permite transferir processos criptográficos intensivos computacionalmente do servidor principal. Os coprocessadores criptográficos IBM PCIe são uma família de módulos de segurança de hardware (HSM) de alto desempenho. Esses cartões PCIe programáveis funcionam com alguns servidores IBM Z, x64 e IBM Power para descarregar processos criptográficos computacionais intensivos, como pagamentos seguros ou transações do servidor principal.
Um framework de computação em cluster de código aberto otimizado para o processamento de dados extremamente rápido e em grande escala. O Apache Spark foi desenvolvido no AMPLab da UC Berkeley. Ele usa a inteligência profunda para ajudar a reduzir a complexidade da interação com os dados, aumentar a velocidade de processamento e aprimorar aplicações de missão crítica.
Armazenamento flash é uma tecnologia de armazenamento de estado sólido que utiliza chips de memória flash para gravar e armazenar dados, conhecidos como operações de entrada/saída por segundo (IOPS).
A infraestrutura de tecnologia da informação, ou infraestrutura de TI, refere-se aos componentes combinados necessários para a operação e o gerenciamento de serviços de TI corporativos e ambientes de TI.
Armazenamento de dados refere-se a mídias magnéticas, óticas ou mecânicas que gravam e preservam informações digitais para operações contínuas ou futuras.
O Apache Spark é um mecanismo de processamento de dados de código aberto extremamente rápido para aplicações de aprendizado de máquina e IA, respaldado pela maior comunidade de código aberto em big data.
IA é um termo que se refere ao hardware e ao software necessários para criar e implementar aplicações e soluções impulsionadas por IA.
A criptografia de dados é uma maneira de traduzir dados de texto simples (não criptografado) para texto cifrado (criptografado).