Ich bin neu in VHDL und Xilinx. Beim durchgehen bin ich über die Sache mit den DSP48-Blöcken gestolpert. Ich habe mich gefragt, warum man eigentlich DSP48-Blöcke anstelle von Logik für Multiplikationen verwendet. Welche Vorteile gibt es hierbei?
Es wäre cool, wenn jemand das für einen DSP-Neuling wie mich aufklären könnte!
Ich bin neu in VHDL und Xilinx. Beim durchgehen bin ich über die Sache
mit den DSP48-Blöcken gestolpert. Ich habe mich gefragt, warum man
eigentlich DSP48-Blöcke anstelle von Logik für Multiplikationen
verwendet. Welche Vorteile gibt es hierbei?
Es wäre cool, wenn jemand das für einen DSP-Neuling wie mich aufklären
könnte!
DSP48 ist schneller und nimmt weniger FPGA resourcen.
Ich habe mich gefragt, warum man
eigentlich DSP48-Blöcke anstelle von Logik für Multiplikationen
verwendet.
Macht man nicht, ein DSP48-Block beinhaltet einen Multiplizierer (die Kuller mit dem 'X'), schau dir bittedas Blockbild an. Vor dem DSP48 gabs dem MUL18-Block.
Eine Multiplikation mit 48-bit-Ergebnis in LUTs zu bauen braucht ziemlich viel Platz. Da man Mutliplikationen aber häufig braucht, hat Xilinx die DSP-Blöcke eingebaut, die sind kleiner und viel schneller und können noch mehr als nur multiplizieren. Im Synthesis-Guide steht irgendwo, wie du festlegen kannst, ob bei einer Multiplikation ein DSP-48 oder eine LUT-Struktur verwendet werden soll. Manchmal kann es auch sinnvoll sein, einen Multiplier aus LUTs zu bauen, z.B. bei kleineren Multiplikationen.
Und wie schon jemand geschrieben hat, der Begriff DSP-48 ist etwas irreführend. Man kann diese Macros auch für andere Anwendungen als Signalverarbeitung verwenden.
Dass der DSP48 kein Prozessor ist, ist mir klar, das sieht man ja am Blockschaltbild :) Da fehlt der Prozessorkern
Ich habe noch einen Knoten im Kopf warum der DSP48 schneller ist als die Multiplikation - da der DSP48 auch eine Multiplikation enthält
Ich würde es mir nun mit den vorherigen Antworten so erklären, dass der DSP48 eine dezidierte Logik hat während eine reine Multiplikation auf dem FPGA mit den CLBs, also durch LUTs realisiert wird.
Dass der DSP48 kein Prozessor ist, ist mir klar, das sieht man ja am
Blockschaltbild :) Da fehlt der Prozessorkern
Ich habe noch einen Knoten im Kopf warum der DSP48 schneller ist als die
Multiplikation - da der DSP48 auch eine Multiplikation enthält
Ich würde es mir nun mit den vorherigen Antworten so erklären, dass der
DSP48 eine dezidierte Logik hat während eine reine Multiplikation auf
dem FPGA mit den CLBs, also durch LUTs realisiert wird.
Ich würde es mir nun mit den vorherigen Antworten so erklären, dass der
DSP48 eine dezidierte Logik hat während eine reine Multiplikation auf
dem FPGA mit den CLBs, also durch LUTs realisiert wird.
Ist das richtig?
Es trifft nicht ganz den Kern.
Das Problem resp. die Bremse sind weniger die LUT's selbst als die interconnects, also die Laufzeit zwischen den LUT's über die FPGA-routing Resourcen.
Ein Hardware-Multiplizierer kann man sich als ein großes Feld aus mehreren Hundert XOR-Gattern vorstellen. Als extra-Bauelement ist der sehr Kompakt und hat damit eine geringe Durchlaufzeit. Diese Struktur aus Slices nachgebaut, verlangt nun mehrere hundert slices, deren LUT's zwar sehr schnell durchlaufen werden, aber zwischen den LUT fallen zusätzliche pico- bis nanosekunden an.
Ohne die blauen Blöcke im Anhang li.u. müsste man vielleicht jedes vierte von den grünen Blöcken verwenden um einen DSP-Block zu ersetzen. Und dieser Ersatz ist natürlich deutlich langsamer weil die Signal dort weitaus größere Strecken durchlaufen müssen.
Ich würde es mir nun mit den vorherigen Antworten so erklären, dass der
DSP48 eine dezidierte Logik hat während eine reine Multiplikation auf
dem FPGA mit den CLBs, also durch LUTs realisiert wird.
Der DSP48-Block kann eine ganze Menge, u.a. Multiplizieren. Also wenn du eine Mutliplikation durchführen musst und noch DSP48 frei sind, kannst du die Multiplikation darauf rechnen. Das verplempert keine LUTs die du für andere Dinge brauchst, und ist viel schneller als mit LUTs.
Im Grunde das gleiche wie mit Speicher im FPGA: Du kannst Speicherarrays aus Flipflops aufbauen, das ist aber nur sinnvoll bei kleinen Speichern. Oder du kannst die LUTs dafür verwenden, oder eben die großen Blockrams, die sind genau dafür gemacht.
DSP48 ist schneller und nimmt weniger FPGA resourcen.
So kann man das nicht sage, denke ich. Durch die ausdrückliche Wahl des DSP-Elementes legt man sich auf diesen Block fest. Bei der einfachen Multiplikation bleibt es erst einmal offen, wie es gemacht wird. Der Synthesizer entscheidet dann, ob er ein DSP-Element nicht oder nicht.
Ich lasse immer alles in nativem VHDL beschreiben, statt einer Festlegung.
Dann lässt sich der Code transferieren.
Oder gibt es irgendeinen Vorteil, ein DSP ausdrücklich einzufügen?
Oder gibt es irgendeinen Vorteil, ein DSP ausdrücklich einzufügen?
Nein, Inferenz ist immer die bessere Lösung, weil der Code leichter ztu simulieren und technologieunabhängig ist. Aber manchmal erkennen die Tools nicht, dass die Funktion in einen DSP48 gemapt werden kann, dann muss man die Instanz selbst erzeugen, oder man bekommt ein Kuchenblech mit LUTs geliefert.
Diese sind aber schneller, als ein BLock-RAM, wie wir getestet haben!
Bei welcher Speichergröße? Und wieviel schneller? Welche FPGA? Kleine Speicher können als FF-Arrays durchaus schneller sein als Blockrams, wenn die Addresslogik und die Multiplexerkaskaden entsprechend klein ausfallen. Aber dass ein Speicher in der Größe eines Blockrams mit FFs schneller ist, scheint mir doch eher seltsam.
dass ein Speicher in der Größe eines Blockrams mit FFs
schneller ist, scheint mir doch eher seltsam.
Richtig, die Adressdecoder sind super langsam. Allerdings verteilen sich kleine RAMs mit deren Logik als FFs und LUTs so schön gleichmäßig in der Schaltung, dass kleine RAMs von z.B. nur 128 Speicheradressen sehr viel näher am Geschehen sind, wenn der FPGA voll ist. Deshalb ist das routing kurz und man bekommt die Daten schon im nächsten Takt. Bei langsamen FPGAs von 100MHz abwärts geht es auch mit größeren Speicherflächen und breiteren Multiplexern.
Kleine
Speicher können als FF-Arrays durchaus schneller sein als Blockrams,
die sind sogar ganz ausnahmslos schneller. Die angeblichen 450MHz die z.B. die BRAM in einem A7 bringen, verlieren sich schnell auf dem Weg zur Schaltung. Oft müssen fabric FFs nachgeschaltet werden, um überhaupt wieder die 200 zu packen.
Besonders kritisch sind Schaltungen die Resets brauchen, die tief in kaskadierte BRAMs gehen. Da sind FFs oft die bessere Alternative.