Forum: Mikrocontroller und Digitale Elektronik SDRAM AUTO-REFRESH zyklus


von mikrofriendly (Gast)


Lesenswert?

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

von Sauger (Gast)


Lesenswert?

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

von mikrofriendly (Gast)


Lesenswert?

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

von Sauger (Gast)


Lesenswert?

Moin,

O.K dann klinke Ich mich hier aus. Versuche es mal im Forum "FPGA, VHDL 
& Co"

MfG

von Xenu (Gast)


Lesenswert?

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

von mikrofriendly (Gast)


Lesenswert?

>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)?

von Xenu (Gast)


Lesenswert?

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

von Xenu (Gast)


Lesenswert?

Nachtrag.

Das könnte Dich auch noch interessieren:

http://www.elpida-korea.com/pdfs/E0124N10.pdf

von mikrofriendly (Gast)


Lesenswert?

Ja vielen dank die beiden PDF´s kenne ich bereits, auch was das 
PRECAHRGE bewirkt :)

von Achim S. (Gast)


Lesenswert?

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