Forum: Mikrocontroller und Digitale Elektronik DRAM am Prozessor


von Tobias P. (hubertus)


Lesenswert?

Hallo,
ich möchte meine Prozessoren gerne mit noch mehr RAM ausrüsten (bis 
ejtzt max. 1 MB SRAM).
Bei RAM von einigen MB bis zu GB verwendet man ja DRAM. Ich hab da ein 
paar nette DRAM-Chips rumliegen, z.B.  IS42S16160B und andere, bis zu 
256 MBit.
Die Frage ist nun, wie man sowas an einen Prozessor anschliessen kann. 
Bei 8051 oder so ist das ja möglich, dank dem ALE-Signal, wodurch man 
einen CBR-Refresh automatisch durchführen kann.
Das Problem ist aber, dass mein Prozessor nur bedingt solche 
Timingsignale zur Verfügung stellt. Wie kann man DRAM beschalten, wenn 
man nur einen Adress- und einen Datenbus hat sowie RD und WR? geht das 
überhaupt? Müsste man evtl etwas mit einem FPGA deichseln (was ich bis 
jetzt noch nicht versucht habe, ein Experimentierboard ist aber in 
Entwicklung)?
Mich würde insbesondere die Verwendung von DRAM mit einem 68k 
interessieren (68000 und '332). Gut wäre natürlich, wenns eine Schaltung 
ist, die hardwaremässig den Refresh selber vornimmt, sodass ich von der 
Prozessorseite her keinen Unterschied zwischen SRAM und DRAM merke.
Ich bin sicher nicht der erste der sowas versucht, aber Google liefert 
keine wirklich brauchbaren Resultate.
Weiss jemand von euch genaueres?

von Benedikt K. (benedikt)


Lesenswert?

Tobias Plüss wrote:
> Bei RAM von einigen MB bis zu GB verwendet man ja DRAM. Ich hab da ein
> paar nette DRAM-Chips rumliegen, z.B.  IS42S16160B und andere, bis zu
> 256 MBit.

Das dürften dann aber SDRAMs sein. Ohne passenden Controller in einem 
FPGA/CPLD kann man die nicht verwenden.

> Das Problem ist aber, dass mein Prozessor nur bedingt solche
> Timingsignale zur Verfügung stellt. Wie kann man DRAM beschalten, wenn
> man nur einen Adress- und einen Datenbus hat sowie RD und WR? geht das
> überhaupt?

Mann kann das ALE Signal zweckentfremden, um die Zeilen/Spaltenadresse 
zu multiplexen. Ist etwas timingkritisch, funktioniert aber. Ist aber 
erstmal ziemliche Bastelei.

> Müsste man evtl etwas mit einem FPGA deichseln (was ich bis
> jetzt noch nicht versucht habe, ein Experimentierboard ist aber in
> Entwicklung)?

Könnte gehen. Das Problem dabei ist nur, dass der DRAM nur im Pagemode 
schnell ist. Da der DRAM Controller aber nicht weiß, wann der µC das 
nächste mal auf den Speicher zugreift, und was er liest, dann kann es 
Timingprobleme geben, wenn z.B. gerade ein Refresh durchgeführt wird.

> Ich bin sicher nicht der erste der sowas versucht, aber Google liefert
> keine wirklich brauchbaren Resultate.
> Weiss jemand von euch genaueres?

Es ist alles andere als einfach, vor allem wenn der µC wirklich 
garnichts mitbekommen soll, also nur ein großes SRAM sieht.

Schau mal auf diese Seite, da wurde sowas in der Art gemacht:
http://www.pjrc.com/tech/mp3/

von Tobias P. (hubertus)


Lesenswert?

Danke erstmal.
Also geht das so, wie ich mir das vorstelle überhaupt nicht?
Wie wird das im PC gelöst? Dort ist ja auch DRAM im einsatz (und ja, 
klar meinte ich SDRAM :D).
Für den Controller brauchts also nicht extra einen FPGA. Reicht 
womöglich ein CPLD mit 64 Macrocells? Solche hab ich hier nämlich noch 
rumliegen.

Zumindest der CBR-Refresh erscheint mir ziemlich Simpel. Dort muss ja 
nur CAS vor RAS aktiviert werden, und intern wird dann irgend ein Zähler 
aktiviert, der automatisch Refresh-Adressen bildet. Kann man evtl. damit 
was machen? z.B. einen kleinen Controller, der immer, wenn der Bus nicht 
verwendet wird, erst CAS und dann RAS auf low legt? Oder ist das 
völliger Quark?

Danke noch für den Link.

von Falk B. (falk)


Lesenswert?

@ Tobias Plüss (hubertus)

>Also geht das so, wie ich mir das vorstelle überhaupt nicht?

Der Aufwand ist imens und das Ergebnis nicht wert.

>Wie wird das im PC gelöst? Dort ist ja auch DRAM im einsatz (und ja,
>klar meinte ich SDRAM :D).

Schon mal in einen PC reiungeshaut? Da sind neben dem Prozessor noch 
einge, grosse, sehr leistungsfähige ICs drauf, Chipsatz genannt. Die 
machen das.

>Für den Controller brauchts also nicht extra einen FPGA. Reicht
>womöglich ein CPLD mit 64 Macrocells? Solche hab ich hier nämlich noch
>rumliegen.

Maybe.

>Zumindest der CBR-Refresh erscheint mir ziemlich Simpel. Dort muss ja
>nur CAS vor RAS aktiviert werden, und intern wird dann irgend ein Zähler
>aktiviert, der automatisch Refresh-Adressen bildet. Kann man evtl. damit
>was machen? z.B. einen kleinen Controller, der immer, wenn der Bus nicht
>verwendet wird, erst CAS und dann RAS auf low legt? Oder ist das
>völliger Quark?

Relativ. Das Problem ist vor allem auch, dass der Bus von deinem 68K 
nicht auf DRAm ausgelegt ist, sondern auf SRAM. Den kann man reltive 
einfach ansprechen, und auch jede Sdresse direkt. Bei DRAm ist das ncht 
der Fall, u.a. wegn des gemultiplexten Adressbusses. Ein DRAM-Controller 
müsste nu auf der einen Seite sich so wie ein normaler SRAM verhalten, 
auf der anderen aner de Zugriff auf einen DRAM umbiegen. Alles zeimlich 
umständlich.

Wenn du ordentlich RAM braucht/willst, investier ein paar Euro und kauf 
dir SRAM und gut.

MFG
Falk

von Dominic R. (dominic)


Lesenswert?

> Wie wird das im PC gelöst? Dort ist ja auch DRAM im einsatz (und ja,
> klar meinte ich SDRAM :D).
> Für den Controller brauchts also nicht extra einen FPGA.

Wie Falk schon angemerkt hat -> Chipsatz. Bei AMD steckt der 
Speichercontroller allerdings seit K8 direkt im Prozessor - und der hat 
mit seinen zig Millionen bis hunderten Millionen Transistoren mehr Logik 
als jeder FPGA...

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Im PC werden doch die Befehle in den Cache geladen, und von dort 
ausgeführt, wobei der Cache wieder Sram ist ...

von Falk B. (falk)


Lesenswert?

@ Hauke Radtki (lafkaschar)

>Im PC werden doch die Befehle in den Cache geladen, und von dort
>ausgeführt,

Im cache wird gar nichts ausgeführt, nur zwischengespeichert.

> wobei der Cache wieder Sram ist ...

wohl war.

MFG
Falk

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Falk Brunner wrote:
> @ Hauke Radtki (lafkaschar)
>
>>Im PC werden doch die Befehle in den Cache geladen, und von dort
>>ausgeführt,
>
> Im cache wird gar nichts ausgeführt, nur zwischengespeichert.
>
>> wobei der Cache wieder Sram ist ...
>
> wohl war.
>
> MFG
> Falk

Ist da aber auch im Prozessor drinne ;)
Wobei ich mir überlegt hab, ob man überhaupt SRAM braucht für sowas?
Weil die Daten ja eh nach einiger Zeit "verfallen" könnte man das ja 
auch durch auslassen der Refreshcycles machen :P
(Hab mal gelesen das drams auh ein bsi 2 sek ohne refresh die Daten noch 
halten)

von Tobias P. (hubertus)


Lesenswert?

Okay danke für eure Auskünfte.
Somit wird das wohl nichts - DRAM-Controller selber bauen ist zu 
kompliziert, wenn nicht gar unmöglich.
Bleibe ich halt bei meinen SRAM ;)
Das einzig unschöne daran ist halt, dass man ziemlich viele Chips 
braucht, wenn man sagen wir mal 4 MB RAM realisieren will. Das sind dann 
halt 8 512k x 8 RAMs. Und grössere SRAM habe ich keine gefunden, welche 
auch noch bezahlbar wären.

Grüsse
   Tobias

von Micro M. (micromann)


Lesenswert?

Billiger ist es sicherlich einen Prozessor mit SD-Interface zu 
verwenden, als einen 8051 mit viel SRAM auszustatten ...

von Rolf Magnus (Gast)


Lesenswert?

> Wobei ich mir überlegt hab, ob man überhaupt SRAM braucht für sowas?

Ja.

> Weil die Daten ja eh nach einiger Zeit "verfallen" könnte man das ja
> auch durch auslassen der Refreshcycles machen :P

Du weißt aber nicht, wann sie verfallen. Außerdem muß, sofern man 
write-back-Cache hat, der Cache-Controller tunlichst darauf achten, daß 
alles rechtzeitig in den Hauptspeicher geschrieben wird.

> Hab mal gelesen das drams auh ein bsi 2 sek ohne refresh die Daten noch
> halten)

Nach dieser Zeit können Fragmente noch erhalten sein, ja. Zuverlässig 
ist das aber nicht.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Irgendwer hat hier im Forum mal ne nette Grafik gepostet, die 
"Datenverfallsrate" im bezug zur Temperatur. Bei 25° halten die Daten 
manchmal mehrere 10 sek. Bei höheren temperaturen eben viel weniger.

von Benedikt K. (benedikt)


Lesenswert?

Hauke Radtki wrote:
> Irgendwer hat hier im Forum mal ne nette Grafik gepostet, die
> "Datenverfallsrate" im bezug zur Temperatur.

Das war ich (in der Codesammlung unter 2MB DRAM an AVR):
http://www.mikrocontroller.net/attachment/21296/dram_norefr.gif

von WhAT DOTh LOVE BE (Gast)


Lesenswert?

Ein DRAM-zu-SRAM-Converter wäre doch eigentlich eine Marktlücke. Hat das 
noch keiner erfunden?

von Benedikt K. (benedikt)


Lesenswert?

Doch, das gab es vor sehr vielen Jahren. Nur ist das Verhältnis 
Aufwand/Nutzen anscheinend zu gering (hoher Aufwand.)

von Helmi (Gast)


Angehängte Dateien:

Lesenswert?

Am besten nimmst du einen ARM Prozessor von ATMEL

z.B. den Type AT91SAM7SE512

der hat ein SD-RAM Interface mit eingebaut.
Da ist das anschliessen von SD-RAM so einfach wie das anschliessen von 
SRAM.

Ich habe damit ein Board aufgebaut und es funktioniert einwandfrei.

Du hast bei diesem Prozessor auch den Vorteil das er das RAM linear 
addressieren kann.

Wuerdes du auf einem 8051 soviel RAM zu verfuegung haben muesstes du da 
eine Speicherverwaltung (Banking) programmieren.

Gruss Helmi

von Tobias P. (hubertus)


Lesenswert?

Wie kommt ihr auch immer auf den Vergleich mit dem 8051?
8051 kann ja max. 64k Speicher adressieren.
Nee, das ist mir definitiv zu popelig. Wenn ich mal was grösseres machen 
will, muss man da nur umständlich Bank switching basteln. 68k ist mir da 
schon lieber; ist zwar total kompliziert, aber halt auch linearer 
Adressraum und die kleinste Ausführung kann immerhin 16M x 16 
adressieren, was eigentlich genügen sollte. Wird aber schwer, 16M mit 
SRAM zu realisieren ;)

Aber danke für die Schaltung Helmi. Ich wollte mich sowieso auch mal dem 
ARM widmen.

von Helmi (Gast)


Angehängte Dateien:

Lesenswert?

Falls es dich interisiert:
Hier noch der Ethernetteil davon.

Gruss Helmi

von TheMason (Gast)


Lesenswert?

ich habe auch mal eine frage zum refresh.

ich möchte auch gerne ein SIMM ram nutzen und denke ich werde 
(anfänglich) einen cbr refresh machen. jetzt hab ich in div. beispielen 
gesehen das dieser refresh ca. alle 4ms 1024 mal hintereinander 
ausgeführt wird.
das unschöne ist das man den refresh 1024 hintereinander ausführt und 
der uC während der zeit brach liegt. kann man den cbr nicht einfach 
öfter aber dafür eben nicht 1024 mal hintereinander ausführen. z.b. nur 
64 mal und dafür alle 250us zu machen, sodass man in der summe auch auf 
1024 cbr impulse in 4ms kommt, oder erwarten die chips das der cbr 1024 
hintereinander kommt ? sollte doch auch so machbar sein oder ? immerhin 
wird beim zyklischen mit hidden ras refresh ja auch das ganze ram 
refreshed.

gruß
rene

von Condi (Gast)


Lesenswert?

Nimm doch ne Festplatte, da hast du genug Speicher.

von Benedikt K. (benedikt)


Lesenswert?

TheMason wrote:
>  kann man den cbr nicht einfach
> öfter aber dafür eben nicht 1024 mal hintereinander ausführen. z.b. nur
> 64 mal und dafür alle 250us zu machen, sodass man in der summe auch auf
> 1024 cbr impulse in 4ms kommt

Ja, das geht auch. Das nennt sich dann distributed refresh, während das 
andere burst refresh genannt wird.
Im Prinzip ist beides gleichwertig, softwaremäßig ist der Burst Refresh 
etwas effizienter, da der Overhead (Interrupteintritt usw.) seltener 
gemacht wird.

von TheMason (Gast)


Lesenswert?

@benedikt

danke für den hinweis. hatte schon so ein gefühl das das mit distributed 
refresh gemeint sein könnte. :-)
das es etwas ineffizienter ist stört mich nicht sonderlich.
mir geht es darum das der uC nicht während der 1024 cbr-toggeleien 
steht. das dauert eben seine zeit und blockiert alles andere.
eine weitere idee die ich damit verfolge ist das ich bei einem clpd/fpga 
eine statemachine baue die im idle-state das dram permanent refresht und 
nur wenn sie was zu tun bekommt lese oder schreib-operationen ausführt.

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.