Siéntase libre de leer, o saltar hasta el final. ¡Me doy cuenta de que seguí un poco!
En general, no usarías un procesador suave para reemplazar las cosas de DSP. El hardware dedicado generalmente puede manejar mayores volúmenes de datos más rápido porque lo diseñaría para hacer una tarea específica muy bien, en lugar de ser una CPU de propósito general.
Donde los procesadores suaves entran en su elemento es el control y la coordinación.
Si diseñara un sistema que necesitara procesar un gran volumen de datos, digamos una adquisición de imágenes de alta velocidad de cuadros, no sería posible usar un procesador de núcleo blando para manejar todos los datos, simplemente habría demasiada sobrecarga en la CPU Lo que haría es diseñar un firmware dedicado para realizar la tarea de adquisición específica necesaria (por ejemplo, filtrar los datos, almacenarlos en la memoria, etc.).
Sin embargo, todavía necesita alguna forma de indicarle cuándo hacer las cosas: cuándo desea capturar, si se le ha ordenado al dispositivo que descargue los datos, etc. Estas cosas no son muy fáciles de hacer en hardware dedicado, no si hay secuencias de eventos con entrada del usuario, básicamente tareas que no hacen lo mismo una y otra vez. En este caso, usaría un procesador de núcleo blando, ya que es mucho más fácil escribir código de procedimiento para algunas tareas.
Otro ejemplo (real), he estado trabajando en un sistema de adquisición de ultrasonidos que transmite datos a través de PCIe. Las tareas que realiza se comunican desde el usuario y varias partes del sistema necesitan configuración. La coordinación del sistema no requiere grandes volúmenes de datos, sino que necesita flexibilidad, por lo que se adapta bien a una CPU de núcleo blando programada en este caso C. Hacer lo mismo en hardware físico requeriría grandes cantidades de recursos la mayoría de los cuales se usarían con poca frecuencia, por lo que no se vería ningún beneficio en comparación con una CPU.
Vale la pena señalar que algunas tareas pueden variar según la entrada del usuario, pero aún son mejores en hardware dedicado. De hecho, una parte del código (programación de controladores DMA para almacenar datos en el disparador) se realizó originalmente en la CPU en aproximadamente 15 líneas de código, pero debido a que ese bit debe hacerse en el momento en que se produce un disparador, usando una CPU que puede ser ocupado con otras cosas no es lo ideal. En cambio, la tarea se programa en un módulo Verilog, pero en el proceso se convierte en una máquina masiva de 500 líneas de estado con aproximadamente 15 estados y una gran cantidad de lógica de soporte, en realidad no. Pero a pesar de que consume muchos más recursos, es un tiempo crítico, por lo que es una necesidad.
Del mismo modo, necesito una generación de disparo precisa del ciclo de reloj, por lo que un módulo para realizar esa tarea es parte del sistema en lugar de hacerlo en una CPU. Tanto este núcleo como el anterior son ejemplos de cómo puede usar una CPU para realizar algunas tareas, pero para otras críticas puede desarrollar hardware para complementar la CPU, de la misma manera que tiene temporizadores, etc. en un microcontrolador.
Entonces para resumir:
Los FPGA son excelentes herramientas flexibles, pero la mayoría de los diseños necesitan una combinación de CPU de núcleo blando, módulos configurables (por ejemplo, temporizadores) y hardware dedicado de una sola tarea.
Las CPU son excelentes para la interacción del usuario, controlan el orden de los eventos y configuran los controladores. Son como el coordinador, el cerebro.
Es posible que algunos diseños necesiten realizar tareas bastante repetitivas que se pueden configurar para adaptarse a diferentes entradas: módulos de temporizador, pantallas de caracteres, eliminación de rebotes de botones, etc. Esto podría hacerse fácilmente con una CPU, pero si desea hacer varias de ellas con precisión en una vez que se vuelve más complicado, están compartiendo los mismos recursos de CPU. Entonces, lo que puede hacer es moverlos a un hardware dedicado que esté estrechamente conectado a la CPU: brinde a la CPU la oportunidad de realizar otras tareas. Estos ayudan a la CPU a hacer su trabajo e interactuar con su entorno, como sus sentidos.
DSP dedicado, transferencia de datos (DMA), básicamente cualquier tarea que haga lo mismo una y otra vez a altas velocidades, realmente puede beneficiarse de una lógica dedicada en términos de velocidad, y también posiblemente de potencia. Estos son como los músculos del dispositivo, hacen todo el trabajo pesado.
Tendrás que disculpar las divagaciones un poco, pero me gusta este campo de EE. Esperemos que lo anterior sea comprensible y le brinde una idea adicional del maravilloso mundo de los FPGA.