FPGA - ARM - DSP...etc...

Para "abobrinhas" use o " Boteco"

Moderadores: andre_luis, 51, guest2003, Renie

FPGA - ARM - DSP...etc...

Mensagempor Flaviofrc » 16 Jan 2008 19:49

Olá amigos,

Já a alguns anos faço projetos relativamente simples com alguns tipos de processadores tipo PIC e 8051 e naturalmente nunca senti a necessidade de utilizar um processador diferente ou outro dispositivo qualquer.

Mas uma pergunta me veio a cabeça e sei que a resposta pode ser bem complexa mas ai vai.

Até que ponto de um projeto eu teria de usar um FPGA ou um ARM ao envez de um uC ou DSP?

Para tentar facilitar a reposta vou simplificar:

1- Exemplos de aplicações de um FPGA:.....

2- Exemplos de aplicações com DSPs ou DSPics:....

3- Exemplo de aplicações com ARM:......


Desde já agradeço as respostas.
Flavio
Flaviofrc
Byte
 
Mensagens: 111
Registrado em: 16 Out 2006 17:32
Localização: São Paulo

Mensagempor EDSONCAN » 17 Jan 2008 05:49

1- Exemplos de aplicações de um FPGA:.....

Reconhecimento de um padrão de imagem;
Sistema de medição de deslocamento de fase em frequencias altas
Captura de sinal de alta velociodade
CLP´s de alta performance tipo RIO da National

2- Exemplos de aplicações com DSPs ou DSPics:....

Equaliadores ativos
Sistema de controle vetorial de motores motores

3- Exemplo de aplicações com ARM:......
Seu celular provavelmente

Edson
EDSONCAN
Word
 
Mensagens: 876
Registrado em: 11 Out 2006 14:11

Mensagempor pbernardi » 17 Jan 2008 12:04

Vamos descer um pouco mais, para ver para que servem tais componentes:

DSP: Para onde exige algum tipo de cálculo pesado. É usado em CODECS de áudio e de vídeo, processamento de sinais, alguns simples para fazer reconhecimento de DTMF, p.ex. Em geral, recebe uma quantidade grande de dados, processa e devolve o resultado, ou recebe dados continuamente e devolve resultados continuamente.

ARM e processadores de 32 bits em geral: IMHO, um bom indicativo se o projeto precisa ou não de um processador de 32 bits, é se você precisa colocar um SO nele (linux, o mais comum, mas não o único). Se não precisar, possivemente um ucontrolador de 8 bits dê conta.

FPGA: no ínicio, era mais usado como "glue logic". Muitas vezes saia mais barato usar uma CPLD ou FPGA do que colocar 15 componentes discretos. Mas evoluiu e hoje há uma infinidade de aplicações, que nem dá pra listar direito. Há FPGAs com DSP integrado, com Processador, com Ethernet, simples, rápida, com RAM, com FLASH. Uma notável diferença é que por ser, a grosso modo, um "hardware programável", é muito mais rápido que um processador de mesmo clock. Por exemplo, um processador, para ler um registro, processar algo simples e retornar pode demorar alguns ciclos de clock, enquando, dependendo da aplicação, uma FPGA consegue fazer em um ciclo de clock. Mas isso é genérico, tem casos que processador é melhor que FPGAs, notoriamente em processamentos mais complexos.
But to us there is but one God, plus or minus one - Corinthians 8:6±2. (xkcd.com)
pbernardi
Word
 
Mensagens: 707
Registrado em: 12 Out 2006 19:01
Localização: Curitiba-PR

Mensagempor msamsoniuk » 18 Jan 2008 12:37

como o bernardi disse, o esquema da FPGA ou CPLD eh mesmo eliminar glue-logic. o q vc antigamente faria com um monte de TTL ou um ASIC, vc hoje faz com FPGA ou CPLD. pode imaginar isso pensando em um projeto que vc tem hoje com PIC, ARM ou DSP e quer juntar 2 projetos diferentes. p/ fazer isso vc obviamente precisa de uma certa glue-logic no meio deles, por exemplo, alguns buffers TTL. dependendo do tamanho e custo disso, pode valer a pena colocar tudo de uma FPGA ou CPLD, economizando espaco.

no caso de DSP, tem q pensar q ele eh construido especificamente p/ processar filtros digitais tipo y += k[i]*x[i], motivo pelo qual a caracteristica principal do DSP eh a capacidade MAC (multiplica e acumula). existem diversas outras caracteristicas especificas, mas a maioria delas esta focada no processamento de filtros digitais, entao se vc nao pretende usar para esse tipo de aplicacao, as vantagens de performance do DSP frente a um processador convencional somem.

e finalmente, no caso de um ARM ou processador de 32 bits qualquer, o q pesa sao os recursos extras q os processadores de 32 bits possuem e os menores nao possuem. por exemplo, um coldfire 5208 possui 16 canais de DMA, ethernet e uma unidade MAC integrada, o q permite processar filtros digitais como um DSP ao mesmo tempo em que se pode usar um hardware bem mais avancado (desde q o problema q vc tenha q resolver realmente precise desse hardware).

hoje em dia eh muito comum vc encontrar as 3 coisas juntas: um processador rodando um software de alto nivel (como o linux), operando em conjunto com um DSP, q processa sinais, e uma FPGA escondendo a glue-logic de conexao entre eles.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Peters » 18 Jan 2008 12:53

Marcelo Samsoniuk escreveu:como o bernardi disse, o esquema da FPGA ou CPLD eh mesmo eliminar glue-logic. o q vc antigamente faria com um monte de TTL ou um ASIC, vc hoje faz com FPGA ou CPLD. pode imaginar isso pensando em um projeto que vc tem hoje com PIC, ARM ou DSP e quer juntar 2 projetos diferentes. p/ fazer isso vc obviamente precisa de uma certa glue-logic no meio deles, por exemplo, alguns buffers TTL. dependendo do tamanho e custo disso, pode valer a pena colocar tudo de uma FPGA ou CPLD, economizando espaco.


Sim, mas não somente isso... não esqueça que inclusive vc pode colocar vários DSP's e ARM em uma FPGA!
Resumindo, com uma FPGA vc pode fazer "qualquer" sistema digital. E com a popularização das mesmas, e consequente barateamente, inclusive isso está se tornando viável para pequenas aplicações.

Imagine um sistema onde vc precise de um processador, e alguns circuitos digitais. Vc poderia colocá-los dentro de uma única FPGA, otimizando o seu processador com instruções que sejam úteis a vc, etc...

Estou fazendo exatamente isso atualmente, usando uma FPGA e o processador OpenRisc 1200 e Linux.
Avatar do usuário
Peters
Byte
 
Mensagens: 123
Registrado em: 12 Out 2006 11:42
Localização: Canoinhas, SC

Mensagempor fabim » 18 Jan 2008 14:29

pessoal, desculpe pela pergunta...
Mas como nunca usei, "apesar de saber o que significa a sigla", para que serve a tale da DMA?

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Maia » 18 Jan 2008 20:03

Olá Fabin,
Serve para transferir dados de um lado pro outro sem precisar usar a CPU. Num projeto que estou fazendo recebo um pacote de dados pela serial e coloco numa variável sem usar a CPU. Quando a transf. termina o DMA gera uma int e eu trato os dados. Esse é só um exemplo.
Abraços,
Maia
Avatar do usuário
Maia
Byte
 
Mensagens: 348
Registrado em: 15 Out 2006 16:25
Localização: Rio de Janeiro

Mensagempor msamsoniuk » 19 Jan 2008 02:30

um exemplo legal eh o DMA bidimensional de alguns coldfires novos. como todo controlador DMA, ele possui um ponteiro p/ o periferico e outro p/ o buffer na memoria. entao, no lugar de um contador com o tamanho do buffer, ele possui 2 contadores, um p/ um loop maior e outro p/ um loop menor. adicionalmente, o disparo do DMA pode ser feito por um timer periodico, de modo que, a cada disparo, uma transferencia do loop menor eh feita e o loop maior eh decrementado. qdo o loop maior chega a zero, o controlador pode fazer um auto-reload e puxar um descritor q aponta p/ o proximo buffer bidimensional.

um exemplo pratico de aplicacao seria configurar o timer periodico para 15.75KHz o tamanho do loop menor para 800 e do loop maior para 525. assim, a cada ativacao do timer seria feita uma transferencia automatica de 800 bytes p/ um periferico especial q poderia ser uma FIFO de 800 bytes cadenciada a 25MHz e conectada a um DAC de video. depois de 525 transferencias de 800 bytes, poderia ser feito um auto-reload apontando o controlador de DMA p/ o proximo buffer 800x525 ou p/ o inicio do mesmo buffer, tudo feito automaticamente sem nenhuma intervencao do processador, q pode concentrar esforcos no processamento de novos buffers de imagem, descomprimindo mpeg ou renderizando imagens, por exemplo.

outro exemplo eh uma tipica controladora ethernet avancada: normalmente vc pode construir descritores de rx e tx q apontam para buffers de rx e tx na memoria. cada buffer de tx possui o tamanho q sera transmitido e cada buffer de rx possui o tamanho maximo q pode ser recebido. feito isso, o controlador trabalha de forma automatica sem precisar de intervencao do processador: os buffers de tx sao transmitidos via DMA um a um ateh q nao sobre nenhum descritor de tx e os buffers de rx sao ocupados por frames recebidos via DMA ateh que nao sobre nenhum descritor de rx.

normalmente, apos a transmissao ou recepcao de um frame completo eh gerada uma interrupcao, de modo que o trabalho do processador principal eh encaminhas os buffers recebidos p/ roteamento e providenciar novos buffers de recepcao livres, q podem ser novos buffers ou mesmo os proprios buffers jah transmitidos e q agora estao livres. com isso, o controlador ethernet trabalha praticamente sozinho dentro dos ring-buffers de tx e rx.

em relacao a FPGA, eh claro q existem tanto os processadores em VHDL q irao ocupar celulas da FPGA quanto FPGAs q integram processadores reais on-chip,de modo q a FPGA acaba funcionando como um periferico inteligente nesse ultimo caso. tambem existem FPGAs q integram celulas com funcionalidade MAC de DSPs, de modo q vc pode montar filtros compostos por dezenas de celulas com funcionalidade MAC e ter um filtro paralelo. de quebra muitas FPGAs incluem capacidade de IO q lhes permitem construir interfaces bem variadas, como LVDS, uma flexibilidade q vc nao encontra em processadores convencionais.

em contrapartida, os processadores convencionais podem oferecer uma grande funcionalidade com um custo pequeno: uma FPGA com um powerpc on-chip custa 5x mais q um powerpc cuja funcionalidade eh realmente muito dificil de se reproduzir em VHDL. no mesmo bonde tem a briga entre processadores convencionais e DSPs. embora a definicao das coisas seja bacana, a realidade pode ser mais complexa: um microcontrolador coldfire possui unidade MAC integrada e um DSP blackfin possui flexibilidade de microcontrolador. ambos rodam uclinux, compilam com gcc e oferecem interfaces ethernet. obviamente o DSP premia a performance bruta oferecendo muito mais MMACs pelo mesmo preco, mas o microcontrolador oferece bastante funcionalidade de IO.

cada tecnologia ainda possui suas vantagem e desvantagens, entao ainda eh vantagem mesmo pegar o melhor de cada e montar um sistema misto se assim precisar. no futuro, talvez mais cedo do q esperamos, creio q cada tecnologia vai avancar tanto q vc vai poder fazer qq coisa usando a tecnologia achar mais interessante.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Msconfig » 19 Jan 2008 13:53

Se o DMA precisa do BUS não sobra nada para o processador fazer, ou seja, não há ganho algum de performance.
Avatar do usuário
Msconfig
Byte
 
Mensagens: 116
Registrado em: 18 Nov 2006 16:11

Mensagempor msamsoniuk » 19 Jan 2008 16:18

opa, o ganho eh bastante consideravel, pois a taxa de ocupacao do bus externo eh minima em comparacao com a mesma operacao sendo feita por interrupcao, pois nao existe troca de contexto ou execucao de software durante as transferencias (tudo eh feito por hardware). se vc pensar em um acesso ao bus com 2 clocks na ram e 4 clocks num periferico qualquer, ira consumir apenas 6 clocks por transferencia, enquanto que o atendimento de uma interrupcao iria requerer no minimo 10x mais (salvar contexto, puxar ponteiros, transferir, incrementar ponteiros, testar tamanho do buffer, restaurar contexto).

alem disso, se vc tem algo tipo o MPC860, com 120 canais de DMA, cada um apontando para um ring-buffer independente, a eficiencia eh infinitamente maior do que manter tudo isso via software. uma comparacao interessante eh pensar no hardware q vc tem disponivel num HC908GR4 por exemplo e o hardware q vc tem disponivel num MCF5208.

no GR4 temos 16 possiveis fontes de interrupcao, incluindo a UART, SPI, ADC e timers. todas as transferencias dependem de software nesse caso. no MCF5208 temos umas 60 possiveis fontes de interrupcao e 16 canais de DMA, sendo que as UARTs, QSPI, ethernet e timers sao conectaveis a canais de DMA. o ganho de eficiencia permite trabalhar com volumes de processamento muito maiores.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor ze » 21 Jan 2008 12:15

glup...!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor andre_luis » 21 Jan 2008 15:58

Uma maneira mais simples de definir a aplicacao de um ou de outro, é considerar que com FPGA existe a possibilidade do paralelismo de processamento, enquanto que nos uC´s só existe uma linha de execução.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Assuntos Gerais

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x