¿Por qué implementar un microcontrolador en FPGA?

Actualmente estoy "investigando" los FPGA, qué pueden hacer, cómo lo hacen, etc.

En más de un lugar ( por ejemplo aquí ) he visto proyectos que implementan un microcontrolador simple con FPGA.

Entonces mi pregunta:
me gustaría saber, ¿cuál es el propósito de hacer tales implementaciones? ¿Por qué usar un microcontrolador implementado en FPGA en lugar de tener un micro a bordo? ¿Qué son los beneficios? Y quizás también ¿cuáles son las desventajas?

Muchos de estos usan núcleos de IP enlatados, sin embargo, crear uno propio puede ser una gran experiencia de aprendizaje.
@ChrisStratton: ¿puede contarnos más o publicar un enlace sobre núcleos IP enlatados? Sí, estoy seguro de que puede ser una gran experiencia de aprendizaje. Pero esa es una de las razones por las que hago esta pregunta. Me pregunto si es algo más que una experiencia de aprendizaje.
La mayoría de las personas que lo hacen usan algo como Microblaze, Picobloze, Nios II, etc. Estos son básicamente diseños de procesadores "en una lata" (biblioteca) que puede licenciar e incluir en su proyecto. El contraste sería desarrollar uno usted mismo en fuente HDL, tal vez a partir del diagrama de bloques presentado en su clase típica CS101. Hay una serie de aspectos prácticos interesantes con los que lidiar al convertir el dibujo de la conferencia en un hardware funcional.
Consulte Núcleos abiertos para ver muchos ejemplos de núcleos de CPU de código abierto.
tengo un ejemplo Tuvimos un microcontrolador obsoleto para un producto antiguo. No pudimos encontrar un microcontrolador de reemplazo adecuado con la combinación correcta de periféricos. El uso de una FPGA con un procesador integrado nos permitió implementar nuestra combinación ideal de periféricos en la FPGA.

Respuestas (6)

Beneficios:

  • interfaz ultrarrápida entre el microcontrolador y cualquier interfaz personalizada o lógica de E/S en el chip.
  • Procesador personalizable e interfaces de depuración.
  • también, a menudo, la lógica de control es más fácil que escribir el código de control con, por ejemplo, VHDL

Desventajas:

  • Posiblemente se necesite un FPGA más costoso para adaptarse tanto al microcontrolador como a la lógica personalizada, en comparación con solo tener la lógica personalizada en el FPGA
  • Posiblemente más difícil de implementar, especialmente con memorias y si el núcleo es complejo, que un microcontrolador listo para usar en un chip separado.
Beneficio adicional: diseño más simple, un chip menos.
Desventaja adicional: otorgar licencias de más IP
¿Qué tal el consumo de energía como una desventaja?
@CraigMcQueen En teoría, es posible generar un microcontrolador en un FPGA que aún no se ha producido como hardware independiente. En ese caso, no hay consumo de energía para comparar. En cualquier caso, es un dispositivo demasiado específico para ser una ventaja/inconveniente general.
Todos muy buenos comentarios. Y bueno, diría que generalmente los FPGA tienen un gran consumo de energía, porque la utilización de la lógica suele estar muy lejos del 100% dentro de una macrocelda. Esto se compensa un poco por el hecho de que los FPGA pueden usar técnicas sofisticadas de minimización de energía. Los procesos de fabricación (tecnologías) pueden ser bastante similares entre una FPGA y un procesador de la misma época. Los procesadores tienen bloques de memoria dedicados, así como FPGA. Si estos se ajustan a sus necesidades, bueno, depende de la suerte que tenga de encontrar un FPGA que se adapte exactamente a sus necesidades.

Si su proyecto va a utilizar un FPGA para el trabajo duro y tiene capacidad adicional, ¿por qué gastaría un chip adicional cuando puede implementarlo en el FPGA?

Para muchos entornos de control de procedimientos, puede ser considerablemente más fácil implementar la configuración requerida en un lenguaje como C que intentar hacerlo en VHDL o Verilog. Al agregar el microcontrolador al FPGA, obtiene lo mejor de ambos mundos: el poder de VHDL / Verilog, etc. para los sistemas lógicos y de interfaz, y la simplicidad de un lenguaje de procedimientos para los sistemas centrales de control y administración.

La primera oración de esta respuesta es la razón principal. Esto se hace principalmente cuando ya tiene un FPGA con algo de capacidad libre en el tablero de todos modos. (Al menos) un chip menos y menos complejidad de placa. No colocaría un FPGA en una placa solo para implementar un microcontrolador con él, pero cuando ya tiene un FPGA, es una buena manera de reducir el costo de las piezas y la complejidad de la placa. Al menos por eso lo hacemos.

En extensión a las respuestas de Majenko y PkP:

Esta tendencia de incorporar una CPU en el diseño de FPGA ha dado lugar a varios sistemas heterogéneos como:

  • Familia Zynq-7000 de Xilinx
  • SoC FPGA Arria/Cyclon/Stratix de Altera
  • FPGA SmartFusion de MicroSemi

También hay un chip Intel Atom + Altera FPGA en el mercado: http://www.altera.com/devices/processor/intel/e6xx/proc-e6x5c.html

La mayoría de los microcontroladores gratuitos para FPGA sufren de una mala compatibilidad con la cadena de herramientas. Las CPU ARM integradas vienen con soporte de rastreo/depuración, compiladores (cadena de herramientas gcc) y soporte completo de Linux. Aquí hay una encuesta presentada en FPL 2014: http://dx.doi.org/10.1109/FPL.2014.6927482

Edición 1:
también existe la clase de dispositivos PSoC (Sistema programable en chip) de Cypress. Estos dispositivos incluyen un microcontrolador (M8C, 8051, ARM Cortex M0 o Cortex M3) y controladores o dispositivos de E/S integrados SoC clásicos (I²C, SPI, Timer, CAN, DAC, ADC, OpAmp, ...) y un programable parte. Esta parte no es tan programable como los FPGA clásicos, pero se puede usar para implementar controladores de E/S adicionales o aceleradores de hardware integrados. PSoC le permite utilizar componentes analógicos en su diseño.
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

Descripción general de PSoC: (fuente: electronicdesign.com )PSoC

Si solo necesita un microcontrolador y no tiene un FPGA, sería inusual usar un FPGA con firmware de microcontrolador. Sin embargo, no todos los proyectos crecen en esa dirección. Muchas tareas tienen una clara necesidad de un FPGA, pero finalmente se encuentran con una tarea que realmente no es adecuada para una solución VHDL. A veces, un problema se maneja mejor con una CPU de propósito general. O, a veces, es al revés: algunas tareas simplemente no son adecuadas para una CPU de uso general: necesitan paralelismo.

En ese momento, usted tiene una opción. Puede agregar un chip adicional a su dispositivo o puede darse cuenta de que tiene un montón de puertas de repuesto en el FPGA que no está utilizando. Obtenga una licencia de IP pequeña y podrá tener una CPU de uso general que funcione en muy poco tiempo.

Otro detalle interesante es que puedes personalizar algunos firmwares de microcontroladores. Sé de proyectos que incrustaron una Power PC, pero eliminaron todas las puertas necesarias para el soporte de punto flotante y una buena parte de la predicción de bifurcación. Esto lo hizo lo suficientemente pequeño como para caber lado a lado con el firmware basado en VHDL.

Existen varias razones válidas para instanciar un microprocesador o microcontrolador en una FPGA. Aquí hay tres:

  1. Solo quiere aprender sobre el funcionamiento de un procesador. Los FPGA le brindan infinitas formas de probar lo que sucede dentro del procesador a medida que ejecuta el código. Esto es solo para aprender.

  2. Está implementando un gran sistema que requiere las velocidades de nivel de hardware de un FPGA (más rápido que el software que se ejecuta en un microprocesador), pero su diseño requiere una máquina de estado compleja, que se implementa más fácilmente usando software que se ejecuta en un procesador simple como Xilinx PicoBlaze. que en una FSM de hardware. Tenga en cuenta que un PicoBlaze puede funcionar a una velocidad de hasta 240 MHz en las últimas tecnologías de proceso FPGA y que el procesador PicoBlaze ejecuta una instrucción cada dos ciclos de reloj, por lo que obtiene una máquina de estado rápida y consistente que se programa fácilmente en el software.

  3. Ampliando (2), necesita una máquina de estado que pueda manejar interrupciones. Los procesadores son realmente buenos para esto porque ya saben cómo guardar y restaurar el estado de manera segura antes y después de atender la interrupción.

Aquí hay una advertencia: si desea un procesador rápido con un conjunto de instrucciones estándar y un gran ecosistema de desarrollo, entonces desea un procesador rápido y de núcleo duro como los dos ARM Cortex-A9 en un Xilinx Zynq SoC. El tejido FPGA en el Zynq SoC aún le permite instanciar más núcleos de procesador en lógica programable, pero ARM Cortex-A9s puede ejecutar sistemas operativos estándar como Linux e IDE estándar como Android.

Entre ARM Cortex-A9 y PicoBlaze, hay muchos procesadores de software que puede implementar con lógica programable disponible de muchas fuentes. A algunas personas les gusta rodar sus propios procesadores y esa es una gran actividad educativa. Sin embargo, los microprocesadores necesitan herramientas de desarrollo de software y crear/depurar esas herramientas requiere mucho más esfuerzo que crear el propio procesador. Siempre debe compensar el posible beneficio de un microprocesador personalizado con el tiempo y el esfuerzo necesarios para crear/depurar el núcleo del procesador y las herramientas.

Divulgación completa: trabajo para Xilinx, pero estoy bastante seguro de que no dije que los FPGA son siempre la solución. Si un microcontrolador de 50 centavos puede hacer el trabajo, es mejor que lo use. Los FPGA y los SoC Zynq son para proyectos que requieren un trabajo pesado más allá de las capacidades de los microcontroladores.

¡Cálida bienvenida, Steven!
Buena respuesta, pero ¿quién necesita una máquina de estado que pueda manejar interrupciones? Las interrupciones son un mal necesario para los procesadores de obtención, decodificación y ejecución porque el manejo del estímulo externo requiere el uso exclusivo del procesador para ejecutar el ISR. En una FPGA, el estímulo externo se maneja en un bloque lógico separado mientras la máquina de estados también continúa funcionando; no hay necesidad de guardar y restaurar el estado. Básicamente, las interrupciones son una solución imperfecta a un problema que HDL no tiene en primer lugar.
Por supuesto, tienes razón para las máquinas de estado implementadas en hardware, Ben. Siempre puede conectar el pin de "interrupción" como otra entrada de máquina de estado. Sin embargo, muchas máquinas de estado complejas son simplemente más comprensibles cuando se implementan con un procesador que ejecuta C, o al menos más comprensibles para algunos desarrolladores. Ahí es cuando necesitas una interrupción.

A veces, puede usar un FPGA porque tiene un software que se ejecuta en un procesador físico obsoleto y no disponible que desea resucitar. Si bien no es compatible con pines (aunque se han visto monturas de estilo DIP), esto le permite ser preciso en el ciclo. Es poco probable que lo sea una emulación de software puro en un microprocesador básico. Por ejemplo apple2fpga