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.
Muchos procesadores de señal digital incluyen una variedad de funciones que no se encuentran en los procesadores 'ordinarios':
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.
fuente
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.
fuente
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
fuente
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
fuente
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.
fuente
<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.