O que é um FPGA?


38

Eu já vi muitas pessoas falando sobre FPGAs antes e sei que ele representa um array de portas programável em campo, mas como funciona e qual é o objetivo de usar um FPGA?

Respostas:


30

Eles são componentes eletrônicos que adicionam lógica aos seus circuitos (portanto, são semelhantes aos microcontroladores). Mas a abordagem do projeto é completamente diferente da do uC (microcontrolador). Em um UC, você não pode alterar o design interno do UC; você só pode executar programas "clássicos" nele. Programar FPGAs é mais como criar um novo hardware. Você cria novas conexões entre portas lógicas e cria um novo processador especializado. E você pode fazer tudo em sua casa, na sua mesa e no seu PC.

Parece legal? Sim, mas existem algumas desvantagens. Por exemplo, preço (mas acho difícil comparar), maior consumo de energia e menores velocidades de clock (mas você pode projetar seu aplicativo de maneira inteligente e realizar mais operações em um ciclo de clock).

Links Úteis:

Exemplo de uso: http://nsa.unaligned.org/


3
Observarei que muitos FPGAs são grandes o suficiente para conter vários núcleos da CPU, permitindo assim que o FPGA seja um computador inteiro.
Craig Trader

3
Como uma nota, acho que velocidades mais baixas do relógio podem ser enganosas. comparado a um PC, sim. Comparado a uma foto16, eles podem ser mais rápidos, mas isso depende do custo. A maioria dos mais baratos que tive em mãos funcionou a 40 MHz, mas, novamente, variação de produto para produto.
21410 Kortuk

23

Um FPGA é literalmente um conjunto de portas lógicas que podem ser programadas em campo. Flip-flops, multiplexadores, tabelas de pesquisa de 4 bits etc. que podem ser conectados da maneira que você desejar, usando uma linguagem semelhante a C (Verilog).

Um uC, como um AVR, também é feito de portas lógicas semelhantes, mas elas são configuradas quando o dispositivo é fabricado. Claro, ele tem RAM e Flash, para que você possa escrever um software para ler entradas e controlar saídas, mas não pode alterar as disposições reais dos portões. Os portões serão sempre organizados em uma ALU, um controlador de memória, uma porta serial, etc.

O benefício do uC é que você pode programá-lo em campo (na sua mesa), com uma linguagem de alto nível, fácil de usar e familiar, como C. O problema é que o software é "lento". Para que uma entrada controle uma saída, no caso mais simples, você pode escrever:

loop vazio () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

Isso seria transformado em uma dúzia de instruções de montagem, para que o loop levasse um microssegundo para controlar essa saída de uma entrada. E é preciso todo o chip uC para fazer isso tão rápido. Claro, você pode fazer muito mais, mas sua capacidade de controlar essa saída diminuirá à medida que o uC ficar ocupado fazendo outras coisas.

Em um FPGA, eu poderia configurar os portões para que uma entrada controle uma saída em 1 relógio. Portanto, a saída seguiria a entrada com um atraso de talvez 25 nanossegundos. É 40X mais rápido, usando o mesmo período de relógio. E o restante dos portões do FPGA estão disponíveis para fazer muitas outras coisas, o que não afetará a velocidade dessa pequena função.

O código para o FPGA seria um simples flip-flop:

sempre @ (relógio posedge) ledPin <= buttonPin;

Isso levaria apenas 1 célula FPGA, cerca de 40 portas, de dezenas de milhares em um FPGA.

Posso reprogramar meu FPGA para fazer outra coisa, por exemplo, controlar o led com base em uma combinação de quatro entradas, ainda em um relógio, ainda usando essa célula de 1 FPGA. Ou controle o led com base em um fluxo serial da entrada, em algumas células FPGA, que seriam centenas de portas. Para que eu pudesse controlar o LED com base em dados seriais, digamos "ON" ou "OFF", com o fluxo serial em uma taxa muito alta (facilmente 20MHz), e ainda usar apenas uma pequena fração da capacidade do FPGA.

Portanto, a vantagem de um FPGA é claramente a velocidade. Ele pode fazer qualquer coisa que um uC possa fazer e muito mais rápido, com tudo feito em paralelo. Coisas complexas que um uC levaria em milissegundos, um FPGA poderia fazer em microssegundos ou menos. Enquanto houver portas sobrando no FPGA, eu posso adicionar mais funções a ele sem afetar a velocidade ou a operação das funções anteriores no FPGA. A propósito, um FPGA pode facilmente executar uma taxa de clock de 20MHz.

Custo não é um diferencial. Posso comprar um FPGA que pode implementar quase qualquer design do Arduino que já vi por cerca de US $ 5, aproximadamente o mesmo que um chip Arduino AVR. Também existem cadeias de ferramentas gratuitas (IDE, compilador, depurador) para FPGAs.

O poder não é um diferenciador. Como eu posso rodar o FPGA a uma velocidade de clock muito mais baixa para obter a mesma função que um uC e usar uma pequena parte de seus portões (portões não utilizados usam apenas energia de vazamento), um FPGA pode superar o poder de quase todos os dispositivos baseados em uC desenhar.

A maior desvantagem de um FPGA é que é muito mais complexo e demorado definir, escrever o código e depurar um design FPGA não trivial do que um programa uC. Um projeto típico de uC que você pode realizar à noite pode levar dias em um FPGA.

Outros problemas potencialmente corrigíveis são que a maioria das pessoas é treinada em programação de software, mas poucas entendem a programação de hardware. Você pode aprender Verilog com bastante facilidade. Mas você também precisaria pensar em termos de design de hardware em vez de design de software. Os padrões de design são muito diferentes.

Outra questão é que os FPGAs não vêm em pequenos pacotes DIP de 8 a 20 pinos. Eles tendem a vir em pacotes de montagem em superfície de 100 pinos ou maiores, portanto, construir as placas é mais difícil.

E um problema final é que muitos projetos interessantes podem ser implementados com perfeição naqueles de fácil utilização, por que se preocupar com um FPGA?


2
"Posso comprar um FPGA que possa implementar quase todo o design do Arduino que já vi por cerca de US $ 5" Sinto muito, mas como é? Onde?
Medivh

9

Se você conhece os portões lógicos básicos, deve saber que eles são praticamente instantâneos. A operação A e B OR C muda instantaneamente quando A, B ou C mudam.

Um FPGA é (mais ou menos) uma matriz de portas lógicas programáveis. Você pode definir as entradas e saídas (como uma combinação das entradas).

Em um uC, A + B / C * sqrt (D) levaria vários ciclos de clock e um pouco de memória. Em um FPGA, o resultado é quase imediato.

Eles são ótimos para vídeo, DSP, criptografia ...

Essa é a principal vantagem. FPGAs modernos são adequados agora com memória e existem híbridos uC / FPGA.


Conheço muitos EEs praticantes com muitos anos de experiência que geralmente passam por um FPGA no design, em vez de um UC onde você costumava vê-lo. Eu realmente acho que eles são ótimos para manipulação de interface.
2189 Kortuk

Sim, acho que este é um bom exemplo: armadeus.com/english/index.html . Especialmente interessante para mim é exemplo de controle servo: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/...
Maciek Sawicki

2
Também é importante notar que há cada vez mais conversores "C para VHDL" ou "C para Verilog". Eles ainda não são as coisas mais eficientes, mas você pode converter o código já escrito em hardware que pode ser utilizado para melhorar a velocidade. Muito legal se você me perguntar (e se você tiver dinheiro para isso).
Chris Gammell

5

Eles são usados ​​para quebrar chaves de criptografia muito mais rapidamente do que um computador de uso geral poderia. : D


1
Haha, gostei da sua descrição muito funcional. Eles são absolutamente incríveis no processamento paralelo.
21909 Kortuk

Um projeto de codebreaker
hhh

2

Para economizar dinheiro e risco versus um ASIC. A não ser que tu

  1. Profundamente se preocupam com poder ou
  2. Estão construindo um monte deles (digamos> 10 mil unidades)

os custos fixos (NRE) de fazer um ASIC tornam o custo proibitivo.

Como você pode alterar um FPGA facilmente, você pode simular menos o design e entrar no laboratório mais rapidamente. Além disso, você pode fazer um design parcial e construir sobre ele, como no software.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.