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