Forum: Mikrocontroller und Digitale Elektronik DRAM und Refresh


von Markus (Gast)


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

von Siegfried (Gast)


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

von Markus Burrer (Gast)


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

von Siegfried (Gast)


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

von Markus Burrer (Gast)


Lesenswert?

Es gab mal in einer Elektor ein Projekt das 4MB SIMM's an einen 8051 
gehängt hat. War ein Druckerpuffer.

von Jonas Diemer (Gast)


Lesenswert?

sonst kannste doch auch ne at90s1200 oder einen tiny als "ram 
controller" nehmen. die dinger kosten ja fast nix und haben teilweise 
onboard taktgeber.

von Markus Burrer (Gast)


Lesenswert?

Hi,
das würde sich bei größeren RAM Bänken lohnen, aber ich denke nicht für 
ein IC

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.