Recientemente armé un convertidor de voltaje de alta potencia para un cliente, y durante el diseño intentaba evitar el uso de un MCU. Una vez que el cliente quiso agregar atenuación a la placa, me vi obligado a añadir un pequeño componente con una EEPROM de 100,000 ciclos. Para mí, esto no fue un gran problema ya que era sencillo gastar $0.33 por placa para añadir esta función, permitiendo también que el sistema se pudiera reconfigurar más tarde. Esto me hizo pensar en una pregunta interesante: ¿cuándo deberías elegir un FPGA en lugar de un MCU?
Los diseñadores con los que trabajo viven y respiran módulos/SoCs de MCU de Arm, STM, TI y Nordic, gracias principalmente al soporte del fabricante a través de SDKs. ¿Qué pasa con los FPGAs? ¿Puedes esperar el mismo nivel de soporte y deberías elegir usar un FPGA para un componente embebido? La respuesta a este tipo de pregunta no siempre es simple. Esto es lo que deberías considerar al seleccionar un FPGA vs. un MCU y dónde puedes encontrar nuevos componentes para tus placas.
Recuerdo cuando comencé a trabajar seriamente en diseño electrónico y empecé a leer la sopa de letras de acrónimos para diferentes componentes. Al principio era difícil ver las diferencias entre algunos procesadores digitales, pero entender los límites de cada componente para diferentes aplicaciones me ha servido bien. Los límites de lo que puedes programar en estos procesadores también han sido críticos para entender cuándo elegir cada tipo de componente.
Entraré en estos aspectos en un momento, pero aún a veces recibo la ocasional pregunta de un diseñador más joven: ¿qué son los FPGAs y los MCUs? Ambos proporcionan potencia de cálculo, así que deben ser reemplazos perfectos, ¿verdad? Depende de la aplicación que necesites realizar.
Para tener una idea de las diferencias entre los componentes FPGA vs. MCU, ayuda compararlos con los ASICs. La "A" en ASIC te dice que el componente está diseñado para una aplicación específica dentro de un sistema más grande. Ejemplos incluyen:
La lista continúa desde allí. Cualquier ASIC proporcionará funciones muy específicas, a veces programables, para un rango estrecho de tareas. El nivel de integración en un ASIC también varía según el chip. Un microcontrolador también es programable hasta cierto punto, aunque las tareas que se pueden realizar son más amplias que lo que está incorporado en el firmware de un ASIC. Los MCUs están construidos para ser adaptables y realizar cualquier tarea que puedas programar en el dispositivo con el SDK del fabricante.
La diversión y complicación vienen con los FPGAs. Me gusta pensar en los FPGAs como ASICs personalizables. Si el oxímoron te molesta, solo debes saber que podrías usar un FPGA como parte del prototipado al diseñar un ASIC. Esto se debe a que todos los bloques lógicos en un FPGA son configurables (básicamente son celdas SRAM). Estás construyendo el firmware desde cero, y puedes definir cómo se ejecutan las tareas en el dispositivo a nivel de hardware. Esto es algo que no puedes hacer con un MCU o ASIC.
FPGA vs. MCU vs. ASICs: el espectro específico vs. genérico.
Lo curioso de los SoCs es que pueden variar de específicos a genéricos en términos de capacidades computacionales. Los fabricantes de componentes adjuntarán el término “SoC”, “SoM” o “SiP” a un nuevo circuito integrado que realiza una gama de tareas, siempre y cuando esas tareas antes requerían múltiples circuitos integrados separados. Estos componentes están altamente integrados, y pueden caer en cualquier lugar del espectro específico vs. genérico.
En algún lugar a la derecha del FPGA en el gráfico anterior estarían los MPUs. Estos dispositivos ejecutan un sistema operativo, interfazan con múltiples periféricos y son los caballos de batalla de la computación de propósito general. Algunos podrían argumentar que el MCU y el FPGA deberían intercambiar lugares en términos de genericidad (ver por qué abajo), pero ni un FPGA o MCU están diseñados para el mismo tipo de computación general como un MPU.
La tabla a continuación muestra una breve comparación de algunos de los aspectos más importantes de los MCUs y FPGAs. Cada tipo de componente tiene sus ventajas, y depende del diseñador determinar cuál es el mejor para su sistema. Personalmente, prefiero los MCUs porque tengo algo de experiencia trabajando en C y nunca he aprendido HDL. Sin embargo, los FPGAs pueden ser programados para tener algunas de las mismas funciones que los ASICs especializados, siempre y cuando sepas cómo codificarlos.
| | FPGA | MCU | | ---------- | ---------- | ---------- | | Reprogramación| Completamente reprogramable a nivel de hardware | Varía: depende del sistema operativo embebido, dinámico | | Tiempo de programación | Más largo: requiere recodificar y recompilar todo a código máquina | Más corto: asistido por SDKs y bibliotecas del fabricante | | Facilidad de programación | Visto como que tiene una curva de aprendizaje más pronunciada | Fácil: cualquiera familiarizado con lenguajes comunes puede programar | | Consumo de energía | Mayor | Menor | | Paralelización | Puede configurarse durante la programación | Limitado por la arquitectura de hardware | | Punto fijo vs. punto flotante | Configurado para punto fijo, pero el punto flotante puede implementarse durante la programación | Ambos son accesibles | | Idiomas | Lenguaje de descripción de hardware (HDL) | Lenguaje C/Ensamblador, otros si son soportados por RTOS (p. ej. Python) |
Debido a que los FPGA a menudo se consideran difíciles de programar por los desarrolladores más nuevos, un MCU generalmente se ve como el mejor procesador para un dispositivo embebido. Esto ha sido en gran medida ayudado por la comunidad de código abierto, y algunos proyectos de código abierto pueden usarse como la arquitectura básica o prueba de concepto para un nuevo producto. A esto se suma el apoyo de los fabricantes, y tienes a disposición una gran cantidad de herramientas para programar MCUs.
A pesar de la curva de aprendizaje en la programación de FPGAs, son mucho más configurables en términos de la arquitectura del firmware. La paralelización puede programarse en el dispositivo, dependiendo del número de LUTs y ALUs disponibles. Esto hace que los FPGAs sean una excelente opción cuando tu firmware necesita ser diseñado para aplicaciones muy específicas. Ejemplos incluyen la inferencia en IA, procesamiento de imágenes, algoritmos de control de hardware y otras tareas que requieren cálculo repetitivo (o paralelo).
Tu próximo sistema embebido no llegará a ninguna parte sin los componentes adecuados, y puedes encontrar los componentes que necesitas cuando usas un motor de búsqueda de partes electrónicas como Octopart. Las funciones avanzadas de filtración te ayudan a reducir a los componentes que necesitas y pueden ayudarte a elegir rápidamente entre un FPGA vs. MCU para tu próximo sistema. Puedes encontrar FPGAs y MCUs en Octopart.
Mantente al día con nuestros últimos artículos al suscribirte a nuestro boletín.