DRAM-Speicherorganisation

Ich habe versucht, die Funktionsweise von DRAM-Chips zu verstehen, bin aber anscheinend sehr verwirrt. Angenommen, es gibt 8 Bänke in einem einzigen Chip auf einem Modul. Ist es nur ein Bit, das aus einer einzigen Bank und ein Byte aus einem Chip insgesamt kommt? Und wie greift der Speichercontroller von den 8 Bytes, die aus einem Kanal kommen, nur auf ein Byte zu?

Antworten (1)

DRAM ist in einer mehrstufigen Hierarchie organisiert, und die Kenntnis der richtigen Terminologie für die verschiedenen Schichten ist der Schlüssel, um sie zu verstehen, also werde ich sie kurz zusammenfassen, um sicherzustellen, dass wir uns auf derselben Seite befinden. (Hier geht es offensichtlich nur um den einfachen Lehrbuchfall und nicht um Dinge wie ECC.)

Auf der untersten Ebene befindet sich die Bank , die das physikalische 2D-Array von Zellen (Kondensatoren/Zugriffstransistoren) und die Wortleitungen und Bitleitungen ist, die sie verbinden. Es gibt einen Zeilenpuffer pro Bank, dem ein Spaltendecoder folgt, um – tatsächlich – nur ein Bit aus der Zeile auszuwählen.

Acht Bänke pro Chip ergeben acht Datenausgangspins pro Chip. Acht dieser Chips würden dann kombiniert, um einen Rang mit 64 Ausgangsbits zu bilden. Im Fall von DIMMs besteht jedes physische Speichermodul aus mindestens einer solchen Reihe. Bei mehrreihigen DIMMs teilen sich die Chips, aus denen die verschiedenen Ränge bestehen, dieselben Befehls- und Datenleitungen, sodass zu jedem Zeitpunkt nur eine Reihe den Bus verwenden kann (es gibt Chipauswahlleitungen, um sie anzusprechen).

Schließlich beschreibt ein Kanal das vollständige System einer oder mehrerer Reihen und die sie verbindenden Befehls-/Datenbusse. Was die Low-Level-Signalisierung betrifft, ist jeder Kanal ein vollständig separater Bus, so dass unterschiedliche Zugriffe nie in Konflikt geraten usw.

Zu Ihrer Frage, nur ein einzelnes Byte auszuwählen: Der Speichercontroller kann diese 64-Bit-Datenblöcke auf die am besten geeignete Weise verarbeiten. Theoretisch könnte es einfach einen Mux enthalten, um das entsprechende zu lesende Datenbyte auszuwählen. In modernen Prozessoren werden jedoch alle Speicherzugriffe normalerweise ohnehin in Einheiten der Cache-Zeilenbreite (64 Bytes) durchgeführt, sodass alle Bits an das Cache-Subsystem weitergeleitet würden. Selbst wenn nur ein Byte in ein Register gelesen würde, würde die gesamte Cache-Zeile zuerst abgerufen werden.

Durch die Verwendung von Multiplexern kann man also ein einzelnes Byte von einem Kanal erhalten, richtig? Wenn also die 64 Bit den Speichercontroller erreichen, multiplext der Speichercontroller nur ein Byte und sendet es an den Prozessor. Habe ich recht? Wie wird auch nur ein Byte ausgewählt? Gibt es einige Tri-State-Puffer, um es nach dem Multiplexen zu steuern. und wenn Multiplexer wirklich vorhanden sind, wie wäre es, wenn der Prozessor ganze 8 Bytes benötigt?
Wenn in modernen Prozessoren alle 64 Bytes gelesen werden, wie arbeitet der Prozessor dann mit nur einem Byte (z. B. Lesen eines Zeichenliterals)
In einem modernen System besteht die Schnittstelle zum Speicher normalerweise aus ganzen Cache-Zeilen. Zu viel Overhead für Einzelbyteoperationen. Es ist auch nicht möglich, ein einzelnes Byte zu lesen. Sie lesen alle 64 Bits und verwerfen, was Sie nicht benötigen. Zum Schreiben gibt es normalerweise Byte-Freigaben, die maskieren, welche Bytes aktualisiert werden sollen, der Rest wird verworfen.
Beachten Sie jedoch, dass die CPU nur mit dem L1-Cache arbeitet. Wenn sich die Daten nicht im Cache befinden, dann geht der Speichercontroller und holt eine ganze Cache-Zeile aus dem RAM. Wenn eine Cache-Zeile aus dem Cache entfernt wird, wird sie in den Speicher zurückgeschrieben, wenn sie schmutzig ist (Cache-Zeilen werden beim Schreiben als schmutzig markiert).