Forum: FPGA, VHDL & Co. Frage zum 64bit DDR2 Interface


von Andreas B. (loopy83)


Lesenswert?

Hallo und guten Morgen...

ich habe eine Frage zu einem DDR2 Interface eines PowerPCs.

Ich habe einen 64bit (D00-D63) Datenbus und einen 14bit Adressbus (A00 - 
A13).

Nun sind auf meinem Evaluation Board 4x64MB RAM Bausteine verbaut. Die 
Adressleitungen sind auf alle vier Bausteine geführt und die Daten sind 
in 16bit Blöcke aufgeteilt (D00-D15, D16-D31, D32-D47, D48-D63). Drei 
Leitungen Bank-select sind ebenfalls vorhanden.
Es können ja dank Double Data Rate mit Hilfe der 14bit Adressleitungen 
28bit adressiert werden. Also eigentlich zu viel, weil ich an sich nur 
13bit brauche, um auf meine 2^26 = 64MB zu kommen.

Nun möchte ich in meinem Design aus Platzgründen nur einen einzelnen 
Baustein verwenden.

Damit gibt es aber nur noch 16bit Datenleitungen.

Meine Fragen sind nun folgende:
- habe ich irgendwelche Einschränkungen, wenn ich nur 16bit des 64bit 
Datenbusses verwende? Gibt es da Probleme? Kann ich trotz dieser 
Beschneidung 60-100MB/s übertragen bei 166MHz (333MHz Datentransfer 
Takt)?

- Habe ich das mit dem Adressbus richtig verstanden, dass ich mit 14 
Adressleitungen auch 28bit adressieren kann? Was die maximal 
adressierbare Größe eines RAMs auf 256MB beschränken würde (ideal wären 
in meinem Fall 128MB RAM, 64MB wären aber auch noch ok).

Vielen Dank!

MfG Andreas

von Andreas (Gast)


Lesenswert?

Hallo Andreas,

hm, ich glaube Du verwechselst da etwas:

Die Adressbreite hat mit DDR schon mal gar nix zu tun, da hat sich 
zwischen SDRAM und DDR-Ram nix geändert...

Die Adressierung eines DRAM läuft über zwei Phasen in denen Du Zeilen 
und Spalten adressierst: RAS(Raw Adress) und CAS(Colum Adress). Die 
Adressbreiten sind in der Regel unterschiedlich breit ( z.B. 14Bit Raw 
Adress und 10Bit Colum Adress = 28Bit ). Dazu kommen meist noch mehrere 
Speicherbänke im DRAM. Raw,Cas und Bänke ergibt dann die 
Adressierungstiefe und hat mit double data rate nix zu tun, da der Name 
ja schon sagt, dass NUR die Daten mit doppelter Clockrate laufen, die 
Adressierung wird nur mit einer Taktflanke abgehandelt.

Ob Du deinem Datensatzdurchsatz auch bei veringerter Bitbreite schaffen 
kannst, must Du selbst errechnen.

Hierzu musst du wissen, wie deine Zugriffe auf das Ram aussehen:
- lineare Schreib- und Lesevorgänge oder komplett random. Wie folgen 
Lese- und Schreibanforderungen aufeinander.
Burst oder Singlezugriffe.
Weiterhin wichtig ist, wie gross die Latenzen zwischen Schreib- und 
Leseanforderungen sein dürfen und wie gross ggfls. deine Fifos an 
Schreib- und Leseseite sind...
Es ergibt sich unter Umständen ein recht komplexes Scenario, so dass 
eine Antwort auf deine pauschale Frage keiner geben kann...
So kann ein 16bit breites 333-DDR Interface etwa 600MB/s Durchsatz 
erreichen, bei falscher Bedienung oder ungeeigneter Nutzung auch nur 
etwa 17MB/s...

von Andreas B. (loopy83)


Lesenswert?

Hallo und Danke für deine Antwort!

Ich glaube da habe ich wirklich was komplett mißverstanden.

Mein 128MB RAM Baustein sieht wie folgt aus:
64 Meg x 16
Configuration 8 Meg x 16 x 8 banks
Refresh count 8K
Row address A[12:0] (8K)
Bank address BA[2:0] (8)
Column address A[9:0] (1K)

Ich habe also 13bit Adressen in der Reihe und 10bit in der Spalte. 
Aufgeteilt ist alles auf 8 Bänken.

Die Bänke werden ja mit BA0, BA1 und BA2 adressiert bzw. ausgewählt.
Die einzelnen Zellen dann mit den Spalten und Zeilen Adressen.
Was gerade am Adressbus anliegt, gebe mit am RAS# und CAS# Pin vor, 
richtig?

Die Daten werden vor allem beim Schreiben Burstartig von einem FPGA 
geschrieben, via DMA und ein entsprechender FIFO...

Wenn also auch der 16bit breite Bus ausreicht, muss ich dann nur noch 
gut programmieren :)

Danke, bis dann

von Andreas (Gast)


Lesenswert?

Hallo Andreas,

meinen "Rechenfehler im ersten Posting hast Du schon bemerkt bzw. 
übergangen
>>( z.B. 14Bit Raw Adress und 10Bit Colum Adress = 28Bit ).
da fehlten dann noch die Bänke...

Du schreibst das Du vor allem beim Schreiben burstartig aufs Ram 
zugreifst. An Sich löblich, nur ist der schlimmere Fall der Lesezugriff. 
Dort wirken sich die Latencen der Um-Adressierung und ggfl. der 
Cachelineumladung ( DRAM intern ) stärker aus.
Falls dein Design die Möglichkeit besitzt solltest Du also versuchen, im 
Vorfeld die Daten so zu organisieren, dass beim Lesen Burstzugriffe und 
am besten noch so wenig wie möglich RAS Adressierungen durchführst.

Hintergrund: das Schreiben der Daten übernimmt das DRAM im Hintergrund, 
aber wenn Du liest, dann must Du warten bis die Daten zur Verfügung 
gestellt werden können und da können dann schon einmal 12 Clocks 
vergehen bis ein einziges Wort am DRAM-Datenpin zum Abholen bereit 
steht...

Gruß

von Andreas B. (loopy83)


Angehängte Dateien:

Lesenswert?

Beim Design habe ich alle Freiheiten der Welt. Ich muss nur 
gewährleisten, dass ich Bilddaten schnell genug vom FPGA in den RAM (via 
DMA) und vom RAM in den PowerPC 440EPx tranportieren kann.

Das "burstartige" (gibts das Wort?) Transaktionen hilfreich und sinnvoll 
sind, habe ich schon gelesen. Ich denke sowohl beim Lesen, als auch beim 
Schreiben, werde ich darauf zurückgreifen (müssen).

Kann ich als Resumè der ganzen Sache davon ausgehen, dass ich meinen 
einzelnen RAM Baustein mit 128MB wie folgt verdrahten kann? (siehe Bild)

Vielen Dank für die ausführliche Hilfe!

MfG Andreas

PS: Das dort noch 4bit für die Bänke entfallen müssen, hatte ich schon 
gemerkt :)

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.