Por que os FPGAs não são onipresentes?

65

Lendo sobre FPGAs, se bem entendi, eles são basicamente circuitos de portas lógicas totalmente configuráveis. Sendo assim, pode-se projetar qualquer coisa com eles. Pode-se projetar tudo da maneira mais personalizada possível e, portanto, atingir os mesmos fins de uma maneira muito mais eficiente que pode ser obtida com um microcontrolador. Com isso, parece que um FPGA vence um microcontrolador a qualquer hora, em qualquer dia. Então, minha pergunta é: se os FPGAs são realmente impressionantes, o que os impede de serem muito mais prevalentes do que os microcontroladores? Deste ponto de vista, para mim, parece que os FPGAs deveriam ter eliminado os microcontroladores há muito tempo. Então, por que não é esse o caso? É o custo, a dificuldade de programar um FPGA ou algo totalmente diferente?

Utku
fonte
2
possível duplicata de soft core Processadores VS rígidos core
PeterJ
Você também pode ler este tópico: electronics.stackexchange.com/questions/4382/…
Tom L.
43
Os helicópteros são mais flexíveis que os carros; então, por que alguém ainda usa um carro para ir ao trabalho?
Olin Lathrop
15
Porque todas as empresas de FPGA oferecem ferramentas proprietárias absolutamente horríveis, com uma enorme curva de aprendizado e que não são acessíveis à maioria dos desenvolvedores. Substitua isso por uma cadeia de ferramentas totalmente aberta e elas provavelmente seriam onipresentes.
R ..
@R .. ... ou pelo menos não uma opção absoluta de último recurso.
Dan Neely

Respostas:

94

Você está ignorando muitos fatores necessários para fazer escolhas de design:

  1. Custo . Os FPGAs são mais caros que os micros para a mesma complexidade da lógica.

  2. Complexidade lógica . O código executável pode implementar uma lógica muito mais complicada do que o mesmo número de portas no micro usado diretamente.

  3. Facilidade de desenvolvimento . É mais fácil escrever código executável do que definir lógica para todos, exceto pequenos problemas. Mesmo projetos modestos de microcontroladores têm milhares de linhas de código. O desenvolvimento de definições lógicas equivalentes levaria muito mais tempo e seria muito mais difícil de depurar e verificar.

  4. Consumo de energia . Como os FPGAs são destinados a operações de alta velocidade que os micros não podem suportar (caso contrário, você usaria um micro), eles não são otimizados para baixo consumo de energia. Isso os torna inadequados para algumas aplicações de baixa potência. Alguns micros possuem correntes de sono abaixo de 1 µA e podem operar com apenas alguns µA em velocidades lentas do relógio. Tente encontrar um FPGA que possa fazer isso.

As principais vantagens dos FPGAs versus micros é que eles são mais rápidos e podem fazer mais coisas em paralelo. Fora isso, você prefere usar um micro. Portanto, no processo de design, você geralmente inicia com um micro e, a contragosto, vai para um FPGA quando realmente precisa da velocidade e / ou operação simultânea de alta velocidade. Mesmo assim, você implementa apenas as partes críticas à velocidade em um FPGA e deixa as funções de controle de velocidade mais baixa e similares no micro.

Olin Lathrop
fonte
2
"Mesmo assim, você implementa apenas as partes críticas à velocidade em um FPGA e deixa as funções de controle de velocidade mais baixa e similares no micro". E isso porque o desenvolvimento de um FPGA é uma dor, certo?
Utku
2
@Utku: Sim, essa é a razão 3 acima, embora as razões 1-2 também se apliquem também. Os FPGAs não são tão econômicos quanto os micros para a mesma tarefa, a menos que a tarefa tenha requisitos de velocidade tão altos que um micro simplesmente não possa fazê-lo.
Olin Lathrop
4
É fácil dizer que essa resposta foi escrita do ponto de vista do usuário da CPU. "vá contra um FPGA quando você realmente precisar da velocidade e / ou operação simultânea de alta velocidade". Eles não são que ruim. Existem aplicativos em que nem se pensa em usar uma CPU em um FPGA.
stanri
26
Da maneira que eu costumo explicar: é difícil fazer coisas em paralelo em uma CPU, e é difícil fazer coisas em série em um FPGA.
Ben Jackson
14
Uma coisa importante a lembrar sobre os FPGAs: a reconfigurabilidade da lógica tem um preço - a lógica equivalente que um FPGA implementa é muito menos complicada do que o próprio FPGA. Todas as tabelas de pesquisa, componentes da matriz de roteamento, etc. consomem muito mais área e energia de silício do que as implementações equivalentes na lógica rígida. Isso significa que os FPGAs são piores em todas as métricas de desempenho - consumo de energia ativo e ocioso, densidade, velocidade do clock, etc. - do que criar a mesma funcionalidade diretamente em silício, como é feita com microcontroladores, CPUs de uso geral e o próprio FPGA.
Alex.forencich
45

Uma distinção que eu não vi elaborada aqui é que os FPGAs são usados ​​e se comportam de uma maneira completamente diferente dos processadores.

Um FPGA é realmente bom em executar exatamente a mesma tarefa, repetidamente. Por exemplo, processamento de sinais de vídeo, áudio ou RF. Ou roteando pacotes Ethernet. Ou simulando o fluxo de fluido. Qualquer situação em que você tenha muitos dados do mesmo tipo sendo lançados muito rapidamente e deseja lidar com tudo da mesma maneira. Ou você deseja executar o mesmo algoritmo repetidamente. O FPGA realmente não tem 'tarefas' que iniciam e param [1], todo o seu trabalho é fazer a mesma coisa com todos os dados que obtiver, enquanto estiver ligado. Não muda de marcha, não faz mais nada. É o melhor funcionário da linha de produção. Ele fará a mesma coisa repetidamente, o mais rápido possível, para sempre.

As CPUs, por outro lado, são o epítome da flexibilidade. Eles podem ser programados para fazer qualquer coisa, e podem ser programados para fazer várias coisas diferentes ao mesmo tempo. Eles têm tarefas que iniciam e param, mudam de marcha, multitarefa, estão constantemente mudando e mudando funções.

O FPGA e a CPU são opostos completos. A mercadoria da CPU é tempo - ela deve fazer as coisas mais rapidamente. Quanto mais rápido o aplicativo for executado, melhor.

A mercadoria do FPGA é o espaço. Seu FPGA é tão grande e existem tantos portões disponíveis para executar a tarefa que você deseja. Na maioria das vezes, a questão é mais do que velocidade [2].

É possível fazer um FPGA agir como uma CPU. Você pode colocar um núcleo de IP da CPU em um FPGA, no entanto, é muito difícil justificar por causa dos motivos que outros descreveram [3]. O FPGA e a CPU são opostos, ambos tendo suas próprias forças e fraquezas, e ambos tendo seu próprio lugar como resultado.


Notas:

1) Um FPGA poderia ser projetado para executar tarefas diferentes, mas mesmo assim seria um número específico para o qual foi pré-projetado.

2) A velocidade também é uma especificação de design do FPGA. É realmente uma troca entre velocidade e tamanho.

3) A inserção de uma CPU em um FPGA é feita com relativa frequência, no entanto, é feita caso a caso, dependendo dos aplicativos específicos. Por exemplo, se você precisar de um microcontrolador muito pequeno e tiver espaço FPGA extra.

E finalmente: Esta resposta é uma grande simplificação - os FPGAs são usados ​​de maneiras enormemente variadas e complexas e esta é uma breve visão geral sobre como eles são usados ​​em geral.

Stanri
fonte
11
"Ou encaminhamento de pacotes Ethernet. Ou simulação de fluxo de fluido." Embora, até onde eu saiba, o ASIC seja normalmente usado para o primeiro (na produção em massa, pelo menos) e as GPUs sejam mais rápidas, mais baratas, com menor consumo de energia e mais facilmente programáveis ​​para o último.
reirab
11
@reirab Esses foram exemplos do tipo de operações que os FPGAs podem fazer bem, eles vieram à mente porque são os aplicativos para os quais eu pessoalmente codifiquei FPGAs. Há mais de uma maneira de esfolar um gato. A escolha do dispositivo depende de muitos fatores de design.
stanri
5
@reirab qualquer coisa que um FPGA possa fazer, um ASIC pode fazer por menor potência e menor custo de produção marginal. As vantagens do FPGA estão na prototipagem e na produção de baixo volume, porque os custos iniciais de um ASIC são muito maiores; ou seja, o último só faz sentido quando o design é finalizado e você está criando muitos deles.
Dan Neely
É estranho afirmar que uma CPU é mais flexível que um FPGA, considerando que você pode implementar uma CPU facilmente dentro de um FPGA (qualquer estudante sério de CS deve fazer isso pelo menos uma vez). Um FPGA é um conceito muito mais baixo que um CPU, portanto, não faz muito sentido compará-los diretamente.
Voo
Essa resposta realmente me incomoda. "A mercadoria da CPU é tempo", "A mercadoria da FPGA é espaço." Hã? ASICs e CPUs são opostos, e FPGAs ficam no meio, obtendo o melhor e o pior dos dois mundos.
Jotorious 18/03
20

Como diz Olin, algo como um micro é mais eficiente para muitas tarefas, e você quase sempre encontrará um micro usado onde quer que um FPGA apareça. A área cultivada de silício usada (que se traduz em custo de maneira não-linear) e o consumo de energia são muito menores. Por esse motivo, não é incomum implementar um MCU 'soft' em um FPGA - mas o custo e o desempenho de um micro desse tipo são impressionantes.

Alguns FPGAs modernos contêm um ou mais núcleos 'rígidos', como a onipresente série ARM. Além disso, eles podem conter blocos de memória dedicados, pois é realmente ineficiente tornar a memória fora dos portões. Um micro core de 32 bits ocupa um pouquinho da área de silício em um FPGA típico, o que lhe dá uma idéia dos custos relativos.

O desenvolvimento é significativamente mais difícil, e o IP tende a não estar tão livremente disponível quanto para micros e soluções SOC dedicadas - por exemplo, controladores LCD, interfaces PCI, Ethernet MACs. O motivo é parcialmente que, ao divulgar as descrições da lógica HDL, eles estão transferindo o design, não apenas a instanciação do design. Outro motivo é que o desempenho depende do layout da lógica no FPGA, o que requer muito esforço durante o desenvolvimento.

Uma complicação adicional é que os FPGAs mais complexos são baseados em RAM para configuração e os custos do processo são tais que a memória externa não volátil é necessária para armazenar a configuração e a memória do programa para qualquer MCU a bordo. Essa memória deve ser carregada na RAM na inicialização.

Os FPGAs são ferramentas extremamente úteis na caixa de ferramentas, mas não substituirão MCUs ou ASICs universalmente tão cedo.

Spehro Pefhany
fonte
10

O melhor uso de silício para um trabalho é um ASIC, nada desperdiçado, mas eles têm uma enorme curva de aprendizado, NRE e inflexibilidade.

Existem duas maneiras de criar flexibilidade em um chip. a) Tenha uma ULA com espaço otimizado e use-a repetidamente nos dados armazenados. Isso é chamado de MCU e requer uma vasta área de silício que 'não está fazendo nada', a memória do programa, barramentos amplos que variam de unidade para unidade e comutadores de acesso ao barramento. b) Possuir lógica refinada, com algumas partes opcionais com otimização de espaço, como multiplicadores, pequenas RAMs e CPUs simples. Isso é chamado de FPGA e requer uma vasta área de silício que 'não está fazendo nada', comutadores programáveis ​​e linhas de conexão.

Obviamente, com essas estruturas, os MCUs funcionam melhor para tarefas que podem ser divididas em partes seriais, e os FPGAs funcionam melhor para tarefas que precisam de operação paralela de alta velocidade. Quando a aplicação é pesada e o custo é dominado pelo custo do silício, é assim que os dois tipos serão naturalmente usados.

Quando o aplicativo é leve, mas alto volume, o custo é dominado pela embalagem, e não pelo silicone, e qualquer um dos tipos é viável. A Altera possui alguns FPGAs de potência muito baixa e muito baixa para competir com MCUs de um dólar por um punhado.

Para aplicativos de baixo volume, o custo de desenvolvimento tende a dominar, e os MCUs vencem, supondo que eles tenham a velocidade

Neil_UK
fonte
9

Em termos de consumo de energia e utilização de silício, um FPGA é muito ruim em comparação com um microprocessador.

Um FPGA consome grande parte de sua área de silício nos circuitos de configuração lógica, algo que não se aplica a um micro. Deve haver muito mais interconexões disponíveis do que seria necessário em uma implementação dedicada de um microprocessador.

O FPGA consome mais energia que um ASIC dedicado, como um microprocessador, pois a lógica não é implementada com a mesma eficiência.

Qualquer função que possa ser implementada em um FPGA pode ser executada de forma mais eficiente, mais barata, com menor consumo de energia, menor espaço na placa etc. em um ASIC dedicado. Isso pressupõe que os volumes sejam grandes o suficiente para compensar o NRE.

Kevin White
fonte
Se o objetivo é implementar todo o conjunto de recursos do microprocessador, com certeza. Depois de concluir uma tarefa específica, também é possível identificar muito desperdício de silício no microcontrolador - talvez esse mecanismo de criptografia desperdice espaço no seu projeto. Ou o periférico CAN? Ou a unidade de ponto flutuante? A melhor utilização do FPGA é menor, mas você também não sofre 0% de utilização em grandes áreas, da mesma forma que um microcontrolador. (Por outro lado, com intermitcia relógio, tendo uso 0% de grandes circuitos é muito desejável do ponto de vista de energia)
Ben Voigt
8

Os sistemas baseados em microprocessador e, posteriormente, os microcontroladores, conseguiram alcançar um enorme grau de funcionalidade por sua capacidade de usar muitas das peças individuais do circuito para realizar muitas tarefas diferentes em momentos diferentes. Acho instrutivo comparar a máquina de fliperama Tank, projetada em 1976, com o jogo Combat, que roda na segunda máquina de jogo controlada por microprocessador do mundo, a Atari 2600. Embora existam algumas diferenças na jogabilidade, o hardware da Atari 2600 foi essencialmente projetado implementar jogos como o Tank a um custo mínimo; o fato de poder ser feito para jogar jogos diferentes com a inserção de cartuchos de ROM diferentes foi um ótimo bônus.

O jogo Tank permite que dois jogadores conduzam tanques pela tela e disparem tiros um contra o outro. Possui contadores de "deslizamento" para as posições X e Y de cada tanque, posição X e Y de cada jogador, contador para cima / baixo para o ângulo de cada jogador e ângulo de tiro de cada jogador, um contador para a pontuação de cada jogador, feixe raster X e Y contadores de posição e muitos circuitos de controle sobre essas coisas. Possui hardware para buscar dados de campo de jogo da ROM e exibi-los, além de hardware para buscar formas para os tanques dos dois jogadores e pontuações da ROM e exibi-los.

O Atari 2600 possui um contador de deslizamento para as posições horizontais de cada um dos dois objetos de jogador, cada um dos dois objetos de mísseis e um objeto adicional chamado "bola" que não é usado no combate, mas é usado em outros jogos. Para cada um dos objetos do player, ele possui hardware para emitir um padrão armazenado em uma trava de 8 bits, bem como uma trava "de atraso" de oito bits para cada jogador que é copiado na trava principal de 8 bits sempre que o outro jogador forma é atualizada. Ele também possui um contador de posição do feixe horizontal e uma trava em formato de campo de jogo de 20 bits que é exibida na tela duas vezes por linha de digitalização, com a cópia do lado direito aparecendo como repetição ou reflexo da esquerda. Possui hardware para detectar colisões, mas não para fazer nada como conseqüência delas. Ele faz não não possui hardware para as posições verticais de nenhum objeto, nem a posição vertical do feixe raster (!), nem possui hardware associado à manutenção de pontuação, exibição de pontuação, duração do jogo etc.

Todas as funções para as quais o 2600 omite o hardware são tratadas pelo software no cartucho. Só é necessário verificar a posição vertical de cada objeto em relação à posição do feixe de varredura uma vez por linha de varredura; é necessário apenas atualizar a pontuação do jogador e o tempo restante do jogo no máximo um por quadro; as pontuações dos jogadores são armazenadas nas linhas de varredura acima do campo de jogo. e, portanto, pode compartilhar o mesmo hardware usado para o campo de jogo etc.

A abordagem normal para implementar um jogo como "Tank" em um FPGA seria usar circuitos separados para diferentes funções da mesma maneira que a máquina de fliperama de 1976. Essa abordagem funcionaria, mas usaria uma quantidade substancial de hardware. Uma abordagem baseada em microprocessador poderia eliminar mais da metade desse hardware em troca da adição de um microprocessador, que provavelmente conteria menos circuitos do que o hardware substituído (o 2600 poderia implementar jogos muito mais sofisticados que o Tank, o que exigiria muito mais hardware se eles não usassem um microprocessador).

Os FPGAs são excelentes nos casos em que é necessário um dispositivo que possa executar muitas tarefas simples simultaneamente . Sistemas baseados em microprocessador (ou microcontrolador) geralmente são melhores, no entanto, nos casos em que há muitas tarefas que precisam ser executadas, mas elas não precisam ser processadas simultaneamente, porque facilitam o uso de uma pequena quantidade de circuitos para realizar um grande número de propósitos distintos.

supercat
fonte
Você não poderia colocar minas também? ;-)
Scott Seidman
@ScottSeidman: A máquina de fliperama tinha algumas minas em posições conectadas, que eram desenhadas como X's. Teria sido muito difícil para o 2600 mostrar as minas como X enquanto mostrava os dois jogadores e os dois mísseis. Se alguém não se importasse em ter as minas piscando a 60Hz, seria possível usar alguns truques descobertos mais tarde, mas exigiria mais código (COMBAT é um cartucho de 2K que está praticamente cheio - até os dois bytes no O vetor BRK / IRQ em $ FFFE / FFFF é usado para armazenar uma tabela de dois bytes!).
Supercat
Provavelmente teria sido possível para o Combat implementar as minas como quadrados intermitentes se estivesse disposto a renunciar a algumas de suas outras opções, como tiros saltitantes, etc. mas acho que Joe Decuir (programador) fez um bom trabalho ao escolher opções jogáveis. Meu único problema é que o biplano-contra-bombardeiro poderia ter sido mais divertido se o bombardeiro fosse um sprite 2x em vez de 4x.
Supercat
5

É inteiramente o custo. Quando um micro pode chegar a 30 centavos, um FPGA barato fica no território de US $ 5. O custo pode não parecer tão alto, mas quando você faz um milhão de novos brinquedos peidar para vender por US $ 10, o preço do FPGA mata seus resultados.

vini_i
fonte
6
O custo é certamente um problema, mas dizer que a diferença é inteiramente o custo é tão ingênuo quanto pensar que todos os micros podem ser substituídos por FPGAs.
Olin Lathrop
@OlinLathrop, se o custo não foi um problema, tudo o que um micro pode fazer pode ser feito por um FPGA. Isso foi demonstrado com a capacidade de um FPGA para manter um núcleo macio de microcontrolador. O problema é que um FPGA que pode conter um núcleo desse tipo é pelo menos e de ordem de magnitude mais caro que o micro que está sendo emulado.
vini_i 13/09/2015
Custo pode significar muito mais do que preço por unidade, mas é tudo o que você deseja incluir nessa análise.
Scott Seidman
2
Eu não posso dizer se você está deliberadamente fingindo não entender o assunto, ou apenas denso. De qualquer maneira, você está respondendo a algo que ninguém disse. Todos concordam que os FPGAs custam mais e esse custo é um problema. Mas, novamente, afirmar que é o único problema está errado. Se eu lhe fornecesse um monte de micros e FPGAs gratuitos, ainda existem razões significativas pelas quais você usaria os micros sobre os FPGAs em vários designs.
Olin Lathrop
4
@sleb: Não, a diferença de custo não se deve apenas ao volume. A área de silício necessária por porta fornecida é significativamente maior em um FPGA do que em um chip personalizado como um microcontrolador. Toda essa configurabilidade no nível de interconexão do portão leva a área de silício para implementar. Em grandes volumes, o custo de um chip está relacionado à sua área de silício.
Olin Lathrop
5

Só para acrescentar outras respostas muito boas, acho que a adoção do FPGA também é uma questão de domínio: por exemplo, para dispositivos neuromórficos, as placas FPGA estão se tornando onipresentes porque há uma enorme necessidade de paralelismo, o que é um ponto forte do FPGA.

Se você extrapolar a tendência que vemos para dispositivos neuromórficos, pode-se imaginar que outros campos que são baseados ou exigem criticamente o paralelismo provavelmente adotarão FPGAs muito mais. Portanto, talvez o FPGA não se torne onipresente para produtos de consumo, mas pode ser para domínios específicos, pois parece que está acontecendo atualmente para dispositivos neuromórficos.

laborioso
fonte
Embora isso possa ser verdade, isso não parece suficiente para uma resposta completa. Talvez fosse melhor como um comentário, ou você poderia expandir.
Nulo
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem.
Funkyguy 13/09/2015
3
@ Funkyguy, isso responde à pergunta. Eles estão basicamente dizendo que os FPGAs não são onipresentes porque os aplicativos comuns do consumidor não exigem o paralelismo que é o ponto forte dos FPGAs.
stanri