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
@ 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.
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.
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
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.
@ 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.