Qual é a diferença entre um DSP e um microcontrolador padrão?

84

Entendo que um DSP é otimizado para processamento de sinal digital, mas não tenho certeza de como isso afeta a tarefa de escolher um IC. Quase tudo o que faço com um microcontrolador envolve o processamento de sinais digitais!

Por exemplo, vamos comparar o popular Microchip dsPIC30 ou 33 DSP e sua outra oferta de 16 bits, o microcontrolador de uso geral PIC24. O dsPIC e o PIC podem ser configurados para ter a mesma memória e velocidade, possuem conjuntos periféricos semelhantes, capacidade A / D semelhante, contagem de pinos, consumo de corrente etc. A única grande diferença que aparece na lista do Digikey é a localização do oscilador. Não sei dizer a diferença observando os preços (ou qualquer outro campo).

Se eu quiser trabalhar com dois sensores externos usando vários protocolos (I2C, SPI, etc.), faça algumas conversões A / D, armazene alguns dados em um flash serial, responda a alguns botões e envie dados para um caractere LCD e sobre um FT232 (um sistema incorporado bastante genérico), qual chip devo usar? Não parece que o DSP fique atrás do PIC de forma alguma, e oferece esse misterioso "DSP Engine". Meu código sempre faz matemática e, de vez em quando, preciso de ponto flutuante ou números fracionários, mas não sei se vou me beneficiar do uso de um DSP.

Uma comparação mais geral entre os DSPs e microcontroladores de outro fornecedor seria igualmente útil; Estou apenas usando esses como ponto de partida para discussão.

Kevin Vermeer
fonte

Respostas:

64

Para ser honesto, a linha entre os dois está quase acabando hoje em dia e existem processadores que podem ser classificados como ambos (por exemplo, o AD Blackfin).

De um modo geral:

Microcontroladores são processadores matemáticos inteiros com um subsistema de interrupção. Alguns podem ter unidades de multiplicação de hardware, outros não, etc. O ponto é que eles foram projetados para matemática simples e principalmente para controlar outros dispositivos.

Os DSPs são processadores otimizados para processamento de sinal de streaming. Eles geralmente têm instruções especiais que aceleram tarefas comuns, como acumular multiplicar em uma única instrução. Eles também costumam ter outras instruções de vetor ou SIMD. Historicamente, eles não eram sistemas baseados em interrupção e operavam com sistemas de memória não padrão otimizados para seus objetivos, tornando-os mais difíceis de programar. Eles geralmente eram projetados para operar em um grande loop processando um fluxo de dados. Os DSPs podem ser projetados como processadores de número inteiro, ponto fixo ou ponto flutuante.

Historicamente, se você quisesse processar fluxos de áudio, fluxos de vídeo, fazer controle rápido do motor, qualquer coisa que exigisse o processamento de um fluxo de dados em alta velocidade, você procuraria um DSP.

Se você deseja controlar alguns botões, medir uma temperatura, executar um LCD de caracteres, controlar outros ICs que estão processando coisas, você usaria um microcontrolador.

Hoje, você encontra principalmente processadores do tipo microcontrolador de uso geral, com instruções integradas do tipo DSP ou co-processadores integrados para lidar com dados de streaming ou outras operações DSP. Você não vê DSPs puros mais usados, exceto em setores específicos.

O mercado de processadores é muito mais amplo e embaçado do que costumava ser. Por exemplo, eu dificilmente considero um SoC ARM córtex-A8 um micro controlador, mas provavelmente se encaixa na definição padrão, especialmente em um pacote PoP.

Edição: Figurado eu adicionaria um pouco para explicar quando / onde eu usei DSPs, mesmo nos dias de processadores de aplicativos.

Um produto recente que eu projetei estava processando áudio com canais X de entrada e canais X de saída por 'zona'. O uso pretendido para o produto significava que muitas vezes ficava sentado ali, processando os canais de áudio por anos sem que ninguém o tocasse. O processamento de áudio consistia em vários filtros e funções acústicas. O sistema também era "plugável a quente", com a capacidade de adicionar algum número de 'zonas' independentes, tudo em uma caixa. Foi um total de 3 projetos de PCB (placa principal, um backplane e um módulo plug-in) e o backplane suportou 4 módulos plug-in. Um projeto bastante divertido, como eu fazia sozinho, eu fiz o design do sistema, o esquema, o layout da placa de circuito impresso e o firmware.

Agora eu poderia ter feito a coisa toda com um único núcleo ARM volumoso, eu só precisava de cerca de 50MIPS de trabalho DSP em números de ponto fixo de 24 bits por zona. Mas porque eu sabia que esse sistema funcionaria por um tempo extremamente longo e sabia que era fundamental que ele nunca clique ou pop ou algo assim. Optei por implementá-lo com um DSP de baixa potência por zona e um único microcontrolador PIC que desempenhava o papel de gerenciamento do sistema. Dessa forma, mesmo que uma das funções do uC travasse, talvez um ataque DDOS em sua porta Ethernet, o DSP continuaria feliz e provavelmente nunca saberia.

Assim, o microcontrolador desempenhou o papel de executar o LCD de 2 linhas, alguns botões, monitoramento de temperatura e controle do ventilador (havia também alguns amplificadores de áudio de alta potência em cada placa) e até serviu uma página da web no estilo AJAX via Ethernet. Ele também gerenciava os DSPs por meio de uma conexão serial.

Então isso é uma situação em que, mesmo nos dias em que eu poderia ter usado um único núcleo ARM para fazer tudo, o design ditava um IC de processamento de sinal dedicado.

Outras áreas em que eu encontrei DSPs:

* Áudio de ponta - Receptores de ponta muito alta e equipamentos de mixagem e processamento de qualidade de concerto

* Processamento de radar - Eu também usei núcleos ARM para isso em aplicativos low-end.

* Processamento de sonar

* Visão computacional em tempo real

Na maioria das vezes, as extremidades baixa e média do espaço de áudio / vídeo / similar foram assumidas pelos processadores de aplicativos que combinam uma CPU de uso geral com mecanismos de descarregamento co-proc para várias aplicações.

Marca
fonte
1
Outra adição, talvez. Em uma aplicação com cerca de 80 linhas de E / S e 12 entradas analógicas, agora estamos usando um único microcontrolador com um FPGA vinculado para lidar com os fluxos de E / S. Soluções como essa estão se tornando mais comuns. Estamos usando este sistema: embeddedarm.com/products/board-detail.php?product=ts-7800 para acelerar o desenvolvimento por um curto tempo de lançamento no mercado e devo dizer que funciona muito bem (é claro que o preço de esse produto pode não ser adequado para aplicativos com um preço de venda mais baixo / valor esperado.) - Wouter Simons há 33 segundos
Wouter Simons
Nem todos os microcontroladores têm interrupções. Em aplicativos de missão crítica, eles nunca são usados. Caso em questão: o controlador Viper usado em aviões de combate.
Stevenvh
15

Muitos processadores de sinais digitais incluem uma variedade de funções não encontradas em processadores "comuns":

  1. A capacidade de executar um acúmulo múltiplo, com os dois operandos buscados na RAM, a uma taxa de um ciclo por par de operandos.
  2. A capacidade de executar alguma forma de endereçamento de 'módulo' ou 'quebra automática', para permitir que um buffer seja usado repetidamente sem a necessidade de usar o código manual para garantir a quebra dos ponteiros. O 3205x, por exemplo, possui um registro 'buffer start' e 'buffer end'; se o código tentar aumentar ou diminuir um registro de ponteiro que aponte para 'buffer start', o processador carregará o ponteiro com 'buffer end'. O 3205x também possui um modo de transporte reverso, no qual propagações de endereço propagam o MSB para o LSB, em vez de vice-versa; isso permite o endereçamento do módulo N se N for uma potência de 2, embora as coisas sejam armazenadas em sequência confusa.
  3. A capacidade de especificar que uma instrução seja executada 'n' vezes sem precisar ser buscada novamente. Alguns processadores como o 8088 incluem isso para algumas instruções, mas muitos DSPs permitem isso em muitas instruções.
  4. A capacidade de especificar que um bloco de código seja executado repetidamente, até 'n' vezes, sem necessidade de ramificação. Antes de cada código, o contador do programa é verificado no registro 'loop-end'; se corresponder e o loop estiver ativado, o contador do programa será recarregado com 'loop-start' (caso contrário, será incrementado). Se 'loop-count' for zero, o loop será desativado; caso contrário, 'loop-count' será decrementado.

Observe que muitos DSPs terão barramentos separados para permitir que os dois operandos de um acúmulo múltiplo sejam buscados simultaneamente; Eu nunca vi um não-DSP que pudesse fazer isso. Embora eu não conheça nenhum recurso que um chip deva "carecer" para ser um DSP, o espaço extra de silício necessário para permitir a busca de dois operandos é o espaço de silício que não está sendo usado para outros fins mais úteis.

supercat
fonte
Eu estava familiarizado com o acúmulo múltiplo, mas o endereçamento de módulos e a execução repetida de código sem busca eram recursos que eu não conhecia.
Kevin Vermeer
1
Você tem muitas ótimas respostas, e é legal trabalhar em perguntas antigas e novas. Gostaria de revisar e aprovar todas as suas respostas se não fossem os algoritmos de detecção de fraude e o limite diário de representação . Espere alguns por dia, no entanto! Mantenha o trabalho incrível!
Kevin Vermeer
@reemrevnivek: Que bom que você achou minhas respostas úteis. Como observei, o design para busca múltipla e acumulação dupla é um recurso que eu não vi em processadores que não são DSP. O ARM faz um bom trabalho com operações que exigem endereçamento de acumulação múltipla e módulo (usando um endereço efetivo de, por exemplo, (R0 + (R1 >> 24)) para uma tabela de 256 bytes), mas um ARM típico exigiria quatro instruções para fazer o que um DSP faz em um ciclo.
supercat
MAC é uma instrução de três operandos a <- a + b * c e não dois.
precisa
@Trismegistos: Uma operação MAC repetida de item N envolverá um total de 2N + 1 operandos. Não é necessário buscar o acumulador antes de cada item e armazená-lo depois. Embora os processadores com adição múltipla não repetida possam ter três operandos, um MAC repetido buscará apenas dois operandos por ciclo.
precisa
13

Uma coisa que os outros não mencionaram é o comportamento no estouro numérico. Nos processadores normais, isso geralmente envolve o valor máximo para o valor mínimo.

Para o uso do DSP, geralmente há pelo menos uma opção para usar a saturação . Ou seja, no estouro, o valor permanece no valor máximo, o que produz menos distorção e imita melhor o comportamento dos circuitos analógicos.

starblue
fonte
9

A maior diferença entre o DSP e o uController padrão é o recurso de acumulação múltipla (MAC) do DSP que o uC não possui. Isso é valioso se você deseja executar uma matemática matemática de processamento de sinal digital, como a FFT (um exemplo). A execução de uma FFT em um microcontrolador padrão levará muito tempo em comparação com a execução em um MAC do DSP.

Processar sinais I2C e seriais não é o mesmo que processar formas de onda em um DSP. Processos totalmente diferentes em andamento, uma vez que os sinais seriais são apenas estrondosos.

Aqui está uma discussão semelhante em um fórum DSP : DSP vs. Microprocessador

Jay Atkinson
fonte
Vi um acumulador no diagrama de blocos DSP, mas não sabia o que fazia. Bom saber! Entendo que I2C e serial não são o mesmo que processar formas de onda quando você envia dados ASCII, mas alguns periféricos (acelerômetros de acesso serial, A / D externos, GPS etc.) codificam formas de onda em seus fluxos de dados. no DSP de alguma forma!
Kevin Vermeer
3
a maior parte do processamento de sinal é matematicamente composta de matrizes e / ou vetores multiplicadores juntos. O processo de fazer isso resulta em muitos cálculos do tipo resposta = a b + c d + e * f. Em uma CPU sem um MAC que exige muitas instruções, com um MAC pode ser muitas vezes mais rápido.
Mark
1
Este comentário é totalmente errado. Nem todos, mas muitos MCUs incluem multiplicadores de hardware com funções MAC. Isso não tem nada a ver com uma distinção DSP x MCU. Sim, é mais provável que os DSPs tenham um MAC que um MCU, mas há diferenças muito mais fundamentais que esse pequeno recurso.
2
Se você voltar o relógio 15 anos, não verá quase nenhum MCU com esse recurso. Se você remover o MAC ou um recurso equivalente do DSP, você pode dizer honestamente que possui um DSP? Eu certamente não gostaria de comprar um se não o tivesse ou algo parecido também. Existem diferenças de arquitetura quando você entra em Harvard vs. von Neuman e no acesso à memória, mas eu estava dando uma resposta simples sem precisar de uma explicação longa e detalhada. Eu acho que você é muito duro com o seu comentário dizendo "Flat out WRONG". Você pode postar uma resposta discutindo a profundidade que acha que precisa ser coberta.
Jay Atkinson
@adrian: Seu comentário é totalmente errado. Se um MCU tiver uma função MAC, ele será comercializado como um DSP.
precisa saber é o seguinte
5

O que costumava diferenciar os DSPs era a otimização para operações aritméticas, especialmente a multiplicação, embora atualmente não seja incomum que microcontroladores sejam dotados de instruções de multiplicação e divisão. Ainda pode haver uma vantagem no processamento de sinais com chips DSP, na medida em que alguns deles têm suporte de hardware para matemática de ponto fixo (por exemplo, a biblioteca 'IQ' da TI TMS320s), enquanto os micros têm mais probabilidade de incluir apenas unidades inteiras.

Pessoalmente, quando confrontado com a escolha entre os dois para um design, tentaria categorizar se o aplicativo pedia cálculos repetitivos com apenas uma lógica ocasional de mudança de modo ou apenas precisava executar pequenas sequências de cálculos conforme necessário. O primeiro seria o DSP, o segundo um micro.

E então, é claro, existem coisas divertidas, como o OMAP, que têm os dois. = P

JustJeff
fonte
1
Acho que entendo a diferença de intenção (seu segundo parágrafo), mas não sei por que faria isso quando os micros não têm capacidade matemática do tipo DSP e os DSPs têm conjuntos periféricos do tipo micro. Como eu disse no meu OP, o dsPIC33 e o PIC24 podem ter um conjunto de recursos quase idênticos e um preço idêntico. Corrija-me se estiver errado, mas, embora o DSP tenha instalações de processamento repetitivo, não acho que o PIC24 (ou qualquer outro micro que eu tenha visto) tenha alguma vantagem sobre um DSP em mudanças de modo, como um duplo pipeline ou FLASH mais rápido.
Kevin Vermeer
@reemrevnivek: então você está dizendo, por que nem sempre escolher um DSP?
JustJeff
@JustJeff: Sim, é exatamente o que estou dizendo.
Kevin Vermeer
1

Ainda outro recurso possível que a instrução MAC pode ter é o incremento automático dos registradores que apontam para os multiplicandos. Programei um DSP Zilog que usava o núcleo Clarkspur (ponto fixo de 16 bits). Era uma variação da arquitetura de Harvard com três barramentos, permitindo acessar três áreas da memória simultaneamente: memória de instrução, banco de dados 1 e banco de dados 2. Com um fluxo de dados em um banco de dados e coeficientes no outro, era possível faça um filtro FIR com uma instrução de ciclo único por operação de incremento de MAC / ponteiro. Em C, a instrução única se parece com:

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

E é claro que esta instrução é repetida para cada coeficiente.

Também não mencionado anteriormente, os DSPs (pelo menos os mais antigos que usei) geralmente são de arquitetura RISC e são projetados com muitas ou mais instruções executadas em um único ciclo (ou no mesmo número de ciclos). Isso permite a capacidade de programar respostas determinísticas de interrupção (uma contagem fixa de clock entre a linha de interrupção que fica ativa e a primeira instrução no ISR executada), enquanto a maioria dos outros processadores responde a interrupções em um número variável de ciclos de clock, dependendo de qual apontar em uma instrução de vários ciclos a interrupção ocorre. O tempo de execução fixo elimina o jitter de várias horas em saídas repetitivas.

Para a comparação do OP do Microchip Pic e do DSPic, entendi que, quando o DSPic foi introduzido, era principalmente apenas um Pic com instruções MAC e alguns outros recursos adicionais, que certamente podem acelerar um microcontrolador executando funções de processamento de sinal, mas (devido à falta de qualquer um dos outros recursos discutidos), pode estar pressionando a terminologia para chamá-lo de DSP. O MSP430 também está disponível em versões com um MAC de hardware, mas ninguém chama ISSO de DSP.

Lembro-me de 10 a 15 anos atrás que os processadores mainstream da Intel estavam adicionando MAC e instruções semelhantes para processar processamento de sinal "nativo" (em vez de placas de expansão com processadores DSP dedicados, comuns na produção de áudio nos anos 90) - algumas baratas Os modems de barramento para PC dial-up de 56k eram apenas conversores A / D e D / A, e contavam com o processador principal para executar as funções de codificação e decodificação do sinal do modem; portanto, havia uma demanda por um uso mais eficiente do processador ali. Os usos de mídia, como edição / codificação / decodificação de vídeo, bem como gravação / produção de áudio, são bastante acelerados pelas instruções do tipo DSP.

user23081
fonte
Não há nada de novo sob o sol. <g>Nos primeiros dias de C, os operadores de incremento e decremento foram projetados para serem traduzidos diretamente em instruções de hardware únicas no PDP.
Pete Becker