Forum: FPGA, VHDL & Co. CLB als RAM konfigurieren


von Johann M (Gast)


Lesenswert?

Hallo!
Eine Frage zur Konfiguration von CLBs als RAM:
So wie ich das verstanden habe, besteht ein CLB aus Slices, diese 
wiederum aus je zwei LUTs mit FF. Die LUTs (in meinem Fall mit je vier 
Eingängen) lassen sich für eine boolesche Funktion verwenden oder als 
RAM konfigurieren.

Bisher habe ich diese Konfiguration als RAM nicht genutzt, würde aber 
gern wissen wie es geht bzw. ob das automatisch geschieht? Wenn ich eine 
Anweisung in VHDL schreibe, welche mir einen (z.B. 8-Bit-)Wert in ein 
Register speichert, werden da die FFs benutzt und dementsprechend viele 
Slices? Wie bekomme ich diesen Wert stattdessen in solch einen RAM 
(welcher nur ein Slice braucht) und wieder raus? Außerdem, wie lange 
benötigt der RAM zum speichern bzw. lesen? Wenn das taktmäßig genauso 
schnell funktioniert wie beim Zugriff auf die FF, wozu dann FF?

Hab bisher nicht so auf die Technologie geschaut, wird Zeit, dass ich 
was drüber lerne :-) . Vielen Dank für Antworten.

von Xilinxuser (Gast)


Lesenswert?

Die FFs takten nach Aussen gesehen am schnellsten. Du bekommst je Takt 
ein Datum rein und auch wieder raus. Das geschieht einfach durch 
Schreiben der VAriablen und gleichzeigtes Lesen derselben. (Ein Takt 
Verzug).

Blockramzellen sind - da in Hardware und optiert aufgebaut - theoretisch 
schneller, in der Praxis bekommst Du aber aufgrund des Routings und des 
Adress-MUX oft timing-Probleme, daß höchste Frequenzen nicht mehr 
leistbar sind und ein Register dahinter muss. Damit hast Du pauschal 
einen (oder auch zwei) clks Verzug, bis nach dem Anlegen der Adresse das 
Datum kommt.

von Johann M (Gast)


Lesenswert?

Danke für die Antwort.

Ich mein ja aber nicht die vorhandenen Blockram, die hab ich schonmal 
benutzt, sondern die LUT, welche sich zu RAM konfigurieren lassen. Oder 
ist das dasselbe und ich hab es falsch verstanden? Laut Datenblättern 
gibt es diese verschiedenen Modi der CLBs.

von DPGAküchle (Gast)


Angehängte Dateien:

Lesenswert?

Dein Stichwort ist distributed RAM. Ich würde mich nicht verlassen das 
aus dem VHDL Code (array) ein solcher RAM erkannt und benu8tzt wird. Am 
besten die wirfst mal den Coregen an. Dort wählst Du Speicherelemente 
aus, gibst die Größe etc an und wählst als Realisierung Distributed RAM 
an. Dann kommen hinten die Files raus die du einbinden kannst. Ich hab 
mal nen screenshot drangehängen

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.