Forum: Mikrocontroller und Digitale Elektronik DRAM Geschwindigkeit


von Alex (Gast)


Lesenswert?

Hallo!

Ich hab eine Frage zu erzielbaren Geschwindigkeit mit DRAM.
Es geht darum, große Datenmengen von einem ADC/DAC - System zu 
verarbeiten.

In Summe muss ich mit 50MHz  12 Bytes lesen und 10 schreiben, die 
Busbreiten sind 16 bzw. 32 bit.
Durch parallelisieren von Chips kann ich das auf 1 Lesezugriff und 1 
Schreibzugriff pro 20ns runterbrechen, was einem Zugriffstakt von 100MHz 
entspricht.

Nun die eigentliche Frage:
Erreiche ich mit einem 133MHz DRAM diesen Durchsatz?

-> Muss ich für den refresh Pausen einlegen?
Da die Daten ohnehin zyklisch gelesen/geschrieben werden, sollte das 
kein Problem sein, oder?
->Ein Großteil der Zugriffe wird inkrementell erfolgen, also Buffer von 
Vorn bis Hinten vollschreiben, dann wieder lesen....
Allerdings muss ich auf die gepufferten Daten während das System läuft 
willkürlich wortweise (16bit) zugreifen können (lesen oder schreiben).
Diese Zugriffe sind oben schon einkalkuliert, aber ich frag mich ob die 
133MHz für 'random'-Zugriff gelten, oder nur wenn ich sequentiell 
zugreife (immer eine ganze Page auf einmal).

Kurzum: gibt es Situationen, in denen ich die 133MHz nicht ausnutzen 
kann?

Danke an alle Digital-Spezialisten unter Euch,
Alex

von Falk B. (falk)


Lesenswert?

@ Alex (Gast)

>In Summe muss ich mit 50MHz  12 Bytes lesen und 10 schreiben, die
>Busbreiten sind 16 bzw. 32 bit.

Macht 1,1 Gbyte/s

>Erreiche ich mit einem 133MHz DRAM diesen Durchsatz?

Welchen DRAM? SD-RAM? DDR1? DDR2? DDR3?

Siehe Speicher.

>-> Muss ich für den refresh Pausen einlegen?

Jain.

>Da die Daten ohnehin zyklisch gelesen/geschrieben werden, sollte das
>kein Problem sein, oder?

Einen kleinen FIFO braucht man so oder so.

>->Ein Großteil der Zugriffe wird inkrementell erfolgen, also Buffer von
>Vorn bis Hinten vollschreiben, dann wieder lesen....
>Allerdings muss ich auf die gepufferten Daten während das System läuft
>willkürlich wortweise (16bit) zugreifen können (lesen oder schreiben).

FIFO bzw. Zwischenpuffer mit mehreren Pages.

>Diese Zugriffe sind oben schon einkalkuliert, aber ich frag mich ob die
>133MHz für 'random'-Zugriff gelten,

Nope.

> oder nur wenn ich sequentiell
>zugreife (immer eine ganze Page auf einmal).

Ja.

>Kurzum: gibt es Situationen, in denen ich die 133MHz nicht ausnutzen
>kann?

Sicher, wenn du viele verteilte Zugriffe machen willst. 133 MHz SD-RAM 
(heute uralt) macht bei 32 Bit Datenbreite 532 MByte/s Als Maximum, real 
ein paar Prozent weniger. Aber NUR, wenn man IMMER im Burstmodus 
arbeiten kann.

Für deine 1,1 Gbyte/s brauchst du also eher DDR1 RAM mit 155 MHz, der 
macht bei 32 Bit Datenbreite 1,24 Gbyte/s. Nimm 200 MHz und du hast ein 
paar Reserven. Aber auch der ist nur so schnell, wenn er immer im 
Burstmode arbeitet.

Ein FPGA brauchst du so oder so, dort packt man den FIFO/Buffer rein.

von Achim S. (Gast)


Lesenswert?

Du willst single data rate SDRAM mit 32 bit Datenbus einsetzen, oder? 
(es gibt ja auch diverse double data rate DRAM varianten).

Dann liegst du schon im theoretischen Optimalfall nur bei 
4*133=532MByte/s Schreib oder Lesebandbreite. Das reicht doch nicht mal 
für die 12Byte*50MHz=600MByte/s, die du kontinuierlich lesen willst (und 
fast nochmal gleich viel schreiben).

Wenn du große Speicherblöcke am Stück schreiben willst, kann ein guter 
Speichercontroller die theoretische Obergrenze der Bandbreite fast 
erreichen. Dann nutzt du die volle Datenbreite des DRAM und jeweils die 
volle Burstlänge und kannst mit geschicktem Adresssplit die DRAM-Bänke 
interleaven.

Aber wenn du auf 16bit wahlfrei zugreifen willst, geht die Bandbreite 
dramatisch in den Keller: für den vollständigen Zugriff auf die 2 Byte 
brauchst du ungefähr 140ns (genauer Wert hängt vom DRAM ab) und die 
Bandbreite geht dramatisch nach unten. Das DRAM läuft dann zwar immer 
noch mit 133MHz, aber im typischen Fall musst du für einen einzelnen 
Lesezugriff
- die betroffene Bank prechargen und einige Takte warte
- die Bank auf der gewünschten x-Adresse aktivieren und einige Takte 
warten
- an der y-Adresse lesen und einige Takte warten, bis die Daten kommen
- beim Schreiben musst du hier noch einige Wartetakte einschieben, bis 
du wieder prechargen darfst...

Ein guter Speichercontroller kann versuchen, die Zugriffe auf 
unterschiedlichen Bänken zu interleaven und so einiges von der Wartezeit 
einzusparen. Aber auf mehr als einige einge 10MByte/s wirst du bei 
wahlfreien Zugriffen nicht kommen.

Die Zeiten für den Refresh gibt es auch noch, aber um die kümmert sich 
im Normalfall der Speichercontroller. Eine signifikante Reduzierung der 
Bandbreite macht das nicht aus, allerdings kann beim Lesen die Latenz 
mal um 100ns ansteigen, wenn gerade ein Refresh-Zugriff läuft.

Mit welchem Speichercontroller willst du das DRAM denn betreiben? Von 
dem hängt (vor allem beim wahlfreien Zugriff) stark ab, welche 
Performance du erreichst.

von Alex (Gast)


Lesenswert?

Hmmm...
Das hat sich der kleine SRAM-Maxi wohl zu einfach vorgestellt ;-)

Ich werd mir mal Datenblätter von verschiedenen DRAMS ansehen.

Der Punkt an der Sache ist, dass ich das relativ einfach in SRAM 
realisieren kann.
Kleiner CPLD für die Adresserzeugung und das Datenleitungs-Umschalten.
Nur die SRAMS schlagen mit über 100€ zu Buche.

Wenn ich zum DRAM-Ansteuern aber einen FPGA brauche, dann relativieren 
sich auch die Kosten für den SRAM wieder.

Grübel....

Danke vielmals :-)

Alex

von Achim S. (Gast)


Lesenswert?

vielleicht hilft dir ein PSRAM weiter (Pseudo Static RAM: ein DRAM Kern 
mit einem SRAM-ähnlichen Interface).

http://www.micron.com/products/dram/psram-cellularram

Die Zugriffszeiten liegen bei 70ns bei zufälligem und 20ns bei linearem 
Adressieren. Ich weiß aber nicht, ob du die Teile deutlich billiger 
kaufen kannst als SRAM.

von Falk B. (falk)


Lesenswert?

@ Alex (Gast)

>Wenn ich zum DRAM-Ansteuern aber einen FPGA brauche, dann relativieren
>sich auch die Kosten für den SRAM wieder.

Kauf dir eine kleine FPGA Evalbaord, dort ist alles fertig drauf. Wie 
willst du denn deine ICs mit 20ns Takt auslesen OHNE FPGA? Mit einem 
Mikrocontroller? Eher nicht. Sowas geht nur mit speziellen 
Schnittstellen oder halt selber gestrickt im FPGA.

von nochwas (Gast)


Lesenswert?

Was bisher noch nicht bekannt gemacht wurde ist die Speichertiefe. 
10MByte? 100MByte? 1GByte? Das entscheidet sehr schnell ueber den 
Aufwand und Preis

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.