Processing math: 100%

30 votos

¿Cuándo se pueden utilizar FPGAs y no Microcontroladores/DSPs?

Tengo que elegir entre un curso sobre microcontroladores avanzados y un curso sobre FPGAs avanzadas.

He tenido cursos de iniciación en ambas materias, y lo que me preocupa ahora es que ya soy bastante bueno en el desarrollo de firmware para microcontroladores, y no consigo ver qué productos/proyectos puedo hacer con una FPGA y no puede con un microcontrolador/DSP.

¿Se te ocurren algunas aplicaciones/productos/proyectos en los que un microcontrolador o un DSP no serían suficientes, y por qué?

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

4 votos

Las principales razones son más o menos 1. Reacciones 100% deterministas, 2. enorme potencial de paralelismo. Sin embargo, muchos diseños incorporan un sort-core CPU en la FPGA, ya que es mucho más fácil programar una lógica loca para un procesador, que para el hardware.

0 votos

La distinción entre lo que es posible con cada dispositivo no es muy clara. Cada uno tiene ventajas y hay soluciones a los problemas de ambos. Habiendo tomado cursos de introducción sobre cada uno, espero que entiendas esto, así que me queda la duda de qué es exactamente lo que estás preguntando.

0 votos

Estoy buscando aplicaciones donde un microcontrolador en la mayoría de los casos no sería suficiente, o donde una FPGA sería la opción obvia.

23voto

jns Puntos 449

Ver también FPGAs vs Microcontroladores

El procesamiento de imágenes o vídeos a alta velocidad es un buen ejemplo. O el procesamiento de "imágenes" que no son directamente imágenes ópticas, como los sistemas basados en radar o láser.

Lo más importante a tener en cuenta es rendimiento y latencia requisitos. Un microcontrolador puede atender una interrupción (muy aproximadamente) una vez por microsegundo. Sólo puede atender una interrupción a la vez. Si necesita procesarla de forma elaborada, eso limita cuántas puede atender en un tiempo determinado.

Con una FPGA, generalmente se 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 tarda 20 ciclos, eso es totalmente independiente de cualquier otra cosa que ocurra.

El cálculo intensivo de enteros en paralelo funciona mejor en las FPGAs, especialmente si hay dependencias de datos complejas. Sin embargo, no tienen mucha memoria integrada; se puede añadir algo de DRAM al lado, pero a costa de la latencia.

También puede querer uno para los periféricos, o para hablar algún bus digital de alta velocidad. No puedes meter o sacar un HDMI de un microcontrolador. No puedes construir una tarjeta PCI alrededor de uno.

17voto

GSerg Puntos 33571

Bueno, yo hago procesamiento en tiempo real de vídeo HD en FPGAs. Parte de lo que hago podría hacerse en un chip GPU, pero no en un microcontrolador o DSP. La FPGA es más flexible.

Muchos sistemas combinan FPGAs y MCUs/DSPs para obtener lo mejor de ambos mundos. Uno de los proyectos en los que voy a trabajar próximamente consiste en el reconocimiento de objetos en un flujo de vídeo. Los pasos preliminares (eliminación de ruido, normalización, detección de bordes, etc.) se realizan mejor en la FPGA, pero la lógica de alto nivel 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á dominar ambas áreas, por lo que en realidad es sólo una cuestión de qué hacer primero.

14voto

Federico Builes Puntos 1940

En resumen, las FPGAs son buenas cuando se necesita realizar un poco de procesamiento en muchos datos, y las CPUs son buenas cuando se necesita realizar mucho procesamiento en pocos datos.

Un flujo de vídeo HDMI es un montón de datos. Puede ser realizado por una CPU, una GPU o un ASIC en el caso general del vídeo, pero si necesitas hacer un poco de trabajo en él (añadir una superposición, por ejemplo) podrías elegir una FPGA.

Un flujo de audio no es una gran cantidad de datos, pero si necesitas realizar un reconocimiento de voz en él, vas a preferir una CPU a una FPGA.

Aunque se puede hacer radio definida por software en una CPU, se puede tratar una porción mucho mayor del espectro con una FPGA más fácilmente que en una CPU.

Aunque se podría hacer un controlador de teclado con una FPGA, un microcontrolador será más barato, consumirá menos energía y será más fácil desarrollar un software de teclado avanzado (macros, funciones de juego, reasignación) que una FPGA.

Por supuesto que se puede hacer cualquier cosa en cualquiera de ellos, con ventajas y desventajas, pero si se dominan ambos, se podrán sopesar las ventajas y desventajas de forma más competente, y se evitará el mayor coste de las piezas o el tiempo de desarrollo en el que se incurriría al elegir la solución incorrecta para un determinado problema.

13voto

RelaXNow Puntos 1164

Por lo general, se 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. Esto significa que puede hacer cosas mucho más rápidas, y varias de ellas al mismo tiempo. Por lo general, es más complicado y difícil crear y depurar la misma lógica en una FPGA que en un micro, por lo que se utiliza una FPGA cuando la velocidad extra y la baja latencia son necesarias.

9voto

Morris Maynard Puntos 49

Una de las aplicaciones que aún no he visto mencionar es la ingeniería microelectrónica o el diseño de los propios chips MCU/CPU/GPU/ASIC. Estos chips suelen ser prototipos diseñados en HDL y luego implementados en una FPGA. Esto hace que sean más fáciles, más baratos y más 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 tuvo un error tipográfico y los llamó chips de núcleo blando). Puedes tomar un ARM/8051/etc. de núcleo blando y cualquier periférico de núcleo blando que necesites y esencialmente diseñar tu propio microcontrolador personalizado implementado en una FPGA. Entonces, asumiendo que tienes los recursos, podrías tener esto fabricado en tu propio microcontrolador.

Si este tipo de aplicación es algo que le interesa, eche un vistazo a OpenCores para ver lo que es posible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X