-
Hintergrund der Erfindung
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft Speichersteuerschaltungen für dynamische
Random-Access-Speicher in einem Mikroprozessor-basierten Rechnersystem,
die Schreibbefehle abschicken und die Verarbeitung fortsetzen können, ohne
auf den Abschluß dieser
Schreibbefehle zu warten.
-
Beschreibung des Stands der Technik
-
Dynamische
Random-Access-Speicher (DRAMs) werden als die Hauptspeicher für die meisten
Mikroprozessor-basierten Rechnersysteme verwendet, weil DRAMs einen
vernünftigen
Kompromiß zwischen
der Speicherkapazität,
der Zugriffszeit und den Kosten bieten. Es ist auf dem Fachgebiet
wohlbekannt, daß DRAMs
gesteuert werden, indem zuerst eine Zeilenadresse auf einen oder
mehrere DRAMs angewendet wird, die Zeilenadresse durch Aktivieren
eines Zeilenadreß-Freigabesignals (RAS-Signals),
das die gewählte
Zeile vorlädt,
in den DRAMs freigegeben wird, wenigstens während einer minimalen Zeilenzugriffszeit
gewartet wird, eine Spaltenadresse auf die DRAMs angewendet wird
und dann die Spaltenadresse durch Aktivieren eines Spaltenadreß-Freigabesignals
(CAS-Signals) in den DRAMs freigegeben wird, um die Daten aus einer Spalte
der Zeile, auf die zugegriffen wird, zu wählen.
-
Die
meisten gegenwärtig
verfügbaren DRAMs
arbeiten im sogenannten ”Seitenmodus”, in dem
auf in derselben Zeile (also Seite), jedoch in einer anderen Spalte
gespeicherte Daten durch einfaches Ändern der Spaltenadresse zugegriffen
werden kann, wie in
US-A-4 429 375 offenbart
ist. Es ist nicht erforderlich, die Zeilenadresse erneut auf den
DRAM anzuwenden, weil alle Daten in der Zeile bereits zum Lesen
oder Ändern
zugänglich
sind. Wegen des durch dieses Seitenmodusmerkmal bereitgestellten Geschwindigkeitsvorteils
ist es sehr vorteilhaft, vor dem Ändern der Zeilenadresse auf
viele Speicherstellen in einer einzelnen Zeile zuzugreifen. Wenn beispielsweise
große
Datenblöcke
zu einem DRAM-basierten Speichersystem oder von diesem übertragen
werden, greifen die sequentiellen Adressen typischerweise auf die
meisten oder alle Spalten in einer bestimmten Zeile zu, bevor die
Zeilenadresse geändert
wird.
-
Bei
einem typischen Mikroprozessor-basierten Rechnersystem werden Daten
an zufälligen Adressen
aus einem Speichersystem gelesen und in dieses geschrieben, insbesondere wenn
Befehle und Daten im selben Speichersystem gespeichert werden oder
wenn Operandendaten aus einem Bereich von Speicherstellen gelesen
werden und Datenergebnisse in einem anderen Bereich von Adressenstellen
gespeichert werden. Daher können
die Vorteile des Seitenmodusbetriebs wegen des ”zufälligen” Zugriffs auf das Speichersystem
oft nicht ausgenutzt werden.
-
Ein
Merkmal neuerer Mikroprozessoren besteht darin, daß abgeschickte
Schreibanforderungen zugelassen sind. Dies bedeutet, daß ein Mikroprozessor
Daten ausgeben kann, die an einer Speicherstelle zu speichern sind.
Die Adresse und die Daten werden vorübergehend in einem Puffer in
einer Speichersteuerung gespeichert, und es wird dem Mikroprozessor
erlaubt, mit seinem nächsten
Arbeitsgang fortzufahren, ohne auf den Abschluß des Schreibvorgangs in die
gewählte
Speicherstelle zu warten. Es kann ein ausreichendes Puffern vorgesehen
werden, um zu ermöglichen,
daß mehrere
Schreibvorgänge vom
Mikroprozessor abgeschickt werden, bevor er auf den Abschluß der Schreibvorgänge warten
muß.
-
Das
Merkmal der abgeschickten Schreibanforderungen ausnutzende Systeme
umfassen eine Logik, die Leseadressen mit Schreibadressen vergleicht,
um sicherzustellen, daß ein
anschließendes Lesen
aus dem Speichersystem nicht auf eine Speicheradresse gerichtet
ist, die abgeschickte Schreibdaten aufweist, welche noch nicht geschrieben
wurden. Falls die Leseadresse der Adresse einer abgeschickten Schreibanforderung
entspricht, kann die Speichersteuerung mit der Antwort auf die Leseanforderung
warten, bis der abgeschickte Schreibvorgang abgeschlossen ist (ein ähnliches
System ist in
US-A-5
022 004 offenbart), oder die Speichersteuerung kann alternativ
auf die Leseanforderung antworten, indem Daten direkt aus dem Puffer
für abgeschickte
Schreibanforderungen übertragen
werden. Falls die Leseadresse von den Adressen aller abgeschickten
Schreibanforderungen verschieden ist, kann die Speichersteuerung
eine ”Read-Around”-Logik
aufweisen, damit die Speichersteuerung vor dem Abschluß der abgeschickten
Schreibvorgänge
auf den Lesezugriff auf eine andere Stelle antworten kann.
-
Bekannte
Speichersteuerungen, die abgeschickte Schreibvorgänge verwirklichen,
arbeiten nach dem First-In-First-Out-Prinzip. Dies bedeutet, daß die abgeschickten
Schreibanforderungen in der gleichen Reihenfolge in den Speicher
geschrieben werden, in der sie von der Speichersteuerung empfangen
werden. Falls sequentielle abgeschickte Schreibvorgänge auf
Adressen in verschiedenen Seiten der DRAMs gerichtet sind, tritt
im Speichersystem der durch die Zeilenzugriffszeit bewirkte zeitliche
Mehraufwand auf. Selbst dann, wenn zwei abgeschickte Schreibanforderungen
im Puffer auf dieselbe Speicherseite gerichtet sind, schreibt eine
herkömmliche
Speichersteuerung die zwei abgeschickten Schreibanforderungen nicht
in sequentieller Folge, falls eine auf eine andere Seite gerichtete
dritte abgeschickte Schreibanforderung zwischen ihnen abgeschickt
wird. Falls die Speichersteuerung weiterhin Read-Around-Vorgänge zuläßt, kann
der Lesezugriff von einer anderen Seite aus als eine vorhergehende
oder eine nachfolgende abgeschickte Schreibanforderung erfolgen.
Dies ruft wiederum den zeitlichen Mehraufwand beim Zeilenzugriff
hervor. Falls der Mikroprozessor keine weiteren Schreibanforderungen
abschicken kann oder auf Lesedaten warten muß, wenn sich die Speichersteuerung
wegen häufiger
Seitenumschaltung verlangsamt, wird die Gesamtsystemleistung verschlechtert.
-
Es
ist demgemäß ersichtlich,
daß viele
Vorteile von Systemen mit einer Fähigkeit zu abgeschickten Schreibanforderungen
und einer Read-Around-Fähigkeit
durch den durch Ändern
der Zeilenadresse zwischen Speicherzugriffen hervorgerufenen zeitlichen
Mehraufwand aufgehoben werden.
-
Zusammenfassung der Erfindung
-
Gemäß einer
Erscheinungsform sieht die vorliegende Erfindung eine Speichersteuerung
nach Anspruch 1 vor. Gemäß einer
weiteren Erscheinungsform sieht die vorliegende Erfindung ein Verfahren
zum Wählen
eines nächsten
Zugriffs in einem dynamischen Random-Access-Speicher (DRAM) nach
Anspruch 6 vor.
-
Die
Speichersteuerung gemäß der bevorzugten
Ausführungsform
ist speziell dafür
ausgelegt, die Speicherzugriffszeit für Lese- und Schreibzykluszugriffe
in einem Speichersystem mit Seitenmoduszugriffen zu verringern,
indem die Verarbeitungsreihenfolge der Lese- und Schreibzyklus-Zugriffsanforderungen
umgeordnet wird. Insbesondere ermöglicht die Speichersteuerung
das derartige Umordnen der Lese- und Schreibzyklus-Zugriffsanforderungen,
daß alle
Lese- und Schreibzugriffe, die Zugriff auf die aktuelle Seite (die
bei einem Seitenmodus-Zugriffsschema in eine Zeilenadresse übersetzt
wird) erfordern, vor den Lese- und Schreibzyklus-Zugriffsanforderungen
ausgeführt
werden, die Zugriff auf eine andere Seite (Zeile) erfordern. Gemäß alternativen Ausführungsformen
werden alle Lesezugriffe vor jeglichen Schreibzugriffen ausgeführt. Gemäß diesen Ausführungsformen
werden Lesezugriffe auf eine aktuelle Seite vor Lesezugriffen auf
eine neue Seite ausgeführt
und werden Schreibzugriffe auf eine aktuelle Seite vor Schreibzugriffen
auf eine neue Seite ausgeführt.
-
Wie
vorstehend erörtert
wurde, muß die Speichersteuerung
bei einem typischen Adressierschema zwischen Speicherzugriffen,
die eine Änderung
der Zeilenadresse erfordern, eine festgelegte Zeit warten, bis die
neue Zeile des DRAM vollständig geladen
wurde, bevor die neue Zeilenadresse im DRAM freigegeben werden kann.
Diese Verzögerung beim
Bereitstellen der neuen Zeilenadresse wird als Zeilenadressen-Vorladezeit
bezeichnet. Vorteilhafterweise ordnet die Speichersteuerung gemäß der bevorzugten
Ausführungsform
die Lese- und Schreibzykluszugriffe um, so daß mehrere Zugriffe für dieselbe
Seite zusammen ausgeführt
werden. Demgemäß verringert
die Speichersteuerung gemäß der bevorzugten Ausführungsform
die Gesamt-Speicherzugriffszeit, indem die Zeilenadreß-Vorladezeit zwischen
den Zykluszugriffen auf dieselbe Zeile beseitigt wird, die bei einer
Verarbeitung der Speicherzyklusanforderungen in ihrer ursprünglichen
Reihenfolge auftreten würde.
-
Eine
Erscheinungsform der bevorzugten Ausführungsform ist eine Speichersteuerung,
die ein dynamisches Random-Access-Speichersystem (DRAM-System) steuert,
das mehrere Schreibzugriffsanforderungen mit jeweiligen Adressen
und in das DRAM-System an den Adressen zu schreibenden zugeordneten
Daten aufweist. Jede der Schreibadressen hat einen Zeilenadreßteil und
einen Spaltenadreßteil.
Die Speichersteuerung weist einen Puffer mit mehreren Stellen auf,
der die Schreibadressen und zugeordnete Daten für jede der Schreibzugriffsanforderungen
vorübergehend
speichert, bis die Daten in das DRAM-System geschrieben werden können. Die
gespeicherten Adressen und Daten werden im Puffer in einer Reihenfolge
gehalten, die der Reihenfolge entspricht, in der die Schreibzugriffsanforderungen
empfangen werden. Eine Zugriffsfolge-Steuerschaltung wählt eine
Adresse und Daten, die einer der mehreren Schreibzugriffsanforderungen zugeordnet
sind, als einen nächsten
Zugriff auf das DRAM-System. Die Zugriffsfolge-Steuerschaltung weist
einen Komparator auf, der den Zeilenadreßteil jeder der gespeicherten
Adressen mit dem Zeilenadreßteil
eines laufenden Zugriffs vergleicht und Schreibzugriffsanforderungen
mit jeweiligen Zeilenadreßteilen
identifiziert, die mit dem Zeilenadreßteil des laufenden Zugriffs
identisch sind. Die Zugriffsfolge-Steuerschaltung weist weiterhin
eine auf den Komparator ansprechende Zugriffswählschaltung auf. Die Zugriffswählschaltung
wählt eine
der identifizierten Schreibzugriffsanforderungen als einen nächsten Zugriff
auf das DRAM-System, bevor eine nicht identifizierte Schreibzugriffsanforderung
mit einem vom Zeilenadreßteil
des laufenden Zugriffs verschiedenen Zeilenadreßteil gewählt wird. Die Wahl einer der
identifizierten Schreibzugriffsanforderungen wird selbst dann vorgenommen,
wenn die nicht identifizierte Schreibzugriffsanforderung vor der
identifizierten Schreibzugriffsanforderung erfolgt ist.
-
Die
Speichersteuerung kann auch eine Lesezugriffsanforderung mit einer
Leseadresse empfangen. Die Leseadresse hat einen Zeilenadreßteil und
einen Spaltenadreßteil.
Der Komparator vergleicht den Zeilenadreßteil der Leseadresse und erkennt,
ob der Zeilenadreßteil
der Leseadresse auf den Zeilenadreßteil des laufenden Zugriffs
gerichtet ist. Die Zugriffswählschaltung
wählt vor
dem Wählen der
nicht identifizierten Schreibzugriffsanforderung als einen nächsten Zugriff
die Lesezugriffsanforderung als einen nächsten Zugriff. Vorzugsweise
hat der Komparator weiterhin eine Logik, die mindestens einen Teil
des Spaltenadreßteils
der Leseadresse mit einem entsprechenden Teil der Spaltenadreßteile der mehreren
Schreibadressen im Puffer vergleicht. Die Adreßwählschaltung wählt vorzugsweise
die Lesezugriffsanforderung vor einer Schreibzugriffsanforderung,
wenn der Zeilen adreßteil
der Leseadresse mit dem Zeilenadreßteil des laufenden Zugriffs
identisch ist und wenn sich der Teil des Spaltenadreßteils der Leseadresse
von den entsprechenden Teilen der Spaltenadreßteile der identifizierten
Schreibzugriffsanforderungen unterscheidet.
-
Eine
weitere Erscheinungsform der bevorzugten Ausführungsform ist ein Verfahren
zum Steuern des Zugriffs auf ein mehrere Speicherstellen aufweisendes
dynamisches Random-Access-Speichersystem (DRAM-System). Es wird
auf das DRAM-System zugegriffen, indem darauf eine Zeilenadresse und
dann eine Spaltenadresse angewendet wird. Das DRAM-System bietet
Zugriff auf mehrere Stellen mit der gleichen Zeilenadresse, wobei
zwischen Zugriffen nur die Spaltenadresse geändert wird. Das Verfahren beinhaltet
den Schritt des Speicherns einer Adresse und zugeordneter Daten
für jede
von mehreren Schreibzugriffsanforderungen in einem Puffer. Jede
Adresse von den mehreren Zugriffsanforderungen weist einen Zeilenadreßteil und
einen Spaltenadreßteil
auf. Jede Adresse und zugeordnete Daten werden in der Reihenfolge
gespeichert, in der die Speichersteuerung die Zugriffsanforderungen empfängt. Das
Verfahren umfaßt
die weiteren Schritte des Ausführens
eines ersten Zugriffs auf das DRAM-System an einer ersten Zeilenadresse
und einer ersten Spaltenadresse und des Vergleichens des ersten
Zeilenadreßteils
mit dem Zeilenadreßteil
jeder im Puffer gespeicherten Zugriffsanforderung. Wenn mindestens
eine Zugriffsanforderung im Puffer einen mit dem Zeilenadreßteil des
ersten Zugriffs identischen Zeilenadreßteil hat, wählt das
Verfahren die früheste
empfangene Zugriffsanforderung von der mindestens einen Zugriffsanforderung,
die einen mit dem Zeilenadreßteil
des ersten Zugriffs identischen Zeilenadreßteil aufweist, als einen zweiten
Zugriff auf das DRAM-System. Die einen identischen Zeilenadreßteil aufweisende
Zugriffsanforderung wird vor nicht identische Zeilenadreßteile aufweisenden
früheren
Zugriffsanforderungen gewählt.
Wenn keine im Puffer vorhandene Zugriffsanforderung einen mit dem
Zeilenadreßteil
des ersten Zugriffs identischen Zeilenadreßteil aufweist, wählt das
Verfahren die früheste
empfangene Zugriffsanforderung im Puffer als den zweiten Zugriff.
Bei dieser Ausführungsform
umfaßt
das Verfahren vorzugsweise den weiteren Schritt des Vergleichens
eines Zeilenadreßteils
und mindestens eines Bits eines Spaltenadreßteils einer Lesezugriffsanforderung
mit Zeilenadreßteilen
und einem entsprechenden Bit von Spaltenadreßteilen der mehreren im Puffer
enthaltenen Schreibzugriffsanforderungen. Wenn der Zeilenadreßteil des Lesezugriffs
mit einem Zeilenadreßteil
mindestens einer der Schreibzugriffsanforderungen identisch ist, führt das
Verfahren den Lesezugriff vor den einen identischen Zeilenadreßteil aufweisenden
Schreibzugriffen aus, wenn die entsprechenden Bits der Spaltenadreßteile verschieden
sind. Andernfalls führt
das Verfahren einen Schreibzugriff vor dem Lesezugriff aus, wenn
das mindestens eine Bit des Spaltenadreßteils des Lesezugriffs mit
dem mindestens einen Bit des Spaltenadreßteils eines der Schreibzugriffe identisch
ist.
-
Eine
andere Erscheinungsform der bevorzugten Ausführungsform ist ein Verfahren
zum Wählen
eines nächsten
Zugriffs in einem dynamischen Random-Access-Speichersystem (DRAM-System), das
abgeschickte Schreibanforderungen an das DRAM-System aufweist, wenn
mindestens eine der abgeschickten Schreibanforderungen eine Adresse aufweist,
die auf eine Speicherstelle mit einer mit der Zeilenadresse eines
aktuellen Zugriffs auf das DRAM-System identischen Zeilenadresse
gerichtet ist, und wenn mindestens eine der abgeschickten Schreibanforderungen
eine Adresse aufweist, die auf eine Speicherstelle mit einer von
der Zeilenadresse des aktuellen Zugriffs verschiedenen Zeilenadresse gerichtet
ist. Das Verfahren umfaßt
die Schritte des vor dem Wählen
eines Schreibzugriffs mit einer verschiedenen Zeilenadresse erfolgenden
Wählens
des frühesten
empfangenen Schreibzugriffs mit einer identischen Zeilenadresse
als einen nächsten
Zugriff und des dann, wenn kein Schreibzugriff eine identische Zeilenadresse
aufweist, erfolgenden Wählens der
frühesten
Schreibzugriffsanforderung mit einer verschiedenen Zeilenadresse
als einen nächsten
Zugriff.
-
Eine
weitere Erscheinungsform der bevorzugten Ausführungsform ist eine Pufferschaltung,
die ermöglicht,
daß Daten
in sequentieller Reihenfolge empfangen werden und an mehreren Stellen
in der Pufferschaltung gespeichert werden und daß die Daten in nicht sequentieller
Reihenfolge aus der Pufferschaltung ausgegeben werden. Die Pufferschaltung umfaßt einen
die nächste
leere Stelle zum Empfangen einer nächsten Dateneingabe identifizierenden Eingabezeiger
und einen die nächste
volle Stelle als Quelle für
die nächste
Ausgabe identifizierenden Ausgabezeiger sowie eine Zeigersteuerschaltung, die
den Eingabezeiger und den Ausgabezeiger unabhängig steuert und die einen
auf eine vorbestimmte Eigenschaft der Daten ansprechenden Prioritätsplaner
zum Wählen
einer der vollen Stellen als die Quelle für die nächste Ausgabe aufweist. Vorzugsweise umfassen
die Daten Adressen, die Speicherstellen in einem dynamischen Random-Access-Speichersystem
(DRAM-System) identifizieren, und die vorbestimmte Eigenschaft der
Daten umfaßt
das Ergebnis eines Vergleichs zur Bestimmung, ob die Zeilenadreßteile der
Adressen mit den Zeilenadreßteilen
einer Speicherstelle im DRAM-System, auf die gerade zugegriffen
wird, identisch sind.
-
Kurzbeschreibung der Zeichnungen
-
1 ist
ein vereinfachtes Blockdiagramm eines Rechnersystems, das ein Speicheruntersystem
aufweist.
-
2 ist
ein vereinfachtes Blockdiagramm des Speicheruntersystems aus 1.
-
3 zeigt
ein Zeitablaufdiagramm eines Lesezugriffs in einem als Beispiel
dienenden DRAM-System.
-
4 zeigt
ein Zeitablaufdiagramm eines Schreibzugriffs in einem als Beispiel
dienenden DRAM-System.
-
5 zeigt
den Zeitablauf erfolgreicher Schreibvorgänge in verschiedene Zeilen
eines DRAMs.
-
6 zeigt
den Zeitablauf erfolgreicher Schreibvorgänge in dieselbe Zeile eines
DRAMs.
-
7 zeigt
ein Blockdiagramm eines Speicheruntersystems, das einen FIFO-Puffer
für abgeschickte
Schreibanforderungen aufweist.
-
8 zeigt
ein Blockdiagramm eines Speicheruntersystems, das einen Puffer für abgeschickte Schreibanforderungen
und eine Speichersteuerung gemäß der vorliegenden
Erfindung aufweist.
-
9 ist
eine Tabelle, in der eine Ausführungsform
der Auswahlen der nächsten
Zugriffsadresse für
die Kombinationen von Zeilenadreßteilen von Lesezugriffsanforderungen
und abgeschickten Schreibanforderungen im Vergleich zur aktuellen
Zeilenadresse dargestellt ist.
-
10 ist
eine Tabelle, in der eine alternative Ausführungsform der Auswahlen der
nächsten Zugriffsadresse
für die
Kombinationen von Zeilenadreßteilen
von Lesezugriffsanforderungen und abgeschickten Schreibanforderungen
im Vergleich zur aktuellen Zeilenadresse dargestellt ist.
-
11 ist
eine Tabelle, in der die Auswahlen der nächsten Schreibzugriffsadresse
für die
Kombinationen abgeschickter Schreibanforderungen dargestellt ist,
die Seitentreffer (also Zeilentreffer), Seitenfehlschläge oder
Seitentreffer und Seitenfehlschläge
einschließen
können.
-
12 zeigt
ein detaillierteres Blockdiagramm der Vergleichs- und Zeigerlogik
aus 8.
-
13 zeigt
eine Funktionsdarstellung hoher Ebene des Puffers für abgeschickte
Schreibanforderungen aus den 8 und 12.
-
14 zeigt
die Funktionslogik der Zeigersteuerlogik aus 12, die
den Basiseintragszeiger erzeugt.
-
15 zeigt
die Funktionslogik der Zeigersteuerlogik aus 12, die
den Ausgabezeiger erzeugt.
-
16 zeigt
die Funktionslogik der Zeigersteuerlogik aus 12, die
den Eingabezeiger erzeugt.
-
Detaillierte Beschreibung des bevorzugten
Ausführungsbeispiels
-
In 1 ist
ein als Beispiel dienendes Rechensystem 100 gemäß der vorliegenden
Erfindung dargestellt. Das Rechensystem 100 weist ein CPU-Modul 110 auf,
das beispielsweise einen Mikroprozessor 113 und einen Cache-Speicher 115 aufweist.
Es ist auf dem Fachgebiet gut verstanden, daß das CPU-Modul 110 andere
herkömmliche
Schaltungen, wie eine Bussteuerung, eine Busschnittstelle und dergleichen,
aufweist, die hier nicht dargestellt sind. Das CPU-Modul 110 kommuniziert
mit einem Speicheruntersystem 120 über einen Systembus 125.
Das Speicheruntersystem 120 weist zusätzlich eine Speichersteuerung 130 und
mehrere dynamische Random-Access-Speicher (DRAMs) 135 auf. Ein
typisches Rechnersystem 100 beinhaltet andere Komponenten,
wie eine E/A-Schnittstelle, Plattenlaufwerke und Plattenlaufwerk-Steuerungen,
Bildschirmgeräte,
Tastaturen und dergleichen, die in 1 ebenfalls
nicht dargestellt sind, um die vorliegende Erfindung hervorzuheben.
Es sei weiterhin bemerkt, daß andere
derartige Komponenten unter Verwendung von Direktspeicherzugriffs-(DMA)-Transaktionen über den
Systembus auf das Speicheruntersystem 120 zugreifen können.
-
Der
Systembus 125 ist in 1 als ein
zusammengesetzter Bus dargestellt. Fachleute werden erkennen, daß der Systembus 125 mehrere
Adreßleitungen,
mehrere Datenleitungen und mehrere Steuerleitungen aufweist. Die
Steuerleitungen können
beispielsweise eine EA/MEM-Leitung, die zwischen Übertragungen
zwischen dem CPU-Modul 110 und den E/A-Vorrichtungen (nicht
dargestellt) oder Übertragungen
zwischen dem CPU-Modul 110 und dem Speicheruntersystem 120 wählt, und
eine Lese/Schreibleitung, die zwischen Übertragungen vom Speicheruntersystem 120 zum
CPU-Modul 110 (Lesen) oder vom CPU-Modul zum Speicheruntersystem 120 (Schreiben)
wählt,
aufweisen. Sie können auch
Bytewählleitungen,
die bestimmen, welche Datenbytes in einem aus mehreren Bytes bestehenden Wort
zu übertragen
sind, und ein oder mehrere Zyklusauslösesignale, die vom Mikroprozessor 113 im CPU-Modul 110 zum
Einleiten eines Zugriffszyklus aktiviert werden, aufweisen. Beispielsweise
aktiviert ein Intel®-Mikroprozessor, wie ein
80486, ein Pentium oder dergleichen, ein Adreßfreigabesignal (ADS), um einen
Zugriffszyklus einzuleiten.
-
Das
Speicheruntersystem 120 spricht auf die jeweiligen Signale
auf der Adreß-,
Daten- und Steuerleitung an und beginnt mit einem Zugriffszyklus, und
Daten werden, falls vom Mikroprozessor 113 ein Lesezugriff
gewählt
wird, von einer durch die Adreßsignale
und die Bytewählsignale
bestimmten Speicherstelle über
die Datenleitungen des Systembusses 125 zum Mikroprozessor 113 übertragen.
Falls vom Mikroprozessor 113 ein Schreibzugriff gewählt wird,
werden Daten vom Mikroprozessor 113 über die Datenleitungen zum
Speicheruntersystem 120 übertragen.
-
2 ist
ein vereinfachtes Blockdiagramm eines als Beispiel dienenden Speicheruntersystems 120 zum
Erläutern
der grundlegenden Arbeitsweise der DRAMs 135. Die 3 und 4 zeigen
als Beispiel dienende Zeitablaufdiagramme für einen Lesezugriff (3)
und einen Schreibzugriff (4) auf die
DRAMs. Wie dargestellt, weist die Speichersteuerung 130 einen
Adreßbereichsdecodierer 138,
einen Taktgenerator 140, einen Zeilen/Spaltenadreßmultiplexer
(MUX) 142 und einen bidirektionalen Datenpuffer 144 auf.
-
Die
Speichersteuerung 130 empfängt vom Systembus 125 auf
mehreren Adreßleitungen 154 mehrere
Adreßbits,
die für
die Zwecke dieser Darstellung die Adreßbits AD2 bis AD31 sind. Bytewählleitungen
werden von der Speichersteuerung anstelle von Adreßbits AD0
und AD1 verwendet, um bestimmte Bytes eines aus 4 Bytes bestehenden
Speicherwort auszuwählen,
auf die zuzugreifen ist. Bei einigen Systemen kann ein Speicherwort
eine größere Anzahl
von Bytes aufweisen, und Adreßbits
AD2 oder höher
können
durch zusätzliche
Bytewählleitungen
ersetzt werden, um aus der größeren Anzahl
von Bytes auszuwählen.
Gemäß der hier
beschriebenen Ausführungsform
werden Adreßbits
AD20–AD31
verwendet, um ansprechend auf einen Zugriff auf dem Systembus 135 ein
bestimmtes Untersystem, wie beispielsweise das Speicheruntersystem 120,
auszuwählen.
Des weiteren werden gemäß der beschriebenen
Ausführungsform
die Adreßbits
AD2–AD21 zum
Auswählen
einer bestimmten Speicherstelle innerhalb des Speicheruntersystems 120 verwendet. Es
sei weiterhin bemerkt, daß die
Zuordnung der Adreßbits
AD0–AD31
zur Steuerung des Speicheruntersystems 120 entsprechend
der Speicherkapazität
und dem gewählten
Adreßbereich
des Speicheruntersystems 120 variiert.
-
Die
Adreßleitungen 154 sind
an den Zeilen/Spaltenadreßmultiplexer 142 angeschlossen.
Ein Fachmann wird verstehen, daß eine
Adreßnormierschaltung
(nicht dargestellt) vorteilhafterweise in das Speicheruntersystem 120 aufgenommen
werden kann, um die Adressen zu normieren, bevor sie auf den Zeilen/Spaltenadreßmultiplexer 142 angewendet werden.
Bei als Beispiel dienenden DOS-basierten Systemen, bei denen Prozessoren
der Intel®-Familie verwendet
werden, weist der Adreßbereich
eine Anzahl von ”Lücken” auf, die
beispielsweise durch Zuordnung von Teilen des Adreßbereichs
zum Video-RAM hervorgerufen werden. Diese Adressen werden vom Betriebssystem
nicht direkt als Speicherstellen adressiert. Weil die diesen ”Lücken” entsprechenden
physikalischen Speicherstellen andernfalls nicht verwendet werden
würden, übersetzt
eine Adreßnormierschaltung
logische Adressen oberhalb des Anfangs der Lücken, um die Zugriffe auf den ”Lückenstellen” entsprechende
physikalische Adressen umzulenken. Solche Adreßnormierschaltungen sind auf
dem Fachgebiet wohlbekannt, und sie sind in den 2, 7 und 8 nicht
dargestellt und werden hier nicht beschrieben.
-
Der
Taktgenerator 140 spricht auf Steuersignale vom Systembus 125 an,
um geeignete Zugriffssignale für
die DRAMs 135 zu erzeugen. Der Adreßbereichsdecodierer 138 decodiert
eine auf die Speichersteuerung 130 angewendete Adresse
(die die Adreßbits
AD2–AD31
aufweist) und bestimmt, ob die angewendete Adresse innerhalb eines
dem Speicheruntersystem 120 zugeordneten Adreßbereichs
liegt. Der Adreßbereichsdecodierer 138 führt dem
Taktgenerator 140 ein aktives Ausgangssignal zu, wenn die angewendete
Adresse innerhalb eines solchen Adreßbereichs liegt. Wenn ein Adreßfreigabesignal (ADS-Signal)
auf einer Leitung 150 aktiviert wird, während die Ausgabe des Adreßbereichsdecodierers 138 aktiv
ist, leitet der Taktgenerator 140 einen Zugriff auf die
DRAMs 135 ein. Falls auf einer Lese/Schreibleitung 152 ein
L/S-Signal für
einen Lesezugriff ausgewählt
wird, wird der Zugriff als ein Lesezugriff eingeleitet. Wenn das
L/S-Signal für
einen Schreibzugriff ausgewählt
wird, leitet der Taktgenerator in ähnlicher Weise einen Schreibzugriff
auf die DRAMs 135 ein.
-
Die
Speichersteuerung 130 empfängt weiterhin mehrere Datensignale
(D0–D31)
auf entsprechenden mehreren Datenleitungen 156. Das hier
beschriebene als Beispiel dienende System ist ein 32-Bit-System.
Es sei bemerkt, daß die
nachfolgende Beschreibung nur für
Systeme gilt, die eine größere Anzahl
von Bits je Datenwort aufweisen.
-
Der
Taktgenerator 140 erzeugt auf einer Leitung 160 ein
Zeilenadreß-Freigabesignal
(RAS*-Signal), auf einer Leitung 162 ein Spaltenadreß-Freigabesignal
(CAS*-Signal), auf einer Leitung 164 ein Schreibfreigabesignal
(WE*-Signal), auf einer Leitung 166 ein Ausgabefreigabesignal
(OE*-Signal) und auf einer Leitung 168 ein Multiplexer-Wählsignal (S).
(Ein Stern (*) nach einem Signalnamen gibt hier ein aktives niedriges
Signal an.) Mehrere RAS*- und CAS*-Signale können mehreren DRAM-Banken zugeführt werden,
so daß nur
bestimmte DRAMs durch jedes RAS*- und CAS*-Signal gesteuert werden.
-
Die
Arbeitsweise des als Beispiel dienenden Speicheruntersystems
120 wird
kurz in Zusammenhang mit den Zeitablaufdiagrammen aus den
3 und
4 beschrieben.
Eine mit DRAMs vertraute Person wird verstehen, daß DRAM-Schaltungen
typischerweise nur die Hälfte
der zum vollständigen Adressieren
der Speicherstellen in jeder Schaltung erforderlichen Adreßleitungen
aufweisen. Um beispielsweise einen 1 048 576 Speicherstellen aufweisenden
1-Megabit-DRAM zu adressieren, sind 20 Adreßbits erforderlich. Wegen der
Stiftbegrenzungen und der Betriebseigenschaften von DRAMs werden jedoch
nur 10 Adreßstifte
bereitgestellt. Die zum vollständigen
Adressieren des DRAMs erforderlichen 20 Adreßbits werden zum DRAM multiplexert,
wobei 10 Adreßbits
zur Zeit verarbeitet werden. Insbesondere wird das Multiplexer-Wählsignal
(S) zuerst auf einem ersten Logikpegel an den Zeilen/Spaltenadreßmultiplexer
142 angelegt,
um die ersten 10 Bits der Adresse vom Systembus
125 als
eine Zeilenadresse anzulegen, wie durch einen Zeilenteil des Adreßsignals (ADDR-Signals)
in
3 dargestellt ist. Historisch werden die höchstwertigen
Adreßbits
als die Zeilenadresse angelegt, es können jedoch auch andere Kombinationen
von Adreßbits
mit einem Teil der höchstwertigen
Bits und einem Teil der niedrigstwertigen Bits verwendet werden.
Es sei beispielsweise auf das
US-Patent
5 247 643 verwiesen, auf dessen Lehren hier Bezug genommen
wird. Nach dem Wählen
der Adreßbits
für die
Zeilenadresse aktiviert der Taktgenerator
140 das RAS*-Signal,
wie in
3 dargestellt ist. Nach einer durch die spezifischen
Eigenschaften der DRAMs
135 bestimmten angemessenen Verzöge rung schaltet
der Taktgenerator
140 den Pegel auf der Wählleitung
168 um,
um zu veranlassen, daß der
Zeilen/Spaltenadreßmultiplexer
142 die
restlichen Adreßbits
als die Spaltenadreßbits
anlegt, wie durch den Spaltenteil des Adreßsignals in
3 dargestellt
ist. Der Taktgenerator
140 aktiviert das CAS*-Signal, um
zu veranlassen, daß die
Spaltenadresse in den DRAMs
135 freigegeben wird. Weil
dies ein Lesezugriff ist, ist das WE*-Signal auf der Leitung
164 inaktiv
und das OE*-Signal auf der Leitung
166 aktiv, so daß gültige Daten
aus den DRAMs nach einer durch die Spaltenadreß-Zugriffszeit bestimmten kurzen
Verzögerung
ausgegeben werden. Der Puffer
144 wird auch durch das OE*-Signal
gesteuert, um die von den DRAMs
135 ausgegebenen Daten
zu den Datenleitungen
156 des Systembusses
125 zu übertragen.
(Bei einigen Systemen können
die DRAMs
135 ohne Verwendung des Puffers
144 direkt
mit dem Systembus
125 verbunden sein.)
-
In 4 ist
eine ähnliche
Zeitabfolge für
einen Schreibzugriff dargestellt. Vor dem Anlegen der Spaltenadreßbits und
dem Aktivieren des CAS*-Signals wird jedoch das WE*-Signal auf der Leitung 164 aktiviert,
und das OE*-Signal auf der Leitung 166 ist inaktiv. Somit
werden Daten vom Systembus 125 über den Puffer 144 zu
den DRAMs 135 übertragen und
darin gespeichert.
-
Wie
in den 3 und 4 dargestellt ist, beinhaltet
ein Zugriff auf die DRAMs 135 einen aus zwei Teilen bestehenden
Arbeitsgang, bei dem eine Zeilenadresse an die DRAMs 135 angelegt
und durch Aktivieren des RAS*-Signals in den DRAMs freigegeben wird.
Hierdurch wird veranlaßt,
daß die DRAMs
mit dem Zugriff auf mehrere Datenspeicherstellen beginnen, die die
gemeinsame Zeilenadresse verwenden. Die Daten aus der gesamten Zeile
werden nach einer als Zeilenzugriffszeit bezeichneten Verzögerung einem
innerhalb jedes DRAMs vorhandenen Ausgabemultiplexer zugeführt. Die
mehreren Datenbits, auf die in einer einzelnen Zeile zugegriffen wird,
werden als in Spalten innerhalb der Zeile liegend bezeichnet. Wenn
die Spaltenadresse an die DRAMs 135 angelegt wird und das
CAS*-Signal aktiviert
wird, wählt
die Spaltenadresse dann eine der Datenspalten aus, die von jedem
der DRAMs 135 auszugeben sind. Alternativ werden bei einem Schreibzugriff
die dem Eingang jedes DRAMs 135 zugeführten Daten in der ausgewählten Zeile
an der durch die ausgewählte
Spaltenadresse festgelegten Spalte gespeichert.
-
Falls
dem DRAM eine neue Adresse zuzuführen
ist, muß das
RAS*-Signal für
eine ausreichende Zeit deaktiviert werden, um zu ermöglichen,
daß die
internen Zeilenadressen vorgeladen und wieder mit den neuen Zeilenadressen
zugeführt
werden. Die der Zeilenzugriffszeit entsprechende Verzögerung tritt
wiederum auf, bevor die Spaltenadresse zugeführt und die bestimmte Datenspalte
zum Lesen oder Schreiben gewählt
werden kann. Wie in 5 dargestellt ist, tritt dadurch
ein erheblicher zeitlicher Mehraufwand bei jedem Einleiten eines
neuen Zeilenzugriffs auf.
-
Die
neuesten DRAMs reduzieren den zeitlichen Mehraufwand teilweise,
wobei sie im sogenannten Seitenmodus arbeiten, in dem sequentielle Zugriffe
auf mehrere Spalten in derselben Zeile eines DRAMs ohne weitere
Zeilenzugriffe erfolgen können. Wie
insbesondere in 6 dargestellt ist, wird eine Anzahl
von Zugriffen auf die gleiche Zeile durch Anlegen einer Zeilenadresse
an die DRAMs und Aktivieren des RAS*-Signals eingeleitet. Daraufhin
wird an die DRAMs eine erste Spaltenadresse angelegt und das CAS*-Signal
aktiviert. Das RAS*-Signal wird nach dem ersten Zugriff nicht deaktiviert.
Stattdessen wird nur das CAS*-Signal deaktiviert, es wird eine neue
Spaltenadresse angelegt, und die Daten aus der neuen Spalte oder
die Daten für
die neue Spalte sind erst nach der kurzen Spaltenzugriffszeit verfügbar bzw.
werden erst nach dieser gespeichert. Wenn demgemäß eine Folge von Zugriffen
in derselben Zeile stattfindet, wird ein wesentlicher Zeitvorteil
erreicht.
-
Wie
vorstehend erörtert
wurde, können
die durch den Betrieb eines DRAM-Speichersystems im Seitenmodus
bereitgestellten Zeitersparnisse nicht erhalten werden, wenn der
Mikroprozessor 113 oder eine andere Speicherzugriffsvorrichtung
Adressen in nichtsequentieller Weise anlegt. Beispielsweise kann der
Mikroprozessor 113 Daten in eine einer bestimmten Zeile
der DRAMs 135 entsprechende Adresse schreiben und dann
Daten von einer einer anderen Zeile der DRAMs 135 entsprechenden
Adresse lesen oder in eine solche Adresse schreiben. Es ist in diesen
Fällen
erforderlich, die Zeilenadresse zu ändern und den vorstehend erörterten
zeitlichen Mehraufwand beim Zeilenzugriff hinzunehmen.
-
Der
zeitliche Mehraufwand kann bei einem Mikroprozessor-basierten System
erheblicher sein, das abgeschickte Schreibanforderungen an den Speicher
zuläßt. Wie
vorstehend erörtert
wurde, legt bei einem System mit abgeschickten Schreibanforderungen,
wie einem in 7 dargestellten System 180,
der Mikroprozessor 113 eine Adresse, Schreibdaten und geeignete
Steuersignale an den Systembus 125 an, um einen Schreibzugriff
auf das Speicheruntersystem 120 einzuleiten. Statt auf
den Abschluß des
Schreibzugriffs zu warten, der durch die Aktivierung und die nachfolgende
Deaktivierung eines Besetztsignals vom Speicheruntersystem 120 angegeben
wird, gibt der Mikroprozessor 113 weiterhin Bustransaktionen
aus. Zur Aufnahme abgeschickter Schreibanforderungen weist eine
im Speicheruntersystem 180 vorhandene Speichersteuerung 182 einen
Puffer 184 für
abgeschickte Schreibanforderungen auf. Der Puffer 184 für abgeschickte
Schreibanforderungen speichert die Adresse und die Daten, die in
die DRAMs 135 zu schreiben sind. Bei bekannten Systemen
mit abgeschickten Schreibanforderungen kann der Puffer 184 für abgeschickte
Schreibanforderungen einen Speicher für mehr als eine abgeschickte
Schreibanforderung aufweisen, und er arbeitet als ein First-In/First-Out-(FIFO)-Puffer.
Die Speichersteuerung 182 überträgt die frühesten abgeschickten Schreibdaten
zu den DRAMs 135, indem die Adresse am Ausgang des Puffers 184 für abgeschickte
Schreibanforderungen als ein Zeilenadreßteil und ein Spaltenadreßteil an
die DRAMs 135 angelegt wird, wie vorstehend beschrieben
wurde, wobei die Adresse und die Daten jedoch vom Puffer 184 für abgeschickte
Schreibanforderungen statt direkt vom Systembus 125 zugeführt werden.
Die Zeitsteuerung zum Speichern von Schreibzugriffsanforderungsinformationen
in den FIFO-Puffer 184 und zum Zuführen der vom FIFO-Puffer ausgegebenen
Adresse und Daten zu den DRAMs 135 wird von einer Taktgenerator-
und FIFO-Steuerung 186 über
einen Steuerbus 187 bereitgestellt. Die Taktgenerator-
und FIFO-Steuerung 186 steuert einen Zeilen/Spaltenadreßmultiplexer
(MUX) 188 in einer der vorstehend beschriebenen ähnlichen
Weise.
-
Wenn
der Mikroprozessor 113 einen Lesezugriff auf das Speicheruntersystem 120 einleitet,
benötigt
er im allgemeinen die Antwortdaten, bevor er mit seinem nächsten Arbeitsgang
fortfährt.
Demgemäß stellen
als Beispiel dienende Speichersysteme mit abgeschickten Schreibanforderungen
einen Read-Around-Modus bereit, in dem die Speichersteuerung 182 einer
Lesezugriffsanforderung auf dem Systembus 125 Priorität gegenüber anstehenden
abgeschickten Schreibanforderungen gibt. Das heißt, daß der Lesezugriff unabhängig davon,
ob eine abgeschickte Schreibanforderung ansteht, ausgeführt wird,
falls eine Leseanforderung ansteht, wenn ein laufender Zugriff abgeschlossen
ist, sofern die Lesezugriffsanforderung nicht auf die gleiche Adreßstelle
wie eine abgeschickte Schreibanforderung gerichtet ist. Weil es
wichtig ist, daß beim
Lesezugriff die aktuellsten Daten abgerufen werden, führen bekannte
Systeme mit abgeschickten Schreibanforderungen einen von zwei Arbeitsgängen aus,
wenn eine Leseanforderung auf die gleiche Adreßstelle wie eine abgeschickte
Schreibanforderung gerichtet ist. Der Puffer für abgeschickte Schreibanforderungen
wird gelöscht,
um die Schreibdaten in die DRAMs 135 zu schreiben, oder
die Leseanforderung wird alternativ erfüllt, indem die angeforderten
Daten ähnlich
wie bei einem Cache-Speicher-Untersystem aus dem Puffer 184 für abgeschickte
Schreibanforderungen ausgegeben werden. Der Read-Around-Modus wird
von einem Lese/Schreibadreßmultiplexer
(MUX) 190 unterstützt,
der während
Schreibzugriffen Adreßinformationen
vom Ausgang des FIFO-Puffers 184 für abgeschickte Schreibanforderungen
empfängt
und der während
Lesezugriffen Adreßinformationen
direkt vom Systembus 125 empfängt. Ein Datenausgabepuffer 192 puffert
die Ausgabedaten von den DRAMs 135 auf den Systembus 125.
-
Bei
herkömmlichen
Systemen mit abgeschickten Schreibanforderungen tritt der zeitliche Mehraufwand
weiterhin auf, wenn sequentielle abgeschickte Schreibanforderungen
auf verschiedene Zeilen der DRAMs 135 gerichtet werden.
Wenn die Speichersteuerung 182 insbesondere auf den FIFO-Puffer 184 für abgeschickte
Schreibanforderungen zugreift, muß sie die Zeilenadresse jedesmal dann ändern, wenn
zwei sequentielle abgeschickte Schreibanforderungen auf verschiedene
Zeilen in den DRAMs 135 gerichtet sind. Wenn weiterhin
ein Lesezugriff eine von der Zeile des aktuellen Zugriffs verschiedene
Zeile identifiziert, muß der
zeitliche Mehraufwand beim Zeilenzugriff hingenommen werden. Eine
herkömmliche
Speichersteuerung reduziert teilweise den zeitlichen Mehraufwand,
indem sie es erkennt, wenn sequentielle Adressen auf die gleiche
Seite (also Zeile) gerichtet sind. Wie in 7 dargestellt
ist, ist eine Zeilenzwischenspeicher- und Komparatoreinrichtung 194 aufgenommen,
die den Zeilenadreßteil
der Ausgabe des Lese/Schreibadreßmultiplexers 190 empfängt. Die
Zeilenzwischenspeicher- und Komparatoreinrichtung 194 speichert
beim Auftreten eines aktiven RAS*-Signals den Zeilenadreßteil eines
vorhergehenden Zugriffs im Zwischenspeicher. Der zwischengespeicherte
Zeilenadreßteil wird
mit dem Zeilenadreßteil
des aktuellen Zugriffs verglichen, um zu bestimmen, ob die beiden
Zeilenadressen gleich sind. Falls die beiden Zeilenadressen gleich
sind, führt
die Zeilenzwischenspeicher- und Komparatoreinrichtung 194 der
Taktgenerator- und FIFO-Steuerung ein aktives Signal zu, um zu bewirken,
daß sie
die aktuelle Seite (also Zeile) offen hält und nur die Spaltenadresse ändert, indem
sie das CAS*-Signal für
den neuen aktuellen Zugriff erzeugt.
-
In 8 ist
ein erfindungsgemäßes Speicheruntersystem 200 dargestellt.
Insbesondere weist das Speicheruntersystem 200 eine Speichersteuerung 202 auf,
die einen verbesserten Puffer 204 für abgeschickte Schreibanforderungen
umfaßt.
Die Speichersteuerung 202 weist weiterhin eine Taktgenerator-
und Puffersteuerung 206 auf, die nachfolgend in näheren Einzelheiten
beschrieben wird. Die Taktgenerator- und Puffersteuerung 206 ist über einen
bidirektionalen Steuerbus 208 mit dem Puffer 204 für abgeschickte
Schreibanforderungen verbunden.
-
Ein
Lese/Schreibadreßmultiplexer 210,
ein Zeilen/Spaltenadreßmultiplexer 212 und
ein Datenausgabepuffer 214 arbeiten in einer Weise, die
derjenigen der entsprechenden vorstehend beschriebenen Elemente ähnelt.
-
Die
Speichersteuerung 202 aus 8 weist einen
Zeilenadreß-Zwischenspeicher 220 auf,
die den Zeilenadreßteil
der Ausgabe des Lese/Schreibadreßmultiplexers 210 empfängt und
zwischenspeichert. Der Zeilenadreß-Zwischenspeicher 220 wird beim
Auftreten des aktiven RAS*-Signals zwischengespeichert, so daß der Zeilenadreßteil eines
laufenden Zugriffs jedesmal dann gespeichert wird, wenn die Zeilenadresse
auf die DRAMs angewendet wird. Die zwischengespeicherte Ausgabe
des Zeilenadreß-Zwischenspeichers 220 wird
der Taktgenerator- und Puffersteuerung 206 als eine Eingabe
zugeführt.
-
Ähnlich wie
die herkömmlichen
Speichersteuerungen für
abgeschickte Schreibanforderungen in der Art der in 7 dargestellten
verfolgt der Taktgenerator in der Speichersteuerung 202 für abgeschickte
Schreibanforderungen aus 8 die Zeilenadresse des laufenden
Zugriffs durch den Zeilenadreß-Zwischenspeicher 220.
Im Gegensatz zu herkömmlichen
Speichersteuerungen weist die Taktgenerator- und Puffersteuerung 206 eine
Vergleichs- und Zeigerlogik 230 auf, die die Zeilenadreßteile der momentan
geöffneten
Seite (also Zeile), die im Puffer 204 für abgeschickte Schreibanforderungen
gespeichert ist, vergleicht und bestimmt, ob irgendeine der aktiven
abgeschickten Schreibanforderungen einen Adreßteil aufweist, der der zwischengespeicherten Zeilenadresse
des laufenden Zugriffs auf die DRAMs 135 entspricht. Die
Vergleichs- und Zeigerlogik 230 gibt weiterhin über einen
Eingabezeiger die Stelle im Puffer 204 für abgeschickte
Schreibanforderungen an, an der die Adresse und die Daten eingehender Schreibanforderungen
zu speichern sind, und gibt über
einen Ausgabezeiger die Stelle an, von der die Adresse und die Daten
einer für
den nächsten
Zugriff auf die DRAMs 135 gewählten abgeschickten Schreibanforderung
auszugeben sind.
-
Die
Taktgenerator- und Puffersteuerung 202 empfängt weiterhin
die laufende Adresse auf dem Systembus 125, und wenn der
Signalpegel auf der Lese/Schreibwählleitung 152 angibt,
daß die
Zugriffsanforderung auf dem Systembus 125 eine Lesezugriffsanforderung
ist, vergleicht die innerhalb der Taktgenerator- und Puffersteuerung 206 vorhandene Vergleichs-
und Zeigerlogik 230 den Zeilenadreßteil der angeforderten Leseadresse
mit der zwischengespeicherten Zeilenadresse, um zu bestimmen, ob
sie gleich sind. Die Vergleichs- und Zeigerlogik 230 vergleicht
auch den Zeilenadreßteil
der angeforderten Leseadresse mit den Zeilenadreßteilen der abgeschickten Schreibbefehle,
um zu bestimmen, ob die Zeilenadreßteile übereinstimmen. Die Ergebnisse der
Vergleiche zwischen der Leseadresse, den abgeschickten Schreibadressen
und der zwischengespeicherten Zeilenadresse bestimmen, welcher Zugriff auf
die DRAMs 135 als der nächste
Zugriff ausgewählt
wird.
-
Die
Auswahlen des nächsten
DRAM-Zugriffs sind in einer Tabelle 300 in 9 für eine erste
bevorzugte Ausführungsform
der vorliegenden Erfindung dargestellt. Jede Zeile der Tabelle 300 hat
drei Spalten, wobei die erste (äußerste linke),
als ”LESEN” bezeichnete
Spalte das Ergebnis des Vergleichs des Zeilenteils des angeforderten
Lesezugriffs mit der zwischengespeicherten Zeilenadresse (also dem
Zeilenteil des laufenden Zugriffs) ist, die zweite (mittlere), als ”SCHREIBEN” bezeichnete Spalte
das Ergebnis des Vergleichs der Zeilenteile der abgeschickten Schreibbefehle
mit der zwischengespeicherten Zeilenadresse und dem Zeilenteil des angeforderten
Lesezugriffs ist und die dritte (äußerste rechte), als ”ZUGRIFF” bezeichnete
Spalte die Anforderung angibt, die als der nächste Zugriff auf die DRAMs 135 angewendet
wird.
-
Wie
durch die erste Zeile 301 der Tabelle 300 dargestellt
ist, wird der Lesezugriff dann, wenn der angeforderte Lesezugriff
nicht mit dem laufenden Zugriff übereinstimmt
und der Puffer für
abgeschickte Schreibanforderungen leer ist, als der nächste Zugriff auf
die DRAMs 135 angewendet, wobei das RAS*-Signal von der
Taktgenerator- und Puffersteuerung 206 deaktiviert werden
muß und
das Vorladen der Zeilenadressen nach einer vorgegebenen Verzögerung erlauben
muß, wobei
der Zeilenadreßteil
der Lesezugriffsanforderung auf die DRAMs angewendet wird, das RAS*-Signal
aktiviert wird und der Zugriff wie zu vor beschrieben fortgesetzt
wird. Es wird für
diesen Zugriff kein besonderer Geschwindigkeitsvorteil gewährleistet.
-
Wie
in der zweiten Zeile 302, der dritten Zeile 303 und
der vierten Zeile 304 der Tabelle 300 dargestellt
ist, hängt
der als der nächste
Zugriff gewählte Zugriff
vom Zeileninhalt der abgeschickten Schreibanforderungen im Puffer 204 für abgeschickte
Schreibanforderungen ab, wenn der angeforderte Lesezugriff nicht
mit dem laufenden Zugriff übereinstimmt
und der Puffer 204 für
abgeschickte Schreibanforderungen nicht leer ist. Wie insbesondere
in der vierten Zeile 304 dargestellt ist, kann die früheste abgeschickte
Schreibanforderung mit dem entsprechenden Zeilenadreßteil als
der nächste
Zugriff gewählt
werden, falls eine oder mehrere der abgeschickten Schreibanforderungen
der aktuellen zwischengespeicherten Zeilenadresse entsprechende Zeilenadreßteile aufweisen,
woraus sich der Vorteil ergibt, daß die Zeilenadresse nicht geändert werden muß und nur
eine neue Spaltenadresse freigegeben werden muß, um den Zugriff auszuführen. Gemäß besonders
bevorzugten Ausführungsformen
stellt die Taktgenerator- und Puffersteuerung 206 zwei
Betriebsmodi bereit, die über
ein programmierbares Modusbit in einem Konfigurationsregister (nicht
dargestellt) gewählt
werden können.
In einem hier beschriebenen ersten Modus haben abgeschickte Schreibanforderungen,
die denselben Zeilenadreßteil
wie die aktuelle zwischengespeicherte Zeilenadresse aufweisen, Priorität gegenüber Leseanforderungen,
die einen anderen Zeilenadreßteil
aufweisen. In einem zweiten Modus wird Lesezugriffen immer Priorität gegenüber abgeschickten
Schreibanforderungen gegeben. Abhängig von der Mischung von Adressen
setzen verschiedene Anwendungen das Modusbit derart, daß entweder
der erste oder der zweite Modus gewählt wird, wobei dies davon
abhängt,
mit welchem Modus die optimale Gesamtausführzeit für eine bestimmte Anwendung
erreicht wird. Es können
an verschiedenen Anwendungen empirische Laufzeitprüfungen vorgenommen
werden, um zu bestimmen, welcher Modus für bestimmte Anwendungen bevorzugt
ist.
-
Falls
keine abgeschickte Schreibanforderung einen mit der aktuellen zwischengespeicherten Zeilenadresse übereinstimmenden
Zeilenadreßteil aufweist,
wird der Zeilenadreßteil
des angeforderten Lesezugriffs mit dem Zeilenadreßteil aller
abgeschickten Schreibanforderungen verglichen. Falls der Zeilenadreßteil des
angeforderten Lesezugriffs von den Zeilenadreßteilen aller abgeschickten Schreibanforderungen
verschieden ist, was durch den Eintrag ”NEU (VERSCHIEDEN)” in der
zweiten Zeile 302 der Tabelle 300 angegeben wird,
wird der Lesezugriff als der nächste
Zugriff gewählt.
Falls andererseits der Zeilenadreßteil des angeforderten Lesezugriffs
mit dem Zeilenadreßteil
einer oder mehrerer abgeschickter Schreibanforderungen übereinstimmt,
wird die früheste
abgeschickte Schreibanforderung für den nächsten Zugriff verwendet. Diese Entscheidung
wird getroffen, um zu gewährleisten, daß ein Lesezugriff
auf eine soeben beschriebene Datenstelle, der immer noch im Puffer 204 für abgeschickte
Schreibanforderungen vorhanden sein kann, die richtigen Daten empfängt. Wie
vorstehend erörtert
wurde, kann die Taktgenerator- und Puffersteuerung 204 eine
Logik (nicht dargestellt) aufweisen, die im Puffer 204 für abgeschickte
Schreibanforderungen abgeschickte Daten als Ausgabedaten zuführt, wenn
die Leseanforderung auf eine Stelle gerichtet ist, die eine abgeschickte
Schreibanforderung aufweist, die momentan im Puffer 204 für abgeschickte
Schreibanforderungen gespeichert ist.
-
Wie
in der fünften
Zeile 305 und in der sechsten Zeile 306 der Tabelle 300 dargestellt
ist, wird der Lesezugriff dann, wenn der Zeilenadreßteil der
Lesezugriffsanforderung mit dem zwischengespeicherten Zeilenadreßteil übereinstimmt,
als der nächste
Zugriff ausgeführt,
wenn der Puffer 204 für
abgeschickte Schreibanforderungen leer ist (Zeile 305)
oder der Puffer 204 für
abgeschickte Schreibanforderungen nur abgeschickte Schreibanforderungen
enthält,
die vom aktuellen zwischengespeicherten Zeilenadreßteil verschiedene
Zeilenadreßteile
aufweisen. Daher wird ein Geschwindigkeitsvorteil dadurch erreicht, daß die Zeilenadresse
zwischen Zugriffen nicht geändert
werden muß.
-
Wie
in der siebten Zeile 307 der Tabelle 300 dargestellt
ist, wird dann, wenn der Zeilenadreßteil des angeforderten Lesezugriffs
und der Zeilenadreßteil
einer oder mehrerer abgeschickter Schreibanforderungen mit dem aktuellen
zwischengespeicherten Zeilenadreßteil übereinstimmen, der früheste mit
den abgeschickten Schreibanforderungen übereinstimmende Zugriff als
der nächste
Zugriff gewählt.
-
Der
vorhergehende Prozeß wird
am Ende jedes laufenden Zugriffs wiederholt, um zu bestimmen, welcher
von dem angeforderten Lesezugriff und den abgeschickten Schreibanforderungen
für den
nächsten
Zugriff gewählt
wird. Es sei bemerkt, daß die
Taktgenerator- und Puffersteuerung 206 eine Logik aufweist,
um festzustellen, wenn der Puffer 204 für abgeschickte Schreibanforderungen
voll wird, so daß eine
oder mehrere der abgeschickten Schreibanforderungen unabhängig von
den Ergebnissen der Vergleiche des Zeilenadreßteils des Lesezugriffs und des
aktuellen zwischengespeicherten Zeilenadreßteils für den nächsten Zugriff auf die DRAMs 135 gewählt werden
können.
-
Es
ist anhand der vorhergehenden Beschreibung verständlich, daß die durch die Tabelle 301 dargestellte
Ausführungsform
eine restliche Lesewartezeit aufweist, wenn der Zeilenadreßteil des
angeforderten Lesezugriffs und der Zeilenadreßteil einer oder mehrerer abgeschickter
Schreibanforderungen übereinstimmen.
Wenngleich der Lesezugriff auf die gleiche DRAM-Zeile erfolgen kann,
besteht jedoch eine erhebliche Wahrscheinlichkeit, daß der Lesezugriff
auf eine andere Spalte innerhalb der Zeile erfolgt. In einem solchen
Fall ist es nicht erforderlich, die abgeschickten Schreibdaten in
einer Spalte vor dem Lesen von Daten aus der anderen Spalte zu speichern.
Falls daher der Vergleich zwischen der Lesezugriffsadresse und den
abgeschickten Schreibadressen auf den Spaltenadreßteil erweitert wird, kann
eine Anzahl von Konflikten vermieden werden, so daß der Lesezugriff
vor den abgeschickten Schreibanforderungen ausgeführt werden
kann. Durch Vergleich eines Bits des Spaltenadreßteils des angeforderten Lesezugriffs
und der abgeschickten Schreibanforderungen kann beispielsweise die Wahrscheinlichkeit
eines Konflikts innerhalb derselben Zeile auf etwa 50% verringert
werden. Jedes zusätzliche
verglichene Bit verringert weiter die Wahrscheinlichkeit eines Konflikts.
Es muß jedoch
ein Komparator für
jedes zusätzliche
Bit für
jede der abgeschickten Schreibanforderungen bereitgestellt werden.
Es kann ein Kompromiß zwischen
der für
die Vergleiche erforderlichen zusätzlichen Logik und der durch
jedes zusätzliche
Bit bereitgestellten wahrscheinlichen Verringerung der Lesewartezeit
erreicht werden.
-
Eine
Tabelle 310 in 10 zeigt
die alternativen Auswahlen für
den nächsten
DRAM-Zugriff, wenn der Vergleich der Leseanforderung mit den abgeschickten
Schreibanforderungen auf den Spaltenadreßteil erweitert wird, wie soeben
erörtert
wurde. Die Tabelle 310 ähnelt
der Tabelle 300, wobei die Zeile 311 der Tabelle 310 der
Zeile 301 der Tabelle 300 entspricht usw. Die
Arbeitsweise der alternativen Ausführungsform hinsichtlich der
Zeile 313, der Zeile 313 und der Zeile 317 ist
jedoch verschieden, und es wurde eine neue Zeile 318 hinzugefügt.
-
In
der zweiten Spalte der Zeile 312 und der Zeile 313 beziehen
sich die Einträge ”NEU (VERSCHIEDEN)” und ”NEU (GLEICH)” nun auf
den erweiterten Vergleich, wobei der Zeilenadreßteil des angeforderten Lesezugriffs
und der Zeilenadreßteil jeder
abgeschickten Schreibanforderung wie zuvor verglichen werden. Ein
gewähltes
Bit oder gewählte Bits
der Spaltenadreßteile
des angeforderten Lesezugriffs und der abgeschickten Schreibanforderungen
werden jedoch auch verglichen. Demgemäß wird eine abgeschickte Schreibanforderung
für eine
neue Zeilenadresse über
einen angeforderten Lesezugriff auf eine neue Zeilenadresse nur
gewählt,
falls die Zeilenadresse und das gewählte Bit oder die gewählten Bits
der Spaltenadresse gleich sind. Andernfalls wird der angeforderte
Lesezugriff als der nächste
Zugriff gewählt.
-
Wenn
der angeforderte Lesezugriff und eine oder mehrere abgeschickte
Schreibanforderungen Zeilenadreßteile
aufweisen, die mit dem zwischengespeicherten Zeilenadreßteil übereinstimmen,
wird in Zeile 317 und Zeile 318 die Auswahl darüber, welcher Zugriff
als der nächste
Zugriff anzuwenden ist, durch einen weiteren Vergleich des oder
der gewählten Spaltenbits
bestimmt. Falls die Zeilenadreßteile gleich
sind und das gewählte
Spaltenbit oder die gewählten
Spaltenbits verschieden sind, wird, wie in Zeile 317 dargestellt
ist, der Lesezugriff in derselben DRAM-Zeile wie der laufende Zugriff
als der nächste Zugriff
gewählt,
wodurch die Lesewartezeit verringert wird. Wie andererseits in Zeile 318 dargestellt
ist, wird die früheste
abgeschickte Schreibanforderung mit demselben Zeilenadreßteil und
dem selben gewählten
Bit oder denselben gewählten
Bits wie der Spaltenadreßteil
als der nächste
Zugriff auf die DRAMs 135 angewendet, falls die Zeilenadreßteile gleich
sind und das gewählte
Bit oder die gewählten Bits
der Spaltenadreßteile
auch gleich sind.
-
Die
Tabellen 300 und 310 zeigen die Auswahlen zwischen
Lesezugriffen und Schreibzugriffen. Eine Tabelle 310 in 11 zeigt
weitere Einzelheiten zu Auswahlen zwischen abgeschickten Schreibzugriffen
in Übereinstimmung
damit, ob irgendwelche der abgeschickten Schreibanforderungen auf
dieselbe Zeile wie der laufende Zugriff gerichtet sind. Die Tabelle 310 weist
vier Eintragszeilen 321, 322, 323 und 324 auf.
Eine erste Spalte jeder der Zeilen 321–324 gibt an, ob der
Puffer für
abgeschickte Schreibanforderungen mindestens einen abgeschickten
Schreibzugriff enthält,
der auf dieselbe Zeile wie der Zeilenadreßteil des laufenden Zugriffs
(beispielsweise ein Seitentreffer) gerichtet ist. Eine zweite Spalte
in jeder der Zeilen 321–324 gibt an, ob der Puffer 204 für abgeschickte
Schreibanforderungen mindestens einen abgeschickten Schreibzugriff
enthält,
der auf eine vom Zeilenadreßteil
des laufenden Zugriffs (beispielsweise ein Seitenfehltreffer) verschiedene
Zeile gerichtet ist. Eine dritte Spalte gibt an, welcher Schreibzugriff
vom Puffer 204 für
abgeschickte Schreibanforderungen als der nächste Schreibzugriff gewählt wird.
-
Wie
in der ersten Zeile 321 dargestellt ist, wird kein Schreibzugriff
ausgeführt,
wenn keine abgeschickten Schreibanforderungen an die laufende Zeile
oder an eine neue Zeile vorhanden sind. Wie in der zweiten Zeile 322 dargestellt
ist, wird der nächste Schreibzugriff
auf eine neue Zeile ausgeführt
und die älteste
abgeschickte Schreibanforderung für den nächsten Schreibzugriff ausgewählt, wenn
abgeschickte Schreibanforderungen an eine oder mehrere neue Zeilen
(beispielsweise Seitenfehltreffer) vorhanden sind, jedoch keine
abgeschickten Schreibanforderungen für die laufende Zeile vorhanden
sind. Wie in der dritten Zeile 323 dargestellt ist, erfolgt
der nächste
Schreibzugriff auf die laufende Zeile und wird die älteste abgeschickte
Schreibanforderung an die laufende Zeile für den nächsten Zugriff gewählt, wenn
mindestens eine abgeschickte Schreibanforderung für die laufende
Zeile (beispielsweise ein Seitentreffer) vorhanden ist. Wie weiterhin
in der vierten Zeile 324 dargestellt ist, wird selbst dann,
wenn eine abgeschickte Schreibanforderung für eine neue Zeile vorhanden
ist, die älter
als die abgeschickten Schreibanforderungen für die laufende Zeile ist, den abgeschickten
Schreibanforderungen für
die laufende Zeile Priorität
gegeben, und der nächste
Schreibzugriff wird auf die laufende Zeile ausgeführt. Die älteste abgeschickte
Schreibanforderung für
die laufende Zeile wird für
den nächsten
Schreibzugriff ausgewählt.
-
Die
Implementierung der Ausführungsformen
aus den 8–11 bedarf
eines nicht herkömmlichen
Puffers 204 für
abgeschickte Schreibanforderungen, weil die abgeschickten Schreibanforderungen
nicht notwendigerweise in derselben Reihenfolge, in der sie im Puffer
gespeichert werden, aus dem Puffer ausgegeben werden. Daher kann
ein her kömmlicher
First-In/First-Out-(FIFO)-Puffer nicht verwendet werden. Das Verfolgen
der Stellen der aktiven abgeschickten Schreibanforderungen, wenn
die abgeschickten Schreibanforderungen außerhalb der Reihenfolge entfernt
werden können,
und das Vergleichen der Zeilenadreßteile und der gewählten Bits der
Spaltenadreßteile
werden von der Vergleichs- und
Zeigerlogik 230 in der Taktgenerator- und Puffersteuerung 206 ausgeführt. Die
Vergleichs- und Zeigerlogik 230 ist in den 12–16 in
näheren Einzelheiten
dargestellt.
-
12 zeigt
ein Gesamtblockdiagramm der Vergleichs- und Zeigersteuerlogik 230 und
auch weitere Einzelheiten des Puffers 204 für abgeschickte Schreibanforderungen.
Der Puffer 204 für
abgeschickte Schreibanforderungen weist ein Pufferfeld 400 auf
die mehrere Pufferstellen aufweist, die gemäß der bevorzugten Ausführungsform
vier Stellen 401–404 umfassen.
Jede der Pufferstellen 401–404 stellt einen
Speicher für
mehrere Datenbits (beispielsweise 32 Bits), mehrere Adreßbits (beispielsweise
Adressen AD2–AD21)
und ein Bereitschaftsbit (BEREIT-Bit) bereit. Der Puffer 204 für abgeschickte Schreibanforderungen
ist vorzugsweise ein Dual-Port-Puffer, der unabhängige Adressierfähigkeiten für Datenschreibanforderungen
und Datenleseanforderungen bereitstellt. Zusätzlich werden die im Schreibpuffer 204 enthaltenen
Daten direkt der Vergleichs- und Zeigerlogik 230 als Ausgabedaten
zugeführt,
wie nachfolgend beschrieben wird. Beispielsweise weist der in 12 dargestellte
Puffer 204 für abgeschickte
Schreibanforderungen eine Lesewählschaltung 410 auf,
die auf einen Ausgabezeiger von der Vergleichs- und Zeigerlogik 230 anspricht,
um die Daten in einer der Pufferstellen 401–404 als
die Ausgabedaten aus dem Puffer 204 für abgeschickte Schreibanforderungen
zu wählen.
Die Lesewählschaltung 410 ist
vorzugsweise beispielsweise ein 1-zu-4-Decodierer. Alternativ kann
der Ausgabezeiger zum Adressieren eines Ausgabemultiplexers (nicht
dargestellt) verwendet werden.
-
Der
Puffer 204 für
abgeschickte Schreibanforderungen weist auch eine Schreibwählschaltung 412 auf,
die ansprechend auf einen Eingabezeiger und ein Pufferschreibsignal
von der Vergleichs- und Zeigerlogik 230 ein Schreibsignal
für eine
ausgewählte
der Pufferstellen 401–404 erzeugt.
Wenn das Pufferschreibsignal aktiviert wird, decodiert die Schreibwählschaltung 412 den
Eingabepunkt und schreibt die Daten und Adreßinformationen sowie das Bereitschaftssignal
am Eingang der Pufferschaltung 400 in die decodierte Pufferstelle 401–404.
-
Wie
in 12 dargestellt ist, ist der Adreßteil jeder
Pufferstelle 401–404 weiter
in einen Zeilenteil (beispielsweise ZEILE0, ZEILE1, ZEILE2 bzw. ZEILE3)
und einen Spaltenteil (SPALTE0, SPALTE1, SPALTE2 bzw. SPALTE3) eingeteilt.
Die jeweiligen Bereitschaftsbits werden in ähnlicher Weise identifiziert
(beispielsweise BEREIT0, BEREIT1, BEREIT2 bzw. BEREIT3).
-
Die
Vergleichs- und Zeigersteuerlogik 230 weist einen Zeigersteuerlogikteil 420 und
mehrere Komparatoren 430–438 auf. Die Komparatoren 430–433 sind
Lesekomparatoren, die den Zeilenadreßteil und gewählte Bits
des Spaltenadreßteils
der Leseanforderung auf dem Systembus 125 mit den Adreßteilen
und gewählten
Bits des Spaltenteils jeder der abgeschickten Schreibanforderungen
im Pufferfeld 400 vergleichen. Beispielsweise vergleicht
der Komparator 430 den Zeilenadreßteil und den gewählten Spaltenadreßteil der
Leseanforderung mit ZEILE0 und gewählten Bits von SPALTE0 von
der Pufferstelle 401. Die Ausgabe des Komparators 430 ist
ein Übereinstimmungssignal (ÜBEREINSTIMMUNG0),
das angibt, daß die
Leseanforderung auf dieselbe Zeilenadresse und möglicherweise dieselbe Spaltenadresse
wie die an der Pufferstelle 401 gespeicherte abgeschickte Schreibanforderung
gerichtet ist. (Falls der Komparator 430 so erweitert wird,
daß er
alle Spaltenbits umfaßt,
kann er eine genaue Übereinstimmung
bestimmen.) In gleicher Weise stellen die Komparatoren 431, 432 und 433 jeweilige ÜBEREINSTIMMUNG1-, ÜBEREINSTIMMUNG2-
und ÜBEREINSTIMMUNG3-Ausgaben
bereit, um Übereinstimmungen
zwischen den abgeschickten Schreibanforderungen an den Stellen 402, 403 bzw. 404 anzugeben.
-
Der
Komparator 434 empfängt
den Zeilenadreßteil
der aktuellen Leseanforderung und die zwischengespeicherte Zeilenadresse
vom Zeilenadreß-Zwischenspeicher 220 (8).
Der Komparator 434 gibt ein aktives LESETREFFER-Signal
aus, wenn die zwei Zeilenadreßteile
identisch sind, um anzugeben, daß die Lesezugriffsanforderung
auf die momentan geöffnete
Speicherseite (also die Zeile der DRAMs 135, auf die momentan
zugegriffen wird) gerichtet ist.
-
Der
Komparator 435 empfängt
den Zeilenadreßteil
(ZEILE0) von der Pufferstelle 401 und den zwischengespeicherten
Zeilenadreßteil
vom Zeilenadreß-Zwischenspeicher 220.
Der Komparator 435 stellt eine aktive TREFFER0-Ausgabe
bereit, wenn die zwei Zeilenadreßteile gleich sind. In ähnlicher Weise
stellen die Komparatoren ansprechend auf einen Vergleich zwischen
der zwischengespeicherten Zeilenadresse und den ZEILE1, ZEILE2 bzw. ZEILE3-Sigalen
jeweilige TREFFER1-, TREFFER2- und TREFFER3-Ausgaben bereit. Gemäß alternativen
Ausführungsformen
können
der ÜBEREINSTIMMUNG- und der TREFFER-Komparator
zeitmultiplexert werden, um den Gesamtumfang der erforderlichen
Hardware zu verringern.
-
Die
Signale ÜBEREINSTIMMUNG0, ÜBEREINSTIMMUNG1, ÜBEREINSTIMMUNG2, ÜBEREINSTIMMUNG3,
LESETREFFER, TREFFER0, TREFFER1, TREFFER2 und TREFFER3 werden zusammen
mit den Signalen BEREIT0, BEREIT1, BEREIT2 und BEREIT3 als Eingaben
der Zeigersteuerlogik 420 zugeführt. Die Bereitschaftssignale
werden mit den Übereinstimmungssignalen
und den Treffersignalen kombi niert, so daß die Zeigersteuerlogik 420 nur
auf Treffer und Übereinstimmungen
für abgeschickte
Schreibanforderungen anspricht, die noch nicht in die DRAMs 135 geschrieben
wurden. Demgemäß muß nach dem Speichern
der einer abgeschickten Schreibanforderung zugeordneten Daten nur
das jeweilige Bereitschaftssignal gelöscht werden, um die jeweiligen Treffer-
und Übereinstimmungssignale
zu sperren.
-
Die
Zeigersteuerlogik erzeugt auf einer Leitung 450 ein Lesewähl-Ausgangssignal,
um den Lese/Schreibadreßmultiplexer 210 zu
steuern. Das Lesewahl-Ausgangssignal wird aktiviert, wenn ein Lesetreffer
auftritt, und der Lesezugriff wird gemäß Tabelle 310 in 10 gewählt, wie
vorstehend beschrieben wurde. Die detaillierten Logikdiagramme oder
Logikgleichungen zum Erzeugen des Lesewahl-Ausgangssignals auf der
Grundlage von Tabelle 310 werden hier nicht beschrieben,
weil die Erstellung solcher Logikdiagramme oder Logikgleichungen dem
Fachmann gut bekannt ist.
-
Wie
vorstehend erörtert
wurde, muß es
zum Verringern der Wartezeit des Speicheruntersystems 120 gemäß der vorliegenden
Erfindung möglich
sein, Daten vom Puffer 204 für abgeschickte Schreibanforderungen
in einer Reihenfolge zu den DRAMs 135 zu übertragen,
die von der Reihenfolge, in der die Daten vom Systembus 125 empfangen
werden, verschieden ist. Daher kann ein herkömmlicher FIFO-Puffer nicht
verwendet werden. Weiterhin werden durch außerhalb der Reihenfolge erfolgendes Übertragen
von Daten ”Lücken” im Puffer 204 für abgeschickte Schreibanforderungen
belassen, die beim Wählen der
nächsten
abgeschickten Schreibanforderung zum Übertragen zu den DRAMs 135 berücksichtigt werden
müssen.
Wenn zwei oder mehr abgeschickte Schreibanforderungen auf dieselbe
Speicherzeile gerichtet sind, ist es, wie vorstehend erörtert wurde, schließlich notwendig,
die Daten in der Reihenfolge, in der sie empfangen werden, zu übertragen,
um sicherzustellen, daß auf
dieselbe Spalte gerichtete spätere
Daten frühere
Daten überschreiben
und nicht umgekehrt.
-
13 zeigt
eine Funktionsdarstellung hoher Ebene des Puffers 204 für abgeschickte Schreibanforderungen,
die beim Verstehen der Arbeitsweise der Zeigersteuerlogik 430 aus 12 helfen
soll. Der Puffer 204 ist eine vier Einträge aufweisende
Warteschlange, es kann gemäß der vorliegenden
Erfindung jedoch auch leicht eine größere Warteschlange (also ein
größerer Puffer)
verwirklicht werden. Die Warteschlange 204 ähnelt in
mancher Hinsicht einem FIFO-Puffer, sie erlaubt jedoch, daß die Einträge in beliebiger
Reihenfolge, und nicht nur von den Enden der Warteschlange, eingefügt und entfernt
werden. Die Warteschlange 204 verwendet auf feste Eintragspositionen
innerhalb des Felds weisende Zeiger in einer Weise, die derjenigen
eines Standard-FIFO-Puffers ähnelt.
Im Gegensatz zu einem Standard-FIFO-Puffer verwendet die Warteschlange 204 jedoch
keinen Füllzählwert,
um zu verfolgen, welcher Eintrag zum Speichern verfügbar ist. Stattdessen
wird ein Eingabebereitschaftsbit für jede Speicherstelle bereitgestellt
(in 13 als BEREIT-Bits bezeichnet).
-
Zeiger
in die Warteschlangenstruktur und die jeweiligen Eingabebereitschaftsbits
für jede
Position definieren den Zustand der Warteschlange. Ein Zeiger zeigt
auf eine bestimmte Position, falls er die jeweilige Positionsnummer
enthält,
die in 13 links von jeder Position
dargestellt ist. Es ist in 13 dargestellt,
daß die
Eintragspositionen 1 und 2 in die Warteschlange eingereihte Einträge (also
abgeschickte Schreibanforderungen, die noch nicht zu den DRAMs 135 übertragen
wurden) aufweisen und die Positionen 0 und 3 leer sind (alle zuvor
an diesen Positionen vorhandenen abgeschickten Schreibanforderungen
wurden also bereits zu den DRAMs übertragen). Demgemäß sind die
Eingabebereitschaftsbits für
die Positionen 1 und 2 gesetzt (haben also einen Wert von 1) und
für die
Positionen 0 und 3 gelöscht
(haben also einen Wert von 0).
-
Ein
Eingabezeiger weist auf den nächsten verfügbaren leeren
Schlitz in der Warteschlange. Der Eintragszeiger ist gültig, falls
das entsprechende Eingabebereitschaftsbit nicht gesetzt (also 0)
ist. Falls das Eingabebereitschaftsbit andererseits gesetzt (also
1) ist, ist der Eingabezeiger ungültig, weil die Position bereits
belegt ist.
-
Ein
Ausgabezeiger weist auf den Warteschlangeneintrag, der gerade verarbeitet
wird oder bald zu verarbeiten ist. Der Ausgabezeiger ist gültig, wenn
das Eingabebereitschaftsbit an der entsprechenden Position gesetzt
(also 1) ist, und er ist ungültig,
wenn das Eingabebereitschaftsbit nicht gesetzt ist.
-
Der
Basiseintragszeiger weist im allgemeinen auf den ältesten
nicht verarbeiteten Eintrag innerhalb der Warteschlangenstruktur.
Der Basiseintragszeiger wird nicht zum direkten Zugriff auf die Warteschlangenstruktur
verwendet, sondern er wird zum Erzeugen des Eingabezeigers und des
Ausgabezeigers verwendet, wie nachfolgend beschrieben wird.
-
Die
hier beschriebenen Zeiger sind Zwei-Bit-Zeiger, die die vier Positionen
der Warteschlange codieren. Falls zusätzliche Warteschlangenpositionen
bereitgestellt sind, sind auch zusätzliche Bits in den Zeigern
erforderlich.
-
Wenn
die Warteschlange 204 leer ist, sind alle Eingabebereitschaftsbits
inaktiv, und der Eingabezeiger, der Ausgabezeiger und der Basiseintragszeiger
weisen alle auf die gleiche Position in der Warteschlange.
-
Wenn
die Warteschlange 204 Einträge in der Reihenfolge verarbeitet,
in der sie empfangen werden, funktioniert die Warteschlange als
ein herkömmlicher
Zeiger-basierter FIFO-Puffer, wobei der Basiseintragszeiger und
der Ausgabezeiger stets auf dieselbe Position zeigen. Mit anderen
Worten ist die nächste
zu den DRAMs 135 zu übertragende
abgeschickte Schreibanforderung der älteste durch den Basiseintragszeiger
angegebene Eintrag. Ein neuer Eintrag kann in die Warteschlange
eingereiht werden, falls der Eingabezeiger auf eine Stelle zeigt,
die ein inaktives Eingabebereitschaftsbit aufweist. Falls sich der
Eingabezeiger so entwickelt hat, daß er auf dieselbe Position
wie der Basiseintragszeiger zeigt, können keine weiteren Einträge angenommen
werden. Bei jeder Speicherung eines neuen Eintrags in der Warteschlange
wird das Eingabebereitschaftsbit der Position, an der der Eintrag
gespeichert wird, gesetzt, und der Eingabezeiger wird zur nächst höheren Speicherpositionsnummer
verschoben. Die Zeiger werden modulo 4 gezählt, so daß beim Erhöhen eines Zeigers von einem
Wert 3 (also dem Binärwert 11)
der nächste
Wert 0 (also der Binärwert
00) ist. Mit anderen Worten wechselt der Zeiger zyklisch von 3 auf
0.
-
Einträge werden
an der durch den Ausgabezeiger angegebenen Position aus der Warteschlange entfernt.
Nach dem Entfernen eines Eintrags wird das Eingabebereitschaftsbit
zurückgesetzt,
und der Basiseintragszeiger und der Ausgabezeiger werden beide erhöht und ändern sich
auf 0, falls der entfernte Eintrag an der Stelle 3 lag.
-
Wenn
ein Eintrag in einer von der Eingabereihenfolge verschiedenen Reihenfolge
aus der Warteschlange entfernt wird, werden in der Warteschlange
Lücken
gebildet. Die Eingabebereitschaftsbits definieren, wo sich die Lücken befinden.
Die Warteschlange wird durch Setzen aller Eingabebereitschaftsbits
in einen inaktiven Zustand initialisiert. Auf die Eingabebereitschaftsbits
wird als ein Feld (Eingabebereitschaftsfeld) zugegriffen, wobei
die Bitnummer innerhalb des Felds der Positionsnummer eines Eintrags
in der Warteschlangenstruktur gleicht. Warteschlangeneinträge können der
Warteschlange hinzugefügt
oder aus dieser gelöscht
werden, indem die jeweiligen Eingabebereitschaftsbits gesetzt oder
gelöscht
werden.
-
Um
zu ermöglichen,
daß die
Einträge
in einer anderen Reihenfolge aus der Warteschlange entfernt werden
als derjenigen, in der sie gespeichert wurden, wird erlaubt, daß sich der
Ausgabezeiger unabhängig
vom Basiseintragszeiger bewegt. Die durch den Ausgabezeiger angegebene
Positionsnummer wird auf der Grundlage einer für die Warteschlange definierten
Prioritätsplanungsfunktion
gewählt.
Die Prioritätsplanungsfunktion
wird für
die bestimmte Anwendung gewählt,
für die
die Warteschlange bestimmt ist. Die Prioritätsplanungsfunktion des Ausgabezeigers für die vorliegende
Erfindung wird hier beschrieben.
-
Die
Zeigersteuerlogik 230 ist eine Zustandsmaschine, die den
nächsten
Zustand der Warteschlange 204 (also den nächsten Eingabezeiger,
den nächsten
Ausgabezeiger und den nächsten
Basiszeiger) bestimmt. Der nächste
Zustand der Warteschlange 204 ist eine Funktion des aktuellen
Basiseintragszeigers und der aktuellen Eingabebereitschaftsbits,
und er ist auch eine Funktion der Prioritätsplanungshardware, die im
Fall der vorliegenden Erfindung die Ausgaben der Trefferkomparatoren umfaßt.
-
Der
Basiseintragszeiger ändert
sich nur, wenn der Ausgabezeiger auf dieselbe Position wie der Basiseintragszeiger
zeigt, und der Eintrag an dieser Position wird durch Über tragen
der Daten zu den DRAMs 135 entfernt. Falls der Eintrag
an der nächsten
Warteschlangenposition bereits entfernt wurde, muß die Logik
diese ”Lücke” überspringen.
Wie insbesondere in 14 dargestellt ist, wird das
Eingabebereitschaftsfeld (BEREIT2, BEREIT2, BEREIT1, BEREIT0 aus
dem Pufferfeld 400) auf die Eingänge einer zyklischen Vier-Bit-Verschiebeeinrichtung 500 angewendet,
die vom Zwei-Bit-Wert (B1, B0) des aktuellen Basiseintragszeigers 502 gesteuert
wird. Die Eingaben in die zyklische Verschiebeeinrichtung werden
kreisförmig
um einen Betrag, der dem Wert des aktuellen Basiseintragszeigers
gleicht, nach rechts verschoben (also nach rechts rotiert). Falls
der aktuelle Basiseintragszeiger beispielsweise einen Wert von 2
hat, verschiebt sich das Eingabebereitschaftsfeld um zwei Stellen
nach rechts, wobei die zwei niedrigstwertigen Bits der Eingaben
in die zyklische Verschiebeeinrichtung 500 zu den zwei
höchstwertigen
Bits der Ausgabe der zyklischen Verschiebeeinrichtung 502 werden.
Ein Prioritätscodierer 504 wählt die
Bitnummer des ersten in der rotierten Ausgabe gefundenen aktiven
Eingabebereitschaftsbits. Diese Bitnummer wird dann in einem Moduln-4-Addierer 506 zum
aktuellen Basiseintragszeiger addiert, um den nächsten Basiseintragszeiger 508 zu
erhalten. Der nächste
Basiszeiger wird zum aktuellen Basiszeiger, wenn die nächsten Daten
in die DRAMs 135 geschrieben werden, wie durch das Schreibsignaltakten
des aktuellen Basiseintragszeigers dargestellt ist.
-
Das
vorhergehend Beschriebene kann anhand des folgenden Beispiels verstanden
werden, bei dem der aktuelle Basiseintragszeiger 1 ist und das Eingabebereitschaftsfeld
1011 ist (d. h., BEREIT3 = 1, BEREIT2 = 0, BEREIT1 = 1 und BEREIT0
= 1). Demgemäß existieren
Einträge
an den Positionen 3, 1 und 0 und existiert eine Lücke an der
Position 2. Durch Entfernen des Eintrags an der Position 1 wird
das Eingabebereitschaftsfeld zu 1001 geändert. Wenn um ein Bit nach
rechts rotiert wird (der Wert des aktuellen Basiseintragszeigers),
liegt die Ausgabe der zyklischen Verschiebeeinrichtung 500 bei
1100. Der erste aktive Eintrag von rechts ist das Bit 2. Aus dem
Addieren von 2 zu 1 (modulo 4) ergibt sich ein Wert von 3 für den neuen
Basiseintragszeiger, wodurch die Lücke übersprungen wird.
-
Wie
in 15 dargestellt ist, können eine oder mehrere Prioritätsplanungsfunktionen
zum Einstufen des Eingabebereitschaftsfelds für die nächste zu verarbeitende Aufgabe
verwendet werden. Der Ausgabezeiger wird durch UND-Verknüpfen des
Eingabebereitschaftsfelds mit einer Prioritätseinstufungsmaske, die gemäß der vorliegenden
Erfindung die Trefferbits (TREFFER3, TREFFER2, TREFFER1, TREFFER0
von den Komparatoren 435–438 in 120) aufweist, in mehreren UND-Gliedern 521–524 gebildet,
wie in 15 dargestellt ist. Die maskierten
Ausgaben der UND-Glieder 521–524 werden als jeweilige
erste Eingaben entsprechenden Zwei-zu-Eins-(2:1)-Multiplexern (MUX) 525–528 zugeführt. Die
jeweiligen zweiten Eingaben in die 2:1-Multiplexer 525–528 werden
verbunden, um die jeweiligen Bereitschaftsbits (BEREIT3, BEREIT2,
BEREIT1, BEREIT0) zu empfangen. Die maskierten Ausgaben der UND-Glieder 521–524 werden
auch als Eingaben einem vier Eingänge aufweisenden ODER-Glieder 529 zugeführt, das
eine aktive EINGABE_BEREIT- und SEITENTREFFER-Ausgabe jedesmal dann
liefert, wenn eine oder mehrere der maskierten Ausgaben der UND-Glieder 521–524 aktiv
sind. Mit anderen Worten liefert das ODER-Glied 529 jedesmal
dann eine aktive EINGABE_BEREIT- und SEITENTREFFER-Ausgabe, wenn
mindestens einer der aktiven abgeschickten Schreibeinträge auf die
Zeile gerichtet ist, auf die momentan zugegriffen wird, was dadurch
angegeben wird, daß ihr
Bereitschaftsbit und ihr entsprechendes Trefferbit beide aktiv sind.
Die EINGABE_BEREIT- und SEITENTREFFER-Ausgabe des ODER-Gliedes 529 wird
jedem der 2:1-Multiplexer 525–528 als die Wähleingabe
zugeführt. Wenn
die Wähleingabe
aktiv ist, werden die maskierten Ausgaben der UND-Glieder 521–524 als
die Ausgaben der Multiplexer gewählt.
Demgemäß haben nur
die Multiplexer eine aktive Ausgabe, die Einträgen entsprechen, welche sowohl
ein aktives Eintragsbit als auch ein aktives Trefferbit aufweisen.
Daher beruht die nachfolgend beschriebene Erzeugung der Ausgabezeigers
nur auf Seitentreffer (also Zeilentreffer) aufweisenden Einträgen, und
es wird der älteste
aktive Eintrag mit einem Seitentreffer ausgewählt. Falls andererseits keiner
der aktiven Einträge ein
aktives Trefferbit hat, ist die Ausgabe des ODER-Gliedes 529 inaktiv,
um zu bewirken, daß die 2:1-Multiplexer 525–528 die
unmaskierten Bereitschaftsbits wählen.
Demgemäß wird der
Ausgabezeiger auf der Grundlage aller aktiven Einträge erzeugt,
und es wird der älteste
aktive Eintrag ausgewählt.
-
Die
Ausgaben der 2:1-Multiplexer 525–528 werden als die
Eingaben einer zyklischen Verschiebeeinrichtung 530 zugeführt. Die
zyklische Verschiebeeinrichtung 530 arbeitet ansprechend
auf den aktuellen Basiseintragszeiger in einer der in 14 dargestellten
zyklischen Verschiebeeinrichtung 500 ähnlichen Weise. Die verschobenen
Ausgaben von der zyklischen Verschiebeeinrichtung 530 werden
einem Prioritätscodierer 532 als
Eingaben zugeführt, der
die Bitnummer des ersten Eingabebereitschaftsbits von der rechten
Seite der rotierten Ausgabe wählt.
Diese Bitnummer wird dann in einem Moduln-4-Addierer 534 zum
Basiseintragszeiger addiert, um den neuen Ausgabezeiger (als ein
Block 526 dargestellt) zu erzeugen.
-
Das
vorhergehend Beschriebene kann durch das folgende Beispiel veranschaulicht
werden, bei dem der Basiseintragszeiger 3 ist, das Eingabebereitschaftsfeld
1101 ist und die Prioritätseinstufungsmaske
(also die Trefferbits) 0111 ist, um anzugeben, daß nur die
Zeilenadreßteile
an den Positionen 2, 1 und 0 mit dem zwischengespeicherten Zeilenadreßteil übereinstimmen
und somit eine höhere
Priorität als
der Eintrag an der Position 3 haben, der mit dem aktuellen Zeilenadreßteil nicht übereinstimmt.
Aus der UND-Verknüpfung
der Ein gabebereitschaftsbits mit den Trefferbits (also 1101 UND
0111) ergibt sich eine Eingabe 0101 in die zyklische Verschiebeeinrichtung.
Das Rotieren der Eingabe der zyklischen Verschiebeeinrichtung um
3 führt
zu einer Ausgabe der zyklischen Verschiebeeinrichtung von 1010.
Die Bitnummer des ersten aktiven Bits von rechts ist 1. Das Addieren
dieses Bits zum Basiseintragszeiger (modulo 4) ergibt einen Wert
von 0 (1 + 3 = 4 (modulo 4) = 0). Somit ist bei diesem Beispiel
der neue Ausgabezeiger 0, und er weist auf die Stelle der ӊltesten1
abgeschickten Schreibanforderung, die den gleichen Zeilenadreßteil wie
die aktuelle zwischengespeicherte Zeilenadresse aufweist, wodurch eine ältere abgeschickte
Schreibanforderung übersprungen
wird, die nicht den gleichen Zeilenadreßteil wie die aktuelle zwischengespeicherte
Zeilenadresse aufweist.
-
Es
sei bemerkt, daß der
vorhergehend beschriebene Prozeß in
der gleichen Weise abläuft, falls
keine Seitentreffer auftreten, wobei alle aktiven Einträge jedoch über die
Multiplexer 525–528 der
zyklischen Verschiebeeinrichtung als Eingaben zugeführt werden,
und der Ausgabezeiger weist demgemäß unabhängig von ihrer Zeilenadresse
auf die älteste
abgeschickte Schreibanforderung.
-
Wie
in 16 dargestellt ist, wird der nächste Eingabezeiger erzeugt,
indem das Eingabebereitschaftsfeld um den Wert des Basiseintragszeigers
in einer zyklischen Verschiebeeinrichtung 550 nach rechts
rotiert wird. Die nach rechts verschobenen Ausgaben werden als Eingaben
einem Prioritätscodierer 552 zugeführt, der
in diesem bestimmten Fall das äußerste linke
(d. h. die höchste
Priorität
aufweisende) aktive Bit auswählt
und einen die Position des ausgewählten Bits darstellenden Ausgabewert
erzeugt. Die Ausgabe des Prioritätscodierers 552 wird in
einem Moduln-4-Addierer 554 zu einem Wert 1 addiert, und
die sich ergebende Summe wird in einem Moduln-4-Addierer 556 zum
Wert des aktuellen Basiseintragszeigers addiert. Die Ausgabe des
Moduln-4-Addierers 556 ist der neue Eingabezeiger, wie durch
einen Block 558 dargestellt ist.
-
Das
vorhergehend Beschriebene kann durch das folgende Beispiel veranschaulicht
werden, bei dem der Basiseintragszeiger 1 ist und das Eingabebereitschaftsfeld
1010 ist. Durch Rotieren des Eingabebereitschaftsfelds um Eins nach
rechts wird eine Ausgabe von 0101 von der zyklischen Verschiebeeinrichtung 550 erzeugt.
Der Prioritätscodierer 552 erzeugt
eine Ausgabe von 2, um das äußerste linke aktive
Bit an der Position 2 darzustellen. Das Addieren des Werts 2 zu
einem Wert 1 ergibt eine Summe von 3, die beim Addieren zum Wert
des Basiseintragszeigers (also 1 in diesem Beispiel) eine Summe von
4 (modulo 4) ergibt, was einen Endwert von 0 ergibt. Demgemäß wird der
nächste
Eingabeeintrag an die Position 0 gegeben, wobei die Lücke an der
Position 2 übersprungen
wird.
-
Die
in Zusammenhang mit den 14, 15 und 16 beschriebene
Warteschlangensteuerlogik wird vorzugsweise in einer ASIC implementiert,
um die Struktur der Zeigersteuerlogik 420 aus 12 zu
bilden.
-
Wenngleich
sie vorstehend in Zusammenhang mit der vorliegenden Erfindung für einen
Puffer für
abgeschickte Schreibanforderungen beschrieben wurde, sei bemerkt,
daß die
hier beschriebene Warteschlangensteuerlogik auch in anderen Anwendungen
verwendet werden kann.
-
Wenngleich
sie vorstehend in Zusammenhang mit bestimmten Ausführungsformen
der vorliegenden Erfindung beschrieben wurden, sollten die Beschreibungen
der Ausführungsformen
der Erfindung lediglich als erläuternd
und nicht als einschränkend
angesehen werden. Dem Fachmann werden verschiedene Modifikationen
und Anwendungen einfallen, die nicht vom in den anliegenden Ansprüchen definierten
Schutzumfang der Erfindung abweichen.