Forum: FPGA, VHDL & Co. Anzahl der Distri Zellen nachvollziehen


von Fritz Box (Gast)


Lesenswert?

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?

von VHDL hotline (Gast)


Lesenswert?

Der distributed RAM nutzt die LUTs der Slices, nicht die FFs. Ein 
6-input LUT ist eine SRAM-Zelle mit Tiefe 2^6 und Breite 1.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Fritz Box (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Sigi (Gast)


Lesenswert?

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.

von C. A. Rotwang (Gast)


Lesenswert?

Fritz Box schrieb:

> 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.

Lies!

https://www.xilinx.com/support/documentation/user_guides/ug474_7Series_CLB.pdf
S.23ff.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.