Hallo, Ich bin dabei eine Routine zuschreiben, welche zyklisch einen Auto Refresh für ein SDRAM erzeugt. hier mal das Datenblatt: http://download.micron.com/pdf/datasheets/dram/sdram/64MSDRAMx32.pdf Im Datenblatt steht, des jeder AUTO REFRESH Command 15.625 us beträgt. Ich verstehe nur leider nicht wie man auf diesen Wert kommt, denn nach Figure 36 auf S. 54 würde ich nach folgender rechnung (zeiten stehen auf S. 47) t = t(rp) + 256 * t(rfc) = 20 ns + 256 * 60 ns = 15,38 ns benötigen. 1. was soll ich mit der restlichen zeit machen? weitere AUTO REFRESH zyklen einfügen bis 15.625 us rum sind? 2. Verstehe ich das richtig, ein Refresh zyklus besteht aus einem PRECHARGE, einen NOP und dann n * (AUTO REFRESH + NOP)? mfg
Moin, mikrofriendly schrieb: > Ich bin dabei eine Routine zuschreiben, welche zyklisch einen Auto > Refresh für ein SDRAM erzeugt. Wenn Du uns nicht sagst wer oder was den SDRAM ansteuert, wird dir keiner eine brauchbare Antwort geben können. Mit einem Mikrocontroller per I/O und Software wird es schwer das Timing hinzubekommen. MfG
>Wenn Du uns nicht sagst wer oder was den SDRAM ansteuert, wird dir >keiner eine brauchbare Antwort geben können. Mit einem Mikrocontroller >per I/O und Software wird es schwer das Timing hinzubekommen. Ich erzeuge das Timing durch VHDL in einem FPGA.
>Im Datenblatt steht, des jeder AUTO REFRESH Command 15.625 us beträgt.
Nein, das steht da nicht. Das hier steht da:
"Providing a distributed AUTO REFRESH command every 15.625μs (commercial
and industrial) or 3.906μs (automotive) will meet the refresh
requirement and ensure that each row is refreshed."
D.h. Du musst alle 15,625μs einen AUTO REFRESH ausführen, um
sicherzustellen, das alle Reihen korrekt wiederaufgefrischt werden.
>Moin, > >O.K dann klinke Ich mich hier aus. Versuche es mal im Forum "FPGA, VHDL >& Co" > >MfG Ich wollte doch nur allgemeine antworten auf meien Fragen bezüglich des SDRAM´s nicht wie ich die Ansteuerung in einem FPGA erziele. >"Providing a distributed AUTO REFRESH command every 15.625μs (commercial >and industrial) or 3.906μs (automotive) will meet the refresh >requirement and ensure that each row is refreshed." Ich depp, du hast natürlich recht :) also jede 1/64ms kommt ein AUTO REFRESH Zyklus. Ein dauert 15,38us und Refresht eine Zeile mit 256 Spalten REFRESH Zyklus = t(precharge) + Spalten Anzahl * t(REFRESH TIME) = 20 ns + 256 * 60 ns = 15,38us. Das ganze 4096 mal, um den gesamten Speicher zu Refreshen. Eine Frage ist mir noch unklar: Ein Refresh Zyklus sieht so aus (Figure 36 auf S. 54): PRECHARGE, NOP, n * (AUTO_REFRESH , NOP)?
Wenn das SDRAM sich im Idle-Zustand befindet, brauchst Du eigentlich nur den AUTO-REFRESH-Befehl. Das PRECHARGE führt nur dazu, dass es in den Idle-Zustand geht. Siehe hier, Seite 63: http://www.elpida-korea.com/pdfs/E0123N60.pdf
Ja vielen dank die beiden PDF´s kenne ich bereits, auch was das PRECAHRGE bewirkt :)
Hallo mikrofriendly, nach deiner Beschreibung glaube ich, dass du es noch immer falsch siehst: > Ein dauert 15,38us und Refresht eine Zeile mit 256 Spalten > REFRESH Zyklus = t(precharge) + Spalten Anzahl * t(REFRESH TIME) = 20 ns > + 256 * 60 ns = 15,38us. Nein: ein Refresh-Zyklus dauert tRFC, also je nach speedsort in deinem Datenblatt entweder 60ns oder 70ns. Und danach ist die gesamte Zeile auf einmal refresht, du musst nichts n mal wiederholen (n=Anzahl der Spalten). Ein einzelner Autorefresh kümmert sich also um eine Zeile und besteht nur aus den Befehlen Precharge, ausreichend_NOP_für_trp, Auto_Refresh, ausreichend_NOP_für_tRFC Die 15,38µs ergeben sich daraus, dass dein DRAM nicht eine Zeile sondern 4096 Zeilen hat, und alle müssen innerhalb von 64ms refresht werden. Also dürfen im zeitlichen Mittel die einzelnen Auto_Refresh Kommandos nicht weiter als 64ms/4096=15,625µs auseinander liegen. Das lässt sich am einfachsten kontrollieren, indem du alle 15µs ein einzelnes Auto_Refresh absetzt (und 60ns später kannst du den Speicher wieder zum Schreiben/Lesen nutzen). Du kannst die Auto_Refreshes auch in Gruppen nacheinander durchführen (also z.B. alle 60 µs 4 Auto_Refresh Kommandos im Abstand von 60 ns - eine derartige Sequenz ist in Abb. 36 gezeigt). Wichtig ist nur, dass du nach 64ms mindestens 4096 mal refresht hast. schöne Grüße Achim
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.