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
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...
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
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.