¿Cuándo se pueden usar los FPGA y los microcontroladores / DSP no?

27

Tengo que elegir entre un curso sobre microcontroladores avanzados y un curso sobre FPGA avanzado.

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.

¿Se pueden crear algunas aplicaciones / productos / proyectos donde un microcontrolador o DSP no serían suficientes y por qué?

Cámaras? ¿Cámaras de alta velocidad? Procesamiento de imágenes de alta velocidad?

    
pregunta Jolle

10 respuestas

21

Vea también FPGA's vs Microcontrollers

El procesamiento de imágenes o video a alta velocidad es un buen ejemplo. O procesa "imágenes" que no son imágenes ópticas sencillas, como sistemas basados en radar o láser.

Lo más importante a considerar es el rendimiento y los latencia . Un microcontrolador puede reparar 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 de servicios 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). Puedes tener muchas unidades de procesamiento en paralelo. Si sabes que tu filtro toma 20 ciclos, eso es totalmente independiente de cualquier otra cosa que esté sucediendo.

El cálculo 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 algo de DRAM al lado pero a costa de la latencia.

También puede querer uno para los periféricos, o para hablar un bus digital de alta velocidad. No se puede hacer bit-bang de HDMI dentro o fuera de un microcontrolador. No puedes construir una tarjeta PCI alrededor de una.

    
respondido por el pjc50
16

Bueno, hago el procesamiento en tiempo real de video HD en FPGAs. Algo de lo que hago podría hacerse en un chip GPU, pero no en un microcontrolador o DSP. El FPGA es más flexible.

Muchos sistemas combinan FPGAs y MCUs / DSPs para obtener lo mejor de ambos mundos. Un proyecto en el que podría estar trabajando pronto implica el reconocimiento de objetos en un flujo 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 del FPGA).

En última instancia, querrás estar familiarizado en ambas áreas, por lo que es solo una cuestión de cuál es la primera.

    
respondido por el Dave Tweed
14

En resumen, los FPGA son buenos cuando se necesita realizar un poco de procesamiento en una gran cantidad de datos, y las CPU son buenas donde se necesita realizar un gran procesamiento en un poco de datos.

Un flujo de video HDMI es una gran cantidad de datos. Puede ser realizado por una CPU, GPU o ASIC en el caso del video general, pero si necesita hacer un poco de trabajo (agregue una superposición, por ejemplo) puede elegir un FPGA.

Un flujo de audio no es una gran cantidad de datos, pero si necesita realizar un reconocimiento de voz en él, preferirá una CPU a un 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 que un controlador de teclado fuera de 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 concesiones, 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 que usted desea. incurra en elegir la solución incorrecta para un problema dado.

    
respondido por el Adam Davis
12

En general, usa un microcontrolador cuando puede hacer el trabajo. Un microcontrolador ejecuta 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. Por lo general, es más complicado y más 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 extra y la baja latencia.

    
respondido por el Olin Lathrop
8

Una aplicación que no he visto mencionada todavía es la ingeniería microelectrónica o el diseño de los chips MCU / CPU / GPU / ASIC. Estos chips a menudo se crean prototipos diseñándolos en HDL y luego implementados en un FPGA. Esto hace que sean más fáciles, baratos y rápidos de probar y modificar antes de utilizar finalmente 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 llamaba chips de núcleo ordenado). Puedes tomar un ARM / 8051 / etc. Los periféricos de núcleo blando y de cualquier tipo que necesite y diseñan esencialmente su propio microcontrolador personalizado implementado en un FPGA. Luego, asumiendo que tiene los recursos, podría tener este fabbed 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.

    
respondido por el embedded.kyle
6

Construimos instrumentos de radar (en su mayoría apertura sintética) que utilizan FPGA ampliamente. No creo que un microcontrolador pueda cumplir fácilmente los estrictos requisitos de tiempo. Creo que muchos instrumentos LIDAR también utilizan FPGA.

Básicamente, cualquier cosa donde los requisitos de tiempo estén en los nanosegundos necesita FPGA o ASIC.

    
respondido por el LeoR
5

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. El procesamiento de audio / video es un buen ejemplo de esto. Para satisfacer esa necesidad, se han desarrollado procesadores de señales digitales que pueden realizar ciertas tareas en paralelo, pero no están lo suficientemente generalizados para implementar ningún algoritmo arbitrario, por lo que estos procesadores funcionarán para muchas tareas pero no para todas las tareas. Un FPGA es una pieza de hardware generalizada. Dado que puede definir, esencialmente, el diseño de su propio hardware y luego descargarlo en el 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 la CPU tradicional o el microcontrolador, 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 más difícil, por supuesto, sería tener un chip físico real fabricado para ti, que es increíblemente caro. enlace

    
respondido por el Void Star
5

Una respuesta que no está aquí es la adquisición de datos. Si desea usar un ADC para muestrear una señal (por ejemplo, una señal de RF) a 200 MHz y procesarla, un microcontrolador simplemente no podrá procesar los datos lo suficientemente rápido. Una placa FPGA DAQ 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 administra una (o varias) interfaces Ethernet XAUI que operan a 10Gb / s cada uno. 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.

    
respondido por el stanri
4

La razón fundamental por la que los microprocesadores y microcontroladores pueden hacer tanto con una cantidad relativamente pequeña de circuitos es que si los micro solo necesitan realizar un cálculo complejo 1.000 veces por segundo y se necesitan 20 microsegundos (por lo que el micro estará trabajando) el cálculo del 2% del tiempo), la mayor parte 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 un gran número 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 del circuito se conectarán de manera que faciliten su uso para muchas tareas no simultáneas, un FPGA se diseñará para dedicar partes de su circuito a varias tareas "a tiempo completo". Si uno quisiera que un microcontrolador contara el número de pulsos que se producen en cada una de las 100 entradas, se limitaría a contar pulsos que fueran lo suficientemente lentos para que el controlador pudiera manejarlos secuencialmente, individualmente, si todas las entradas pudieran pulsar. 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, si uno estuviera usando un FPGA para manejar el trabajo, podría dedicar circuitos de contador a cada entrada, y no tendría problemas para contar cada pulso de cada entrada, incluso si cada entrada pulsara independientemente decenas de millones de veces por segundo.

    
respondido por el supercat
1

FPGA implementa un circuito lógico de hardware o un bloque funcional, en teoría puede implementar lo que quieras. Y esos bloques se ejecutan simultáneamente, improbable 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 es diferente al lenguaje de programación en términos de sintaxis, estilo y concepto.

Como dije, puede implementar cualquier cosa, por lo tanto, no es una sorpresa que pueda implementar una MCU con un bloque funcional para facilitar su desarrollo con un alto rendimiento. Hay un bloque funcional proporcionado por Xilinx para usted en la MCU integrada, 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 computación más pesada, como FFT, puede implementarse mediante un bloque funcional en lugar de ejecutar el cálculo del software. Sin embargo, algunas de las tareas simples, como LCD, interfaz de E / S se pueden realizar por MCU. Y FPGA le permite tener bloques funcionales de sistemas y hardware integrados MCU al mismo tiempo.

    
respondido por el Lee Timothy

Lea otras preguntas en las etiquetas