mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Refresh bei SDRAM interleaved mit Schreibzugriffen möglich?


Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Für ein Projekt überlege ich statt bisher SRAM SDRAM einzusetzen.
Zwei Chips die in der engeren Auswahl sind wären:
MT48LC4M16A2P-7E:G:G
oder
IS42S16400D-7TL
(beide gibts bei Farnell)

Im Projekt wird es erforderlich sein 8MByte Daten mit 200MByte/s weg zu 
schreiben. Für beide Chips kein Problem. Allerdings sollen die Daten 
auch uU mit Bruchteilen der Geschwindigkeit geschrieben werden. Also 
100MByte/s, 50, 25,... Mit anderen Worten: Manchmal soll nur jeden 2. / 
4. / 8. ,... Takt ein Wort gespeichert werden. Aber immer noch alles am 
Stück.

Problem ist dann, dass so ein Schreibzugriff länger als der 
Refreshzyklus (64 ms) dauert, aber die Pause zwischen 2 Schreibzugriffen 
nicht für einen vollen Refresh reicht.

Einfach wäre es natürlich, wenn ich immer abwechselnd 16 Bit schreiben 
und Refreshen kann. Also nur einen Refreshzyklus.

In beiden Datenblättern ist mir nicht klar geworden ob man das so machen 
kann. Es stand nicht drin, dass es geht, aber es war auch nicht explizit 
gefordert, dass alle 4096 Refreshzyklen am Stück kommen müssen.

Weiß das vielleicht jemand?

Oder muss ich die Daten dann irgendwie Zwischenpuffern? Oder gibt es 
vielleicht noch eine viel einfachere Möglichkeit die ich übersehen habe?
Kann man vielleicht auf einer Bank schreiben und während dessen eine 
andere refreshen?

Viele Grüße,
Christian

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da bin ich noch mal.
Wenn man auf eine Frage keine Antwort bekommt ist die Antwort in der 
Regel eigentlich: Guck doch mal genau ins Datenblatt.
Allen Anfängern die wie ich vom SRAM kommen und SDRAM nutzen wollen kann 
ich sagen: Ein Blick ins Datenblatt verrät absolut gar nichts. Zumindest 
nicht, wenn man die Terminologie nicht kennt und die wird nunmal nur 
knapp bis gar nicht in den Datenblättern erklärt.
Also an alle Anfänger die an der gleichen Startposition stehen wie ich:
Wikipedia Artikel über DRAM lesen (nicht den über Sdram. Der ist mist).

Also einige Fragen kann ich jetzt erst mal selbst beantworten.

Erstmal so ein Schreibzugriff der den ganzen Speicher voll schreibt ist 
möglich, aber das ist nicht ganz selbstverständlich.
Zuerst muss man eine Row zum schreiben im Burst Mode öffnen. Als Burst 
Length wählt man am besten Full Page.
Bevor der Zugriff am Ende angekommen ist muss man den Befehl senden auf 
einer anderen Bank eine Reihe zu öffnen. Dieser Befehl braucht nämlich 
ein paar Takte. Wenn man das richtig getimed hat geht der neue 
Schreibzugriff direkt nahtlos weiter.

Dann ist es möglich einen refresh stückchenweise zu machen. Steht im 
Datenblatt als distributed refresh. Allerdings dauert auch nur eine Row 
zu refreshen ein paar Taktzyklen. Daher geht nicht der taktweise Wechsel 
von Schreiben und refresh.

Meine letzte Frage konnte ich aber nicht Beantworten: kann ich auf einer 
Bank schreiben, während ich auf einer anderen einen Refresh mache?

Das spricht dagegen:
- im functional block diagram des RAMs gibt es nur einen Refresh 
counter. Damit die Bänke unabhängig refreshen können müsste es pro Bank 
einen geben. Allerdings ist das ja auch nur eine Skizze.
- für den Refresh Befehl sind die Bank adress inputs "don't care"

Das spricht dafür:
- Vor dem refresh Befehl führt man ein Precharge aus. A10 hat die 
funktion "All Banks/Single Bank".
(siehe: 
http://download.micron.com/pdf/datasheets/dram/sdr... Seite 
59)
- Meiner Meinung nach wäre es absolut idiotisch einen Chip so zu 
designen das es nicht geht. Durch die 3 zusätzlichen Zähler wird er 
vielleicht etwas teurer, aber das Geld ist er dann auch wirklich Wert. 
Ich meine: Erst dadurch ist er für Echtzeitanwendungen überhaupt 
interessant.
Wenn es einen anderen Grund gibt, das einfacher zu gestalten klärt mich 
bitte auf.

Jetzt hat sich bei mir eine neue Frage ergeben:
Was ist der Unterschied zwischen Row und Page? Ist es physikalisch im 
Ram das gleiche?

Ich hoffe jetzt gibt es jemanden der motiviert ist meine 2 verbleibenden 
Fragen zu beantworten.

Viele Grüße,
Christian

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe vor, mich in nächster Zeit mit DRAM zu beschäftigen.
Deswegen kann ich noch nicht beurteilen, ob der Artikel dir was nützt.

http://download.micron.com/pdf/technotes/DT30.pdf

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Schon mal auf jeden Fall vielen Dank für die Antwort!
Nur leider glaube ich, dass das Dokument doch sehr asynchoner DRAM 
spezifisch ist und ich will mit synchronem DRAM arbeiten. Da gibt es ja 
nur die 2 Refresharten selfrefresh und autorefresh.
Ob es bei SDRAM auch eine Art Hidden refresh gibt weiß ich nicht. Ich 
habe die Architektur so verstanden, dass beim "öffnen" einer Reihe 
automatisch eine Art refresh geschieht. Wenn ich jetzt noch eine Reihe 
öffnen kann ohne einen Schreib- oder Lesezugriff machen zu müssen könnte 
das Problem gelöst sein. Dann wäre das PDF genau das was ich gesucht 
habe.
Dann müsste ich mich nur drum kümmern, dass ich auf einer Bank einen 
Burst initiiere und auf den anderen während dessen diesen spezial 
refresh ausführe. Gut, das wäre komplizierter als ein Autorefresh, aber 
das sollte ja nicht so das Problem sein.
Ist halt nur die Frage ob das so alles richtig ist wie ich es verstanden 
habe. Also das es einen intrinsischen refresh gibt, wenn eine Zeile 
geöffnet wird.
Und ob ich "öffnen" kann ohne zu lesen. Das sollte sicher im Datenblatt 
zu finden sein, aber für den ersten Punkt würde ich doch lieber mal 
jemanden sprechen der etwas Erfahrung in dem Gebiet hat.

Viele Grüße,
Christian

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wie ich es verstanden habe wird es funktionieren, wenn ich auf 
einer Bank ein Burst Read oder Write ausführe und während dessen die 
anderen Banks mit einer Active-Precharge Sequenz refreshe. Es irritiert 
mich nur, dass davon nix im Datasheet steht.
Naja, ich werde es wohl ausprobieren müssen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.