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?
fonte
Respostas:
Você está ignorando muitos fatores necessários para fazer escolhas de design:
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.
fonte
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.
fonte
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.
fonte
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
fonte
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.
fonte
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.
fonte
É 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.
fonte
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.
fonte