Página 1 de 2

dsPIC ou ARM-CortexM3 ??

MensagemEnviado: 13 Jul 2008 21:33
por klausenner
Alguém sabe dizer qual das duas arquiteturas (dsPIC ou ARM-CortexM3) é a mais indicada, com melhor desempenho para trabalhar com calculos complexos como filtros de Kalman e DFT (Goertzel) ?

A idéia do projeto e a seguinte, o miconcontrolaor vai receber dados de três acelerômetros e três giroscópios e fazer o controle de movimento e estabilização de um aeromodelo nos três eixos.

MensagemEnviado: 14 Jul 2008 10:53
por Ander_sil
ARM-Cortex-M3

MensagemEnviado: 14 Jul 2008 13:09
por tcpipchip
Certo...
Mas qual a justificativa ? Seria interessante expor para nos!

Re: dsPIC ou ARM-CortexM3 ??

MensagemEnviado: 16 Jul 2008 12:37
por polesapart
klausenner escreveu:Alguém sabe dizer qual das duas arquiteturas (dsPIC ou ARM-CortexM3) é a mais indicada, com melhor desempenho para trabalhar com calculos complexos como filtros de Kalman e DFT (Goertzel) ?

A idéia do projeto e a seguinte, o miconcontrolaor vai receber dados de três acelerômetros e três giroscópios e fazer o controle de movimento e estabilização de um aeromodelo nos três eixos.


Tanto uma quanto outra arquitetura parecem adequadas. Não sou profundo conhecedor da arquitetura dsPIC, ou de DSPs de uma forma geral, e não sei até que ponto as técnicas DSP estão disponíveis no dsPIC, mas em geral nestas aplicações, um DSP "verdadeiro" consegue uma relação trabalho/Mhz de clock bastante superior ao que dispõe uma cpu sem estes recursos. Porém dado que o cortex tem um clock superior e (até onde sei) compiladores melhores estão disponíveis para ele, talvez esta relação se inverta. Embora o instruction set do cortex m3 contenha algumas instruções usadas por ex. para fazer MAC (multiply and accumulate), não é exatamente um DSP (os arm9 com código "E" levam vantagens, assim como outros membros da família cortex).

Mas na prática, eu vi uma implementação de Goertzel feita para o arm7tdmi e parecia rodar "como uma brisa", não sei dizer quanto a outros métodos mais proximos de um fast fourier transform, que precisam de um estado maior e mais cálculos a cada entrada de dados.

O filtro kalman também não é um algoritmo complexo já que com cada entrada (dado disponível do sensor) são efetuados alguns cálculos com o estado anterior e isto gera nova saída.

Eu arrisco dizer que dado o teu número de sensores e a taxa de amostragem que suponho que eles gerem, talvez seja possível fazer com um dsPIC de 33mhz, e certamente é possível fazer com um cortex m3.

O Marcelo Samsoniuk que está na lista e tem trabalhado com DSP pode te sugerir outras opções além destas, que talvez tenham uma relação custo/benefício mais interessante.

MensagemEnviado: 18 Jul 2008 15:08
por klausenner
polesapart Em primeiro lugar obrigado pela dica.

Eu estive dando uma olhada no datasheet de alguns dsPIC e vi que eles possuem algumas funções de DSP, não sei até que ponto ele teria ou não vantagem em relação ao Cortex-M3 rodando a 72Mhz
Eis alguns Recursos encontrados nos dspic:
16 registradores de uso geral de 16 bits sendo quatro mapeados para operações de DSP.
Dois acumuladores 40 bits
Cinco ciclos (Fixo) de latência nas Int.
Até 118 fontes de Int e cinco Int externas (todas vetorizadas)
Bit reverse (FFT).
76% das instruções executadas em um único ciclo


Por outro lado o CortexM3, segundo vi no site da ARM, é:

70% mais eficiente por MHz que os ARM7TDMI-S
Multiplicação em um único ciclo e divisão por hardware.
12 ciclos de latência nas int.
1.25 DMIPS/MHz

No site também fala que a família ARMcortex tem maior facilidade de programação em relação aos ARM7. Pelo que pude ver, acredito que adotar o Cortex-M3 seja a melhor escolha tanto pelo maior desempenho em relação ao dsPIC como pelo custo beneficio.

Fiz essa comparação de valores no site da digi-key:

dsPIC33, 44 PIN, 128 KB, 8KB RAM, 40 MIPS = $8,48

SMT32, 48 PIN, 128 KB, 20KB RAM, 1.5 DIMPS/MHz - operando a 72MHz = $6.35

Obs: Valores para uma unidade.

MensagemEnviado: 19 Jul 2008 02:07
por msamsoniuk
depende da aplicacao!

se a aplicacao requer processamento de sinais que sao sensiveis a alteracoes na temporizacao, eh melhor usar um DSP dedicado. se vc nao tem essa necessidade, um processador generico deve atender seu requisito. note que nao eh uma questao de performance: vc encontra pequenos DSPs em tarefas especificas ateh mesmo em maquinas que possuem processadores grandes, como os powerpcs. o que esta em jogo eh o determinismo: quando vc roda um filtro digital, por exemplo, vc quer ter uma banda constante, sem delay ou jitter.

em um DSP vc possui coeficientes e amostras armazenadas em memorias xy cujo tempo de acesso eh deterministico e nao insere jitter. alem disso vc roda o filtro a cada amostra, assim nao insere delay. se insere, eh um jitter e delay minimos!

em um processador generico, como um powerpc, vc tem uma performance bruta infinitamente maior, mas um sistema um tanto quanto inconstante: as primeiras rodadas do filtro vao ser mais lentas e ele vai melhorar com o tempo conforme a cache acumula mais acertos, o que insere jitter no sinal. qdo o sistema atende uma interrupcao ou para para rodar outra tarefa, o seu sinal vai para o espaco! para fugir disso, uma opcao eh usar o hardware que acompanha estes processadores, como canais de DMA, de modo que os canais de DMA podem fazer o in/out em cadencia constante sem jitter em buffers que sao processados em fatias de tempo do processador, qto maior os buffers, menos jitter... porem mais delay! dae vc tem q chegar em um meio termo, mas nao eh bom como um DSP dedicado. se vc nao tem essa necessidade, porem, um processador generico fica sempre mais flexivel e facil de trabalhar.

entao vc tem q escolher conforme sua necessidade.

MensagemEnviado: 29 Jul 2008 17:28
por klausenner
Marcelo entendi o que você quis dizer.
Mas eu iria usar ou dsPIC ou CORTEX somente para essa função, ou seja amostrar a tensão dos sensores e filtrar, e entregar esses dados para um outro processador via (SPI, RS232)sendo assim o que eu queria mesmo era identificar qual deles seria o mais eficiente para essa tarefa.

MensagemEnviado: 26 Ago 2008 18:34
por mazzer
Ola!

Vou dar um pitaco, verifique o tamanho do acumulador do Cortex (não manjo nada de ARM).

Quando você multiplica dois números, o tamanho em bits do resultado é a soma do tamanho em bits dois fatores.

Ex.: 0xFF * 0xFF = 0xFE01 (8bits x 8bits = 16 bits)

Dependendo da aplicação, você vai precisar de um acumulador grande.

Em filtros digitais a função MAC (multiplicar e acumular) é muito mais usada do que a somente multiplicação. O acumulador também precisa ter uma folga para essas somas.

Este projeto é comercial ou apenas hobby?

Abraço,

Mazzer

MensagemEnviado: 26 Ago 2008 18:57
por polesapart
mazzer escreveu:Ola!

Vou dar um pitaco, verifique o tamanho do acumulador do Cortex (não manjo nada de ARM).
cortei aqui


O bicho tem mais que uma dúzia de registradores de 32 bits e tem instruções multiply e multiply & accumulate capaz de gerar resultados em 64 bits.

Ah, e se lembro bem tem instruçoes específicas pra multiplicar e acumular encarando os registradores como se fossem numeros de ponto fixo em formato 16.16 bits...

MensagemEnviado: 27 Ago 2008 18:12
por Viktor
Isto: http://www.bdti.com/articles/m4k.pdf
sugere ustilizar, neste caso, o PIC32

MensagemEnviado: 27 Ago 2008 19:03
por Renato
No final deste "paper" consta:

Uma significante vantagem que o Cortex M3 tem sobre o core M4K é
que pode desempenhar uma multiplicação 32 X 32 bit num único
ciclo de clock.

Logo ...

MensagemEnviado: 27 Ago 2008 19:18
por Viktor
Acredito que para DSP os 32 registradores fazem a deiferença neste caso. Uma coisa que não gosto no ARM é que uma divisão não fornece o resto, coisa que o MIPS faz. Atualmente só trabalho com ARM ,porém sempre gostei do MIPS e estou pensando em brincar com ele. Temos que levar em consideração os DMIPS/MHZ que são 1,5 contra 1,25 no Cortex.

MensagemEnviado: 27 Ago 2008 20:39
por msamsoniuk
mas eh aquele negocio: processadores de uso geral mais potentes nao tem um cadenciamento muito deterministico das instrucoes como um pequeno DSP, entao vc precisa assegurar recursos de IO e memoria para compensar isso.

infelizmente o artigo comparativo nao fala nada sobre os recursos de IO deles! seria interessante verificar, pois eh obvio que um processador menor com canais de DMA eh muito melhor que um processador maior sem canais de DMA ;)

MensagemEnviado: 27 Ago 2008 20:56
por proex
Viktor escreveu:Acredito que para DSP os 32 registradores fazem a deiferença neste caso. Uma coisa que não gosto no ARM é que uma divisão não fornece o resto, coisa que o MIPS faz. Atualmente só trabalho com ARM ,porém sempre gostei do MIPS e estou pensando em brincar com ele. Temos que levar em consideração os DMIPS/MHZ que são 1,5 contra 1,25 no Cortex.


Se de 1,25 para 1,5 faz tanta diferença assim e pesa na escolha entre um ou outro, pula logo para o Blackfin.

Esse sim faz a diferença pois vc pode escolher entre 300, 400, 600 ou 800 MIPS, e nao ficar brigando por miseráveis 5MIPS a mais ou a menos ehehehheheee. :lol:

Infelizmente PIC32 ja nasceu morto.

MensagemEnviado: 01 Set 2008 10:19
por polesapart
Viktor escreveu:Acredito que para DSP os 32 registradores fazem a deiferença neste caso. Uma coisa que não gosto no ARM é que uma divisão não fornece o resto, coisa que o MIPS faz. Atualmente só trabalho com ARM ,porém sempre gostei do MIPS e estou pensando em brincar com ele. Temos que levar em consideração os DMIPS/MHZ que são 1,5 contra 1,25 no Cortex.


De fato, não fornece o resto e seria fácil implementar isto em hardware.
Mas a ARM gosta de economizar gates, pois é fácil fazer isto em software:

@ (funcao que retorna o resto da divisao; dividendo em r0, divisor em r1)
divmod:
mov r3, r0
udiv r0, r0, r1
mls r0, r1, r0, r3
bx lr