Tengo que elegir entre un curso sobre microcontroladores avanzados y un curso sobre FPGA avanzados.
He tenido cursos introductorios en ambas materias, y lo que me preocupa ahora es que ya soy bastante bueno en el desarrollo de firmware para microcontroladores, y no veo qué productos / proyectos puedo hacer con un FPGA y no puedo con un microcontrolador / DSP.
¿Puedes pensar en algunas aplicaciones / productos / proyectos donde un microcontrolador o DSP no sería suficiente, y por qué?
Cámaras? Cámaras de alta velocidad? Procesamiento de imagen de alta velocidad?
microcontroller
fpga
dsp
Jolle
fuente
fuente
Respuestas:
Ver también FPGA's vs Microcontrollers
El procesamiento de imágenes o videos de alta velocidad es un buen ejemplo. O el procesamiento de 'imágenes' que no son imágenes ópticas directas, como el radar o los sistemas basados en láser.
Lo clave a considerar es el rendimiento y los requisitos de latencia . Un microcontrolador puede dar servicio a una interrupción (muy aproximadamente) una vez por microsegundo. Solo puede atender una interrupción a la vez. Si necesita procesarlo de manera elaborada, eso limita la cantidad que puede atender en un momento determinado.
Con un FPGA, generalmente puede responder a un evento de entrada inmediatamente (bueno, en el siguiente ciclo de reloj). Puede tener muchas unidades de procesamiento en paralelo. Si sabe que su filtro tarda 20 ciclos, eso es completamente independiente de cualquier otra cosa que esté sucediendo.
El cómputo intensivo de enteros altamente paralelos funciona mejor en FPGA, especialmente si hay dependencias de datos complejas. Sin embargo, no tienen mucha memoria integrada; puede agregar un poco de DRAM a un lado pero a costa de la latencia.
También es posible que desee uno para los periféricos, o para hablar algún bus digital de alta velocidad. No puede conectar o desconectar HDMI de un microcontrolador. No puede construir una tarjeta PCI alrededor de una.
fuente
Bueno, hago procesamiento en tiempo real de video HD en FPGA. Algo de lo que hago se puede hacer en un chip GPU, pero no en un microcontrolador o DSP. El FPGA es más flexible.
Muchos sistemas combinan FPGA y MCU / DSP para obtener lo mejor de ambos mundos. Un proyecto en el que pueda estar trabajando pronto implica el reconocimiento de objetos en una transmisión de video. Los pasos preliminares (eliminación de ruido, normalización, detección de bordes, etc.) se realizan mejor en el FPGA, pero la lógica de nivel superior que decide qué características de bajo nivel son partes de los objetos que se reconocen se realiza mejor en una CPU (ya sea dentro o fuera de la FPGA).
En última instancia, querrá estar familiarizado en ambas áreas, por lo que en realidad es solo una cuestión de cuál hacer primero.
fuente
En resumen, los FPGA son buenos donde necesita realizar un pequeño procesamiento en una gran cantidad de datos, y las CPU son buenas donde necesita realizar un gran procesamiento en pocos datos.
Una transmisión de video HDMI es una gran cantidad de datos. Puede hacerlo una CPU, GPU o ASIC en el caso de video general, pero si necesita trabajar un poco (agregue una superposición, por ejemplo), puede elegir un FPGA.
Una transmisión de audio no es una gran cantidad de datos, pero si necesita realizar un reconocimiento de voz, preferirá una CPU a una FPGA.
Si bien puede hacer radio definida por software en una CPU, puede manejar una porción mucho más grande del espectro con un FPGA más fácilmente que en una CPU.
Si bien podría hacer un controlador de teclado con un FPGA, un microcontrolador será más barato, consumirá menos energía y será más fácil desarrollar software de teclado avanzado (macros, funciones de juego, reasignación) que un FPGA.
Por supuesto, puede hacer cualquier cosa en cualquiera de ellos, con compensaciones, pero si es competente en ambas, podrá sopesar las compensaciones de manera más competente y evitará el mayor costo de las piezas o el tiempo de desarrollo en el que incurriría al elegir el Solución incorrecta a un problema dado.
fuente
Generalmente, utiliza un microcontrolador cuando puede hacer el trabajo. Un microcontrolador realiza la lógica ejecutando instrucciones secuenciales.
Un FPGA realiza la lógica porque sus puertas de hardware están conectadas lógicamente para hacerlo. Eso significa que puede hacer las cosas mucho más rápido y varias de esas cosas al mismo tiempo. En general, es más complicado y difícil crear y depurar la misma lógica en un FPGA que en un micro, por lo que utiliza un FPGA cuando es necesaria la velocidad adicional y la baja latencia.
fuente
Una aplicación que aún no he visto es la ingeniería microelectrónica o el diseño de los chips MCU / CPU / GPU / ASIC. Estos chips a menudo se prototipan diseñándolos en HDL y luego implementados en un FPGA. Esto los hace más fáciles, más baratos y más rápidos de probar y modificar antes de finalmente usar el HDL para crear el diseño necesario para la producción del silicio real en el procesador o ASIC.
Un comentarista mencionó esto en forma de chips de núcleo blando (aunque tenían un error tipográfico y los llamaron chips de núcleo de clasificación). Puede tomar un ARM / 8051 / etc. soft-core y cualquier periférico soft-core que necesite y esencialmente diseñe su propio microcontrolador personalizado implementado en un FPGA. Luego, suponiendo que tenga los recursos, podría tener esto en su propio microcontrolador.
Si este tipo de aplicación es algo que le interesa, eche un vistazo a OpenCores para ver qué es posible.
fuente
Construimos instrumentos de radar (principalmente apertura sintética) que usan FPGA ampliamente. No creo que un microcontrolador pueda cumplir fácilmente los estrictos requisitos de tiempo. Creo que muchos instrumentos LIDAR también usan FPGA.
Básicamente, cualquier cosa donde los requisitos de tiempo estén en nanosegundos necesita FPGA o ASIC.
fuente
Un microcontrolador solo puede procesar datos secuencialmente, una instrucción a la vez, por lo que si tiene una operación muy costosa, es posible que desee que su cálculo sea paralelo de alguna manera. Procesar audio / video es un buen ejemplo de esto. Para satisfacer esa necesidad, se han desarrollado procesadores de señal digital que pueden realizar ciertas tareas en paralelo, pero no están lo suficientemente generalizadas como para implementar ningún algoritmo arbitrario, por lo que estos procesadores funcionarán para muchas tareas pero no para todas. Un FPGA es una pieza de hardware generalizada. Dado que puede definir, esencialmente, el diseño de su propia pieza de hardware, y luego descargarlo al FPGA, puede implementar cualquier algoritmo imaginable, dado que tiene suficientes recursos para hacerlo.
Un ejemplo concreto: Ken Perlin sugiere una implementación de hardware de su algoritmo de ruido simplex. Se puede hacer relativamente rápido con una CPU o microcontrolador tradicional, pero se puede hacer súper rápido con hardware personalizado. Como dudo que un DSP funcione para esto, lo más fácil sería un FPGA. La forma difícil, por supuesto, sería tener un chip físico real fabricado para usted, que es increíblemente costoso. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf
fuente
Una respuesta que no está aquí es la adquisición de datos. Si desea utilizar un ADC para muestrear una señal (por ejemplo, una señal de RF) a 200Mhz y procesarla, un microcontrolador simplemente no podrá procesar los datos lo suficientemente rápido. Una placa DAQ FPGA típica recibirá, filtrará, realizará un DDC y pasará los datos de RF a una CPU a una frecuencia mucho más baja. Los FPGA también pueden realizar FFT y operaciones de canalización en el espectro de RF.
Otra aplicación es el enrutamiento de paquetes, por ejemplo, un dispositivo que gestiona una (o varias) interfaces de ethernet XAUI que funcionan a 10 Gb / s cada una. Estos FPGA filtran y programan colas de paquetes para diferentes destinos. Un microcontrolador / CPU convencional no podría manejar el ancho de banda de estas interfaces.
fuente
La razón fundamental por la que los microprocesadores y los microcontroladores pueden hacer tanto con una cantidad de circuitos comparativamente pequeña es que si el micro solo necesita realizar un cálculo complejo 1,000 veces por segundo y toma 20 microsegundos (entonces el micro estará trabajando en el cálculo 2 % del tiempo), la mayoría del hardware que se usaría para ese cálculo se puede usar para otros fines el 98% restante del tiempo. Por lo tanto, los microcontroladores pueden usar una cantidad modesta de hardware para realizar una gran cantidad de funciones distintas, siempre que las funciones no sean necesarias simultáneamente.
La cantidad de circuitos en un FPGA a menudo será comparable a la de un microcontrolador (los FPGA varían en tamaño en unos pocos órdenes de magnitud, al igual que los microcontroladores, pero los rangos se superponen). Sin embargo, a diferencia de un microcontrolador, cuyos elementos de circuito se conectarán de tal manera que faciliten su uso para muchas tareas no simultáneas, un FPGA se diseñará para dedicar partes de sus circuitos a diversas tareas "a tiempo completo". Si uno quisiera que un microcontrolador contara la cantidad de pulsos que ocurren en cada una de las 100 entradas, se limitaría a contar pulsos que fueran lo suficientemente lentos como para que el controlador pudiera manejarlos secuencialmente, individualmente, si todas las entradas pudieran pulso independientemente, incluso un controlador rápido tendría problemas para contar más de unos pocos miles de pulsos por segundo por entrada. Por el contrario,
fuente
FPGA implementa un circuito lógico de hardware o un bloque funcional, en teoría puede implementar todo lo que desee. Y esos bloques se ejecutan simultáneamente, lo que es poco probable que una MCU convencional ejecute la programación línea por línea. Por lo tanto, el rendimiento de FPGA es mucho mejor que MCU, pero requiere conocer el lenguaje HDL o VHDL que difiere del lenguaje de programación en términos de sintaxis, estilo y concepto.
Como dije, puede implementar cualquier cosa, por lo tanto, no es sorprendente que pueda implementar una MCU con bloqueo funcional para facilitar su desarrollo con alto rendimiento. Xilinx proporciona un bloque funcional para MCU incrustado, llamado Microblaze. Por lo tanto, también puede ejecutar un programa de sistema integrado en FPGA.
Por ejemplo, le gustaría implementar un ecualizador de audio programable y la parte de cálculo más pesada, como FFT, se puede implementar por bloque funcional en lugar de ejecutar el cálculo del software. Pero parte de la tarea simple como LCD, interfaz de E / S puede ser realizada por MCU. Y FPGA le permite tener bloques integrados de hardware y sistema MCU al mismo tiempo.
fuente