Por que implementar o microcontrolador no FPGA?

16

Atualmente, estou "investigando" FPGAs, o que eles podem fazer, como fazem, etc.

Em mais de um local ( por exemplo, aqui ), vi projetos que implementam um microcontrolador simples com FPGA.

Então, minha pergunta:
eu gostaria de saber qual é o objetivo de fazer essas implementações? Por que usar um microcontrolador implementado no FPGA em vez de ter um micro integrado? O que são benefícios? E talvez também o que são desvantagens?

James C
fonte
Muitos deles usam núcleos IP enlatados, no entanto, rolar o seu próprio pode ser uma ótima experiência de aprendizado.
Chris Stratton
11
@ ChrisStratton - Você pode saber mais ou publicar um link sobre núcleos IP enlatados? Sim, tenho certeza de que pode ser uma ótima experiência de aprendizado. Mas essa é uma das razões pelas quais estou fazendo essa pergunta. Gostaria de saber se é algo mais do que apenas uma experiência de aprendizado.
James C
11
A maioria das pessoas que faz isso usa algo como Microblaze, Picobloze, Nios II, etc. - esses são basicamente designs de processador "em lata" (biblioteca) que você pode licenciar e colocar em seu projeto. O contraste seria desenvolver você mesmo na fonte HDL, talvez a partir do diagrama de blocos apresentado na sua aula típica do CS101. Existem vários aspectos práticos interessantes a serem enfrentados ao transformar o desenho da palestra em hardware de trabalho.
Chris Stratton
11
Consulte Núcleos abertos para muitos exemplos de núcleos de CPU de código aberto.
precisa saber é o seguinte
3
Eu tenho um exemplo Tivemos um microcontrolador obsoleto para um produto antigo. Não foi possível encontrar um microcontrolador de substituição adequado com a combinação certa de periféricos. O uso de um FPGA com um processador incorporado nos permitiu implementar nossa combinação ideal de periféricos no FPGA.
Krambo

Respostas:

24

Benefícios:

  • interface incrivelmente rápida entre o microcontrolador e qualquer interface personalizada ou lógica de E / S no chip.
  • interfaces de processador e depuração personalizáveis
  • também, lógica de controle geralmente mais fácil do que escrever o código de controle com, digamos, VHDL

Desvantagens:

  • Um FPGA possivelmente mais caro é necessário para ajustar o microcontrolador e a lógica personalizada, em comparação com apenas ter a lógica personalizada no FPGA
  • Possivelmente mais difícil de implementar, especialmente com memórias e se o núcleo for complexo, do que um microcontrolador pronto em um chip separado.
PkP
fonte
3
Benefício adicional: design mais simples, menos um chip.
DoxyLover
4
Desvantagem adicional: licenciando mais IP
Mikhail
E o consumo de energia como uma desvantagem?
Craig McQueen
@CraigMcQueen É teoricamente possível gerar um microcontrolador em um FPGA que ainda não foi produzido como hardware independente. Nesse caso, não há consumo de energia para comparar. De qualquer forma, é muito específico do dispositivo para ser uma vantagem / desvantagem geral.
mastros
Todos muito bons comentários. E bem, eu diria que geralmente os FPGAs têm um grande consumo de energia, porque a utilização da lógica geralmente está muito longe de 100% dentro de uma macrocélula. Isso é compensado um pouco pelo fato de que os FPGAs podem usar técnicas sofisticadas de minimização de energia. Os processos de fabricação (tecnologias) podem ser bastante semelhantes entre um FPGA e um processador da mesma época. Os processadores possuem blocos de memória dedicados, além de FPGAs. Se isso corresponde às suas necessidades, depende de sua sorte em encontrar um FPGA que corresponda exatamente às suas necessidades.
PKP
26

Se o seu projeto usará um FPGA para o trabalho pesado, e ele tem capacidade disponível, por que você gastaria um chip extra para implementá-lo no FPGA?

Para muitos ambientes de controle processual, pode ser consideravelmente mais fácil implementar a configuração necessária em uma linguagem como C do que tentar fazê-lo em VHDL ou Verilog. Ao adicionar o microcontrolador ao FPGA, você obtém o melhor dos dois mundos - o poder do VHDL / Verilog etc. para os sistemas lógicos e de interface e a simplicidade de uma linguagem processual para os principais sistemas de controle e gerenciamento.

Majenko
fonte
10
A primeira frase desta resposta é a principal razão. Isso é feito principalmente quando você já possui um FPGA com alguma capacidade disponível na placa de qualquer maneira. (Pelo menos) menos um chip e menos complexidade da placa. Você não colocaria um FPGA em uma placa apenas para implementar um microcontrolador, mas quando você já possui um FPGA, é uma boa maneira de reduzir o custo de peças e a complexidade da placa. Pelo menos é por isso que fazemos.
reirab
13

Em extensão às respostas de Majenko e PkP:

Essa tendência de incorporar uma CPU ao design do FPGA levou a vários sistemas heterogêneos, como:

  • Família Zilq-7000 da Xilinx
  • FPGAs Arria / Cyclon / Stratix SoC da Altera
  • FPGAs SmartFusion da MicroSemi

Há também um chip Intel Atom + Altera FPGA no mercado: http://www.altera.com/devices/processor/intel/e6xx/proc-e6x5c.html

A maioria dos microcontroladores gratuitos para FPGA sofre com um suporte inadequado à cadeia de ferramentas. As CPUs ARM incorporadas vêm com suporte a rastreamento / depuração, compiladores (cadeia de ferramentas gcc) e suporte completo ao Linux. Aqui está uma pesquisa apresentada na FPL 2014: http://dx.doi.org/10.1109/FPL.2014.6927482

Edit 1:
Também existe a classe de dispositivos PSoC (Sistema Programável em Chip) da Cypress. Esses dispositivos incluem um microcontrolador (M8C, 8051, ARM Cortex M0 ou Cortex M3) e controladores ou dispositivos de E / S integrados clássicos do SoC (I²C, SPI, Timer, CAN, DAC, ADC, OpAmp, ...) e um programável parte. Esta parte não é tão programável quanto os FPGAs clássicos, mas pode ser usada para implementar controladores de E / S adicionais ou aceleradores de hardware embutidos. O PSoC permite que você use componentes analógicos em seu design.
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

Visão geral do PSoC: PSoC

Paebbels
fonte
10

Se você apenas precisasse de um microcontrolador e não tivesse um FPGA, seria incomum usar um FPGA com firmware de microcontrolador. No entanto, nem todos os projetos crescem nessa direção. Muitas tarefas têm clara necessidade de um FPGA, mas acabam encontrando uma tarefa que realmente não é adequada para uma solução VHDL. Às vezes, um problema é simplesmente melhor tratado por uma CPU de uso geral. Ou, às vezes, é o contrário: algumas tarefas simplesmente não são adequadas para uma CPU de uso geral - elas precisam de paralelismo.

Naquele momento, você tem uma escolha. Você pode adicionar um chip adicional ao seu dispositivo ou perceber que possui vários portões de reposição no FPGA que não está utilizando. Licencie um pouco de IP e você poderá ter uma CPU funcional de uso geral em pouco tempo!

Outro detalhe interessante é que você pode personalizar alguns firmwares de microcontroladores. Conheço projetos que incorporaram um Power PC, mas eliminaram todos os portões necessários para o suporte a ponto flutuante e uma boa parte da previsão de ramificação. Isso o tornou pequeno o suficiente para caber lado a lado com o firmware baseado em VHDL.

Cort Ammon - Restabelecer Monica
fonte
9

Existem vários motivos válidos para instanciar um microprocessador ou microcontrolador em um FPGA. Aqui estão três:

  1. Você só quer aprender sobre a operação de um processador. Os FPGAs oferecem infinitas maneiras de analisar o que está acontecendo dentro do processador enquanto ele executa o código. Isto é apenas para aprender.

  2. Você está implementando um grande sistema que requer as velocidades no nível de hardware de um FPGA (mais rápido que o software em execução em um microprocessador), mas seu design requer uma máquina de estado complexa, que é mais facilmente implementada usando software executado em um processador simples como o Xilinx PicoBlaze do que em um FSM de hardware. Observe que um PicoBlaze pode rodar tão rápido quanto 240 MHz nas mais recentes tecnologias de processo FPGA e que o processador PicoBlaze executa uma instrução a cada dois ciclos de clock, para que você obtenha uma máquina de estado rápida e consistente que seja facilmente programada em software.

  3. Expandindo em (2), você precisa de uma máquina de estado que possa lidar com interrupções. Os processadores são realmente bons para isso, porque eles já sabem como salvar e restaurar com segurança o estado antes e depois da manutenção da interrupção.

Aqui está uma ressalva: se você deseja um processador rápido com um conjunto de instruções padrão e um grande ecossistema de desenvolvimento, deseja um processador rápido e de núcleo duro, como os dois ARM Cortex-A9s em um Xilinx Zynq SoC. A malha FPGA no Zynq SoC ainda permite instanciar mais núcleos de processador na lógica programável, mas os ARM Cortex-A9s podem executar sistemas operacionais padrão, como Linux, e IDEs padrão, como Android.

Entre o ARM Cortex-A9 e o PicoBlaze, existem muitos processadores soft que você pode implementar com lógica programável disponível em várias fontes. Algumas pessoas gostam de rodar seus próprios processadores e essa é uma ótima atividade educacional. No entanto, os microprocessadores precisam de ferramentas de desenvolvimento de software e a criação / depuração dessas ferramentas exige ordens de magnitude mais esforço do que a criação do próprio processador. Você sempre deve trocar o possível benefício de um microprocessador personalizado contra o tempo e o esforço necessários para criar / depurar o núcleo do processador e as ferramentas.

Divulgação completa: trabalho para o Xilinx, mas tenho certeza de que não afirmei que os FPGAs são sempre a solução. Se um microcontrolador de 50 centavos puder fazer o trabalho, é melhor usá-lo. FPGAs e Zynq SoCs são para projetos que exigem trabalho pesado além das habilidades dos microcontroladores.

Steven Leibson
fonte
Calorosamente, Steven!
PKP
11
Boa resposta, mas quem precisa de uma máquina de estado capaz de lidar com interrupções? As interrupções são um mal necessário para os processadores de buscar, decodificar e executar, porque o manuseio do estímulo externo requer uso exclusivo do processador para executar o ISR. Em um FPGA, o estímulo externo é tratado em um bloco lógico separado enquanto a máquina de estado também continua em execução; não há necessidade de salvar e restaurar o estado. Basicamente, as interrupções são uma solução imperfeita para um problema que o HDL não tem em primeiro lugar.
Ben Voigt
Obviamente, você está correto em máquinas de estado implementadas por hardware, Ben. Você sempre pode conectar o pino de "interrupção" como outra entrada da máquina de estado. No entanto, muitas máquinas de estado complexas são simplesmente mais compreensíveis quando implementadas com um processador executando C, ou pelo menos mais compreensíveis para alguns desenvolvedores. É quando você precisa de uma interrupção.
Steven Leibson
2

Às vezes, você pode usar um FPGA porque possui um software que é executado em um processador físico obsoleto e indisponível há muito tempo que deseja ressuscitar. Embora não seja compatível com pinos (embora as montagens no estilo DIP tenham sido vistas), isso permite que você tenha uma precisão de ciclo. É improvável que uma emulação pura de software em um microprocessador de commodity seja. Por exemplo apple2fpga

shuckc
fonte