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.
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.
Muchos procesadores de señales digitales 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 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.
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
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
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.
<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.
wooter simons
stevenvh