DRAM und Refresh

Gast #5037
Lesenswert?

Hi,
kann mir jemand mal erklären wie ein Refresh bei DRAM's funktioniert? 
Hab hier in der Linkliste was gefunden das mich interessiert

http://www.myplace.nu/avr/dram/index.htm

Hier wird der CAS-before-RAS Refresh verwendet. Muß da einfach nur die 
CAS-Leitung und die RAS-Leitung getaktet werden? Und der Rest wird vom 
DRAM gemacht?
Die Geschichte ist nämlich interessant wenn man viel Speicher auf 
kleinem Raum braucht und die Performance eine untergeordnete Rolle 
spielt. Außerdem kann man auch Controller mit RAM versehen die keinen 
Adress-Datenbus haben.

Gruß
Markus
Gast #5038
Lesenswert?

Sehr interessanter Beitrag!

Bei den älteren DRAMs wurden jeweils nur die unteren Adressleitungen 
(z.B. A0 bis A9) angelegt und ins RAM geschrieben. Die Adressierung von 
A10 bis A?? brauchte man für einen Refresh-Zyklus nicht anzulegen. Durch 
den Vorgang wurden die Inhalte der Speicherzellen in ein internes 
Adressregister gelesen und wieder zurückgeschrieben (Refresh).

Die Refreshroutine des Beispielprogramms gibt keine Adressen aus, 
sondern wackelt nur kräftig an den CAS und RAS-Signalen herum.


// Executes a 1024 cycle CAS-before-RAS refresh sequence
// on every timer interrupt (every 16 mS)
// This takes about 1.6 mS @ 8 MHz, so the refresh overhead
// is about 10 %
//
SIGNAL(SIG_OVERFLOW1)  //timer 1 overflow every 16 mS
{
  int i;

  outp(TI1_H, TCNT1H);          //reload timer
  outp(TI1_L, TCNT1L);

  for (i=0;i<1024;i++)  // 1024 cycles
  {
    cbi(PORTC,PC3);    // CAS lo
    cbi(PORTC,PC2);    // RAS lo

    sbi(PORTC,PC3);    // CAS hi
    sbi(PORTC,PC2);    // RAS hi
  }
}

Siegfried
Gast #5039
Lesenswert?

Hi Siegfried,
gibt es denn bei dem dort verwendeten oder einem ähnlichen DRAM eine 
andere und vor allem schnellere Möglichkeit als an RAS und CAS zu 
"wackeln"? :)
Schließlich sind 10% der Gesamtleistung nicht gerade wenig. Bei manchen 
Anwendungen mag das egal sein aber bei anderen kommt es schon darauf an.

Gruß
Markus
Gast #5040
Lesenswert?

Hallo Markus,

so wie das aussieht, gehts bei den hier vorgestellten Komponenten von 
Seiten der Software nicht schneller. Wie der Autor in seinem Beitrag 
auch geschrieben hat, kommt die Lösung nur da in Frage, wo der 
Controller noch Leerlaufzeiten hat (und das ist bei den meisten 
Anwendungen der Fall).

Andere DRAM-Datenblätter hab ich mir jetzt nicht angesehen. Interessant 
ist der Gedanke schon, ggf. ein paar alte PS/2-, SIMM oder SIPP-Module 
als "Monster-RAM" für die AVRs zu verwenden.

Als Hardware-Lösung kommt eine Schaltung in Form eines Zählers in Frage, 
so dass am Ausgang die Zählfolge 3 - 1 - 0 - 2 - 3 hat. Damit kann der 
Refresh unabhängig vom Controller erfolgen. Allerdings weis ich jetzt 
nicht, ob der Refreshcounter im RAM nach jedem Zugriff wieder auf 0 
gesetzt wird. Wenn dem so ist, dann muss sichergestellt sein, das 
innerhalb der Refreshzeit 1024 Refresh-Zyklen abgefeuert werden.

CAS RAS Zustand
 1      1   Ruhe (Controller darf zugreifen)
 0      1   Refresh-Zyklus
 0      0   Refresh-Zyklus
 1      0   Refresh-Zyklus
 1      1   Ruhe (Controller darf zugreifen)

Gruß

Siegfried

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren