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?
fonte
Respostas:
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:
Que pesquisa rápida depois de escrever isso me deu:
FPGA vs Microcontroladores, neste fórum
fonte
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)
fonte
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
fonte
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.
fonte
É 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).
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.
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.
fonte