Forum: Mikrocontroller und Digitale Elektronik DRAM Interface


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian (Gast)


Lesenswert?

Hallo,
für eine Anwendung zur Datenaufzeichnung möchte ich gerne
schnelle DRAM-Riegel aus dem PC-Bereich verwenden.
Hierzu möchte ich per CPLD oder evtl. speziellem DRAM Controller
ein SRAM-ähnliches Interface zur Applikation haben, also keine RAS,
CAS, Refresh, Init, ...
Die Applikation besteht z. B. aus einem AD-Wandler, dessen Werte
zyklisch (über einen 2. CPLD oder ähnliches) in den DRAM geschrieben
werden.
Wichtig ist, daß der gesamte DRAM zyklisch sequentiell beschrieben
wird, die Möglichkeit des wahlfreien Zugriffs ist für diese Anwendung
also nicht interessant!
Frage:
1) Welcher DRAM (DDR, Edo, ...) ist dafür besonders gut geeignet
hinsichtlich
- max. erzielbarer kontinuierlicher! Datenrate
- möglichst einfacher Ansteuerung
2) Kann jemand Beispielapplikationen referenzieren?

von schneidertobi (Gast)


Lesenswert?

Hi,
ich kenne mich zwar nicht damit aus, aber schau dir dochmal den
mp3-player auf pjrc.com an. da wird auch ein altes dram aus dem pc
bereich verwendet um mp3 daten zwischenzuspeichern. benutzt einen 8051
alc hauptcontroller und einen cpld fuer den speicher

Viel Glueck
Tobias

von Markus (Gast)


Lesenswert?

Wie schnell soll das denn überhaupt werden? Und wie viele Samples willst
Du aufnehmen?

Hier gibts eine Beschreibung von jemandem, der schon PC100 SDRAM in
eigene Schaltungen integriert hat:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=duri9v8q3pkherlvojq68du8cbkhqf83c5%404ax.com

von Christian (Gast)


Lesenswert?

Im Moment bin ich noch dabei zu schauen, was überhaupt mit vertretbarem
Aufwand machbar ist. Aber grundsätzlich so schnell wie möglich! Und die
Anzahl Samples sollte ohnehin egal sein und nur durch die Speichergröße
begrenzt.
Danke für die Tips soweit,
 Christian

von Benedikt (Gast)


Lesenswert?

DRAM + kontinuierlich + schnell ist ein Widerspruch.
Den Refresh kann man kontinuierlich machen, aber das Ergebnis ist nicht
schnell.
Macht man einen Burst Refresh, ist das nicht kontinuierlich.

Um welche Anwendung geht es denn ?

Ich habe schon mehrfach DRAMs mit uC verwendet, u.a. 2MB DRAM als
Speicher an einem 8051. Das ganze Timing geschieht Hardwaremäßig, der
8051 verwendet die normalen MOVX Befehle. Nur um den Refresh zu
aktivieren, muss ein Bit gesetzt werden...

Für schnelle Datenaufzeichnung eignen sich auch VRAMs. Dies sind
normale DRAMs, die zusätzlich einen SRAM Puffer mit eingebautem
Adresszähler haben. Ein Takt und der nächste Datenwert wird ausgegeben
bzw. gespeichert. Wenn der Serielle Puffer voll ist, wird er parallel
ins DRAM übertragen. Mit einem 8051 schaffe ich damit 40MB/s...

von Samuel Lehner (Gast)


Lesenswert?

Hallo

So ein Projekt ist mit einem SDR-SDRAM durchaus möglich. Du solltest
aber ein FPGA mit PLL und integriertem Speicher verwenden. Die
Datenaufzeichnung läutf dann z.B mit 100MHz und das RAM mit einer ca.
20% höheren Frequenz. Durch das integrierte RAM ist es möglich die
Daten von dem beiden Tackfrequenzen zu synchronisieren und zu puffern.
Über diesen Puffer werden die Daten bei einem Refresh oder beim
Aktiviern einer neuen Zeile zwischengespeichert. Ein Puffer 128 Samples
reichen völlig aus.

von Alex1 (Gast)


Lesenswert?

Hallo...,

@Benedikt: Mich wuerde mal interessieren, wie Du 2 MB mit einem 8051 er
adressierst. Vielleicht ein paar Tips.

Danke.

Alex

von Uwe (Gast)


Lesenswert?

Hallo Christian!

wenn Du nach DRAM Controller googelst, findest Du viele nützliche
links, z.B. fertige Chips von National (DP84xx) bzw. Designvorschläge
wie diesen hier:
http://www.eetasia.com/ARTICLES/2002OCT/A/2002OCT11_MEM_MPR_AN01.PDF
Andere links stehen ja schon oben. Das alles stellt aber hohe
Anforderungen an Schaltungsdesign und PCB-design.

Muß es unbedingt DRAM sein? Wenn das kein professionelles Projekt wird,
sind alte cache-RAMs von PC-motherboards die viel bessere Wahl, auch
wenn sie etwas kleiner (Speicherkapazität, nicht mechanische Maße) als
übliche dRams sind. Absolut einfach zu handhaben und schnell: 15 ns, 20
ns oder 25 ns vom Anlegen der Adresse bis zum sicheren Bereitstellen
der Daten.

Alternativ schau Dir mal das Schaltbild vom Logikanalysator in der
elektor 2/2003 an. Die benutzen FIFOs und steuern die mit einem
AT90S8515. Damit erreichen sie bis zu 40 Mhz Samplerate auf 36
(digitalen) Kanälen.

Ansonsten bleiben die altbewährten Chips der 8086/Z80-Generation, also
8237-DMA, Z80-DMA o.ä. (Ich glaube kaum, daß Du Chipsatzteile von
386/486/586/686 ...-Motherboards benutzen willst)

Ich wäre an weiteren Infos über Dein Projekt interessiert.
(-> Speicheroszi :-))

von Uwe (Gast)


Lesenswert?

Mein letzter Beitrag war teilweise etwas mißverständlich: Ich weiß, daß
(PC-)cache-RAMs schnelle SRAM sind. :-)

von Benedikt (Gast)


Lesenswert?

@Alex1

Ich verwende nur 32kB des Adresbereichs für den Speicher. Die
restlichen 32kB sind für IO reserviert. Der uc sieht immer nur 32kB von
den 2MB des DRAM (es sind sogar 128MB möglich...) Zusammen mit einem
74HC574 werden insgesamt 23 Adressleitungen erzeugt. Damit lassen sich
8MB ansteueren. Aus Platzgründen verwende ich nur 2x 1MB SIMM Module
aus 386er und 486er...

Die Ansteuerung ist an sich einfach:
ALE = RAS\
WR\ oder RD\ sind CAS\

Geht ALE auf Low, soll der 74HC573 die Adresinformationen latchen.
Jetzt speichert eben der DRAM die Adresse. Kommt dann noch ein WR\
oder RD\ Signal wird auch noch CAS\ aktiviert und das DRAM speichert
den zweiten Teil der Adresse. Die Adresse wird per 74HC157
umgeschaltet.
Hat zwar noch ein paar Probleme, aber mit einigen Modulen läuft die
Schaltung einwandfrei. Ich brauche soviel Speicher, um die FAT Tabelle
und das Root einer Festplatte zwischenzuspeichern.

von Uwe (Gast)


Lesenswert?

@Benedikt, das speicher-banking ist klar, aber wie machst Du den nötigen
refresh? Oder haben die Module sowas wie autorefresh?

von Maestro (Gast)


Lesenswert?

Ist doch logo:
Der Refresh wird über den Speicherzugriff aufs XRAM erzeugt. Also
einfach die NOPs ausführen. Sollten 1024 sein.
Verbrät zwar Rechenzeit, aber dafür ist die Ansteuerung simpel.

von Benedikt (Gast)


Lesenswert?

Nein, ist viel einfacher:
An jeder CAS\ Leitung sitzt ein AND Gatter. Die Eingänge sind mit
CAS\ und der andere mit Refresh\ bezeichnet. Ein Befehl, die Leitung
ist Low, und daruafhin wird ein CBR Refresh durchgeführt... Bis zum
nächsten Datentransfer. Vor dem muss Refresh\ wieder auf High gesetzt
werden.

von Uwe (Gast)


Lesenswert?

@Benedikt&Maestro

Danke für die Antwort, das muß ich mal ausprobieren. (Bisher bin ich
vor dRAM immer zurückgeschreckt)

von Benedikt (Gast)


Lesenswert?

Ich habe mir so ziemlich alles zum Thema DRAMs besorgt, was im Internet
oder sonstwo zu bekommen war.
Nur etwa 50% aller Schaltungen verwenden wirklich spezielle DRAM
Controller, die restlichen machen das über diskrete Logik (oder ein
PAL). Googled mal nach "AMD29000 DRAM" oder nach "Bank Interleaved
Memory System". Da finden sich eine nette Dokumente mit Schaltplänen.
Obwohl der AM29000 ein 32bit RISC CPU ist, wird die DRAM Ansteuerung
(einschließlich Refresh) über TTL und PALs gemacht...

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.