ASIC vs FPGA
Um arranjo de portas programável em campo pode ser visto como o estágio de prototipagem dos circuitos integrados específicos da aplicação: os ASICs são muito caros de fabricar e, uma vez feitos, não há retorno (como o custo fixo mais caro são as máscaras [tipo de fabricação ") "] e seu desenvolvimento). Os FPGAs são reprogramáveis muitas vezes, no entanto, devido ao fato de que uma matriz genérica de portas está conectada para atingir seu objetivo, ela não é otimizada como ASICs. Além disso, os FPGAs são dispositivos nativamente dinâmicos, pois se você o desligar, perde não apenas o estado atual, mas também a sua configuração. Atualmente, existem placas que adicionam um chip FLASH e / ou um microcontrolador para carregar a configuração na inicialização, o que tende a ser um argumento menos importante. Tanto ASICs quanto FPGAs podem ser configurados com os idiomas de descrição de hardware, e, às vezes, FPGAs são usados para o produto final. Mas geralmente os ASICs entram em ação quando o design é corrigido.
FPGA vs microcontrolador
Quanto à diferença entre um microcontrolador e um FPGA, você pode considerar um microcontrolador como um ASIC que basicamente processa o código em FLASH / ROM sequencialmente. Você pode fazer microcontroladores com FPGAs, mesmo que não seja otimizado, mas não o contrário. Os FPGAs são conectados exatamente como circuitos eletrônicos, para que você possa ter circuitos verdadeiramente paralelos, não como em um microcontrolador em que o processador salta de um pedaço de código para outro para simular o paralelismo suficientemente bom. No entanto, como os FPGAs foram projetados para tarefas paralelas, não é tão fácil escrever código seqüencial como em um microcontrolador.
Por exemplo, tipicamente se você escrever no pseudocódigo "seja C seja A XOR B", em um FPGA que será traduzido para "construir uma porta XOR com os blocos de lego contidos (tabelas e travas de pesquisa) e conectar A / B como entradas e C como saída ", que será atualizada a cada ciclo do relógio, independentemente de C ser usado ou não. Enquanto que em um microcontrolador que será traduzido para "instrução de leitura - é um XOR de variáveis no endereço A e endereço B da RAM, o resultado será armazenado no endereço C. Carregue os registros das unidades lógicas aritméticas e peça à ALU que faça um XOR, depois copie o registro de saída no endereço C da RAM ". No lado do usuário, porém, as duas instruções eram 1 linha de código. Se fizéssemos isso, ENTÃO outra coisa, em HDL, teríamos que definir o que é chamado de Processo para fazer seqüências artificialmente - separadas do código paralelo. Considerando que em um microcontrolador não há nada a fazer. Por outro lado, para obter o "paralelismo" (realmente sintonizar e sair) de um microcontrolador, você precisaria manipular tópicos que não são triviais. Diferentes maneiras de trabalhar, diferentes propósitos.
Em suma:
ASIC vs FPGA: fixo, mais caro para um pequeno número de produtos (mais barato para grandes volumes), mas mais otimizado.
ASIC vs microcontrolador: certamente como comparar uma ferramenta com um martelo.
FPGA vs microcontrolador: não otimizado para processamento sequencial de código, mas também pode executar tarefas paralelas com muita facilidade. Geralmente os FPGAs são programados em HDL, os microcontroladores em C / Assembly
Sempre que a velocidade das tarefas paralelas for um problema, pegue um FPGA, desenvolva seu design e, finalmente, torne-o um ASIC se for mais barato para você a longo prazo (produção em massa). Se as tarefas seqüenciais estiverem corretas, use um microcontrolador. Eu acho que você poderia fazer um IC ainda mais específico a partir disso, se for mais barato para você a longo prazo também. A melhor solução provavelmente será um pouco de ambos.
Que pesquisa rápida depois de escrever isso me deu:
FPGA vs Microcontroladores, neste fórum