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
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
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
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
Es gab mal in einer Elektor ein Projekt das 4MB SIMM's an einen 8051 gehängt hat. War ein Druckerpuffer.
sonst kannste doch auch ne at90s1200 oder einen tiny als "ram controller" nehmen. die dinger kosten ja fast nix und haben teilweise onboard taktgeber.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.