¿Por qué implementar microcontroladores en FPGA?

16

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?

James C
fuente
Muchos de estos usan núcleos IP enlatados, sin embargo, rodar el suyo puede ser una gran experiencia de aprendizaje.
Chris Stratton
1
@ChrisStratton: ¿puede decir más o publicar un enlace sobre núcleos de 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.
James C
1
La mayoría de las personas que lo hacen están usando algo como un Microblaze, Picobloze, Nios II, etc. Estos son básicamente diseños de procesador "en una lata" (biblioteca) que puede licenciar e incluir en su proyecto. El contraste sería desarrollar uno usted mismo en la fuente HDL, tal vez del diagrama de bloques presentado en su típica conferencia CS101. Hay una serie de aspectos prácticos interesantes con los que lidiar al convertir el dibujo de la conferencia en hardware de trabajo.
Chris Stratton
1
Consulte Núcleos abiertos para obtener muchos ejemplos de núcleos de CPU de código abierto.
RBerteig
3
Tengo un ejemplo Tuvimos un microcontrolador obsoleto para un producto viejo. No pudimos encontrar un microcontrolador de reemplazo adecuado con la combinación correcta de periféricos. El uso de un FPGA con un procesador incorporado nos permitió implementar nuestra combinación ideal de periféricos en el FPGA.
kkrambo

Respuestas:

24

Beneficios:

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

Desventajas:

  • Posiblemente se necesita 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.
PkP
fuente
3
Beneficio adicional: diseño más simple, un chip menos.
DoxyLover
44
Desventaja adicional: licenciar más IP
Mikhail
¿Qué tal el consumo de energía como un inconveniente?
Craig McQueen
@CraigMcQueen Es teóricamente 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 demasiado específico del dispositivo para ser una ventaja / desventaja general.
Mástil
Todos muy buenos comentarios. Y bueno, diría que, en general, los FPGA tienen un gran consumo de energía, porque la utilización de la lógica generalmente está muy lejos del 100% dentro de una macrocélula. Esto se ve un poco ofendido 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 un FPGA y un procesador de la misma época. Los procesadores tienen bloques de memoria dedicados, así como FPGA. Si estos satisfacen sus necesidades, bueno, depende de la suerte que tenga de encontrar un FPGA que se adapte exactamente a sus necesidades.
PkP
26

Si su proyecto va a utilizar un FPGA para el trabajo pesado, y tiene la capacidad disponible, ¿por qué debería ir a expensas de un chip adicional si solo 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, obtienes lo mejor de ambos mundos: la potencia del VHDL / Verilog, etc. para los sistemas lógicos y de interfaz, y la simplicidad de un lenguaje de procedimientos para los sistemas de control y gestión centrales.

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

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

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

  • Familia Xilinx 'Zynq-7000
  • FPGAs SoC 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 un mal soporte de 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 de grano fino como los FPGA clásicos, pero se puede usar para implementar controladores de E / S adicionales o aceleradores de hardware integrados. PSoC le permite usar componentes analógicos en su diseño.
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

Resumen de PSoC: PSoC

Paebbels
fuente
10

Si solo necesitara un microcontrolador y no tuviera 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 eventualmente se encuentran con una tarea que realmente no es adecuada para una solución VHDL. A veces, un problema simplemente 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, tienes 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. Licencia un poco de IP, ¡y puedes tener una CPU de propósito general en funcionamiento en poco tiempo!

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

Cort Ammon - Restablece a Monica
fuente
9

Hay varias razones válidas para crear instancias de un microprocesador o microcontrolador en un FPGA. Aquí hay tres:

  1. Solo desea aprender sobre el funcionamiento de un procesador. Los FPGA le brindan infinitas formas de sondear 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 utilizando un software que se ejecuta en un procesador simple como el Xilinx PicoBlaze que en un hardware FSM. Tenga en cuenta que un PicoBlaze puede funcionar tan rápido como 240MHz 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 en (2), necesita una máquina de estado que pueda manejar las interrupciones. Los procesadores son realmente buenos para esto porque ya saben cómo guardar y restaurar el estado de forma segura antes y después de dar servicio a 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 SoC Xilinx Zynq. El tejido FPGA en el Zynq SoC todavía le permite instanciar más núcleos de procesador en lógica programable, pero los ARM Cortex-A9 pueden 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 órdenes de magnitud más esfuerzo que crear el procesador en sí. Siempre debe intercambiar 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 uses. FPGAs y Zynq SoCs son para proyectos que requieren trabajo pesado más allá de las capacidades de los microcontroladores.

Steven Leibson
fuente
Cálida bienvenida, Steven!
PkP
1
Buena respuesta, pero ¿quién necesita una máquina de estado que pueda manejar las interrupciones? Las interrupciones son un mal necesario para los procesadores fetch-decode-execute porque el manejo del estímulo externo requiere el uso exclusivo del procesador para ejecutar el ISR. En un FPGA, el estímulo externo se maneja en un bloque lógico separado mientras la máquina de estado también continúa funcionando; No es necesario guardar ni restaurar el estado. Básicamente, las interrupciones son una solución imperfecta a un problema que HDL no tiene en primer lugar.
Ben Voigt
Por supuesto, tienes razón para las máquinas de estado implementadas en hardware, Ben. Siempre puede cablear 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 comprensible para algunos desarrolladores. Ahí es cuando necesitas una interrupción.
Steven Leibson
2

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 clavijas (aunque se han visto monturas de estilo DIP), esto le permite tener una precisión de ciclo. Es poco probable que una emulación de software puro en un microprocesador básico sea así. Por ejemplo apple2fpga

shuckc
fuente