Quais são as diferenças e semelhanças entre FPGA, ASIC e microcontroladores gerais?


25

Eu li este post e ele não responde minha pergunta na íntegra:

Penso em um microcontrolador como qualquer coisa que tenha memória, registre e possa processar um conjunto de instruções como LOAD, STORE e ADD. Ele contém portas lógicas para desempenhar seu papel, mas sua principal tarefa é ser um processador universal de bits. Penso em um Microntroller como um sistema de projetos ASIC interconectados para criar a capacidade de armazenar e processar instruções.

Penso em um dispositivo ASIC como um circuito que foi construído especificamente usando componentes lógicos e elétricos para executar uma única tarefa, sem nenhuma outra tarefa em mente nem hardware extra incluído.

Penso em um dispositivo FPGA como um dispositivo ASIC (um dispositivo de baixo nível) + um monte de coisas não utilizadas restantes, usadas para implementar uma tabela de verdade específica.

Apesar do nome, um FGPA se sente muito "específico do aplicativo", pois precisa ser religado para executar uma tarefa nova e diferente. Isso leva à confusão com o ASIC. No entanto, no caso de religar um FPGA, todo o hardware necessário deve estar presente. Além disso, os FPGAs devem ser programáveis, mas não é para isso que serve um microcontrolador?

O post acima mencionado também menciona o HDL, com o qual estou familiarizado. O HDL não pode ser usado para ASIC e FPGA e por proxy para projetar um microcontrolador inteiro?


11
Não está muito claro qual é a sua pergunta. Você já leu perguntas relacionadas sobre FPGA vs ASIC? O HDL é realmente usado para projetar implementações ASICs e FPGA, e você pode projetar um microcontrolador em HDL.
Pjc50

3
A Altera oferece um e-book gratuito chamado FPGAs for Dummies , que explica bem a diferença entre FPGAs, ASICs e microcontroladores.
kkrambo

@kkrambo Você está me chamando de manequim? :) Desculpe, não pude resistir ... Vou dar uma olhada.
usar o seguinte comando

Adicionei a palavra 'semelhanças' ao título da pergunta, porque parece que há minuciosos detalhes do jargão técnico que podem confundir a forma como os três dispositivos diferentes se relacionam: por exemplo, um dispositivo pode conter um dos outros dois dispositivos ou pode conter muitos componentes semelhantes, mas diferem em alguns aspectos importantes. Isso já foi abordado por algumas das respostas existentes. Obrigado.
usar o seguinte comando

Respostas:


28

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: insira a descrição da imagem aqui insira a descrição da imagem aqui

FPGA vs Microcontroladores, neste fórum


14

Os FPGAs podem ser "reconectados" pela reprogramação. Um FPGA carrega sua configuração em suas células lógicas configuráveis ​​quando energizado . Isso significa que pode ser reprogramado sem alterações no hardware.

Os ASICs só podem ser reconectados modificando as máscaras fotolitográficas na fundição de silício.

Um microcontrolador é um tipo de ASIC, que executa um programa e pode fazer coisas genéricas como resultado. No entanto, se você quiser alterar o conjunto de instruções ou fazer algo semelhante, é necessário modificar o layout de IC do silicone real.


A diferença entre um FPGA e um MCU é mais vaga. Basicamente, o que é um FPGA, no nível do hardware, são muitas células SRAM pequenas, todas conectadas a uma matriz densa de multiplexadores. Basicamente, um FPGA é uma pilha inteira de lógica discreta que pode ser "religada" eletronicamente ** simplesmente reprogramando os multiplexadores e as células SRAM.

Como tal, você pode realmente implementar uma MCU dentro de um FPGA, uma vez que uma MCU é apenas uma certa configuração de células lógicas. De fato, os FPGAs são muito comumente usados ​​no processo de design de MCUs.

Um microcontrolador é uma implementação de uma certa configuração lógica. A razão pela qual os temos é que, ao implementar uma MCU diretamente no silício, a quantidade total de espaço necessário para a matriz de silício pode ser consideravelmente otimizada, e algumas otimizações de desempenho podem ser feitas que a "genéricosidade" necessária de um FPGA proíbe. Isso permite que os custos de produção de um MCU sejam reduzidos drasticamente e, como resultado, o MCU comum é muito mais barato que um FPGA capaz de conter a lógica equivalente.


Os FPGAs são úteis em certas aplicações, porque podem implementar estruturas lógicas de uma maneira que as MCUs não podem. Por exemplo, se você precisar adicionar X1 + Y1, X2 + Y2, X3 + Y3 e X4 + Y4, o MCU precisará executar cada operação na sequência *. Um FPGA pode simplesmente ter 4 ALUs separadas ao mesmo tempo , para que possa realizar a mesma operação em um quarto do tempo (supondo que os dois dispositivos estejam com a mesma freqüência).

É aqui que os FPGAs (ou ASICs projetados para a mesma tarefa) podem realmente brilhar, no fato de que você pode fazer muitas e muitas coisas simultaneamente , o que um único processo só pode fazer sequencialmente.

* (nota: estou ignorando algumas coisas como SIMD aqui)


Eu não acho que a distinção FPGA / ASIC seja difusa; em um FPGA, os circuitos cuja "fiação" pode ser alterada operam simultaneamente e independentemente. Uma MCU possui uma grande quantidade de circuitos cuja fiação não pode ser alterada, cujo comportamento é controlado por meio de informações acessadas aos poucos a partir de um conjunto de memórias programáveis. A qualquer momento, uma CPU geralmente só poderá executar uma operação de uma lista de alguns milhares a alguns bilhões de opções, mas o MCU será projetado para que a organização de tais operações em sequência possibilite a realização de uma operação. trabalho útil.
supercat

Obrigado. Muito perto de se tornar a resposta ... embora 10 meses depois. +1 para fazer as pazes.
user58446

6

Essa é uma boa pergunta,

Basicamente, um microcontrolador e um ASIC possuem hardware (geralmente chamado de silício) que é definido como pedra e não pode ser alterado. Um FPGA pode ser configurado para representar muitos tipos diferentes de hardware (isso pode incluir microcontroladores).

Você pode pensar que um microcontrolador pode ser feito para fazer muitas coisas diferentes, mas tudo isso é feito executando programas diferentes - tecnicamente software, mas às vezes chamado de firmware - o hardware em si não muda essencialmente, ele faz as mesmas operações, mas de uma maneira diferente. ordem diferente com entradas diferentes.

Os FPGAs geralmente são usados ​​para gerar os projetos comprometidos com os ASICs. A diferença entre eles é que, se você deseja atualizar o funcionamento interno de um FPGA ou adicionar / remover blocos funcionais, tudo o que você precisa fazer é atualizar o firmware, isso não pode ser feito em ASICs, pois o funcionamento interno foi comprometido com o silício, não é reconfigurável.

Em resumo, com um microprocessador você usa o mesmo hardware para executar programas diferentes, com um FPGA você está reconfigurando o hardware para executar diferentes funções e os ASICs são como um microcontrolador, pois o hardware não pode ser alterado, mas geralmente é projetado para executar uma única função extremamente eficiente.

Tanto os ASICs quanto os FPGAs podem conter microcontroladores e, se o fizerem, você pode escrever programas para eles como faria com um microcontrolador independente, um exemplo disso é o processador incorporado NIOS II da Altera.

Se isso ainda for confuso, deixe-me saber o que não está claro e farei o possível para esclarecer minha resposta.

cigano


3

bem, nenhum FPGA é programado por sinais elétricos se comportar como uma coleção específica de portas; alguns FPGAs incluem memória flash para armazenar essa configuração, outros não e devem ser reprogramados após cada redefinição de energia.

Um ASIC sai da linha de produção já configurada.

Os erros do FPGA podem ser corrigidos com uma atualização de firmware, os erros do ASIC não podem ser economicamente reparados.


2

Apesar do nome, um FGPA se sente muito "específico da aplicação", pois precisa ser religado para executar uma tarefa nova e diferente.

É o oposto do que significa "aplicativo específico". Você pode usar um FPGA para mais de um aplicativo religando-o. Você não pode alterar um ASIC, portanto, ele só pode ser aplicado a uma tarefa (essa tarefa pode estar implementando um microcontrolador).

No entanto, no caso de religar um FPGA, todo o hardware necessário deve estar presente.

Não tenho certeza do que isso significa. Geralmente, há uma interface de software para reprogramar um FPGA. É um ASIC que requer milhões de [unidades monetárias] s de hardware.

Os FPGAs devem ser programáveis, mas não é para isso que serve um microcontrolador?

Um microcontrolador permite programar software seqüencial para um hardware fixo. Assim como um computador normal, mas muito pequeno e com recursos limitados. Um FPGA permite que você programe qualquer hardware que desejar usando um HDL.

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.