Ddr sdram

Hey!
Ich hab mal ein Frage zur Funktionsweise des DDR SDRAM`s.

Und zwar wie schafft der diese fast doppelte Geschwindigkeit?
Ich hab zwar schon im Inet gesucht, finde aber keine mir einleuchtende Erklärung.
Sowas hab ich gefunden: „Damit das zu einer Beschleunigung führt, muss die Anzahl zusammenhängend angeforderter Daten (=‚Burst-Length‘) immer gleich oder größer als die doppelte Busbreite sein. Da das nicht immer der Fall ist, ist DDR-SDRAM im Vergleich zu klassischem (SDR-) SDRAM bei gleichem Takt nicht exakt doppelt so schnell. Ein weiterer Grund ist, dass Adress-und Steuersignale im Gegensatz zu den Datensignalen nur mit einer Taktflanke gegeben werden.“

Ichhoffe das mir jemand weiterhelfen kann!

Danke Anke

Hallo Anke,
Der haupt trick der den DDR Speicher so schnell macht ist
das sie sowohl Den Beginn einer Spannungs kurve als auch das abfallen zur Datenübeertragung verweden bei älteren modulen wurde nur eine der beiden spannungskanten zur daten übertragung genutzt.

weiteres dazu findest du in der wikipedia:
http://de.wikipedia.org/wiki/Double_Data_Rate

gruss chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hm ja das hab ich mir auch schon angeguckt. Mein Problem ist jetzt nur, was sendet der da genau? Und was hat das mit dem Bussystem zu tun?

auf diesem Weg werden datenn in den speicher geschrieben und auch wieder ausgelesen.

ein bus system dient dem austausch von daten zwischen einzelnen komponenten
z.B Hauptspeicher(RAM) und CPU

Hm ja das hab ich mir auch schon angeguckt. Mein Problem ist
jetzt nur, was sendet der da genau? Und was hat das mit dem
Bussystem zu tun?

Ok und jetzt moch eins :smile:
ICh denke ich hab das so weit verstanden.
„Die Adressen und Steuersignale (Lese- oder Schreibzugriff, Chip Select, Bank Select, /CAS, /RAS etc.) können aber genauso wie bei SDRAM, weiterhin nur auf der steigenden Taktflanke übertragen werden“
DAs hab ich noch gefunden, aber was ist damit gemeint? Beispiel? Und was wird dann bei der absteigenden gesendet?

Danke :smile:

Hallo Metleck.

zurück zu den wurzeln der computer technik.
ich mach mal kurz ein real worl example.

stell dir mal dne ram wie eine „glühbirne“ vor
und der tackt geber ist ein „lichtschater“

früher wurde nur gezählt wie viel „zeit“ zwischen dem einschalten der glühbirne vergeht.

sprich das auschalten und wieder einschalten. ist ein notwendiger schritt um den impuls den impuls zu nutzen.

die technik die DDR ram nun nutz sie zählen einfach die sekunden die die glühbirne brennt und danach die sekunden die sie aus ist.

das heist du kannst auf meinal mit der gleichen schalt frequenz doppelt so viel signal übertragen

vieleicht wird dir das jetzt mit dem beispiel aus der „echten welt“ etwas leichter zu verstehen.

gruss chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ja habs verstanden.
Ich Die Frage ist jetzt halt nur was bei auf und was beim absteigenden verschickt wird.

Sorry ich hab deine letzte frage gerade noch mal gelesen und denke ich hab sie falsch verstanden deswegen noch mal eine zweite antwort:

es gibt verschiedene commandos und ein paar commandos können halt nur auf der
steigenen flanke übermittelt werden. aus technischen gegebenheiten.

versucht gerade deine eigenen DDR-RAMs zu bauen oder warum willst du es so ganz genau wissen.

Steigenen / Abbfallende flanken sind die stellen wo der strohm hoch bzw runter geht. diese übergangs fasen werden halt zur signal übertragung genutzt. (soweit hat mir das bis heute immer gereicht *g*) und die erkenntnis das DDR schneller ist weil er beide flanken nutzt. und mehr muss man als anwender ja auch eigendlich gar nicht wissen.

gruss chris

Ok und jetzt moch eins :smile:
ICh denke ich hab das so weit verstanden.
„Die Adressen und Steuersignale (Lese- oder Schreibzugriff,
Chip Select, Bank Select, /CAS, /RAS etc.) können aber genauso
wie bei SDRAM, weiterhin nur auf der steigenden Taktflanke
übertragen werden“
DAs hab ich noch gefunden, aber was ist damit gemeint?
Beispiel? Und was wird dann bei der absteigenden gesendet?

Danke :smile:

es gibt verschiedene commandos und ein paar commandos können
halt nur auf der
steigenen flanke übermittelt werden. aus technischen
gegebenheiten.

hm ok also weißt du das nich so genau. Mist. Ich bin halt darauf gestoßen und weiß das dann immer gerne sehr genau. Das heißt jetzt, aus welchen technischen Gründen geht das denn nur so?!

Das hat mich an der ganzen DDr Sache halt verwirrt.

Da Kann ich dir leider nicht mehr weiter helfen weil ich mich so sehr im detail auch noch nicht mit dem DDR-Ram auseinander gesetzt habe. hoffe trozdem das du es noch genau heraus findest. kannst es ja dann mal hier posten wenn du es gefunden hast

Ja habs verstanden.
Ich Die Frage ist jetzt halt nur was bei auf und was beim
absteigenden verschickt wird.

Hallo Fragewurm,

„Die Adressen und Steuersignale (Lese- oder Schreibzugriff,
Chip Select, Bank Select, /CAS, /RAS etc.) können aber genauso
wie bei SDRAM, weiterhin nur auf der steigenden Taktflanke
übertragen werden“

So ein DRAM-Zugriff ist recht kompliziert und mit der Datenrate wird Werbung betrieben, was das ganze verzerrt.

Also basteln wir uns ein DRAM …

Damit es anschaulich wird soll das nur 16 Bit haben. Zudem gibt es nur einen Pin für die Daten. Der Speicher-Baustein ist als nach aussen als 16x1 Organisiert.

Diese 16 Bit ordnen wir in einer 4x4 Matrix an, dadurch wird die Anordnung kompakt. So eine Matrix bestet nun aus Spalten und Zeilen.

Mit 2 Bits können wir nun die Zeilen ansteuern.

Jetzt haben wir ein kleines Problem: Wenn wir eine Zeile auswählen, werden imm gleich 4 Bits ausgelesen …

Also benötigen wir noch einen Multiplexer welcher aus den 4 Zeilen-Bits eines auswählt und auf den Ausgang schaltet. Das sind nochmals 2 Bits um diesen anzusteuern.

Vom Zeitlichen Verlauf her, benötigt es etwas Zeit, vom Anlegen der Zeilen-Adresse bis die 4 Bits intern wiklich anliegen und die Adresse für den Splaten-Multiplexer benötigt wird.

Also kann man einen Zwischenspeicher für die Zeilen-Bits einfügen und die 2 Pins für die Zeilen- und Spalten-Bits gemeinsam benutzen. Zudem fügen wir auch noch gleich einen Zwischenspeicher für die Spalten-Adresse ein.

Allerdings benötigen wir jetzt zwei zusätzliche Steuerleitungen, welche unseren RAM mitteilen wann die Zeilen- und wann die Spalten-Adressen anliegen und gültig sind.
Diese nennen wir mal Zeilen-Adress-Signal und Spalten-Adress-Signal und weil englisch sooo schön ist:
Column-Adress-Strobe (CAS) und
Row-Adress-Strobe (RAS).

Und weil wir ja praktisch immer mehr Speicher benötigen als in einen Chip passt, fügen wir noch einen Chip-Select Anschluss hinzu. Wenn dieser deaktiviert ist, ignoriert unser RAM einfach sämtliche STeuersignale an seinen Eingängen. Damit können wir nun mehrere Speicherchips paralell schalten.
Für unsere weiteren Betrachtungen nehmen wir mal an, dass dieser Chip-Select-Eingang immer aktiviert ist.

Die Ansteuerung sieht nun wie folgt aus:

  1. Zeilen-Adresse an die Adress-Pins anlegen.
  2. Wenn die Signale stabil sind werden mit der fallenden Flanke von RAS die Adressen in den Zeilen-Adress-Zwischenspeicher geladen und die entsprechende Zeile wird aktiviert, was etwas Zeit in anspruch nimmt.
  3. in der Zwischenzeit legen wir nun die Spalten-Adressen an.
  4. Sind diese Signale auch stabil werden die Adressen mit der fallenden Flanke von CAS in den Spalten-Adress-Zwischenspeicher übertragen und … da fehlt jetzt aber noch was … auf den Daten Ausgang gelegt.

Da fehlt doch noch ein Steuersignal welches Schreiben und Lesen ermöglicht, bis jetzt können wir nur lesen, also muss da noch ein R/W-Signal dazu, aber diese Dateils übergehen wir in unserer Betrachtung.

Bis jetzt haben wir aber nur ein ganz normales RAM, da ist noch nichts von DDR oder so zu sehen …

Die grösste Zeit beim Zugriff wird benötigt bis eine Zeile ihre Daten wirklich an unseren Multiplexer stabil angelegt hat, der Multiplexer selbst abrbeitet wesentlich schneller.

Wenn wir jetzt den Adress-Zwischenspeicher für die Spalten durch einen Zähler ersetzen können wir eigentlich Schritt 1. und 2. sparen, wenn wir immer 4 Bits einer Zeile nacheinander auslesen wollen.
Um nicht weitere Ansteuer-Pins zu benötigen braucht es etwas Logik.

Wenn CAS inaktiv ist, ladet die fallende Flanke von RAS die Adress-Bits in den Zwischen-Speicher. Danach wird CAS aktiviert.
Nun können wir das Ganze so verschalten, dass weitere fallende Flanken von RAS den Zähler für die Spalten weiterschaltet.

Nun haben wir schon mal ein FPO-RAM (Fast Page Out).
Wenn wir das Ganze noch so Modifizieren, dass bei der steigenden und bei der fallenden Flanke von RAS der Zähler weitergeschaltet wird, sind wir bei DDR angelangt.

Wie man sieht dauert der Zugriff auf das erste Bit einer Zeile immer gleich lang, auch bei DDR, die folgenden Bits einer Zeile können dann aber wesentlich schneller ausgelesen werden.

OK, mit 16Bits macht der ganze Aufwand noch keinen Sinn. Aber bei schon bei einem 64KBit-Speicher würde man für die Adress-Leitungen 16 Pins benötigen. Durch anordnen der Bits in einer 256x256-Matrix und mit RAS und CAS benötigt man dann nur noch 8 Adressleitungen. Jeder zusätzliche Adress-Pin vervierfacht also die adressierbare Speicherkapazität.

Da wäre noch die Geschichte mit dem Refresh, aber damit würde ich jetzt das FOrum sprengen …

Hier kannst du mal ansehen wie das in konkret aussieht (leider kann man nicht direkt auf das Datenblatt verlinken):
http://www.qimonda.com/computing-dram/ddr/sdram.html
Klick einfach mal auf „Datasheet“ in der obersten Zeile ( HYB25D128400CT-7 128Mb, 32Mx4, DDR266A 2-3-3)

Auf Seite 21 ist da ein Blockschaltbild.
Und ab Seite 77 (Kapitel "Timing Diagrams) kannst du dir dann ansehen wie die Pins angesteuert werden :wink:

MfG Peter(TOO)

2 „Gefällt mir“

Hi,

Respekt und *

Viele Grüße
WoDi

Hallo

Es gibt einfache evtl. Probleme beim Auslesen der abfallenden Pegel. D.H. Man hat einfach festgestellt das dieser Fallenden Pegel einfach zu unregelmäßig ist. Verursacht durch den Speicherchip, Bussystem…
Um das zu beantworten benötigtst du evtl. einen der Entwicklern.

Es gibt oft theoretische Annahmen die später an der Hardware scheitern.

Grüße Sven

hm ok also weißt du das nich so genau. Mist. Ich bin halt
darauf gestoßen und weiß das dann immer gerne sehr genau. Das
heißt jetzt, aus welchen technischen Gründen geht das denn nur
so?!

Das hat mich an der ganzen DDr Sache halt verwirrt.

Hallo Sven,

Es gibt einfache evtl. Probleme beim Auslesen der abfallenden
Pegel. D.H. Man hat einfach festgestellt das dieser Fallenden
Pegel einfach zu unregelmäßig ist. Verursacht durch den
Speicherchip, Bussystem…

Es kommt einfach daher, weil da nichts schneller geht !!

Die Hauptzugriffszeit wird durch das Anlegen der Zeilen Adresse bis zum Anstehen der Daten am interneren Zwischenspeicher bestimmt. Das auslesen dieses Zwischenspeichers, kann dann aber wesentlich schneller geschehen, da hier kürzere Zugriffszeiten gelten.
Auch beim Rfresh kannst du nichts beschleunigen, man kann nur zeitlich verschachteln, indem man die Zeilendaten in einen zweiten Zwischenspeicher kopiert und dann während der erste ausgelesen wird, den Zweiten zurück in die gelesene Zeile schreibt.

Desweiteren können Schreibzugriffe auch nicht beschleunugt werden, wenn nur ein Byte an eine Adresse geschrieben werden muss.

Zudem bringt die ganze Geschicht nur etwas wenn die CPU einen Cache besitzt, was heute im PC-Bereich üblich ist. In den Cache werden immer Blöcke geladen um die Komplexität in einem vernünftigen Rahmen zu halten und weil, statistisch betrachtet, meist mehrere Bytes der Reihe nach von der CPU angesprochen werden, wie z.B. beim Programm-Code.

Damit der Cache funktioniert, muss ja zu jedem Byte auch bekannt sein, welcher Adresse es im Hauptspeicher zugeordnet ist.

Wenn ich den Cache einer 32-Bit CPU bytweise organisiere bedeutet das, dass ich 8 Bit für die Daten und 32Bit für die Adresse im Cache bereitstellen muss. Hinzu kommt noch 1 Bit, welches anzeigt ob dieser Eintrag überhaupt gültige Daten enthalt und ein Weiteres welches mir anzeigt ob die Daten geändert wurden und erst noch in den Hauptspeicher zurückgeschrieben werden müssen.
Macht also 8+32+2 = 42 Bit Speicherplatz im Cache. also 34 Bit Overhead pro Byte.
Etwas besser sieht es schon aus, wenn ich immer 32Bit Worte im Cache eintrage. Dadurch spare ich auch noch 2 Bits bei der Adresse ein. Der Overhead wäre dann 32/4 = 8 Bit pro gespeicherten Byte. Allerdings habe ich jetzt den Nachteil, dass ich immer 4 Bytes in den Speicher zurückschreiben muss, wenn isch auch nur 1 Bit geändert hat. Aber bei einem 32Bit-System mit einem 32Bit Datenbus speilt das keine Rolle.

Um den Busdurchsatz zu erhöhen muss man entweder immer schnellere Speicherbausteine haben oder man geht in mit dem Datenbus in die Breite. Wenn ich den externen Datenbus z.B. auf 128Bit erweitere, habe ich mit gleichschnellen Speicherchips, die 4-fache Datenrate gegenüber einem 32-Bit Datenbus.
Nun macht es auch Sinn, den Cache auf 128-Bit zu erweitern und ich spare nochmals 2 Bit bei der Adresse, wodurch sich der Overhead auf 30/16= ~2 Bit pro Byte erniedrigt…

Allerdings nutze ich jetzt die fähigkeiten des RAMs, aufeinanderfolgende Bytes schnell auszugeben nicht mehr aus. Ich muss also die Cash-Einträge weiter vergrössern umd immer mehrere aufeinander folgende Speicherzugriffe zu erzeugen. Das erzeugt aber unter umständen wieder einen zusätzlichen Overhead, bzw. bremstdas System aus, wenn auf einzelne Bytes zugegriffen wird, welche nicht schön beieinander liegen. Beim Programm-Code werden die einzelnen Bytes aber meist hintereinander abgearbeitet, zumindest soweit wie keine Sprungbefehle im Code vorhanden sind.
Weil die Anforderungen entsprechend unterschiedlich sind, haben Prozessoren meist unterschiedliche Caches für Daten und Code.

Grundsätzlich ist das Ganze noch eine statistische Geschichte, wieviel sich mit den Cache optimieren lässt. Desweiteren kann man auch bewusst Programme schreiben, welche entweder den Cache ausbremsen oder aber auch gut ausnützen, indem z.B. eine Programm-Schleife so gestaltet, dass sie genau in einen Cache-Eintrag hineinpasst.

MfG Peter(TOO)

Hallo Peter

Danke für die Infos. Da habe ich wieder was dazu gelernt.

Grüße

Hallo Sven,

Es gibt einfache evtl. Probleme beim Auslesen der abfallenden
Pegel. D.H. Man hat einfach festgestellt das dieser Fallenden
Pegel einfach zu unregelmäßig ist. Verursacht durch den
Speicherchip, Bussystem…

Es kommt einfach daher, weil da nichts schneller geht !!

Die Hauptzugriffszeit wird durch das Anlegen der Zeilen
Adresse bis zum Anstehen der Daten am interneren
Zwischenspeicher bestimmt. Das auslesen dieses
Zwischenspeichers, kann dann aber wesentlich schneller
geschehen, da hier kürzere Zugriffszeiten gelten.
Auch beim Rfresh kannst du nichts beschleunigen, man kann nur
zeitlich verschachteln, indem man die Zeilendaten in einen
zweiten Zwischenspeicher kopiert und dann während der erste
ausgelesen wird, den Zweiten zurück in die gelesene Zeile
schreibt.

Grundsätzlich ist das Ganze noch eine statistische Geschichte,
wieviel sich mit den Cache optimieren lässt. Desweiteren kann
man auch bewusst Programme schreiben, welche entweder den
Cache ausbremsen oder aber auch gut ausnützen, indem z.B. eine
Programm-Schleife so gestaltet, dass sie genau in einen
Cache-Eintrag hineinpasst.

MfG Peter(TOO)