J'ai une transformation de traitement du signal particulièrement importante qui doit être transférée de matlab vers VHDL. Cela nécessite certainement une sorte de partage des ressources. Un peu de calcul m'a donné ce qui suit:
- 512 pieds de 64 points
- 41210 opérations de multiplication-ajout
Étant donné que le plus grand FPGA Virtex 6 a environ 2000 blocs DSP48E, je sais que je peux partager des ressources afin de réutiliser les ressources plusieurs fois. Le temps d'exécution n'est pas vraiment un problème, le temps de traitement peut prendre relativement longtemps en termes de FPGA.
En regardant l'utilisation des ressources, l'utilisation de l'architecture radix-2 lite me permet d'obtenir des blocs 4dsp / opération FFT = 2048 blocs DSP, un total de ~ 43k. le plus grand FPGA Virtex a 2k blocs, soit 20 opérations / multiplexeur.
De toute évidence, l'inclusion de tels grands multiplexeurs dans le tissu va également prendre des tranches. Où puis-je trouver l'extrémité supérieure de cette limite? Je ne peux pas partager à l'infini les ressources FPGA. Les multiplicateurs 41210 sont-ils trop grands? Comment calculer ce qui est trop grand?
J'ai également regardé d'autres ressources (Slices, Brams, etc.). Radix-2 Lite donne également 4 x 18 000 brams / pieds = 2048 brams, le plus grand FPGA Xilinx contient 2128 Brams. très limite. Je crains que mon design soit trop grand.
MISE À JOUR:
Quelques informations supplémentaires sur le design lui-même. Je ne peux pas entrer dans les détails, mais voici ce que je peux donner:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
sortie datarate spec: "plus rapide que la simulation matlab"
en ce qui concerne les calculs, voici où j'en suis:
Étape FFT: facile. Je peux implémenter des FFT 1/2/4/8, stocker les résultats dans SDRAM et y accéder plus tard. Relativement petit, même si cela prend du temps, ça va. en utilisant radix-2 lite, je peux obtenir 2 DSP48E et 2 BRAMS / FFT 18k. le streaming donne 6 DSP48E 0BRAMS / FFT. dans les deux cas, la FFT à 64 points est petite en termes de ressources FPGA.
Multiplicateurs : c'est mon problème. Les entrées de multiplication proviennent de tables de recherche ou de données FFT. Ce n'est vraiment qu'un tas de multiplications. Il n'y a pas grand-chose à optimiser. Pas un filtre, mais a des caractéristiques similaires à un filtre.
Compte tenu du partage des ressources sur le FPGA, les calculs fonctionnent comme suit: Un LUT-6 peut être utilisé comme multiplexeur à 4 voies. La formule pour un multiplexeur N bits à M bits est la suivante:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
croquer les chiffres pour ma mise en œuvre ne donne pas de bons résultats. 90% de la famille virtix-6 ne dispose pas de suffisamment de tranches pour partager les ressources de leurs DSP afin d'effectuer 40 000 opérations.