Entrar    Registrar

Multiplização por Hardware

Software e Hardware para DSP

Moderadores: joao, guest2003, 51

  • Autor
    Mensagem

Multiplização por Hardware

Mensagempor Cefas » 30 Mar 2013 15:42

Olá Pessoal

Estou começando a gora a trabalhar com DPS e a maioria das literaturas que já li, fala da famigerada Multiplicação por Hw.
Com um olhar diferente, do que se trata essa máquina, tipo qual é o Hardware empregado para realizar isso?
Quais componentes da eletrônica são utilizados para se fazer isso?
Att!
Cefas
Nibble
 
Mensagens: 58
Registrado em: 26 Dez 2011 19:47

Re: Multiplização por Hardware

Mensagempor Rodrigo_P_A » 30 Mar 2013 19:10

Cefas escreveu:Olá Pessoal

Estou começando a gora a trabalhar com DPS e a maioria das literaturas que já li, fala da famigerada Multiplicação por Hw.
Com um olhar diferente, do que se trata essa máquina, tipo qual é o Hardware empregado para realizar isso?
Quais componentes da eletrônica são utilizados para se fazer isso?
Att!


Eu não entendo a fundo, mas como o próprio nome diz, faz multiplicação por Hw, geralmente dá um resultado da multiplicação de dois numeros de 32 bits em um de 64bits em um único ciclo.

Dá uma olhada nas implementações desse tipo de hw em FPGA:

http://www.fpga-guru.com/multipli.htm

http://opencores.org/projects

Dá pra vc ter uma idéia de como as coisas funcionam.


o HW empregado é um HW dedicado que faz a multiplicação, como tudo em eletrônica digital e microprocessadores: portas lógicas, flips flops, num tem mágica não!
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 1934
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil

Re: Multiplização por Hardware

Mensagempor marcelo_asm » 02 Abr 2013 14:18

embora a multiplicação seja bem exigente em termos de processamento, bem pior é a divisão. Algumas aplicações com divisões são quase inviáveis sem uma FPU dedicada.
marcelo_asm
Byte
 
Mensagens: 275
Registrado em: 04 Fev 2009 13:11

Re: Multiplização por Hardware

Mensagempor msamsoniuk » 04 Abr 2013 20:46

a ideia do multiplicador por hardware eh otimizar o processamento de filtros para processamento de sinal e consiste nao apenas em um multiplicador, mas em uma operacao multiplica-e-acumula (MAC). a ideia de ser em hardware e rodar em um clock eh justamente permitir vc prever e dimensionar a capacidade de execucao. por exemplo, para um gerador de RF simples, como descrito adiante, uma unica operacao MAC seria necessaria. portanto, se um DSP consegue uma performance de 400 MMAC/s, entao o meu filtro vai rodar a taxa de 400 Msamples/s.

mas na pratica a coisa pode nao ser tao simples! :)

por exemplo, eu estava trabalhando em um codigo verilog para sintetizar portadoras de RF em frequencias arbitrarias:

Código: Selecionar todos
module gen
(
   input          CLK,
   input            RES,
   input       [7:0] AFREQ,
   input  signed   [7:0] KFREQ,   
   input  signed   [7:0] KAMPL,
   output signed   [7:0] OUT
);
   
   wire    signed   [7:0] X0;   
   wire    signed   [7:0] KZERO;
   reg     signed   [7:0] X1;
   reg     signed    [7:0] X2;   
   reg     signed    [7:0] K1;   
   reg     signed    [7:0] KX [0:255];

   assign KZERO    = 0;
   assign X0        = K1-X2;
   assign OUT       = X2;
   
   always@(posedge CLK)
   begin
      X1 <= RES ? KZERO : X0;
      X2 <= RES ? KAMPL : X1;
      K1 <= RES ? KZERO : KX[X0+128];
      
      if(RES)
         KX[AFREQ] <= KFREQ;
   end

endmodule


ele sintetiza com um sampling rate de ateh 266MHz em uma FPGA barata. a grosso modo, eu estimo que ele possa gerar frequencias entre 1 e 66MHz.

bom, o ponto forte eh o filtro ali no meio... ignorando os valores iniciais, eh como um loop infinito:

X0 = K1-X2;
X1 = X0;
X2 = X1;
K1 = KX[X0+128];

aquele KX[] na realidade essa eh uma forma de acelerar uma multiplicacao atraves de uma lookup table. com a multiplicacao seria algo como:

X0 = K*X1-X2
X1 = X0
X2 = X1

onde K eh o coeficiente que determina a frequencia e eh continuamente multiplicado pelo valor de X1 e subtraido de X2 e consiste em uma operacao MAC.

bom, minha primeira abordagem foi partir diretamente p/ um multiplicador de hardware, porem a coisa nao funcionou tao bem como eu esperava. o primeiro problema eh que para atingir altissima velocidade eu preciso adicionar pipelines no multiplicador. assim, embora eu tenha um delay de 3 clocks no processamento, eu posso usar um clock maior e, na pratica, eu vou ter uma multiplicacao por clock na saida.

o problema eh que o filtro tem realimentacao: os resultados futuros dependem dos resultados passados. outro problema eh que, embora eu tenha capacidade de mais de 1GMAC/s, essa performance esta espalhada em 4 multiplicadores. mas novamente, como os resultados futuros dependem dos resultados passados, eu nao consigo pensar em uma forma de paralelizar o stream para aproveitar essa performance.

a solucao foi usar uma lookup table: ela entrega uma multiplicacao pre-calculada k*x para k constante a cada clock e sem usar pipelines. a desvantagem eh a velocidade de setup: precisa de 256 clocks durante o reset para inicializar a lookup table. se fosse com multiplicador, o setup seria instantaneo, permitindo mudar a frequencia em apenas um clock.

bom, um detalhe interessante: os coeficientes geralmente sao valor do tipo 1/c. entao, de certa forma, estamos fazendo divisoes. porem todos os termos sao multiplicados por algum fator fixo, de modo que a divisao se torne inteiro, ou seja, ao inves de fazer x/c, que seria trabalhoso e daria uma serie de problemas, fazemos (x*k)>>h, onde k = (2^h)/c. normalmente esse shift pode ser feito sem penalidade de performance e a conversao do coeficiente pode ser feita previamente. o resultado eh que trocamos a divisao por uma multiplicacao, que eh mais eficiente.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2882
Registrado em: 13 Out 2006 18:04

Re: Multiplização por Hardware

Mensagempor tcpipchip » 05 Abr 2013 11:28

eu nao sei nada :(
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5710
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: Multiplização por Hardware

Mensagempor MOR_AL » 06 Abr 2013 15:39

Tinha uns chips que efetuavam a multiplicação para 4 bits. (DM7875A/8875A e DM7875B/8875B).
Dê uma pesquisada, talvez encontre algo de seu interesse.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2750
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Re: Multiplização por Hardware

Mensagempor msamsoniuk » 07 Abr 2013 00:35

tcpipchip escreveu:eu nao sei nada :(


eh q os processadores da tua epoca soh somavam e subtraiam :D hehehe
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2882
Registrado em: 13 Out 2006 18:04

Re: Multiplização por Hardware

Mensagempor RobL » 17 Abr 2013 11:40

Os antigos somavam e subtraiam ? Creio que os mais atuais só somam, tal como antes !!! :wink:
Existe alguma operação além da soma ?
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Multiplização por Hardware

Mensagempor ELFS » 18 Abr 2013 12:59

Outro exemplo pega um não muito antigo 386SX com cooprocessador matematico, a multiplicação por HW so migrou para o processador nos micros da linha 386 e 486 DX e os pentium já nasceram com eles. Concluindo muitos microcontroladores ainda estão lá no tempo do 386SX. :roll: :roll: :roll:
ELFS
Byte
 
Mensagens: 350
Registrado em: 16 Ago 2007 14:10
Localização: Brasil- Pr- Curitiba

Re: Multiplização por Hardware

Mensagempor msamsoniuk » 28 Abr 2013 12:05

RobL escreveu:Os antigos somavam e subtraiam ? Creio que os mais atuais só somam, tal como antes !!! :wink:
Existe alguma operação além da soma ?


nah, pensa soh, em plena era CISC, usar NEG/ADD seria deselegante! huahuahua :D

no 68000, por exemplo, tinha um universo de operacoes de utilidade duvidosa:

ABCD = add em BCD
ADD = add normal
ADDI = add com operando imediato de 8, 16 ou 32 bits
ADDQ = add com operando de 3 bits (equivalente ao INC, as com valores entre 1 e 8)
ADDA = add entre enderecos de 16 ou 32 bits, com extensao de 16 bits para 32 bits
ADDX = add com extensao

e as equivalentes SUB*, alem de MULU/MULS e DIVU/DIVS, para multiplicacao e divisao com e sem sinal! :)

mas a instrucao mais sinistra que jah vi eh essa:

http://www.freescale.com/files/microcon ... /EB253.pdf
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2882
Registrado em: 13 Out 2006 18:04

Voltar para DSP

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes