Forum: FPGA, VHDL & Co. Ram im FPGA (BlockRam, FlipFlops, etc )


von Nik N. (neusser)


Lesenswert?

Hallo,

könnte mich bitte jemand auf gute Informationen leiten, wo die Ram 
Bausteine eines FPGAs erklärt werden?

Was genau ist z.B. ein BlockRam?

Wie kann ich die unterschiedlichen Ram Blöcke in einem FPGA in meinem 
VHDL Design ansprechen und verwenden?


Danke für Eure Hilfe.
Nik

von der andere (Gast)


Lesenswert?

IdR erzeugst du mit einem Wizard deiner Entwicklungsumgebung eine 
entsprechende Komponente, die du dann in dein Design einbinden kannst.

von Mike (Gast)


Lesenswert?

Ich würde dir das Datenblatt des Herstellers empfehlen.

von Nik N. (neusser)


Lesenswert?

Hm, ok dass mit dem Datenblatt ist ein guter Tipp. Aber so ganz wirds 
mir dann doch nicht klar, was im praktischen Gebrauch die Unterschiede 
oder Gemeinsamkeiten sind.

Verwende einen Spartan3 von Xilinx mit ISE.

von hhanff (Gast)


Lesenswert?

BlockRAM ist ne gnaze Ecke schneller. Allerdings ist davon nur wenig 
verhältnismäßig wenig auf dem FPGA vorhanden, so dass mit dieser 
Resource oft sparsam umgegangen werden muss.
/h

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Eigentlich eher umgekehrt; wenn man Speicher mit LUTs realisiert 
(Distributed RAM) verschwendet man schnell viele Ressourcen, deshalb 
sollte man wann immer möglich Speicher so beschreiben dass er als 
Block-RAM realisiert werden kann. Der X3S1000 hat z.B. 432 KBit 
Block-RAM, aber nur maximal 120 kBit Distributed RAM.

Wie man VHDL-Code so schreibt dass die Synthese daraus ein Block-RAM 
machen kann, das wird im XST User Guide erklärt. Den Core-Generator 
braucht man eigentlich nur wenn man sehr spezielle RAM-Typen realisieren 
möchte (Dual Port mit verschiedenen Wortbreiten), ansonsten macht er das 
Ganze nur unübersichtlicher.

von Nik N. (neusser)


Lesenswert?

Verstehe,

und muss ich selber festlegen welche Variable oder welches Signal in 
einem BlockRam gespeichert wird, oder wird das bei der Synthese 
automatisch festgelegt?

Führt z.B. eine Anweisung
"signal mySignal : std_logic_vector (9 downto 0);"
dazu, dass automatisch ein gewisser Speicher angesprochen wird?


Ok, wie ihr habe ich den Unterschied zu den mir gut bekannten 
Mikroprozessoren noch nicht so wirklich verinnerlicht.


Danke für jeden Kommentar,
nik

von Nik N. (neusser)


Lesenswert?

ups, die letzte Zeile sollte natürlich folgendermaßen lauten:

"Ok, wie ihr SEHT habe ich den Unterschied zu den mir gut bekannten
Mikroprozessoren noch nicht so wirklich verinnerlicht."

von Jan M. (mueschel)


Lesenswert?

Ein Signal ist kein Speicher, sondern nur eine Leitung. Einen Speicher 
musst du dir immer explizit mit FlipFlops erstellen.
Die Blockrams kannst du dir ähnlich wie im µC vorstellen: Adress- & 
Dateneingang sowie ein paar Steuerleitungen, die du entpsrechend 
ansteuern musst. Häufig musst du dir aber keine Gedanken machen, wie das 
genau geht, sondern beschreibst einfach nur einen großen Speicher in 
vhdl. Die Synthese sollte dann erkennen, dass es möglich ist, das in 
einen Blockram zu packen.
Nachteile des Blockrams sind: a) er ist immer nur in diskreten Häppchen 
verfügbar, bei spartan3 / virtex2 immer in 16kB-Blöcken und b)du kannst 
natürlich immer nur auf einen Speicherbereich dieses Speichers 
gleichzeitig zugreifen (bzw. auf zwei in der dualport-Variante).
Vorteile: a) schnell, b) Logikzellen bleiben frei für andere Aufgaben

Distributed RAM: flexibel aber bei größeren Speichern sehr 
ressourcenfressend

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.