Eu tenho uma transformação de processamento de sinal particularmente grande que precisa ser portada do matlab para o VHDL. Definitivamente requer algum tipo de compartilhamento de recursos. Um pouco de cálculo me deu o seguinte:
- 512 pés de 64 pontos
- 41210 operações de adição múltipla
Considerando que o maior FPGA do Virtex 6 possui ~ 2000 blocos DSP48E, eu sei que posso compartilhar recursos para reutilizar os recursos várias vezes. O tempo de execução não é realmente um problema, o tempo de processamento pode demorar relativamente em termos de FPGA.
Observando o uso de recursos, o uso da arquitetura radix-2 lite me dá blocos 4dsp / operação FFT = 2048 blocos DSP, um total de ~ 43k. O maior Virtex FPGA possui 2k blocos, ou 20 operações / mux.
Obviamente, incluir esses muxes grandes no tecido também vai ocupar fatias. Onde encontro a extremidade superior desse limite? Não posso compartilhar infinitamente os recursos do FPGA. Os multiplicadores 41210 são muito grandes? Como calculo o que é muito grande?
Eu também procurei outros recursos (Slices, Brams, etc.). O Radix-2 Lite também fornece 4 x 18k brams / fft = 2048 brams o maior Xilinx FPGA contém 2128 Brams. muito limítrofe. Estou preocupado que meu design seja grande demais.
ATUALIZAR:
Mais algumas informações sobre o design em si. Não posso entrar em detalhes, mas aqui está o que posso dar:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
output datarate spec: "mais rápido que a simulação matlab"
cálculos sábios, é aqui que estou:
FFT: fácil. Posso implementar 1/2/4/8 FFTs, armazenar os resultados na SDRAM e acessar mais tarde. Relativamente pequeno, mesmo que demore, está tudo bem. usando radix-2 lite, posso obter 2 DSP48Es e 2 18k BRAMS / FFT. o streaming fornece 6 DSP48Es 0BRAMS / FFT. nos dois casos, a FFT de 64 pontos é pequena em termos de recursos do FPGA.
Multiplicadores : este é o meu problema. As entradas de multiplicação são obtidas das tabelas de pesquisa ou dos dados FFT. É realmente apenas um monte de multiplicações. Não há muito para otimizar. Não é um filtro, mas possui características semelhantes a um filtro.
Considerando o compartilhamento de recursos no FPGA, a matemática funciona da seguinte maneira: Um LUT-6 pode ser usado como um mux de quatro direções. A fórmula para um N-way, M bit mux é a seguinte:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
analisar os números da minha implementação não dá bons resultados. 90% da família virtix-6 não possui fatias suficientes para compartilhar seus DSPs de recursos, a fim de executar operações de 40k.