FPGA's vs Microcontrollers [cerrado]


36

Trabajé en la familia Arduino (específicamente el Sanguino), construí algunos dispositivos simples y un fotótropo simple. Por lo tanto, estoy bastante cómodo con los microcontroladores, específicamente los de Atmel. Tengo curiosidad por saber cómo difieren los FPGA de los microcontroladores estándar. Soy de una formación técnica (programación C / C ++) y, por lo tanto, me encantarían las respuestas técnicas. Solo tenga en cuenta que soy un novato (en relación con mi experiencia s / w) en el dominio de la electrónica. :)

Realicé esta consulta y fue buena, pero estoy buscando más detalles más profundos.

¡Gracias! Sushrut


Anexo: ¿Hay algún buen ejemplo en el mundo real que use arquitecturas híbridas, es decir, combinar fpga con microcontroladores?
Sushrut J Mair

Sushrut J Mair - Generalmente cuando tienes un FPGA y necesitas un Micro, el micro se implementa en el FPGA.
Connor Wolf

Sí, nombre falso, de acuerdo. Sin embargo, buscaba encontrar casos del mundo real en los que se usaran FPGA y MCU para diseñar un sistema. La idea es que la parte FPGA del diseño se utiliza para implementar h / w 'evolutivo' que responde y se transforma según las entradas cambiantes del sistema mientras el MCU realiza el procesamiento lógico central.
Sushrut J Mair

Respuestas:


48

El diseño para un FPGA requiere un lenguaje de descripción de hardware (HDL). Los HDL no son absolutamente nada como C. Mientras que un programa en C es una serie secuencial de instrucciones y debe contorsionarse para lograr la ejecución paralela, un HDL describe un circuito concurrente y debe contorsionarse para lograr la ejecución secuencial. Es un mundo muy diferente y si intentas construir un circuito en un FPGA mientras piensas como un desarrollador de software, te dolerá.

Una MCU es por tiempo limitado. Para lograr más trabajo, necesita más ciclos de procesador. Los relojes tienen límites muy reales para sus frecuencias, por lo que es fácil golpear una pared computacional. Sin embargo, un FPGA tiene espacio limitado. Para lograr más trabajo, simplemente agrega más circuitos. Si su FPGA no es lo suficientemente grande, puede comprar uno más grande. Es muy difícil construir un circuito que no pueda caber en el FPGA más grande, e incluso si lo hace, hay notas de la aplicación que describen cómo encadenar los FPGA juntos.

Los FPGA se centran mucho más en la ejecución paralela. En ocasiones, debe preocuparse por el tiempo que tarda el ISR de su MCU en atender la interrupción y si podrá alcanzar sus límites en tiempo real. Sin embargo, en FPGA hay muchas máquinas de estado finito (FSM) ejecutándose todo el tiempo. Son como "femto-controladores", como pequeñas nubes de lógica de control. Todos se ejecutan simultáneamente, por lo que no hay que preocuparse por perder una interrupción. Es posible que tenga un FSM para conectarse a un ADC, otro FSM para conectarse a la dirección / bus de datos de un microcontrolador, otro FSM para transmitir datos a un códec estéreo, otro FSM para almacenar el flujo de datos del ADC al códec ... Usted necesita usar un simulador para asegurarse de que todos los FSM canten en armonía.

Los FPGA son el sueño húmedo de un diseñador de diseño de PCB. Son extremadamente configurables. Puede tener muchas interfaces lógicas diferentes (LVTTL, LVCMOS, LVDS, etc.), de voltajes variables e incluso potencias de accionamiento (por lo que no necesita resistencias de terminación en serie). Los pasadores son intercambiables; ¿Alguna vez has visto un bus de direcciones MCU donde los pines estaban dispersos alrededor del chip? Su diseñador de PCB probablemente tenga que soltar un montón de vías solo para unir todas las señales correctamente. Con un FPGA, el diseñador de PCB puede ejecutar las señales en el chip en casi cualquier orden que sea conveniente, y luego el diseño puede anotarse en la cadena de herramientas FPGA.

Los FPGA también tienen muchos juguetes bonitos y elegantes. Uno de mis favoritos es el Digital Clock Manager en chips Xilinx. Se alimenta una señal de reloj, y puede derivar cuatro más usando una amplia variedad de multiplicadores y divisores de frecuencia, todos con un ciclo de trabajo prístino del 50% y 100% en fase ... e incluso puede dar cuenta de la inclinación del reloj que surge de retrasos de propagación externos al chip!

EDITAR (respuesta al apéndice):

Puede colocar un "núcleo blando" en un FPGA. Literalmente, está conectando un circuito de microcontrolador, o mejor dicho, probablemente está colocando el circuito de otra persona en su diseño, como PicoBlaze de Xilinx o MicroBlaze o Nios de Altera. Pero al igual que los compiladores C-> VHDL, estos núcleos tienden a ser un poco hinchados y lentos en comparación con el uso de un FSM y una ruta de datos, o un microcontrolador real. Las herramientas de desarrollo también pueden agregar una complejidad significativa al proceso de diseño, lo que puede ser algo malo cuando los FPGA ya son chips extremadamente complejos.

También hay algunos FPGA que tienen "núcleos duros" incrustados en ellos, como la serie Virtex4 de Xilinx que tiene un IBM PowerPC real y dedicado con un tejido FPGA a su alrededor.

EDIT2 (respuesta al comentario):

Creo que veo ahora ... estás preguntando acerca de cómo conectar un MCU discreto a un FPGA; es decir, dos chips separados. Hay buenas razones para hacer esto; Los FPGA que tienen núcleos duros y los que son lo suficientemente grandes como para soportar núcleos blandos decentes suelen ser monstruos con muchos cientos de pines que terminan requiriendo un paquete BGA, lo que aumenta fácilmente la dificultad de diseñar un PCB en un factor de 10.

Sin embargo, C es mucho más fácil, por lo que los MCU definitivamente tienen su lugar trabajando en conjunto con un FPGA. Como es más fácil escribir C, puede escribir los "cerebros" o el algoritmo central en la MCU, mientras que el FPGA puede implementar sub-algoritmos que pueden necesitar aceleración. Intente poner cosas que cambian en el código C, porque es más fácil de cambiar, y deje que el FPGA sea un tipo de letra más dedicado que no cambiará a menudo.

Las herramientas de diseño de MCU también son más fáciles de usar. Las herramientas de diseño tardan varios minutos en construir el archivo de bits FPGA, incluso para diseños algo simples, pero los programas complejos de MCU generalmente demoran unos segundos. Hay mucho, mucho menos que salir mal con el MCU, por lo que también son más fáciles de depurar ... No puedo entender cuán complejos pueden ser los FPGA. Realmente necesita obtener la hoja de datos de la que tiene, y debe intentar leer cada página. Lo sé, son unos cientos de páginas ... hazlo de todos modos.

La mejor manera de conectarlos es usar una MCU con una dirección externa y un bus de datos. Luego, simplemente puede mapear la memoria de los circuitos FPGA en la MCU y agregar sus propios "registros" que tienen su propia dirección. Ahora el FPGA puede agregar periféricos personalizados, como un temporizador de 32 bits que puede enganchar los 4 bytes a la vez cuando se lee el primer byte para evitar desbordamientos entre las lecturas de 8 bits. También puede usarlo como lógica de pegamento para asignar más periféricos de memoria de otros chips, como un ADC separado.

Finalmente, algunas MCU están diseñadas para usarse con un "maestro externo" como un FPGA. Cypress fabrica algunas MCU USB que tienen un 8051 en su interior, pero la intención es que los datos USB sean producidos / consumidos por, por ejemplo, un FPGA.


Esta es una buena información, gracias. He oído hablar de compiladores de C / C ++ a HDL. ¿Los has probado en absoluto?
Sushrut J Mair

Ellos están ... bien. Para un solo bloque lógico, no está tan mal. Pero no escribiría un diseño completo a través de ese tipo de compilador. No son demasiado eficientes porque los idiomas son increíblemente diferentes ... tienes que usar convenciones especiales, no solo toman cualquier código ANSI C antiguo.
ajs410

Gracias, esto es útil. He pedido el kit de desarrollo XP2 Brevia de Lattice Semiconductor. Tengo la intención de probar algunos compiladores HDL a C una vez que me sienta cómodo con los conceptos básicos de diseño de FPGA.
Sushrut J Mair

Acabo de ver la respuesta a mi anexo en la consulta original. Gracias, ¿está diciendo que, prácticamente hablando (al menos con la tecnología actual), una arquitectura híbrida de MCU + FPGA estándar tiene muy poco valor agregado para ser realmente utilizable en situaciones del mundo real?
Sushrut J Mair

Increíble. Gracias ajs410. ¡Espero pasar unas semanas arrancando en fpga's antes de entrar en las emocionantes posibilidades del arco híbrido!
Sushrut J Mair

10

"¿Ejemplos en el mundo real ... combinando FPGAs con microcontroladores?"

En principio, un FPGA suficientemente grande solo puede hacer cualquier cosa que un FPGA más un microcontrolador pueda hacer, tal vez mediante la implementación de una CPU suave dentro del FPGA. En la práctica, un nivel de rendimiento dado a menudo tiene costos de piezas más bajos y requiere menor potencia cuando se implementa con un FPGA más un microcontrolador separado que con FPGA solo (o MCU solo). Estos son algunos de los dispositivos más famosos con FPGA y microcontroladores a bordo:

  • La cámara de Elphel ; Elphel Project Wiki tiene un FPGA Xilinx (R) Spartan 3e 1200K y un procesador ETRAX FS con GNU / Linux.
  • El TS-7500 tiene un FPGA Lattice 5000 LUT y una CPU Cavium ARM9 de 250MHz que puede ejecutar Linux.
  • La placa de globos tiene un FPGA Xilinx Spartan y una CPU ARM
  • varios Teeny weeny Linux SBC incluyen tanto un FPGA como una CPU
  • El wiki de Armadeus Project documenta algunas placas con una FPGA Xilinx Spartan-3 y una CPU ARM9 de 400 MHz.
  • los Blackfin Handy Board incluye un FPGA Xilinx Spartan 3e y un procesador Blackfin® ADSP-BF537 de 600 MHz Analog Devices. (No tiene una MMU, por lo que no puede ejecutar Linux completo, pero puede ejecutar uClinux).
  • El "Minimig" (mini Amiga) incluye un FPGA Xilinx Spartan-3, una CPU M68000 y una pequeña MCU PIC como controlador de disco activo.

4

A menudo, los FPGA se usan específicamente para realizar tareas que un microcontrolador no puede realizar de manera eficiente, como operaciones altamente paralelas o de baja latencia, operar en dominios de reloj múltiples o hacer lógica personalizada a velocidades de hardware. Como tal, harán el trabajo pesado, y rara vez se necesita una MCU para ser central en el diseño; se pueden mover a puestos de administración, como cargar el flujo de bits de configuración. Un ejemplo de esto es el PIC o ARM en el Minimig , que implementa la interfaz de almacenamiento.

Sin embargo, algunos productos difuminan las líneas. Algunos ejemplos:

  1. Los FPGA más grandes tienden a tener CPU duras incorporadas (los proyectos más grandes a menudo los necesitan de todos modos), al igual que tienen RAM y bloques multiplicadores
  2. Algunos microcontroladores apuntan a operaciones paralelas (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Algunos chips están diseñados como híbridos (Cypress PSoC, Atmel FPSLIC)

Procedente de un entorno de programación imperativo, es un gran ajuste para diseñar en hardware, ya que necesita obtener las ventajas de los FPGA. Sin embargo, también encontrarás la experiencia útil en otros lugares.


1

Realmente no hay ninguna diferencia entre un MCU como un AVR, y uno programado en un FPGA. El sitio OpenCores tiene un código VHDL para un AVR que puede usarse en un FPGA. Puede estudiarlo y ver cómo funciona, e incluso probarlo usted mismo en un simulador sin comprar una placa FPGA adecuada.


1
A menudo encuentro que los FPGA deben funcionar a una velocidad de reloj más lenta para el mismo MCU, o serán significativamente más caros. En el caso más costoso, puede implementar fácilmente hardware adicional entre el controlador y los pines externos, a menudo vale la pena.
Kortuk

Si de todos modos se necesita un FPGA en el sistema, la MCU es "libre".
Leon Heller

1

Los microcontroladores son circuitos digitales que ejecutan comandos desde la memoria de su programa secuencialmente uno tras otro. El circuito de hardware digital de un microcontrolador es fijo y las interconexiones entre las diferentes puertas que comprenden el circuito digital son permanentes y están grabadas en el silicio. Donde los FPGA pueden considerarse como un conjunto de puertas digitales (en realidad, aunque hay luts presentes) que tienen interconexiones programables. Ahora cualquier circuito digital (incluso un microcontrolador) se puede hacer en el fpga programando las interconexiones.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.