Microcontroladores vs FPGA [fechado]


36

Eu trabalhei na família Arduino (especificamente o Sanguino), construí alguns dispositivos simples e um fototrópio simples. Portanto, eu me sinto bastante à vontade com microcontroladores - especificamente da Atmel. Estou curioso para saber como os FPGA diferem dos microcontroladores padrão. Eu sou de uma formação técnica (programação C / C ++) e, portanto, adoraria respostas técnicas. Lembre-se de que eu sou um novato (em relação à minha experiência s / w) no domínio eletrônico. :)

Fiz essa consulta e foi bom, mas estou procurando mais detalhes.

Obrigado! Sushrut.


Adendo - Existem bons exemplos no mundo real que usam arquiteturas híbridas, ou seja, combinando FPGA's com microcontroladores?
Sushrut J Mair

Sushrut J Mair - Geralmente quando você tem um FPGA e precisa de um Micro, o micro é implementado no FPGA.
Connor Wolf

Sim, nome falso, concordou. No entanto, eu estava procurando encontrar casos do mundo real em que FPGA e MCU sejam usados ​​para projetar um sistema. A idéia é que a parte do FPGA do design seja usada para implementar h / w 'evolutível' que responde e se transforma conforme as entradas alteradas no sistema enquanto o processamento lógico principal é feito pelo MCU.
Sushrut J Mair

Respostas:


48

A criação de um FPGA requer uma linguagem de descrição de hardware (HDL). HDLs são absolutamente nada como C. Considerando que um programa C é uma série seqüencial de instruções e deve se contorcer para obter execução paralela, um HDL descreve um circuito simultâneo e deve se contorcer para obter execução sequencial. É um mundo muito diferente e se você tentar construir um circuito em um FPGA enquanto pensa como um desenvolvedor de software, isso vai doer.

Um MCU é limitado no tempo. Para realizar mais trabalho, você precisa de mais ciclos do processador. Os relógios têm limites muito reais para suas frequências, por isso é fácil atingir uma parede computacional. No entanto, um FPGA tem espaço limitado. Para realizar mais trabalho, basta adicionar mais circuitos. Se o seu FPGA não for grande o suficiente, você poderá comprar um maior. É muito difícil construir um circuito que não se encaixa no maior FPGA, e mesmo se houver, há notas de aplicativos que descrevem como conectar em série os FPGAs.

Os FPGAs se concentram muito mais na execução paralela. Às vezes, você precisa se preocupar com quanto tempo o ISR do seu MCU leva para atender à interrupção e se você conseguirá atingir seus limites em tempo real. No entanto, em FPGA, existem muitas máquinas de estado finito (FSM) em execução o tempo todo. Eles são como "femto-controllers", como pequenas nuvens da lógica de controle. Todos eles estão sendo executados simultaneamente, portanto, não se preocupe em perder uma interrupção. Você pode ter um FSM para interface com um ADC, outro FSM para interface com o endereço / barramento de dados de um microcontrolador, outro FSM para transmitir dados para um codec estéreo, outro FSM para bufferizar o fluxo de dados do ADC para o codec ... precisa usar um simulador para garantir que todos os FSMs cantem em harmonia.

FPGAs são o sonho de um designer de layout de PCB. Eles são extremamente configuráveis. Você pode ter muitas interfaces lógicas diferentes (LVTTL, LVCMOS, LVDS, etc), de tensões variadas e até forças de acionamento (para que você não precise de resistores de terminação em série). Os pinos são trocáveis; Você já viu um barramento de endereços MCU onde os pinos estavam espalhados pelo chip? Seu projetista de PCB provavelmente precisará soltar várias vias apenas para ligar todos os sinais corretamente. Com um FPGA, o designer de PCB pode executar os sinais no chip em praticamente qualquer ordem que for conveniente e, em seguida, o design pode ser anotado novamente na cadeia de ferramentas FPGA.

Os FPGAs também têm muitos brinquedos legais e sofisticados. Um dos meus favoritos é o Digital Clock Manager nos chips Xilinx. Você alimenta um sinal de relógio, e ele pode derivar mais quatro usando uma ampla variedade de multiplicadores e divisores de frequência, todos com ciclo de trabalho primitivo de 50% e 100% em fase ... e pode até levar em consideração o desvio do relógio que decorre de atrasos de propagação externos ao chip!

EDIT (resposta à adenda):

Você pode colocar um "núcleo flexível" em um FPGA. Você está literalmente conectando um circuito de microcontrolador, ou melhor, provavelmente está inserindo o circuito de outra pessoa em seu projeto, como o PicoBlaze da Xilinx ou o MicroBlaze ou o Nios da Altera da Xilinx. Mas, como os compiladores C-> VHDL, esses núcleos tendem a ser um pouco inchados e lentos em comparação com o uso de um FSM e caminho de dados ou um microcontrolador real. As ferramentas de desenvolvimento também podem adicionar complexidade significativa ao processo de design, o que pode ser ruim quando os FPGAs já são chips extremamente complexos.

Existem também alguns FPGAs que possuem "núcleos rígidos" incorporados, como a série Virtex4 da Xilinx, que possui um IBM PowerPC real e dedicado, com tecido FPGA ao seu redor.

EDIT2 (resposta ao comentário):

Acho que vejo agora ... você está perguntando sobre como conectar um MCU discreto a um FPGA; ou seja, duas fichas separadas. Existem boas razões para fazer isso; os FPGAs que possuem núcleos rígidos e os que são grandes o suficiente para suportar núcleos flexíveis decentes geralmente são monstros com muitas centenas de pinos que acabam exigindo um pacote BGA, o que aumenta facilmente a dificuldade de projetar uma PCB por um fator de 10.

C é muito mais fácil, portanto, os MCUs definitivamente têm seu lugar trabalhando em conjunto com um FPGA. Como é mais fácil escrever C, você pode escrever o "cérebro" ou o algoritmo central no MCU, enquanto o FPGA pode implementar sub-algoritmos que podem precisar ser acelerados. Tente colocar coisas que mudam para o código C, porque é mais fácil mudar e deixe o FPGA para ser do tipo mais dedicado, que não muda com frequência.

As ferramentas de design do MCU também são mais fáceis de usar. As ferramentas de design levam vários minutos para criar o arquivo de bits FPGA, mesmo para projetos um pouco simples, mas programas complexos de MCU geralmente levam alguns segundos. Há muito, muito menos a dar errado com o MCU, então eles também são mais fáceis de depurar ... Não consigo subestimar como FPGAs complexos podem ser. Você realmente precisa obter a folha de dados para a que possui e deve tentar ler todas as páginas. Eu sei, são algumas centenas de páginas ... faça assim mesmo.

A melhor maneira de conectá-los é usar um MCU com um endereço externo e um barramento de dados. Em seguida, você pode simplesmente mapear os circuitos FPGA para a memória no MCU e adicionar seus próprios "registros", cada um com seu próprio endereço. Agora, o FPGA pode adicionar periféricos personalizados, como um timer de 32 bits que pode trancar todos os 4 bytes de uma só vez quando o primeiro byte é lido, para evitar transbordamentos entre as leituras de 8 bits. Você também pode usá-lo como lógica de cola para mapear mais periféricos de outros chips, como um ADC separado.

Finalmente, algumas MCUs são projetadas para uso com um "mestre externo" como um FPGA. O Cypress fabrica alguns MCUs USB com 8051, mas a intenção é que os dados USB sejam produzidos / consumidos por, por exemplo, um FPGA.


Esta é uma boa informação, obrigado. Eu ouvi falar de compiladores C / C ++ para HDL. Você já experimentou?
Sushrut J Mair

Eles estão ... ok. Para um único bloco lógico, não é tão ruim. Mas eu não escreveria um design inteiro através desse tipo de compilador. Eles não são muito eficientes porque os idiomas são incrivelmente diferentes ... você precisa usar convenções especiais, eles não aceitam qualquer código ANSI C antigo.
precisa saber é

Obrigado, isso é útil. Encomendei o kit de desenvolvimento XP2 Brevia da Lattice Semiconductor. Pretendo experimentar alguns compiladores HDL para C quando estiver confortável com os conceitos básicos de design de FPGA.
Sushrut J Mair

Acabei de ver a resposta ao meu adendo na consulta original. Obrigado - então você está dizendo que, na prática (pelo menos com a tecnologia atual), uma arquitetura híbrida de um MCU padrão + um FPGA tem muito pouco valor agregado para ser realmente útil em situações do mundo real?
Sushrut J Mair

Impressionante. Obrigado ajs410. Espero passar algumas semanas me inicializando em fpga's antes de entrar nas emocionantes possibilidades do arco híbrido!
Sushrut J Mair

10

"exemplos no mundo real ... combinando FPGAs com microcontroladores?"

Em princípio, um FPGA suficientemente grande sozinho pode fazer qualquer coisa que um FPGA mais um microcontrolador possam fazer - talvez implementando uma CPU flexível dentro do FPGA. Na prática, um determinado nível de desempenho geralmente apresenta custos mais baixos de peças e requer menos energia quando implementado com um FPGA mais um microcontrolador separado do que apenas com FPGAs (ou somente MCUs). Aqui estão alguns dos dispositivos mais famosos com FPGAs e microcontroladores a bordo:

  • A câmera Elphel ; O Elphel Project Wiki possui um FPGA do Xilinx (R) Spartan 3e 1200K e um processador ETRAX FS executando o GNU / Linux.
  • O TS-7500 possui um FPGA Lattice de 5000 LUT e uma CPU Cavium ARM9 de 250 MHz que pode executar o Linux.
  • A placa Balloon possui um Xilinx Spartan FPGA e uma CPU ARM
  • vários SBCs pequeninos do Linux incluem um FPGA e um CPU
  • O wiki do Armadeus Project documenta algumas placas com um Xilinx Spartan-3 FPGA e uma CPU ARM9 de 400 MHz.
  • A Blackfin Handy Board inclui um processador Xilinx Spartan 3e FPGA e um processador de 600 MHz Analog Devices Blackfin® ADSP-BF537. (Não possui um MMU, não pode executar o Linux completo, mas pode executar o uClinux).
  • O "Minimig" (mini Amiga) inclui um Xilinx Spartan-3 FPGA, uma CPU M68000 e um pequeno PIC MCU como controlador de disco ativo.

4

Frequentemente, os FPGAs são usados ​​especificamente para executar tarefas que um microcontrolador não pode executar com eficiência, como operações altamente paralelas ou de baixa latência, operando em vários domínios de clock ou executando lógica personalizada em velocidades de hardware. Como tal, eles farão o trabalho pesado, e você raramente precisará de um MCU para ser central no design - eles podem ser movidos para posições de gerenciamento, como carregar o fluxo de bits de configuração. Um exemplo disso é o PIC ou ARM no Minimig , que implementa a interface de armazenamento.

Alguns produtos obscurecem as linhas, no entanto. Alguns exemplos:

  1. FPGAs maiores tendem a ter CPUs rígidas embutidas (projetos maiores geralmente precisam deles de qualquer maneira), assim como possuem RAM e blocos multiplicadores
  2. Alguns microcontroladores visam operações paralelas (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Alguns chips são projetados como híbridos (Cypress PSoC, Atmel FPSLIC)

Vindo de um histórico imprescindível de programação, é bastante um ajuste ao design de hardware, pois você precisa obter as vantagens dos FPGAs. Você também encontrará a experiência útil em outros lugares.


1

Não há realmente nenhuma diferença entre um MCU como um AVR e um programado em um FPGA. O site OpenCores tem código VHDL para um AVR que pode ser usado em um FPGA. Você pode estudá-lo e ver como ele funciona, e até tentar você mesmo em um simulador sem comprar uma placa FPGA adequada.


1
Muitas vezes, acho que os FPGAs precisam rodar em uma velocidade de clock mais lenta para o mesmo MCU, ou serão significativamente mais caros. No caso mais caro, você pode implementar facilmente hardware extra entre o controlador e os pinos externos, geralmente valendo a pena.
Kortuk

Se for necessário um FPGA no sistema, o MCU estará "livre".
Leon Heller

1

Os microcontroladores são circuitos digitais que executam comandos da memória do programa sequencialmente, um comando após o outro. O circuito de hardware digital de um microcontrolador é fixo e as interconexões entre diferentes portas que compõem o circuito digital são permanentes e gravadas no silício. Onde os FPGAs podem ser pensados ​​como um conjunto de portões digitais (na realidade, embora exista luts) que possuem interconexões programáveis. Agora qualquer circuito digital (mesmo um microcontrolador) pode ser feito no FPGA programando as interconexões.

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.