PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mapping Speicher-Adresse <-> Speicher? Pageing? Fragen zum internen Speicheraufbau


Benja
2006-01-18, 16:10:33
Hallo

Annahme:
Es ist eine Hardware vorhanden, bei der die CPU direkt (ohne Cache) auf den Daten-Speicher zugreift. Kein direkter Bezug zu klassischen PC-Computern. Es ist kein Cache zwischengeschaltet. Die Instruktionen seien mal "einfach da".
Der Speicher ist ein normaler SDRAM-DIMM. Sagen wirbeispielsweise 64MB mit acht 64MBit SDRAM-ICs. Jeder dieser ICs besteht ja intern aus vier Bänken. Jede dieser Banken hat eigene Schreib/Leseverstärker.

Wie wird jetzt die Aufteilung gemacht, welche Adresse in welche Bank kommt ?
Wenn ich als Adresse z.B. 0x1234 habe - wie wird die dann gefunden ? Wo kommen welche der 32Bit her, die zur CPU übertragen werden ?

Hintergrund ist folgender: Ich muss ein Programm schreiben, dass aus Memory-Traces einer CPU die Zugriffskosten auf den Speicher herauszieht. Dabei soll z.B. "Page Open" / "Page Hit" berücksichtigt werden. Das bereitet mir Kopfschmerzen, weil ich nicht weiß, woran ich erkennen kann, welche Adressen eigentlich direkt vorrätig sind (also in den Sense-Amps stehen). Das will mir nicht in den Kopf.

Ich habe schon ne Menge Literatur gewälzt aber finde irgendwie keine Antwort auf meine Frage.

Kann mir da jemand Helfen ? Sei es direkt oder durch Literaturhinweise ?

Vielen Dank.
Benja

--------------------------------------------------------------------------------------

P.S.
Wer Lust hat, kann ja folgendes Mal lesen und prüfen, ob das so korrekt ist, was ich da geschrieben habe. Vielleicht steckt da auch schon ein Missverständniss meinerseits was dann meine obige Frage erübrigt... So wie es hier steht hab ichs mir aus diversen Artikeln zusammengereimt.

Annahme:
Es ist eine Hardware vorhanden, bei der die CPU direkt (ohne Cache) auf den Daten-Speicher zugreift. Es ist kein Cache zwischengeschaltet. Die Instruktionen seien mal "einfach da".
Der Speicher ist ein normaler SDRAM-DIMM. Sagen wir 64MB mit acht 64MBit SDRAM-ICs. Jeder dieser ICs besteht ja intern aus vier Bänken. Jede dieser Banken hat eigene Schreib/Leseverstärker.

Wenn jetzt eine Adresse an den Speicher angelegt wird, wird zuerst die Speicherbank ausgewählt (zwei Bit der Adresse), dann die Spaltenadresse angelegt. Die ausgewählte Bank lädt in ihre Sense-Amps die entsprechende Zeile ein. Über die Spaltenadresse wird dann festgelegt, welches Wort gebraucht wird. Dieses wird ausgelesen, die Zeile wird zurückgeschrieben, fertig.

Es gibt ja jetzt die Möglichkeit, nach dem anlegen der Zeilenadresse mehrere Zugriffe auf diese Zeile zu machen (Bursts). Also z.B. 4 Worte nacheinander. Da entfällt dann das Auslesen der Zeile aus der Bank. Auch kein Problem. (Wobei das in diesem Fall eh nicht geht - wo soll die CPU damit hin - aber wenn doch ein Cache da wäre, würde es Sinn machen um gleich ganze Cache-Zeilen in einem Rutsch zu übertragen). Dem Speicher wird mitgeteilt, dass er ab der Spaltenadresse eben z.B. 4 oder 8 Worte übertragen soll.

Dann gibts da aber noch das, was mit "Paging" bezeichnet wird.
Da verlassen mich meine Gedanken irgendwie.
Die Zeilenadresse wird an alle vier Bänke gleichzeitig angelegt. Diese laden alle die entsprechende Zeile in ihre Sense-Amps. Wenn nun ein Zugriff auf eine Spalte kommt, die zwar nicht in der eigentlich gewünschten Bank liegt, aber in derselben Zeile einer anderen Bank, so entfällt auch hier das Auslesen der Zeile in die Sense-Amps. Somit spart man Zeit. "Page-Hit".

Alternativ kann man auch nach einem erfolgten Zugriff die in die Sense-Amps geladene Zeile nicht sofort zurückschreiben (schließen), sondern sie noch eine gewisse Zeit geöffnet halten ("Page-Open" ?). Das hat den Vorteil, dass, falls zufällig nochmal ein Zugriff auf diese Zeile erfolgt (kein Burst), die Zeile ebenfalls nicht aus dem Speicherfeld ausgelesen werden braucht.

Demirug
2006-01-18, 16:41:57
Ich habe jetzt erst die Hälfte gelesen aber bevor ich jetzt in die Details gehen habe ich eine Frage. Hast du dir schon ein Datenblatt zu dem Speicher der verwendet werden soll besorgt und wenn ja welcher soll es den sein?

Benja
2006-01-18, 17:11:07
kein konkreter speicher. insg. eher theoretische sache. das ganze soll ein "realitätsnahes simulationssystem" sein. heißt, die traces kommen von einem prozessorsimmulator.
meine software soll dann verschiedene speicherarchitekturen nachbilden können (mit und ohne page-open, 1,2,4 bänke, unterschiedliche timings etc)
damit sollen dann "messungen" anhand der simulation erfolgen.

insofern kann ich nicht in ein datenblatt gucken. das hat mich nicht davon abgehalten, es trotzdem zu tun. z.b. von hier:
http://www.samsung.com/Products/Semiconductor/Sync_AsyncDRAM/SDRSDRAM/Module/UnbufferedDIMM/M366S0924FTS/M366S0924FTS.htm
aber wirklich schlau bin ich da auch nicht draus geworden bzgl der anordnung der daten und der zuordnung auf die adressen.
auf den Blockdiagrammen sehe ich zwar, welche Datenleitung (DQxx) auf welche Bank (Ux) geführt werden, aber bzgl. meines problems hilft mir das irgendwie nicht :(

Doofheit ?

GloomY
2006-01-19, 18:09:29
Annahme:
Es ist eine Hardware vorhanden, bei der die CPU direkt (ohne Cache) auf den Daten-Speicher zugreift. Kein direkter Bezug zu klassischen PC-Computern. Es ist kein Cache zwischengeschaltet. Die Instruktionen seien mal "einfach da".
Der Speicher ist ein normaler SDRAM-DIMM. Sagen wirbeispielsweise 64MB mit acht 64MBit SDRAM-ICs. Jeder dieser ICs besteht ja intern aus vier Bänken. Jede dieser Banken hat eigene Schreib/Leseverstärker.

Wie wird jetzt die Aufteilung gemacht, welche Adresse in welche Bank kommt ?
Wenn ich als Adresse z.B. 0x1234 habe - wie wird die dann gefunden ? Wo kommen welche der 32Bit her, die zur CPU übertragen werden ?Das ist Aufgabe des Speichercontrollers und damit nicht immer gleich. Der nimmt die Gesamtadresse und sucht sich je nach Bauart und Speicherorganisation die jeweiligen Bits für die Auswahl von Kanal, Row (Chips Select), Bank und die beiden restlichen Adressteile, die bei DRAM mit Adressmultiplexing benötigt wird.
Das ist nicht einheitlich. Vom MCH des i875P weiss ich z.B. dass dieser zwei Adressmodi unterstützt ("dynamic paging mode" on/off), der sich darin unterscheidet, welche FSB-Adressbits für die Auswahl der Bank hergenommen werden.

Immerhin ist bei dir die Sache etwas einfacher, weil es nur einen Kanal und auch nur eine Row gibt. :)
Dabei soll z.B. "Page Open" / "Page Hit" berücksichtigt werden. Das bereitet mir Kopfschmerzen, weil ich nicht weiß, woran ich erkennen kann, welche Adressen eigentlich direkt vorrätig sind (also in den Sense-Amps stehen).Das ist eben von der Zuordnung der Adressbits abhängig. Üblicherweise macht man diese aber so, dass innerhalb einer Page die Daten von zusammenhängenden aufsteigenden Adressen drin sind. Wenn du also weisst, wie lang die Page ist (kann man ja ausrechnen), hast du einen Adressbereich, für den die Daten dann in den Sense Amps liegen und für den du sehr einfach in deinem Programm testen kannst, ob das nun ein Pagehit war oder nicht.
Wenn jetzt eine Adresse an den Speicher angelegt wird, wird zuerst die Speicherbank ausgewählt (zwei Bit der Adresse), dann die Spaltenadresse angelegt. Die ausgewählte Bank lädt in ihre Sense-Amps die entsprechende Zeile ein. Über die Spaltenadresse wird dann festgelegt, welches Wort gebraucht wird. Dieses wird ausgelesen, die Zeile wird zurückgeschrieben, fertig.Fast richtig, nur dass es bei der oben gekennzeichneten Stelle die Zeilenadresse sein muss.
Dann gibts da aber noch das, was mit "Paging" bezeichnet wird.
Da verlassen mich meine Gedanken irgendwie.
Die Zeilenadresse wird an alle vier Bänke gleichzeitig angelegt. Diese laden alle die entsprechende Zeile in ihre Sense-Amps. Wenn nun ein Zugriff auf eine Spalte kommt, die zwar nicht in der eigentlich gewünschten Bank liegt, aber in derselben Zeile einer anderen Bank, so entfällt auch hier das Auslesen der Zeile in die Sense-Amps. Somit spart man Zeit. "Page-Hit".Die einzelnen Banks müssen nicht die gleiche Zeilenadresse geöffnet haben. Das ist ja gerade das schöne am Bank-Interleaving, dass diese unabhängig voneinander arbeiten und man so Latenzen hinter anderen Übertragungsvorgängen verstecken kann.


btw: Bei "Paging" denke ich eigentlich an virtuelle Speicherverwaltung. Beim ersten Überfliegen dachte ich, dass du das auch samt einer MMU simulieren wolltest. Aber du meinst wohl doch eher Bank-Interleaving.
Alternativ kann man auch nach einem erfolgten Zugriff die in die Sense-Amps geladene Zeile nicht sofort zurückschreiben (schließen), sondern sie noch eine gewisse Zeit geöffnet halten ("Page-Open" ?). Das hat den Vorteil, dass, falls zufällig nochmal ein Zugriff auf diese Zeile erfolgt (kein Burst), die Zeile ebenfalls nicht aus dem Speicherfeld ausgelesen werden braucht.Ja, das nennt man "Open-Page Policy" bzw. "Closed Page Policy" des Speichercontrollers. Bei ersterem kann man oft auch noch ein Maximum angeben, nach wie vielen Takten der Speichercontroller die Page wieder schließt.

del_4901
2006-01-19, 18:21:02
Wenn mich nicht alles irrt, redet ihr von Frames, nicht von Pages. Pages sind das virtuelle gegenstück von farmes, nachdem die MMU alles durchgerechnet haten, und können mehrfach vorliegen. Außerdem hat jeder Prozess sine eigenen Pages, welche inerhalb sowie Außerhalb von Prozessen mehrfach vorliegen können. Außerdem hat jeder Prozess seinen eigenen Adressraum, und deswegen ist auch die Nummerierung für Pages mehrfach vorhanden.

GloomY
2006-01-19, 18:38:54
Wenn mich nicht alles irrt, redet ihr von Frames, nicht von Pages. Pages sind das virtuelle gegenstück von farmes, nachdem die MMU alles durchgerechnet haten, und können mehrfach vorliegen. Außerdem hat jeder Prozess sine eigenen Pages, welche inerhalb sowie Außerhalb von Prozessen mehrfach vorliegen können. Außerdem hat jeder Prozess seinen eigenen Adressraum, und deswegen ist auch die Nummerierung für Pages mehrfach vorhanden.So weit ich das verstanden habe, ist genau das eben nicht gemeint. Gerade deswegen habe ich das ja oben angesprochen, weil diese Bezeichnung begrifflich schon vorbelegt ist.

Benja
2006-01-19, 18:48:34
Das ist Aufgabe des Speichercontrollers und damit nicht immer gleich. Der nimmt die Gesamtadresse und sucht sich je nach Bauart und Speicherorganisation die jeweiligen Bits für die Auswahl von Kanal, Row (Chips Select), Bank und die beiden restlichen Adressteile, die bei DRAM mit Adressmultiplexing benötigt wird.

Zum Verständniss:
Kanal = Bus, der den Speicher (z.B. einen DIMM) an den Prozessor koppelt

Row = ein Speicher-IC (so n kleines schwarzes Ding mit Beinchen ;) das auf einem DIMM sitzt) - wird teilweise in Literatur/Artikeln (fälschlicherweise?) auch als Bank bezeichnet

Bank = Einheit innerhalb eines Speicher-ICs (eine Bank hat z.B. eigene Sense-Amps)

korrekt ?

Immerhin ist bei dir die Sache etwas einfacher, weil es nur einen Kanal und auch nur eine Row gibt. :)

s.o. mehrere Rows und (ganz evtl später sogar mehrere Kanäle, mal sehen)

Das ist eben von der Zuordnung der Adressbits abhängig. Üblicherweise macht man diese aber so, dass innerhalb einer Page die Daten von zusammenhängenden aufsteigenden Adressen drin sind. Wenn du also weisst, wie lang die Page ist (kann man ja ausrechnen), hast du einen Adressbereich, für den die Daten dann in den Sense Amps liegen und für den du sehr einfach in deinem Programm testen kannst, ob das nun ein Pagehit war oder nicht.

*DummNachfrag* Das rechne ich über die Größe des ICs, die Anzahl seiner Bänke und die Zahl der Zeilen pro Bank aus, korrekt ?
Fast richtig, nur dass es bei der oben gekennzeichneten Stelle die Zeilenadresse sein muss.

Klar, Freudscher-Fehler.
Die einzelnen Banks müssen nicht die gleiche Zeilenadresse geöffnet haben. Das ist ja gerade das schöne am Bank-Interleaving, dass diese unabhängig voneinander arbeiten und man so Latenzen hinter anderen Übertragungsvorgängen verstecken kann.

Hmm, also doch so, wie ich vermutet hatte. Dann muss ich mir mal Gedanken machen, ob ich die Art von Infos überhaupt aus dem Memory-Trace extrahieren kann. Denn wie soll ich da den Wegfall von Latenzen berücksichtigen...
btw: Bei "Paging" denke ich eigentlich an virtuelle Speicherverwaltung. Beim ersten Überfliegen dachte ich, dass du das auch samt einer MMU simulieren wolltest. Aber du meinst wohl doch eher Bank-Interleaving.

Das was ich unter "Page" verstehe, ist eine komplette Zeile einer Bank. Also die Gesamtheit der Sense-Amps einer Bank. So hab ich das in mehreren Artikeln/Büchern bezeichnet gelesen...
Ja, das nennt man "Open-Page Policy" bzw. "Closed Page Policy" des Speichercontrollers. Bei ersterem kann man oft auch noch ein Maximum angeben, nach wie vielen Takten der Speichercontroller die Page wieder schließt.
Ack, da gibts Regeln die man den Datenblättern entnehmen kann. Spätestens beim Refresh, oft schon früher ist Schluß.

Danke schonmal.

Benja
2006-01-19, 18:51:42
@AlphaTier:
siehe Beitrag hierdrüber.
Prozesse interessieren mich nicht, ich bin auf Assembler-Ebene und habe Memory-Traces vor mir.
Nach dem Motto:
Adresse, Read/Write, Breite des Zugriffs (in Bit)

Mehr hab ich nich. Naja, vermutlich kriege ich irgendwann noch die passenden Instruction-Traces dazu. Auf Assembler-Ebene natürlich ;)

edit:

Achja, ich möchte mich hiermit nochmal bedanken und schonmal entschuldigen. Mit schwirrt momentan soviel Zeug im Kopf rum, dass ich das halt nicht richtig sortiert bekomme :(
Deswegen hab ich da vllt auch bei den Begriffen irgendwie auch noch Klärungsbedarf.

del_4901
2006-01-19, 19:56:04
@AlphaTier:
siehe Beitrag hierdrüber.
Prozesse interessieren mich nicht, ich bin auf Assembler-Ebene und habe Memory-Traces vor mir.
Nach dem Motto:
Adresse, Read/Write, Breite des Zugriffs (in Bit)

Mehr hab ich nich. Naja, vermutlich kriege ich irgendwann noch die passenden Instruction-Traces dazu. Auf Assembler-Ebene natürlich ;)

edit:

Achja, ich möchte mich hiermit nochmal bedanken und schonmal entschuldigen. Mit schwirrt momentan soviel Zeug im Kopf rum, dass ich das halt nicht richtig sortiert bekomme :(
Deswegen hab ich da vllt auch bei den Begriffen irgendwie auch noch Klärungsbedarf.

Dein OS setzt dir ja den Speicherbereich vor, das programmiert dir die MMU und macht alles startklar, also solange du nicht ein OS programmiern willst, musst du dich nicht mit Frames rumschlagen, denn vom OS gibt es blos virtuelle Pages.

del_4901
2006-01-19, 19:58:07
So weit ich das verstanden habe, ist genau das eben nicht gemeint. Gerade deswegen habe ich das ja oben angesprochen, weil diese Bezeichnung begrifflich schon vorbelegt ist.

Also wenn es (wie ich es verstanden habe) sich es um Sachen handelt die etwa in der Ebene Speichercontroller, Dimm, RAM handelt. Dann spricht man sehr wohl von Frames, weil das noch alles vor der MMU liegt.

Benja
2006-01-19, 20:24:35
okay, an dieser stelle steige ich dann mal aus weil ich mich nichtmehr konkret dazu äußern kann.
ich sag einfach mal n paar konkrete fakten zur aufgabe:
die (simulierte) CPU ist ein ARM, vermutlich Typ7
Dort drauf soll eine große Anzahl verschiedenster Programme als Benchmarks ausgeführt werden. Diese Programme erzeugen Memory-Traces. Diese Traces soll meine Software dann analysieren. Und zwar soll die die Zugriffskosten möglichst exakt nachbilden. Deswegen die Geschichte mit dem Wort "Page".
... Die Anzahl der Sense Amps in derselben Bank aller Speicherchips einer Reihe ist eine wichtige Kenngröße eines Speichermoduls und wird als Page Size bezeichnet. ...
Möchte man bei einem weiteren Lesezugriff aus einer bereits adressierten Speicherzeile haben (Page Hit), so fällt nur die CAS Latenzy als Wartezeit an. ...
Als Page bezeichnet man, wie bereits erläutert, die Gesamtheit aller Zeilen mit gleicher Adresse in einer bestimmten Bank aller Chips eines Moduls. ...


Dann habe ich hier noch ne Diplomarbeit "Busse und Speicher als Hardwarekomponenten im SystemOnChip Design"
Da jede Bank [eines Speicher-ICs] eine seperate Sense-Amp Reihe besitzt, dürfen bei jedem Anlegen einer Zeilenadresse auch die nicht am eigentlichen Zugriff beteiligten Zeilen der anderen Bänke in die Sense-Amps übernommen werden. Solch eine über mehrere Bänke gehende Zeilenebene wird dabei als Seite bzw. Page bezeichnet. ...

In zwei anderen Fachbüchern ist das auch so beschrieben (nur nicht so zitierfähig ;)). Mit dem Begriff "Page" als Bezeichnung für die in die Sense-Amps einer Bank geladene Zeile eines Specherfeldes.

Mir ist gerade etwas schleierhaft, wo ich in diesem Zusammenhang die MMU (MemoryManagementUni ?) hinpacken soll...

Wie gesagt, ich bin da z.z. irgendwie verwirrt :(

del_4901
2006-01-19, 20:31:07
okay, an dieser stelle steige ich dann mal aus weil ich mich nichtmehr konkret dazu äußern kann.
ich sag einfach mal n paar konkrete fakten zur aufgabe:
die (simulierte) CPU ist ein ARM, vermutlich Typ7
Dort drauf soll eine große Anzahl verschiedenster Programme als Benchmarks ausgeführt werden. Diese Programme erzeugen Memory-Traces. Diese Traces soll meine Software dann analysieren. Und zwar soll die die Zugriffskosten möglichst exakt nachbilden. Deswegen die Geschichte mit dem Wort "Page".


Dann habe ich hier noch ne Diplomarbeit "Busse und Speicher als Hardwarekomponenten im SystemOnChip Design"


In zwei anderen Fachbüchern ist das auch so beschrieben (nur nicht so zitierfähig ;)). Mit dem Begriff "Page" als Bezeichnung für die in die Sense-Amps einer Bank geladene Zeile eines Specherfeldes.

Mir ist gerade etwas schleierhaft, wo ich in diesem Zusammenhang die MMU (MemoryManagementUni ?) hinpacken soll...

Wie gesagt, ich bin da z.z. irgendwie verwirrt :(

http://de.wikipedia.org/wiki/Paging
Hier steht auch was von Seitenrahmen, aka. frame
Und auch wie die MMU funkt.

Benja
2006-01-19, 20:43:54
mir ist durchaus bewußt, was ne MMU ist. auch, was Paging , virtuelle Adresse usw bedeutet. mir ist nur grad nicht ganz klar, ob das bei mir relevant ist. soweit ich das verstanden habe, gibt es in meinem fall nur einen einzigen prozess und keine externen interrupts o.ä.. Einen Cache gibts auch nicht. Die CPU arbeitet halt einfach nur einen Assemblerbefehl nach dem anderen ab.

Ich muss das aber am Montag mal alles genau abklären, vielleicht erübrigen sich dann auch einige Dinge und es kommt (bei mir) mehr Klarheit auf.

del_4901
2006-01-19, 20:55:51
mir ist durchaus bewußt, was ne MMU ist. auch, was Paging , virtuelle Adresse usw bedeutet. mir ist nur grad nicht ganz klar, ob das bei mir relevant ist. soweit ich das verstanden habe, gibt es in meinem fall nur einen einzigen prozess und keine externen interrupts o.ä.. Einen Cache gibts auch nicht. Die CPU arbeitet halt einfach nur einen Assemblerbefehl nach dem anderen ab.

Ich muss das aber am Montag mal alles genau abklären, vielleicht erübrigen sich dann auch einige Dinge und es kommt (bei mir) mehr Klarheit auf.
kommt drauf an, ob deine CPU eine MMU hat bzw. ob die genutzt wird (vom OS) Wenns kein OS gibt wird es wohl ohne Paging laufen.
http://www.arm.com/products/CPUs/families/ARM7Family.html

Benja
2006-01-19, 21:27:39
ich denke, am montag weiß ich mehr.

GloomY
2006-01-20, 01:53:25
Zum Verständniss:
Kanal = Bus, der den Speicher (z.B. einen DIMM) an den Prozessor koppeltJup. :)
Row = ein Speicher-IC (so n kleines schwarzes Ding mit Beinchen ;) das auf einem DIMM sitzt) - wird teilweise in Literatur/Artikeln (fälschlicherweise?) auch als Bank bezeichnetEs muss nicht ein einzelner IC sein. Normalerweise sind es mehrere (meist 8). Eine Row ist ein Verbund von Chips, die zusammen 64 Datenleitungen bieten.
Bank = Einheit innerhalb eines Speicher-ICs (eine Bank hat z.B. eigene Sense-Amps)

korrekt ?Jup. :)
s.o. mehrere Rows und (ganz evtl später sogar mehrere Kanäle, mal sehen)

*DummNachfrag* Das rechne ich über die Größe des ICs, die Anzahl seiner Bänke und die Zahl der Zeilen pro Bank aus, korrekt ?Ja. Z.B. hat ein 64Mb-Chip in 8Mx8 Organisation mit 4 Banks eine Zeilenlänge von 512 (bei 4096 Zeilen).

Die folgende Tabelle kann dabei ganz nützlich sein:
http://www.heise.de/ct/Redaktion/ciw/speicher.html
Das was ich unter "Page" verstehe, ist eine komplette Zeile einer Bank. Also die Gesamtheit der Sense-Amps einer Bank. So hab ich das in mehreren Artikeln/Büchern bezeichnet gelesen...Kann durchaus sein. Ich weiss bloß nicht, ob man die Zeilen der einzelnen Bänke zusammenzählt oder nicht. Da bin ich mir jetzt nicht so ganz sicher...
Ack, da gibts Regeln die man den Datenblättern entnehmen kann. Spätestens beim Refresh, oft schon früher ist Schluß.Manche Chipsätze benutzen auch eine Closed Page Policy - u.a. weil es Strom spart.
Danke schonmal.Kein Problem :)

GloomY
2006-01-20, 01:55:06
Dein OS setzt dir ja den Speicherbereich vor, das programmiert dir die MMU und macht alles startklar, also solange du nicht ein OS programmiern willst, musst du dich nicht mit Frames rumschlagen, denn vom OS gibt es blos virtuelle Pages.

[...]

Also wenn es (wie ich es verstanden habe) sich es um Sachen handelt die etwa in der Ebene Speichercontroller, Dimm, RAM handelt. Dann spricht man sehr wohl von Frames, weil das noch alles vor der MMU liegt.Ich muss doch etwas schmunzeln. =) Inhaltlich hättest du ja Recht, wenn es denn eine MMU gäbe. Aber auf die soll hier verzichtet werden. Jede errechnete Adresse innerhalb der CPU wird genau so als physikalische Adresse an den Speichercontroller weitergegeben.

Benja
2006-01-20, 12:54:54
Unabhängig von den anderen ungelösten Fragen hier nochmal eine Sache zum Sicherstellen, dass ich das richtig verstehe:

1.
Wenn ich jetzt an einen PC denke der als Speicher eingestecke DIMMs hat, dann läuft die Adressierung wie folgt:

Chip-Select zeigt an, welche Row betroffen ist (damit ist dann auch logischerweise gleich das korrekte DIMM-Modul ausgewählt).

Hier fehlt mir jetzt der Schritt, der auswählt, welcher Speicherchip/IC der Row denn zuständig ist.

Bank-Select zeigt an, welche interne Speicherbank (von typischerweise vier verschiedenen pro Speicherchip/IC) betroffen ist.

Die Zeilen- und Spaltenadresse gibt dann schließlich an, an welcher Stelle im Speicherfeld der Bank die geforderten Daten stehen.

---

2. Zum Aufbau der Bänke innerhalb der SpeicherChips:
Eine 128MBit SpeicherChip 16M x8; angenommen, er ist intern in 4 Bänke aufgeteilt (z.B. ein HYB 39S128800CT-7 von Infineon (http://www.infineon.com/cgi-bin/ifx/portal/ep/channelView.do?channelId=-64297&channelPage=%2Fep%2Fchannel%2FproductOverview.jsp&pageTypeId=17099))

Dann hat er eine Kapazität von 32MBit pro Bank und eine Breite von 8Bit (sowohl pro Bank als auch als Chip insg.).

Dann besteht eine Bank wiederum aus 8 Speicherfeldern zu je 4096 Zeilen und 1024 Spalten. Damit wäre die "Page-Size" dann 1024Bit; es gibt also 1024 Sense-Amps. So verstehe ich zumindest das Blockdiagramm auf Seite 5 in hb39s128CT.pdf (http://www.infineon.com/upload/Document/cmc_upload/documents/011/6100/hb39s128CT.pdf)

Sehe ich das richtig ? Will mich da eigentlich nur vergewissern.

GloomY
2006-01-20, 18:58:28
Unabhängig von den anderen ungelösten Fragen hier nochmal eine Sache zum Sicherstellen, dass ich das richtig verstehe:

1.
Wenn ich jetzt an einen PC denke der als Speicher eingestecke DIMMs hat, dann läuft die Adressierung wie folgt:

Chip-Select zeigt an, welche Row betroffen ist (damit ist dann auch logischerweise gleich das korrekte DIMM-Modul ausgewählt).Ja, denn pro Modul gibt es entweder ein oder zwei Rows, je nachdem ob das Modul einreihig (oftmals auch fälschlicherweise als "einseitig" bezeichnet) oder doppelreihig (doppelseitig) ist.

Übrigends noch eine Kleinigkeit am Rande: Es heisst "DIM-Modul", weil das zweite 'M' von "DIMM" schon für Modul steht ;)
Hier fehlt mir jetzt der Schritt, der auswählt, welcher Speicherchip/IC der Row denn zuständig ist.Alle, die zu dieser Row gehören. SDRAM ist eine parallele Speichertechnologie, die auf alle Datenfelder einer Row gleichzeitig und in der gleichen Art und Weise zugreift. Bei SDRAM machen alle Chips (einer Row) das gleiche.

Vergleiche dazu RDRAM: Dort ist es so, dass nur ein Chip auf dem Modul für die Bearbeitung einer Anfrage zuständig ist. Da alle Leitungen dort von einem Chip zum nächsten gehen spricht man deswegen auch von einer seriellen Speichertechnologie. Hier ist es wirklich notwendig, dass man den einzelnen Chip auswählt.
Bank-Select zeigt an, welche interne Speicherbank (von typischerweise vier verschiedenen pro Speicherchip/IC) betroffen ist.

Die Zeilen- und Spaltenadresse gibt dann schließlich an, an welcher Stelle im Speicherfeld der Bank die geforderten Daten stehen.
Genau.
2. Zum Aufbau der Bänke innerhalb der SpeicherChips:
Eine 128MBit SpeicherChip 16M x8; angenommen, er ist intern in 4 Bänke aufgeteilt (z.B. ein HYB 39S128800CT-7 von Infineon (http://www.infineon.com/cgi-bin/ifx/portal/ep/channelView.do?channelId=-64297&channelPage=%2Fep%2Fchannel%2FproductOverview.jsp&pageTypeId=17099))

Dann hat er eine Kapazität von 32MBit pro Bank und eine Breite von 8Bit (sowohl pro Bank als auch als Chip insg.).

Dann besteht eine Bank wiederum aus 8 Speicherfeldern zu je 4096 Zeilen und 1024 Spalten. Damit wäre die "Page-Size" dann 1024Bit; es gibt also 1024 Sense-Amps. So verstehe ich zumindest das Blockdiagramm auf Seite 5 in hb39s128CT.pdf (http://www.infineon.com/upload/Document/cmc_upload/documents/011/6100/hb39s128CT.pdf)

Sehe ich das richtig ? Will mich da eigentlich nur vergewissern.Ja.

Es gibt übrigends vier Mal 1024 Sense Amps, eben 1024 pro Bank.

Benja
2006-01-20, 20:10:12
Übrigends noch eine Kleinigkeit am Rande: Es heisst "DIM-Modul", weil das zweite 'M' von "DIMM" schon für Modul steht ;)
klar, irgendwie hab ich da falschen sprachgebrauch. kenne noch andere beispiele, wo "doppelt gemoppelt" wird - mir fällt natürlich nur grad keins ein.
Alle, die zu dieser Row gehören. SDRAM ist eine parallele Speichertechnologie, die auf alle Datenfelder einer Row gleichzeitig und in der gleichen Art und Weise zugreift. Bei SDRAM machen alle Chips (einer Row) das gleiche.
*patsch* Natürlich *dummdidumm*
Vergleiche dazu RDRAM: Dort ist es so, dass nur ein Chip auf dem Modul für die Bearbeitung einer Anfrage zuständig ist. Da alle Leitungen dort von einem Chip zum nächsten gehen spricht man deswegen auch von einer seriellen Speichertechnologie. Hier ist es wirklich notwendig, dass man den einzelnen Chip auswählt.
Jup. RDRAM wird evtl auch nachgebildet - sofern die Zeit dazu reicht. Mit den vielen offenen Pages könnte das interessante Ergebnisse liefern.
Es gibt übrigends vier Mal 1024 Sense Amps, eben 1024 pro Bank.
Klar.

GloomY
2006-01-20, 22:10:19
klar, irgendwie hab ich da falschen sprachgebrauch. kenne noch andere beispiele, wo "doppelt gemoppelt" wird - mir fällt natürlich nur grad keins ein.Klassiker sind da: "LCD-Display" oder "TCP-Protokoll" uvm.
Jup. RDRAM wird evtl auch nachgebildet - sofern die Zeit dazu reicht. Mit den vielen offenen Pages könnte das interessante Ergebnisse liefern.Schreibst du da gerade deine Diplomarbeit drüber?
Klar.=)

Benja
2006-01-20, 22:18:54
in der tat soll das eine DA werden.
grade so am anfang. ich bin da halt momentan doch recht erschlagen von der komplexität weil ich mich nie soo intensiv damit (speicher und ihr aufbau) beschäftigt hatte.

naja, am montag sehen wir dann weiter.
bzgl. der speicheradresszuteilung tüftle ich gerade noch, das formulliere ich morgen mal als frage. der hennessy & patterson irritiert mich da gerade :)

GloomY
2006-01-20, 23:14:38
naja, am montag sehen wir dann weiter.
bzgl. der speicheradresszuteilung tüftle ich gerade noch, das formulliere ich morgen mal als frage. der hennessy & patterson irritiert mich da gerade :)Was meinst du da genau? Sag' mir mal die Seite, dann kann ich nachgucken... :D

edit: Ich denke, du meinst das hier (http://books.elsevier.com/bookscat/coverslarge/1558605967.jpg) oder das hier (http://books.elsevier.com/companions/1558606041/covers/1558606041big.jpg)?

Benja
2006-01-21, 09:59:02
Ich hab hier nur die 2. Auflage rumliegen, deswegen wirds vermutlich nicht genau passen. Bin grad zu faul zum Einscannen, finde es nicht bei google; deswegen ohne Cover und Bild von Hand...
Kapitel 5.6 (main memory)
second technique for higher bandwith: simple interleaved memory
Da is n hübsches "Bild" "four way interleaved memory" (S. 432)

http://www.benja.de/pic/address.JPG

This example assumes word addressing:
with byte addreessing and four bytes per word, each of these addresses would be multiplied by four

Da ist das jetzt nur der Übersicht halber so dargestellt, dass Wort 4 unter Wort 0 ist.
In Wirklichkeit lägen die nebeneinander in Bank 0, oder ?

Also sähe dann Bank 0 ja so aus (bzgl. der Worte und ihrer Adressen):

0 4 8 12 16 20 24 ... bis Erreichen der Zeilenbreite von Bank 0

Das ^^^^^^^ schimpft sich dann Interleaving.

Das ergäbe nur irgendwie keinen Sinn, denn wenn die Bänke eh so breit sind (>> Wortbreite), dann könnte man ja nebeneinanderliegende Worte auch nebeneinander abspeichern wg Lokalität. Das ginge dann zwar wieder Richtung "Bursts" aber naja, man würde die Daten halt aus einer einzigen Bank erhalten...

Das verwirrt mich etwas ;)

Benja
2006-01-23, 14:45:42
okay, es sieht wie folgt aus:

die MMU soll mein Programm auch nachbilden. Es sollen dabei mehrere Strategien möglich sein. Je nach Strategie soll dann halt berechnet werden (in meinem Programm), wo das gewünschte Wort im Speicher steht.
Mal sehen, was ich da draus mache.

Naja, dann mal frisch ans Werk. Wenn ich weitere Fragen habe belästige ich euch wieder :rolleyes: :biggrin:

GloomY
2006-01-23, 15:49:46
Ich hab hier nur die 2. Auflage rumliegen, deswegen wirds vermutlich nicht genau passen. Bin grad zu faul zum Einscannen, finde es nicht bei google; deswegen ohne Cover und Bild von Hand...
Kapitel 5.6 (main memory)
second technique for higher bandwith: simple interleaved memory
Da is n hübsches "Bild" "four way interleaved memory" (S. 432)

http://www.benja.de/pic/address.JPG

This example assumes word addressing:
with byte addreessing and four bytes per word, each of these addresses would be multiplied by four

Da ist das jetzt nur der Übersicht halber so dargestellt, dass Wort 4 unter Wort 0 ist.
In Wirklichkeit lägen die nebeneinander in Bank 0, oder ?

Also sähe dann Bank 0 ja so aus (bzgl. der Worte und ihrer Adressen):

0 4 8 12 16 20 24 ... bis Erreichen der Zeilenbreite von Bank 0

Das ^^^^^^^ schimpft sich dann Interleaving.

Das ergäbe nur irgendwie keinen Sinn, denn wenn die Bänke eh so breit sind (>> Wortbreite), dann könnte man ja nebeneinanderliegende Worte auch nebeneinander abspeichern wg Lokalität. Das ginge dann zwar wieder Richtung "Bursts" aber naja, man würde die Daten halt aus einer einzigen Bank erhalten...

Das verwirrt mich etwas ;)Nur um das mal klar auszudrücken: Das ist etwas anderes als das Bank Interleaving bei SDRAM. Die Verwirrung kommt deshalb zustande, weil das Wort "Bank" mal wieder für mehrere verschiedene Dinge verwendet wird.

Hier ist das Verschachteln (Interleaving) zwischen verschiedenen Speicherbussen gemeint (bezeichnet als "Banks"). Wenn man ein Dual- oder Quad-Channel Speicherinterface hat, dann muss man ja die Daten irgendwie so aufteilen, dass man möglichst immer parallel aus alle Kanälen lesen/schreiben kann. Ansonsten geht dessen Wirkung ja flöten.
Vektorrechner haben oftmals eine solche Anordung mit mehreren (teilweise hunderten) von "Banks", was aber in diesem Zusammenhang nichts anderes als eigenständige Speicherbusse darstellen. Das hat nichts mit dem auf dem Speicherchip stattfindendem Interleaving zu tun. Das kann zusätzlich dazu passieren oder nicht, das ist voneinander unabhängig und hat bis auf die gleichartige Bezeichnung auch nicht viel miteinander zu tun.


Mit dem "echten" Bank Interleaving (dem von SDRAM) kann man auch nicht die Bandbreite erhöhen, so wie Hennessy & Patterson schreiben ("second technique for higher bandwith: simple interleaved memory"), sondern höchstens die Latenz verringern, indem man Latenzen hinter der Datenübertragung versteckt.

GloomY
2006-01-23, 15:55:08
okay, es sieht wie folgt aus:

die MMU soll mein Programm auch nachbilden. Es sollen dabei mehrere Strategien möglich sein. Je nach Strategie soll dann halt berechnet werden (in meinem Programm), wo das gewünschte Wort im Speicher steht.Da wirst du wohl entweder Paging (im Sinne von dem angesprochenen Abbilden von virtuellen Seiten auf physikalische Rahmen) oder Segmentierung (oder beides) implementieren müssen. Das dürfte aber relativ einfach sein.
Mal sehen, was ich da draus mache.

Naja, dann mal frisch ans Werk. Wenn ich weitere Fragen habe belästige ich euch wieder :rolleyes: :biggrin:Nur zu! ;)

Benja
2006-02-06, 20:02:34
Stichwort Zurückschreiben von Daten aus den Sense-Amps in die Speichermatritzen

Ich habe in den Sense-Amps eine Zeile geladen. In dieser Zeile soll nun ein Wort gespeicher werden. Adresse wird angelegt, Daten werden übermittelt, in den Sense-Amps gespeichert. Soweit so gut.

Jetzt sehe ich mehrere Möglichkeiten.

a) Der Inhalt der Sense-Amps wird sofort in die Speichermatrix zurückgeschrieben.
Bleibt hier die Frage,

a.1) ob danach die Sense-Amps leer sind, oder
a.2) ob der vorhandene Inhalt (der soeben zurückgeschrieben wurde) trotzdem weiterhin zur Verfügung steht.

b) Der Inhalt der Sense-Amps wird nicht sofort zurückgeschrieben sondern erst, wenn ein Refresh ansteht oder eine neue Zeile ausgelesen werden soll.

Dazu habe ich nirgends Informationen finden können. Mich interessiert jetzt eigentlich nur Fall a). a.1 oder a.2 ?
Oder beides ? ;) a.2 wäre natürlich bzgl. der Performance ideal.

GloomY
2006-02-07, 15:02:32
Stichwort Zurückschreiben von Daten aus den Sense-Amps in die Speichermatritzen

Ich habe in den Sense-Amps eine Zeile geladen. In dieser Zeile soll nun ein Wort gespeicher werden. Adresse wird angelegt, Daten werden übermittelt, in den Sense-Amps gespeichert. Soweit so gut.

Jetzt sehe ich mehrere Möglichkeiten.

a) Der Inhalt der Sense-Amps wird sofort in die Speichermatrix zurückgeschrieben.
Bleibt hier die Frage,

a.1) ob danach die Sense-Amps leer sind, oder
a.2) ob der vorhandene Inhalt (der soeben zurückgeschrieben wurde) trotzdem weiterhin zur Verfügung steht.

b) Der Inhalt der Sense-Amps wird nicht sofort zurückgeschrieben sondern erst, wenn ein Refresh ansteht oder eine neue Zeile ausgelesen werden soll.

[...]

Oder beides ? ;) a.2 wäre natürlich bzgl. der Performance ideal.Zu a)
Ja, danach sind die Sense Amps leer. Zumindest ist ihr Zustand undefiniert (ob sie nun wirklich leer sind, weiss ich nicht; ist vielleicht auch von der Implementation abhängig; darüber weiss ich aber nichts genaues).
Aber:
Once a bank has been precharged, it is in the idle state and must be activated prior to any READ or WRITE commands being issued to that bank.Es ist also eindeutig vorgeschrieben, dass nach einem PRECHARGE-Command erst wieder ein ACTIVATE (also das Einlesen einer Zeile in die Sense-Amps) vorangehen muss.

Ich vermute, dass die Sense Amps ähnlich wie die Speicherzellen so gebaut sind, dass man sie destruktiv lesen kann. Der Inhalt ist danach also verloren.

Zu b.)
Der Speichercontroller kann jederzeit die Zeile mit einem PRECHARGE-Commando zurück in die Speichermatrix schreiben. Das kann sofort nach der entsprechenden Aktion (lesen oder schreiben) geschehen oder erst lange danach. Spätestens nach einer festgelegten Zeit (tRAS(max); üblicherweise 70000 Takte bei PC3200) muss die Zeile zurückgeschrieben werden.
Wann das geschieht, liegt in der Hand des Speichercontrollers. Der weiss ja eventuell, was er für nachfolgende Zugriffe zu bearbeiten hat und ob diese in die gleiche Zeile fallen oder nicht. Wenn ja, wäre er schön blöd, die Zeile sofort zurückzuschreiben und später wieder erneut öffnen zu müssen. Das kostet ja nur unnötig Zeit (tRP und tRCD).

Üblichweise halten die gängigen Speichercontroller die gerade geöffnete Page eine gewisse Zeit lang offen, wenn sie nichts zu tun haben. Beim Athlon64/Opteron usw. kann man das z.B. im A64 Tweaker (http://img66.imageshack.us/my.php?loc=img66&image=a64tweaker151010225221139usrwq.jpg) durch die Option "Idle Cycle Limit" einstellen. Ein paar Chipsätze aus dem mobilen Bereich benutzen aber auch eine Closed-Page Policy (schließen also direkt nach Zugriff), weil das Energie spart.

btw: Die Möglichkeit mit AutoPrecharge nach jedem Lese-/Schreib-Kommando die Page automatisch zuzumachen, kennst du, ja? :)
Dazu habe ich nirgends Informationen finden können.Die Spezifikationen der JEDEC für DDR-SDRAM sind da eigentlich Anlaufpunkt Nummer eins:

http://www.jedec.org/download/search/JESD79D.pdf

Benja
2006-02-07, 15:52:44
du wirst lachen, genau diese speifikation habe ich vor ca. 1 std auch "gefunden" und angeguckt.
page 18 & 19 sind recht nett :)

Dort sieht man im Zustandsdiagramm, dass von "Row Active" aus zwei Wege für Schreiben zulässig sind. Entweder in "Write" und danach automatisch zurück in "Row Active".
Oder in von "Row Active" in "Write Autoprecharge" von wo aus es dann automatisch über "Precharge" zurück in "idle" geht.

Jetzt suche ich vergleichbares für SDRAM z.B. (PC133).
Da hab ich zwar auch ne Spec von Intel gefunden - in der stehts aber nicht drin. Oder ich finds nich :) Ich vermute, dass es dort identisch gehandhabt wird, aber wäre schon schön, wenn ichs wüßte.
Da such ich aber selbst weiter.
Falls du zu der Thematik noch was bzgl. älterer Speicherstandards (EDO, FPage) sagen kannst - nur zu ;)

Mit Autoprecharge automatisch die Page zu schließen ist mir klar, macht ja nur performancetechnisch manchmal nicht soviel Sinn.

Danke soweit !

GloomY
2006-02-07, 17:20:48
du wirst lachen, genau diese speifikation habe ich vor ca. 1 std auch "gefunden" und angeguckt.Hehe :)
Jetzt suche ich vergleichbares für SDRAM z.B. (PC133).
Da hab ich zwar auch ne Spec von Intel gefunden - in der stehts aber nicht drin. Oder ich finds nich :) Ich vermute, dass es dort identisch gehandhabt wird, aber wäre schon schön, wenn ichs wüßte.Leider kann ich dir da auch nicht viel weiterhelfen.
Da such ich aber selbst weiter.
Falls du zu der Thematik noch was bzgl. älterer Speicherstandards (EDO, FPage) sagen kannst - nur zu ;)Ich weiss im Prinzip, wie diese funktionieren, habe aber bisher keine Spezifikationen dazu durchwühlt.

Also wenn du Fragen hast, dann schieß' los. Mal schauen, ob ich die beantworten kann...
Mit Autoprecharge automatisch die Page zu schließen ist mir klar, macht ja nur performancetechnisch manchmal nicht soviel Sinn.Jein. Für ein Bank alleine betrachtet ist es unnötig, weil es mit oder ohne Auto-Precharge genau gleich lange dauert. Die Funktionalität ist ja die gleiche, bloss dass man nicht explizit noch ein PRECHARGE am Ende des Bursts senden muss.

Der Punkt, wo es Vorteile bringen kann, ist wenn man mehrere Banks gleichzeitig nutzt (Bank Interleaving). In jedem Takt kann man nur einen Command an den Speicherchip schicken, also z.B. ein PRECHARGE an Bank A, ein ACTIVATE an Bank B oder ein READ an Bank C. Wenn zwei (oder mehr) dieser Kommandos aber zum gleichen Takt ankommen sollten, um aus jeder Bank optimale Performance heraus zu bekommen, dann geht das nicht. Pro Takt kann man nur einen Command senden, also muss einer der beiden einen Takt warten. Wenn man sich dann ein PRECHARGE sparen kann, indem man Auto-Precharge bei einem Lese- oder Schreib-Command benutzt, kann man diese Kollision vermeiden.

Das ist effektiv eine Frage der Bandbreite des Steuerbusses bei SDRAM. Man muss effektiv 4 interne Banks ansteuern, kann aber pro Takt nur einen Command versenden. Zwar muss man nicht jeden Takt an alle 4 Banks einen Command senden sondern nur ab und zu, aber es kann trotzdem mal zu einer Kollision kommen. ;(
Deswegen wurde bei DDR2-SDRAM auch die Möglichkeit eingeführt, dass Lese- und Schreib-Commands im Vorraus an den Chip versendet werden können, der diese dann intern nach einer gewissen Wartezeit ausführt. Das Feature nennt sich "Posted CAS" bzw die Einstellung dazu heißt "Additive Latency" und kann im Mode-Register durch den (DDR2-)Speichercontroller festgelegt werden.

(Bild dazu: Klick (http://www.lostcircuits.com/memory/ddrii/5a.shtml))

Danke soweit !=)

Benja
2006-02-08, 13:20:09
Angenommen, ich habe ein DIMM mit 64Bit Breite.
Gehen wir mal von 4 Chips zu je 16 Bit Breite (Tiefe) aus. Jeder Chip intern 4 Bänke. Jede dieser Bänke 1024 Bit breit.

Es ist nun so, dass bei Anlegen einer Adresse (Bank-Select und Row-Address) eine Art "Cachezeile" entsteht. Das kommt dadurch, dass alle Chips in die ausgewählte Bank jeweils die ausgewählte Zeile in die Sense-Amps vorladen. Demnach stehen prinzipiell 4*16*1024 Bit = 65536 Bit = 8192 Byte quasi "direkt" zur Verfügung (nach Anlegen einer Col-Address). Berechnung 65536 Bit = ChipAnzahl * BankTiefe * BankBreite
Über die Col-Address wird jetzt genau eine Spalte (aus 1024) ausgewählt und ich erhalte ein 4*16 = 64 Bit breites Wort. 64 Bit = ChipAnzahl * BankTiefe

Das müsste stimmen !?

Lassen wir dabei außen vor, ob es solch ein DIMM gibt - is mir egal, wollte nur keine Zahl doppelt benutzen. ;)

GloomY
2006-02-09, 22:34:47
Angenommen, ich habe ein DIMM mit 64Bit Breite.
Gehen wir mal von 4 Chips zu je 16 Bit Breite (Tiefe) aus. Jeder Chip intern 4 Bänke. Jede dieser Bänke 1024 Bit breit.

Es ist nun so, dass bei Anlegen einer Adresse (Bank-Select und Row-Address) eine Art "Cachezeile" entsteht. Das kommt dadurch, dass alle Chips in die ausgewählte Bank jeweils die ausgewählte Zeile in die Sense-Amps vorladen. Demnach stehen prinzipiell 4*16*1024 Bit = 65536 Bit = 8192 Byte quasi "direkt" zur VerfügungJep.
(nach Anlegen einer Col-Address).Du meinst sicher die Zeilen-Addresse.
Berechnung 65536 Bit = ChipAnzahl * BankTiefe * BankBreiteÄhm, nicht wirklich. Wie viele Chips es sind, spielt keine Rolle sondern die Anzahl der Speicherfelder (64). Auf wie viele Chips diese aufgeteilt sind, ist egal.
Über die Col-Address wird jetzt genau eine Spalte (aus 1024) ausgewählt und ich erhalte ein 4*16 = 64 Bit breites Wort. 64 Bit = ChipAnzahl * BankTiefe64 Bit stimmt zwar, aber nur deswegen, weil du 64 Speicherfelder hast, eben 4 Chips mit je 16 Speicherfeldern. Du holst aus jedem der Speicherfelder eben ein Bit raus (bzw. so viele Bits hintereinander, wie die Burst Length eingestellt ist).
Lassen wir dabei außen vor, ob es solch ein DIMM gibt - is mir egal, wollte nur keine Zahl doppelt benutzen. ;)Gibt es sicher :)

Benja
2006-02-09, 22:52:46
Du meinst sicher die Zeilen-Addresse.

Jein; Im Sinn schon, aber nach Bank-Select und Row-Address wähle ich über die Col-Address eine Spalte aus. So wars gemeint.

Ähm, nicht wirklich. Wie viele Chips es sind, spielt keine Rolle sondern die Anzahl der Speicherfelder (64). Auf wie viele Chips diese aufgeteilt sind, ist egal.
...
64 Bit stimmt zwar, aber nur deswegen, weil du 64 Speicherfelder hast, eben 4 Chips mit je 16 Speicherfeldern. Du holst aus jedem der Speicherfelder eben ein Bit raus (bzw. so viele Bits hintereinander, wie die Burst Length eingestellt ist).

Ja, die Anzahl der Speicherfelder ist Anzahl der Chips * Anzahl der Felder pro Chip. So war das im ersten Fall auch gemeint bzw errechnet.

Morgen früh werd ich mal bissel was posten, wie ich mir das z.z. so vorstelle. Jetzt Harald ...

GloomY
2006-02-09, 22:54:41
Jein; Im Sinn schon, aber nach Bank-Select und Row-Address wähle ich über die Col-Address eine Spalte aus. So wars gemeint.Äh, achso. Hab's mir gerade noch mal durchgelesen. Mein Fehler, Sorry.

Benja
2006-02-09, 22:56:52
Macht ja nix ;) War unglücklich ausgedrückt.

Benja
2006-02-10, 10:40:53
Ich stelle mir das jetzt so vor:

Ich bilde für SDRAM eine Klasse, die Ranks entspricht.
Also der Zusammenfassung aller gleichen Bänke aller Chips.
Sähe dann so aus:
http://www.benja.de/pic/Rank.JPG

Das, was dort eingetragen ist sollen die Adressbereiche sein. BS ist "BankSize", also die Menge der Byte, die eine Bank speichern kann (Breite * Höhe * Tiefe).

Da sieht man auch gleich, welche beiden Arten der Adressierung ich implementieren würde.
Dazusagen muss ich vielleicht, dass meine SOftware keine Daten speichern soll, sondern nur das Zeitverhalten machen soll. Nach dem Motto "Adresse xy kostet dieses Mal x Takte, nächstes Mal aber nur y Takte" (weil Row offen usw.).

Kommentare ? ;)

[edit]:
Genausogut könnte ich auch einen Chip nachbilden (käme bei diesen Adressierungsmodi aufs selbe hinaus), aber mein Betreuer möchte, dass ich mich mehr von der HW löse. Also Ranks und nicht Chips.