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

84

Entiendo que un DSP está optimizado para el procesamiento de señales digitales, pero no estoy seguro de cómo eso afecta la tarea de elegir un IC. ¡Casi todo lo que hago con un microcontrolador implica 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 uso 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 que utilizan varios protocolos (I2C, SPI, etc.), realice algunas conversiones A / D, almacene algunos datos en un flash serie, responda a algunos botones y envíe datos a un carácter 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 "DSP Engine". Mi código siempre hace matemáticas, y de vez en cuando necesito coma flotante o números fraccionarios, pero no sé si me beneficiaré con el uso de un DSP.

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

Kevin Vermeer
fuente

Respuestas:

64

Para ser honesto, la línea entre los dos ya casi ha desaparecido y hay procesadores que se pueden clasificar como ambos (AD Blackfin, por ejemplo).

Generalmente hablando:

Los microcontroladores son procesadores matemáticos 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 principalmente 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 las tareas comunes, como la acumulación múltiple en una sola instrucción. También a menudo tienen otras instrucciones vectoriales o SIMD. Históricamente no eran sistemas basados ​​en interrupciones y operaban 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, fueron diseñados para operar en un gran bucle procesando un flujo de datos. Los DSP se pueden diseñar como procesadores de punto entero, punto fijo o punto flotante.

Históricamente, si quisiera procesar transmisiones de audio, transmisiones de video, hacer un control rápido del motor, cualquier cosa que requiera el procesamiento de una transmisión de datos a alta velocidad, buscaría un DSP.

Si quisieras controlar algunos botones, medir una temperatura, ejecutar un LCD de caracteres, controlar otros circuitos integrados que procesan cosas, usarías un microcontrolador.

Hoy en día, se encuentran principalmente procesadores de tipo microcontrolador de uso general con instrucciones DSP incorporadas o con coprocesadores en chip para manejar datos de transmisión u otras operaciones DSP. Ya no se ven mucho los DSP puros, excepto en industrias específicas.

El mercado de procesadores es mucho más amplio y más borroso de lo que solía ser. Por ejemplo, apenas considero que un ARM cortex-A8 SoC sea 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 he usado DSP incluso en los días de los procesadores de aplicaciones.

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

Ahora podría haber hecho todo con un solo núcleo ARM voluminoso, solo necesitaba aproximadamente 50MIPS de trabajo DSP en números de punto fijo de 24 bits por zona. Pero debido a que sabía que este sistema funcionaría durante un tiempo extremadamente largo y sabía que era crítico que nunca haga clic o explote ni nada de eso. Elegí implementarlo con un DSP de baja potencia por zona y un solo microcontrolador PIC que desempeñaba la función de administración del sistema. De esta manera, incluso si una de las funciones uC fallara, tal vez un ataque DDOS en su puerto Ethernet, el DSP felizmente seguiría funcionando y es probable que nadie lo sepa.

Por lo tanto, el microcontrolador desempeñó el papel de ejecutar la pantalla LCD de caracteres de 2 líneas, algunos botones, monitoreo de temperatura y control del 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 gestionó los DSP a través de una conexión en 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 donde me he encontrado con DSP:

* Audio de gama alta: receptores de gama muy alta y equipos de mezcla y procesamiento 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 inferior y medio del espacio de audio / video / similar han sido asumidos por procesadores de aplicaciones que combinan una CPU de propósito general con motores de descarga co-proc para diversas aplicaciones.

marca
fuente
1
Otra adición 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 las secuencias de E / S. Soluciones como esta se están volviendo más comunes. Estamos utilizando este sistema: embeddedarm.com/products/board-detail.php?product=ts-7800 para acelerar el desarrollo durante un breve tiempo de comercialización 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 más bajo / valor esperado.) - Wouter Simons hace 33 segundos
Wouter Simons
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.
stevenvh
15

Muchos procesadores de señal digital 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 'ajuste', para permitir que un búfer se use repetidamente sin tener que usar un código manual para garantizar el ajuste de los punteros. El 3205x, por ejemplo, tiene un registro de "inicio del búfer" y "fin del 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 se propagan transportan MSB a LSB, en lugar de viceversa; Esto permite el direccionamiento de módulo-N si N es una potencia de 2, aunque las cosas se almacenan en 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 permiten esto 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 'loop-end'; si coincide y el bucle está habilitado, el contador del programa se volverá a cargar con 'loop-start' (de lo contrario, se incrementará). Si 'loop-count' es cero, el looping estará deshabilitado; de lo contrario, se reducirá el 'conteo de bucles'.

Tenga en cuenta que muchos DSP tendrán buses separados para permitir que ambos operandos de una acumulación múltiple se recuperen simultáneamente; Nunca he visto un no DSP que pueda hacer eso. Si bien no conozco ninguna característica que un chip debe 'carecer' para ser un DSP, el espacio de silicio adicional requerido para permitir la obtención de doble operando es el espacio de silicio que no se está utilizando para algún otro propósito más útil en general.

Super gato
fuente
Estaba familiarizado con la acumulación múltiple, pero el direccionamiento de módulo y la ejecución repetida de código sin recuperación eran características con las que no estaba familiarizado.
Kevin Vermeer
1
Tienes muchas respuestas geniales, y es genial que trabajes tanto en preguntas viejas como nuevas. Revisaría y votaría todas sus respuestas si no fuera por los algoritmos de detección de fraude y el límite diario de repeticiones . ¡Sin embargo, espere unos pocos al día! ¡Sigan con el increíble trabajo!
Kevin Vermeer
@reemrevnivek: Me alegra que encuentres mis respuestas útiles. Como señalé, el diseño para la acumulación múltiple de doble recuperación 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 acumulación múltiple y módulo (utilizando 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.
supercat
MAC es una instrucción de tres operandos a <- a + b * c no dos.
Trismegistos
@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 múltiple no repetida pueden tener tres operandos, un MAC de repetición solo obtendrá dos operandos por ciclo.
supercat
13

Una cosa que los demás no mencionaron es el comportamiento en el desbordamiento numérico. En los procesadores normales, esto generalmente pasa 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 . Es decir, en el 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.

starblue
fuente
9

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 verdaderas matemáticas de procesamiento de señal digital como FFT (un ejemplo). Hacer una FFT en un microcontrolador estándar llevará mucho tiempo en comparación con realizarlo en un MAC del DSP.

Procesar señales I2C y en serie no es lo mismo que procesar formas de onda en un DSP. Se está llevando a cabo 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 DSP : DSP vs. Microprocesador

Jay Atkinson
fuente
Vi un acumulador en el diagrama de bloques 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 se envían 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. en el DSP de alguna manera!
Kevin Vermeer
3
La mayor parte del procesamiento de señales está compuesto matemáticamente por matrices y / o vectores multiplicadores juntos. El proceso de hacer esto resulta en muchas respuestas = a b + c d + e * f cálculos de tipo. En una CPU sin un MAC que requiere muchas instrucciones, con un MAC puede ser muchas veces más rápido.
Mark
1
Este comentario es totalmente INCORRECTO. No todos, pero muchas MCU incluyen multiplicadores de hardware con funciones MAC. Esto no tiene nada que ver con una distinción DSP vs. MCU. Sí, es más probable que los DSP tengan un MAC que un MCU, pero existen diferencias mucho más fundamentales que esta pequeña característica.
2
Si retrocede 15 años, casi no verá MCU con esta función. Si elimina el MAC o una función equivalente del DSP, ¿puede decir honestamente que tiene un DSP? Ciertamente no me gustaría comprar uno si no lo tuviera o algo cercano también. 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 diciendo "Completamente incorrecto". Puede publicar una respuesta sobre la profundidad que cree que debe cubrirse.
Jay Atkinson
@adrian: Tu comentario es totalmente INCORRECTO. Si una MCU tiene una función MAC, se comercializará como DSP.
Johan. A
5

Lo que solía diferenciar a los DSP era su optimización para operaciones aritméticas, especialmente la multiplicación, aunque en estos días no es raro que los microcontroladores vengan dotados de instrucciones de multiplicación y división. Todavía puede haber una ventaja para hacer el procesamiento de señal con chips DSP, en la medida en que algunos de ellos tengan soporte de hardware para matemática de punto fijo (por ejemplo, la lib 'TQ3Q' 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, trataría de clasificar si la aplicación requería cálculos repetitivos con solo una lógica de cambio de modo ocasional, o solo necesita realizar secuencias cortas de cálculos cuando sea necesario. El primero sería el DSP, el último un micro.

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

JustJeff
fuente
1
Creo que entiendo la diferencia de intenciones (su segundo párrafo), pero no estoy seguro de por qué lo haría cuando los micros no tienen la capacidad matemática similar a DSP y los DSP tienen conjuntos periféricos micro-similares. Como dije en mi OP, el dsPIC33 y el PIC24 pueden tener un conjunto de características casi idéntico y un precio idéntico. Corríjame 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 los cambios de modo, como un doble tubería o FLASH más rápido.
Kevin Vermeer
@reemrevnivek: así que estás diciendo, ¿por qué no elegir siempre un DSP?
JustJeff
@JustJeff: Sí, eso es exactamente lo que estoy diciendo.
Kevin Vermeer
1

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

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

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

Tampoco se señaló 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 ejecutándose en un solo ciclo (o en el mismo número de ciclos). Esto permite la capacidad de programar una respuesta de interrupción determinista (un conteo de reloj fijo entre la línea de interrupción que se activa y la primera instrucción en el ISR ejecutada), mientras que la mayoría de los otros procesadores responden a las interrupciones en un número variable de ciclos de reloj, dependiendo de qué punto en una instrucción de varios ciclos se produce la interrupción. El tiempo de ejecución fijo elimina la fluctuación de tiempo de reloj múltiple en salidas repetitivas.

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

Recuerdo que hace 10 a 15 años leí que los procesadores convencionales de Intel estaban agregando MAC e instrucciones similares para hacer el procesamiento de señal "nativo" (en lugar de en 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 confiaban en el 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 / decodificación de video, así como la grabación / producción de audio, se aceleran enormemente mediante instrucciones de tipo DSP.

usuario23081
fuente
No hay nada nuevo bajo el sol. <g>En los primeros días de C, los operadores de incremento y decremento fueron diseñados para traducirse directamente en instrucciones de hardware individuales en el PDP.
Pete Becker