Ich habe eine besonders große Signalverarbeitungstransformation, die von Matlab nach VHDL portiert werden muss. Es erfordert definitiv eine Art von Ressourcenteilung. Ein bisschen Berechnung gab mir Folgendes:
- 512 Fuß von 64 Punkten
- 41210 Multiplikations-Additions-Operationen
Wenn man bedenkt, dass das größte Virtex 6-FPGA ~ 2000 DSP48E-Blöcke hat, weiß ich, dass ich Ressourcen gemeinsam nutzen kann, um die Ressourcen mehrmals zu verwenden. Die Ausführungszeit ist eigentlich kein Problem, die Verarbeitungszeit kann im FPGA relativ lang sein.
Wenn ich mir die Ressourcennutzung anschaue, bekomme ich mit der Radix-2-Lite-Architektur 4 dsp-Blöcke / FFT-Operation = 2048 DSP-Blöcke, insgesamt ~ 43.000. Das größte Virtex-FPGA hat 2k-Blöcke oder 20 Operationen / Mux.
Offensichtlich wird das Einbeziehen solch großer Multiplexer in den Stoff auch Scheiben aufnehmen. Wo finde ich das obere Ende dieser Grenze? Ich kann die FPGA-Ressourcen nicht unendlich teilen. Ist der 41210-Multiplikator zu groß? Wie berechne ich, was zu groß ist?
Ich habe mir auch andere Ressourcen angesehen (Slices, Brams usw.). Radix-2 Lite bietet außerdem 4 x 18.000 Brams / fft = 2048 Brams. Das größte Xilinx-FPGA enthält 2128 Brams. sehr grenzwertig. Ich mache mir Sorgen, dass mein Design einfach zu groß ist.
AKTUALISIEREN:
Weitere Informationen zum Design. Ich kann nicht ins Detail gehen, aber hier ist, was ich geben kann:
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
Ausgabedatenratenspezifikation: "schneller als die Matlab-Simulation"
Nach Berechnungen bin ich hier:
FFT-Phase: einfach. Ich kann 1/2/4/8 FFTs implementieren, die Ergebnisse im SDRAM speichern und später darauf zugreifen. Relativ klein, auch wenn es lange dauert, ist es in Ordnung. Mit Radix-2 Lite kann ich 2 DSP48Es und 2 18k BRAMS / FFT erhalten. Streaming ergibt 6 DSP48Es 0BRAMS / FFT. In beiden Fällen ist die 64-Punkt-FFT in Bezug auf die FPGA-Ressourcen klein.
Multiplikatoren : Das ist mein Problem. Die Multiplikationseingaben stammen entweder aus Nachschlagetabellen oder FFT-Daten. Es ist wirklich nur eine ganze Reihe von Multiplikatoren. Es gibt nicht viel zu optimieren. Kein Filter, hat aber ähnliche Eigenschaften wie ein Filter.
In Anbetracht der gemeinsamen Nutzung von Ressourcen auf dem FPGA funktioniert die Mathematik folgendermaßen: Eine LUT-6 kann als 4-Wege-Mux verwendet werden. Die Formel für einen N-Wege-M-Bit-Multiplexer lautet wie folgt:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
Wenn Sie die Zahlen für meine Implementierung eingeben, erhalten Sie keine guten Ergebnisse. 90% der virtix-6-Familie verfügen nicht über genügend Slices, um ihre DSPs auf Ressourcen zu verteilen und 40.000 Vorgänge auszuführen.