¿Cuál es la diferencia entre un DSP y un microcontrolador estándar?

Entiendo que un DSP está optimizado para el procesamiento de señales digitales, pero no estoy seguro de cómo afecta eso a la tarea de elegir un IC. ¡Casi todo lo que hago con un microcontrolador involucra el procesamiento de señales digitales!

Por ejemplo, comparemos el popular Microchip dsPIC30 o 33 DSP y su otra oferta de 16 bits, el microcontrolador de propósito general PIC24. El dsPIC y el PIC se pueden configurar para tener la misma memoria y velocidad, tienen conjuntos periféricos similares, capacidad A/D similar, conteo de pines, consumo de corriente, etc. La única diferencia importante que aparece en la lista de Digikey es la ubicación del oscilador. No puedo notar la diferencia mirando los precios (o cualquier otro campo, para el caso).

Si quiero trabajar con un par de sensores externos usando varios protocolos (I2C, SPI, etc.), hacer algunas conversiones A/D, almacenar algunos datos en algún flash serial, responder a algunos botones y enviar datos a un personaje LCD y sobre un FT232 (un sistema integrado bastante genérico), ¿qué chip debo usar? No parece que el DSP vaya a la zaga del PIC de ninguna manera, y ofrece este misterioso "motor DSP". Mi código siempre hace matemáticas y, de vez en cuando, necesito números de punto flotante o fraccionarios, pero no sé si me beneficiará usar un DSP.

Una comparación más general entre los DSP y los microcontroladores de otro proveedor sería igualmente útil; Solo estoy usando esto como un punto de partida para la discusión.

Respuestas (6)

Para ser honesto, la línea entre los dos casi ha desaparecido hoy en día y hay procesadores que pueden clasificarse como ambos (por ejemplo, AD Blackfin).

Generalmente hablando:

Los microcontroladores son procesadores matemáticos de números enteros con un subsistema de interrupción. Algunos pueden tener unidades de multiplicación de hardware, otros no, etc. El punto es que están diseñados para matemáticas simples y, en su mayoría, para controlar otros dispositivos.

Los DSP son procesadores optimizados para el procesamiento de señales de transmisión. A menudo tienen instrucciones especiales que aceleran tareas comunes como multiplicar y acumular en una sola instrucción. También suelen tener otras instrucciones vectoriales o SIMD. Históricamente, no eran sistemas basados ​​en interrupciones y funcionaban con sistemas de memoria no estándar optimizados para su propósito, lo que los hacía más difíciles de programar. Por lo general, se diseñaron para operar en un gran ciclo procesando un flujo de datos. Los DSP se pueden diseñar como procesadores de números enteros, punto fijo o punto flotante.

Históricamente, si quería procesar flujos de audio, flujos de video, hacer un control rápido del motor, cualquier cosa que requiriera procesar un flujo de datos a alta velocidad, buscaría un DSP.

Si quisiera controlar algunos botones, medir la temperatura, ejecutar una pantalla LCD de caracteres, controlar otros circuitos integrados que procesan cosas, usaría un microcontrolador.

Hoy en día, la mayoría de las veces se encuentran procesadores de tipo microcontrolador de propósito general con instrucciones similares a DSP integradas o con coprocesadores en chip para manejar datos de transmisión u otras operaciones de DSP. Ya no se ven mucho los DSP puros, excepto en industrias específicas.

El mercado de los procesadores es mucho más amplio y borroso de lo que solía ser. Por ejemplo, apenas considero un SoC ARM cortex-A8 como un microcontrolador, pero probablemente se ajuste a la definición estándar, especialmente en un paquete PoP.

EDITAR: Pensé que agregaría un poco para explicar cuándo / dónde usé DSP incluso en los días de los procesadores de aplicaciones.

Un producto reciente que diseñé estaba procesando audio con X canales de entrada y X canales de salida por 'zona'. El uso previsto para el producto significaba que muchas veces se sentaba allí haciendo su trabajo, procesando los canales de audio durante años sin que nadie lo tocara. El procesamiento de audio consistió en varios filtros y funciones acústicas. El sistema también era "conectable en caliente" con la capacidad de agregar una cierta cantidad de "zonas" independientes, todo en una caja. Era un total de 3 diseños de PCB (placa base, un backplane y un módulo enchufable) y el backplane admitía 4 módulos enchufables. Un proyecto bastante divertido ya que lo estaba haciendo solo, tuve que hacer el diseño del sistema, el esquema, el diseño de PCB y el firmware.

Ahora podría haberlo hecho todo con un solo núcleo ARM voluminoso, solo necesitaba alrededor de 50 MIPS de trabajo DSP en números de punto fijo de 24 bits por zona. Pero porque sabía que este sistema funcionaría durante un tiempo extremadamente largo y sabía que era fundamental que nunca hiciera clic, saltara ni nada por el estilo. Elegí implementarlo con un DSP de bajo consumo por zona y un único microcontrolador PIC que desempeñaba la función de gestión del sistema. De esta manera, incluso si una de las funciones de uC falla, tal vez un ataque DDOS en su puerto Ethernet, el DSP felizmente seguirá funcionando y es probable que nadie lo sepa.

Entonces, el microcontrolador desempeñó el papel de ejecutar la pantalla LCD de caracteres de 2 líneas, algunos botones, monitorear la temperatura y controlar el ventilador (también había algunos amplificadores de audio de bastante alta potencia en cada placa) e incluso sirvió una página web de estilo AJAX a través de Ethernet. También gestionaba los DSP a través de una conexión serie.

Entonces, esa es una situación en la que incluso en los días en que podría haber usado un solo núcleo ARM para hacer todo, el diseño dictaba un IC de procesamiento de señal dedicado.

Otras áreas en las que me he encontrado con DSP:

*Audio de gama alta: receptores de muy alta gama y equipo de procesamiento y mezcla de calidad de concierto

* Procesamiento de radar: también he usado núcleos ARM para esto en aplicaciones de gama baja.

*Procesamiento de sonda

*Visión por computadora en tiempo real

En su mayor parte, los extremos bajo y medio del espacio de audio/video/similar han sido tomados por procesadores de aplicaciones que combinan una CPU de uso general con motores de descarga de coprocesamiento para varias aplicaciones.

Otro añadido quizás. En una aplicación con aproximadamente 80 líneas de E/S y 12 entradas analógicas, ahora estamos usando un solo microcontrolador con un FPGA vinculado para manejar los flujos de E/S. Soluciones como esta son cada vez más comunes. Estamos usando este sistema: Embeddedarm.com/products/board-detail.php?product=ts-7800 para hacer que el desarrollo sea rápido para un tiempo de comercialización corto y debo decir que funciona muy bien (por supuesto, el precio de dicho producto puede no ser adecuado para aplicaciones con un precio de venta/valor esperado más bajo.) – Wouter Simons Hace 33 segundos
No todos los microcontroladores tienen interrupciones. En aplicaciones de misión crítica nunca se usan. Caso en cuestión: el controlador Viper utilizado en aviones de combate.

Muchos procesadores de señales digitales incluyen una variedad de funciones que no se encuentran en los procesadores "ordinarios":

  1. La capacidad de realizar una acumulación múltiple, con ambos operandos extraídos de la RAM, a una velocidad de un ciclo por par de operandos.
  2. La capacidad de realizar alguna forma de direccionamiento de 'módulo' o 'envoltura', para permitir que un búfer se use repetidamente sin tener que usar código manual para garantizar que los punteros se envuelvan. El 3205x, por ejemplo, tiene un registro de 'inicio de búfer' y 'fin de búfer'; si el código intenta incrementar o disminuir un registro de puntero que apunta a 'inicio de búfer', el procesador cargará el puntero con 'fin de búfer'. El 3205x también tiene un modo de transporte inverso, donde las adiciones de direcciones propagan el transporte de MSB a LSB, en lugar de viceversa; esto permite el direccionamiento módulo-N si N es una potencia de 2, aunque las cosas se almacenan en una secuencia desordenada.
  3. La capacidad de especificar que una instrucción se ejecute 'n' veces sin necesidad de volver a buscarla. Algunos procesadores como el 8088 incluyen esto para algunas instrucciones, pero muchos DSP lo permiten en muchas instrucciones.
  4. La capacidad de especificar que un bloque de código se ejecute repetidamente, hasta 'n' veces, sin necesidad de ramificación. Antes de cada búsqueda de código, el contador del programa se compara con el registro de 'final de ciclo'; si coincide y el bucle está habilitado, el contador del programa se recargará con 'inicio de bucle' (de lo contrario, se incrementará). Si 'recuento de bucles' es cero, el bucle se desactivará; de lo contrario, el 'recuento de bucles' se reducirá.

Tenga en cuenta que muchos DSP tendrán buses separados para permitir que ambos operandos de una acumulación múltiple se obtengan simultáneamente; Nunca he visto una que no sea DSP que pueda hacer eso. Si bien no tengo conocimiento de ninguna característica de la que un chip deba 'faltar' para ser un DSP, el espacio de silicio adicional requerido para permitir la obtención de operandos dobles es un espacio de silicio que no se utiliza para algún otro propósito generalmente más útil.

Estaba familiarizado con la acumulación múltiple, pero el direccionamiento de módulo y la ejecución repetida de código sin búsqueda eran características con las que no estaba familiarizado.
Tienes muchas respuestas excelentes y es genial que trabajes tanto en preguntas antiguas como nuevas. Revisaría y votaría a favor de todas sus respuestas si no fuera por los algoritmos de detección de fraude y el límite diario de repeticiones . ¡Sin embargo, espere algunos al día! Sigan con el trabajo impresionante!
@reemrevnivek: Me alegra que encuentres útiles mis respuestas. Como señalé, el diseño para la acumulación múltiple de búsqueda doble es una característica que no he visto en los procesadores que no son DSP. El ARM hace un buen trabajo con operaciones que requieren direccionamiento de módulo y acumulación múltiple (usando una dirección efectiva de, por ejemplo, (R0 + (R1 >> 24)) para una tabla de 256 bytes), pero un ARM típico requeriría cuatro instrucciones para hacer lo que un DSP lo hace en un ciclo.
MAC es una instrucción de tres operandos a <- a + b*c no dos.
@Trismegistos: una operación MAC repetida de N elementos implicará un total de 2N + 1 operandos. No es necesario buscar el acumulador antes de cada artículo y almacenarlo después. Mientras que los procesadores con una suma y multiplicación no repetitiva pueden tener tres operandos, un MAC repetido solo obtendrá dos operandos por ciclo.

Una cosa que los demás no mencionaron es el comportamiento en el desbordamiento numérico. En los procesadores normales, esto suele pasar del valor máximo al valor mínimo.

Para el uso de DSP, a menudo hay al menos una opción para usar la saturación en su lugar. Es decir, en caso de desbordamiento, el valor permanece en el valor máximo, lo que produce menos distorsión e imita mejor el comportamiento de los circuitos analógicos.

La mayor diferencia entre DSP y el uController estándar es la función de acumulación múltiple (MAC) del DSP que uC no tiene. Esto es valioso si desea realizar cálculos de procesamiento de señales digitales reales como FFT (un ejemplo). Realizar una FFT en un microcontrolador estándar llevará mucho tiempo en comparación con realizarla en una MAC del DSP.

Procesar señales I2C y seriales no es lo mismo que procesar formas de onda en un DSP. Se está produciendo un tipo de procesamiento totalmente diferente, ya que las señales en serie son solo golpes de bits.

Aquí hay una discusión similar en un foro de DSP: DSP vs. Microprocesador

Vi un acumulador en el diagrama de bloques del DSP, pero no sabía lo que hacía. ¡Bueno saber! Entiendo que I2C y serial no son lo mismo que procesar formas de onda cuando envía datos ASCII, pero algunos periféricos (acelerómetros de acceso en serie, A/D externo, GPS, etc. codifican formas de onda en sus flujos de datos. Tiene que obtener en el DSP de alguna manera!
la mayor parte del procesamiento de señales se compone matemáticamente de multiplicar matrices y/o vectores juntos. El proceso de hacer esto da como resultado una gran cantidad de cálculos de tipo respuesta = a b + c d + e*f. En una CPU sin MAC que requiere muchas instrucciones, con una MAC puede ser mucho más rápido.
Este comentario es completamente INCORRECTO. No todos, pero muchos MCU incluyen multiplicadores de hardware con funciones MAC. Esto no tiene nada que ver con una distinción entre DSP y MCU. Sí, es más probable que los DSP tengan una MAC que una MCU, pero hay diferencias mucho más fundamentales que esta pequeña característica.
Si retrocede el reloj 15 años, casi no verá MCU con esta función. Si quita la función MAC o equivalente del DSP, ¿puede decir honestamente que tiene un DSP? Ciertamente no me gustaría comprar uno si no lo tuviera o algo parecido. Hay diferencias de arquitectura cuando entras en Harvard vs. von Neuman y el acceso a la memoria, pero estaba dando una respuesta simple sin entrar en una explicación larga y detallada. Creo que eres demasiado duro con tu comentario al decir "De plano INCORRECTO". Le invitamos a publicar una respuesta discutiendo la profundidad que cree que debe cubrirse.
@adrian: Tu comentario es totalmente INCORRECTO. Si una MCU tiene una función MAC, se comercializará como DSP.

Lo que solía diferenciar a los DSP era su optimización para las operaciones aritméticas, especialmente la multiplicación, aunque en estos días no es raro que los microcontroladores vengan equipados con instrucciones de multiplicación y división. Todavía puede haber una ventaja para hacer el procesamiento de señales con chips DSP, en la medida en que algunos de ellos tienen soporte de hardware para matemáticas de punto fijo (por ejemplo, la librería 'IQ' de TI TMS320s), mientras que es más probable que los micros solo incluyan unidades enteras.

Personalmente, cuando me enfrento a elegir entre los dos para un diseño, trato de categorizar si la aplicación requiere cálculos repetitivos con solo una lógica de cambio de modo ocasional, o si solo necesita realizar secuencias cortas de cálculos cuando surge la necesidad. El primero sería el DSP, el segundo un micro.

Y luego, por supuesto, hay cosas divertidas como el OMAP que tiene ambos. =P

Creo que entiendo la diferencia en la intención (su segundo párrafo), pero no estoy seguro de por qué haría eso cuando los micros no tienen la capacidad matemática similar a DSP y los DSP tienen conjuntos periféricos similares a micro. Como dije en mi OP, el dsPIC33 y el PIC24 pueden tener un conjunto de funciones casi idéntico y un precio idéntico. Corrígeme si me equivoco, pero aunque el DSP tiene instalaciones de procesamiento repetitivo, no creo que el PIC24 (o cualquier otro micro que haya visto) tenga alguna ventaja sobre un DSP en cambios de modo, como un dual tubería o FLASH más rápido.
@reemrevnivek: Entonces, ¿por qué no elegir siempre un DSP?
@JustJeff: Sí, eso es exactamente lo que digo.

Otra característica posible que puede tener la instrucción MAC es incrementar automáticamente los registros que apuntan a los multiplicandos. Programé un Zilog DSP que usaba el núcleo Clarkspur (punto fijo de 16 bits). Era una variación de la arquitectura de Harvard con tres buses, lo que le permitía acceder a tres áreas de memoria simultáneamente: memoria de instrucciones, banco de ram de datos 1 y banco de ram de datos 2. Con un flujo de datos en un banco de ram y coeficientes en el otro, se podía haga un filtro FIR con una instrucción de un solo ciclo por operación de incremento de puntero/MAC. En C, la instrucción única se ve así:

Acumulador += rambank1 [r1++] * rambank2 [r2++];

Y, por supuesto, esta instrucción se repite para cada coeficiente.

Tampoco se mencionó anteriormente, los DSP (al menos los más antiguos que he usado) son generalmente arquitectura RISC y están diseñados con muchas o la mayoría de las instrucciones que se ejecutan en un solo ciclo (o en la misma cantidad de ciclos). Esto permite la capacidad de programar una respuesta de interrupción determinista (un conteo de reloj fijo entre la activación de la línea de interrupción y la ejecución de la primera instrucción en el ISR), mientras que la mayoría de los otros procesadores responden a las interrupciones en un número variable de ciclos de reloj, dependiendo de a qué hora. punto en una instrucción de varios ciclos se produce la interrupción. El tiempo de ejecución fijo elimina el jitter de tiempo de reloj múltiple en salidas repetitivas.

Para la comparación del OP de Microchip Pic y DSPic, entendí cuando se introdujo DSPic que era principalmente solo un Pic con una instrucción MAC y algunas otras características adicionales, lo que sin duda puede acelerar un microcontrolador haciendo funciones de procesamiento de señal, pero (debido a la falta de cualquiera de las otras características discutidas) podría estar empujando la terminología para llamarlo DSP. El MSP430 también está disponible en versiones con hardware MAC, pero nadie lo llama DSP.

Recuerdo que hace 10 o 15 años leí que los principales procesadores de Intel estaban agregando MAC e instrucciones similares para hacer un procesamiento de señal "nativo" (en lugar de tarjetas de expansión con procesadores DSP dedicados, que eran comunes para la producción de audio en la década de 1990), algunos de bajo costo. Los módems de bus de PC de acceso telefónico de 56k eran solo convertidores A/D y D/A, y dependían del procesador principal para realizar las funciones de codificación y decodificación de la señal del módem, por lo que había una demanda de un uso más eficiente del procesador allí mismo. Los usos de los medios, como la edición/codificación/descodificación de video, así como la grabación/producción de audio, se aceleran enormemente con las instrucciones de tipo DSP.

No hay nada nuevo bajo el sol. <g>En los primeros días de C, los operadores de incremento y decremento se diseñaron para traducirse directamente en instrucciones de hardware únicas en el PDP.