Ich habe ein Problem, die zur Verfügung stehenden RAM-Zellen in FPGAs
nachzuvollziehen. Wie berechnen sich diese?
Nehmen wir die Angabe für Xilinx Artix aus dem familiy data sheet:
Der XC7A50T hat angeblich 52160 Logik Elemente, 8150 slices und 600 kb
distributed RAM-Zellen zusätzlich zu den BRAM-Zellen von 150 x 18kb =
2700Mb.
Laut Fussnote hat jedes Slices 4 LUTs und 8 FFs.
Wenn Ich aber die 8 FFs mit der Zahl der Slices multipliziere, erhalte
Ich etwas um die 48000 bits. Woher kommt die über 10fach Anzahl der
RAM-Bits?
Es geht mir um die Abschätzung, einen Algorithmus abzubilden und dabei
alle Variablen zu speichern, ohne BRAMs anzutasten, weil dort die
Rohdaten liegen und die Datenkette viele Register haben wird. Der Algo
kommt aus MATLAB und benutzt viele Zwischenspeicher für Z-1, Z-2 ...
Müssen bei der Berechnung die LUTs hinzugezogen werden?
Fritz Box schrieb:> Müssen bei der Berechnung die LUTs hinzugezogen werden?
Ja, wie erwähnt ist eine LUT eigentlich ein RAM mit 1 x 64 Bit.
Eine solche LUT kann also entweder jede beliebige Logikfunktion mit bis
zu 6 Eingängen und 1 Ausgang abbilden oder eben ein RAM sein mit 6
Adressleitungen und je 1 Datenleitung zum Schreiben und 1 Datenleitung
zum Lesen.
Du musst also beachten, dass du keine Logik mehr unterbringst, wenn
alles für das RAM verwendet wird...
Danke für die Antworten. Das mit den LUTS hatte Ich schon vermutet. Was
mich noch irritert, ist deren reale Nutzbarkeit:
Wenn Ich wärend des Betriebs den Inhalt ändern will - sie also wie ein
Register benutzen möchte - dann müsste die Konfiguration der LUT also
auch im Betrieb möglich sein. Das ist mir neu, dass das geht. Bisher
dachte Ich, dass dies nur bei Programmierung möglich ist, sie also wie
ein ROM arbeiten.
Gehen wir aber jetzt davon aus, dass es geht, bleibt die Frage, wie sie
als Register arbeiten. Ist die Änderung der LUT-Konfiguration getaktet?
Muss wohl sein, nehme Ich an.
Fritz Box schrieb:> Gehen wir aber jetzt davon aus, dass es geht
Dieser Ausgang ist falsch.
Lies dazu einfach mal die Doku zum FPGA: du kannst die LUTs (und andere
Komponenten) per Konfiguration beim Designprozess in bestimmte Modi
schalten (lassen). An diese Umschalter kommst du aber von der
"Userseite" des FPGAs nicht dran...
Wenn du Teile des FPGAs zur Laufzeit ändern willst, dann mach dich mit
dem Vorgang der Partitial Reconfiguration vertraut.
Fritz Box schrieb:> Wenn Ich wärend des Betriebs den Inhalt ändern will - sie also wie ein> Register benutzen möchte - dann müsste die Konfiguration der LUT also> auch im Betrieb möglich sein. Das ist mir neu, dass das geht. Bisher> dachte Ich, dass dies nur bei Programmierung möglich ist, sie also wie> ein ROM arbeiten.
Das ist nur bei manchen FPGAs möglich, z.B. Spartan3, Virtex4,
Virtex5, etc.
Du kannst dir das LUT als dualported RAM vorstellen. Ein Port
erlaubt dir einen "LUT-Zugriff", d.h. du siehst es wie ein
gewöhnliches LUT, nicht getaktet. Der zweite Port ist der
(getaktete) Schreib-Port.
Bei "gewöhnlicher" Verwendung wird der Schreib-Port einfach
lahmgelegt, du hast also nur Zugriff auf den LUT-Port.
Fritz Box schrieb:> Es geht mir um die Abschätzung, einen Algorithmus abzubilden und dabei> alle Variablen zu speichern,
In der Regel reicht es, sich auf die Angaben im Datenblatt zu verlassen,
d.h. wenn da 1Mbit distributed RAM angegeben sind, dann sind die auch
verfügbar. Um die anzusprechen, muss man auch nicht unbeding, verstanden
haben, wie die Synthesetools die letztlich verschalten und
konfigurieren.
Du wirst sicher FFs und Register in VHDL schreiben und nicht etwa die
jeweiligen Grundelemente des Herstellers instanziieren, nehme Ich an.
Ob die dann reichen oder nicht, hängt auch und vor allem von dem Ausmaß
ab, mit dem sich die Gleichungen vereinfachen lassen und wieviel Logik
vor oder hinter einzelne Register balanciert werden kann und das sagt
Dir die Synthese.
Ob im Einzelfall dann distributed RAM oder B-RAM verwendet wird, werden
kann oder werden sollte, hängt wiederum von den Syntheseeinstellungen
ab. Im Prinzip ist es bei den heutigen FPGA-Strukturen möglich, sowohl
RAM, als auch LUT-Funktion mehr oder weniger beliebig auf die RAMs zu
verteilen und untereinander auszutauschen.
Man kann daher eigentlich nur empfehlen, das design repräsentativ zu
bauen und es implementieren zu lassen. Sobald ihm eine Resource ausgeht,
versucht er dann schon, sie durch eine ähnliche zu emulieren. Das
passiert sogar mit DSP-Elementen, die man in fabric oder in RAMs
abbilden kann.