DE3801361A1 - Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor - Google Patents

Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor

Info

Publication number
DE3801361A1
DE3801361A1 DE3801361A DE3801361A DE3801361A1 DE 3801361 A1 DE3801361 A1 DE 3801361A1 DE 3801361 A DE3801361 A DE 3801361A DE 3801361 A DE3801361 A DE 3801361A DE 3801361 A1 DE3801361 A1 DE 3801361A1
Authority
DE
Germany
Prior art keywords
read
instruction
signal
cpu
bus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE3801361A
Other languages
English (en)
Inventor
Simon Jonathan Levy
Donald Bruce Alpert
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National Semiconductor Corp
Original Assignee
National Semiconductor Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National Semiconductor Corp filed Critical National Semiconductor Corp
Publication of DE3801361A1 publication Critical patent/DE3801361A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Description

Die Erfindung betrifft Datenverarbeitungssysteme und insbesondere das Detektieren und die Spezialbehandlung von als Speicher abgebildeten Eingabe/Ausgabereferenzen ("memory- mapped I/O-Referenzen") in einem Pipelinemikroprozessor.
Bei der herkömmlichen Architektur digitaler Datenverarbeitungssysteme erfolgt der Zugriff zu peripheren Geräten, beispielsweise einem Modem, Drucker oder einer Anzeigeeinrichtung, mittels einer Technik, die als "memory-mapped Input/ Output (I/O)" bezeichnet wird. Gemäß dieser Technik werden von der Zentraleinheit (CPU) Steuerregister innerhalb des Peripheriegerätes durch Ausführung der gleichen Befehle wie für das Lesen und Beschreiben gewöhnlicher Speicherplätze gelesen und geschrieben. Allerdings sind dem Lesen und Beschreiben gewisser Peripheriegeräte spezielle Charakteristiken assoziiert, die sich von denen der Lese- und Schreibvorgänge im Speicher unterscheiden.
So kann das Lesen eines Steuerregisters in einem peripheren Gerät den bei der nächsten Referenz des gleichen Registers oder eines anderen Registers im gleichen Gerät gelesenen Wert ändern. Auf diese Weise arbeiten serielle Kommunikationskontroller und First-In-First-Out-Speicher.
In ähnlicher Weise kann durch das Einschreiben in ein Steuerregister eines peripheren Gerätes der aus einem anderen Register abgelesene Wert geändert werden. So muß zum Beispiel bei der Unterbrechungssteuereinheit NS32202 der National Semiconductor Corporation zunächst der Zählerwert durch Schreiben in ein anderes Steuerregister gehalten oder eingefroren werden, ehe der Zählerwert des NS32202 gelesen werden darf.
Diese besonderen Charakteristiken peripherer Geräte verursachen keine ernsthaften Probleme bei Datenverarbeitungssystemen, die, wie die gegenwärtig verfügbaren Mikroprozessoren, so ausgelegt sind, daß sie Anweisungen oder Befehle sequentiell ausführen.
Komplexere Hochleistungssysteme führen jedoch gleichzeitig eine Reihe von Befehlen in einer "Pipeline" aus. Bei Systemen dieser Art müssen spezielle Behandlungsprozeduren bei I/O- Referenzen beachtet werden, damit sichergestellt ist, daß die System-Programme korrekt ausgeführt werden. Beispielsweise kann ein Pipelinecomputer Lesen und Schreiben an verschiedenen Speicherplätzen in beliebiger Reihenfolge durchführen; aber Referenzen auf periphere Geräte müssen in der durch das auszuführende Programm implizierten speziellen Reihenfolge vorgenommen werden.
Für Datenverarbeitungssysteme sind Architekturen, beispielsweise die der "Spectrum" Rechnerfamilie von Hewlett-Packard oder des VAX-11/750-Rechners der Digital Equipment Corporation, entwickelt werden, welche Pipelinekonstruktionen schaffen, die memory-mapped I/O-Referenzen detektieren und eine Spezialbehandlung anwenden. Bei diesen Systemen ist ein Teil des Speicheradressenraums des Rechners speziell für I/O reserviert, wodurch die Anordnung peripherer Geräte auf einen festen Adressenbereich beschränkt ist.
Während die Frage der I/O-Referenzen bei der Architektur von Minicomputern angesprochen wurde, ist bei gegenwärtig verfügbaren Mikroprozessorarchitekturen kein dezidierter Speicheradressenraum für I/O vorgesehen oder auf irgendeine andere Weise für das Detektieren von memory-mapped I/O-Referenzen gesorgt. Infolgedessen ist es nötig, eine Architektur zur Unterstützung von memory-mapped I/O in Hochleistungs-Pipeline-Mikroprozessorkonstruktionen zu schaffen.
Dabei ist es jedoch nicht annehmbar, daß sich die Mikroprozessorarchitektur allein auf das oben beschriebene Verfahren des Reservierens eines Teils des Speicheradressenraums für I/O verläßt, denn dann wäre der Mikroprozessor nicht mit bereits entwickelten Systemen kompatibel, bei denen Peripheriegeräte an beliebigen Stellen angeschlossen sind.
Aufgabe der Erfindung ist es, eine Mikroprozessorarchtitektur zu schaffen, die ein Verfahren zum Detektieren und Behandeln von memory-mapped I/O-Referenzen aufweist und dabei die Anordnung peripherer Geräte an beliebigen Adressen erlaubt.
Aufgabe der Erfindung ist es auch, ein Verfahren zum Detektieren und Behandeln von memory-mapped I/O-Referenzen zu schaffen, welches an einem beliebigen Rechner oder Mikroprozessor anwendbar ist, der eine Pipelinearchitektur benutzt.
Die der Erfindung zugrundeliegende Aufgabe wird durch die Schaffung eines Mikroprozessors gelöst, der ein neuartiges Verfahren zur Behandlung von memory-mapped I/O unterstützt.
Das Verfahren gemäß der Erfindung benutzt zwei Signale auf dem externen Interface des Mikroprozessors. Wenn der Mikroprozessor einen Lese-Buszyklus generiert, aktiviert er außerdem ein I/O-Inhibit-Ausgangssignal, wenn die eine oder andere der beiden folgenden Anforderungen nicht erfüllt ist: Zunächst kann das Lesen eines peripheren Ports den bei der nächsten Referenz auf den gleichen Port gelesenen Wert ändern, eine Eigenschaft, die als "destruktives Lesen" bezeichnet wird. Da es sich bei dem hier beschriebenen Mikroprozesor um einen Pipelineprozessor handelt, kann dieser die Source-(Quelle-) Operanden für einen Befehl bereits lesen, während der vorhergehende Befehl noch ausgeführt wird. Da der vorhergehende Befehl einen Trap verursachen kann, eine Unterbrechung erkannt werden kann oder der Kontrollfluß anderweitig geändert werden kann, ist es in erster Linie nötig, daß das destruktive Lesen von Source-Operanden vor dem Durchführen eines Befehls vermieden wird. Zweitens kann durch das Lesen eines peripheren Ports der von einem anderen peripheren Port gelesene Wert geändert werden, eine Eigenschaft, die als "Side- effect des Schreibens" bezeichnet wird. Wegen der Pipelinearchitektur kann der Mikroprozessor Source-Operanden für einen Befehl lesen, ehe er die Ergebnisse vorhergehender Befehle schreibt, sofen nicht die Adressen eine gegenseitige Abhängigkeit zwischen Lese- und Schreibreferenzen anzeigen. Ein zweites Erfordernis besteht deshalb darin, daß Lese- und Schreibreferenzen an periphere Geräte, die Schreiben- Side-effects haben, in der Reihenfolge auftreten müssen, in der Instruktionen ausgeführt werden.
Das I/O-Inhibit-Ausgangssignal zeigt an, daß der laufende Buszyklus ignoriert werden soll, wenn ein Peripheriegerät adressiert wird.
Außerdem wird ein I/O-Decode-Eingangssignal dann aktiviert, wenn ein peripheres Gerät referenziert wird, welches Ports mit destruktivem Lesen oder Schreiben-Side-effects implementiert. Das I/O-Decode-Eingangssignal zeigt dem Mikroprozessor an, daß vom laufenden Buszyklus ein peripheres Gerät adressiert wird.
Wenn der Mikroprozessor feststellt, daß sowohl das I/O-Decode- Eingangssignal als auch das I/O-Inhibit-Ausgangssignal aktiv ist, verwirft er die während des Buszyklus gelesenen Daten und serialisiert die Ausführung von Instruktionen. Dann generiert der Mikroprozessor erneut den Lese-Buszyklus, wobei diesmal die beiden Erfordernisse für I/O und folglich zum Steuern des I/O-Inhibit-Ausgangssignals auf inaktiv erfüllt sind.
Im folgenden ist die Erfindung mit weiteren vorteilhaften Einzelheiten anhand eines schematisch dargestellten Ausführungsbeispiels näher erläutert. In den Zeichnungen zeigt
Fig. 1 ein Blockschema, das allgemein eine Mikroprozessorarchitektur illustriert, in der ein Verfahren zum Detektieren und zur Spezialbehandlung von memory- mapped I/O gemäß der Erfindung implementiert ist,
Fig. 2 eine schematische Illustration der Interfacesignale des hier beschriebenen Mikroprozessors,
Fig. 3 ein Blockschaltbild als Illustration der hauptsächlichen Funktionseinheiten und der Busverbindungen des hier beschriebenen Mikroprozessors,
Fig. 4 ein Blockschaltbild als Illustration der Struktur eines Instruktionscaches des hier bechriebenen Mikroprozessors,
Fig. 5 ein Blockschaltbild als Illustration der Struktur eines Datencaches des hier beschriebenen Mikroprozessors,
Fig. 6 ein Zeitdiagramm als Illustration der Zeitfolge für den Zugriff zum Datencache des hier beschriebenen Mikroprozessors,
Fig. 7 ein Zeitdiagramm als Illustration der Beziehungen zwischen CLK-Eingabe- und BUSCLK-Ausgabesignalen des hier beschriebenen Mikroprozessors,
Fig. 8 ein Zeitdiagramm als Illustration des Lese-Grundzyklus des hier beschriebenen Mikroprozessors,
Fig. 9 ein Zeitdiagramm als Illustration des Schreibgrundzyklus des hier beschriebenen Mikroprozessors,
Fig. 10 ein Zeitdiagramm als Illustration eines Lesezyklus, der mit zwei Wartezyklen verlängert ist,
Fig. 11 ein Zeitdiagramm zur Erläuterung eines Burst-Lesezyklus mit drei Transfers, der mit dem hier beschriebenen Mikroprozessor terminiert wird,
Fig. 12 ein Zeitdiagramm als Illustration eines Burst-Lesezyklus, der mit dem hier beschriebenen Mikroprozessor terminiert wird und zwei Transfers hat, von denen der zweite Transfer um einen Wartezustand verlängert ist,
Fig. 13 ein Schema als Illustration der allgemeinen Struktur der vierstufigen Instruktions-Pipeline des hier beschriebenen Mikroprozessors,
Fig. 14 ein Zeitdiagramm als Illustration einer Pipelinezeitsteuerung für einen internen Datencache-Treffer,
Fig. 15 ein Zeitdiagramm als Illustration einer Pipelinezeitsteuerung für einen internen Datencache-Fehltreffer,
Fig. 16 ein Zeitdiagramm als Illustration der Wirkung eines Adressen-Register-Interlock bei der Instruktionspipelinezeitsteuerung,
Fig. 17 ein Zeitdiagramm als Illustration der Auswirkung der korrekten Vorhersage eines Verzweigungsbefehls, der beim Betrieb des hier beschriebenen Mikroprozessors vorgenommen werden soll,
Fig. 18 ein Zeitdiagramm als Illustration der Auswirkung der unrichtigen Vorhersage der Auflösung eines Verzweigungsbefehls beim Betrieb des hier beschriebenen Mikroprozessors.
Fig. 1 zeigt die allgemeine Architektur eines Mikroprozessors (CPU) 10, der ein Verfahren zum Detektieren und zur Behandlung von memory-mapped Input/Output (I/O)-Referenzen in einer Pipelinearchitektur implementiert, wobei die Flexibilität für den Anschluß von Peripheriegeräten an beliebigen Stellen erhalten ist.
Die Zentraleinheit (CPU) 10 initiiert Buszyklen zur Kommunikation mit einem externen Speicher und sonstigen Geräten im Computercluster, um Instruktionen oder Befehle abzurufen, Daten zu lesen und zu schreiben, Gleitpunktoperationen durchzuführen und auf Ausnahmeanforderungen anzusprechen.
Zu der CPU 10 gehört eine vierstufige Instruktions-Pipeline 12, die bei 20 MHz bis zu 10 MIPS (Millionen Instruktionen pro Sekunde) ausführen kann. Auf dem gleichen Chip wie die Pipeline 12 sind weiterhin drei Speicherpuffer integriert, die der massiven Nachfrage der Pipeline 12 nach Befehlen und Daten gewachsen sind. Zu den Speicherpuffern gehört ein 512-Byte Instruktionscache 14, ein 1024-Byte Datencache 16 sowie ein Übersetzungspuffer mit 64 Eingängen. der innerhalb einer Memory- Management-Einheit (MMU) 18 enthalten ist. Die Hauptfunktionen der MMU 18 bestehen in der Arbitrage von Anforderungen an Speicherreferenzen und im Übersetzen von virtuellen Adressen in physikalische Adressen. Buszyklen für externe Referenzen werden von einer integrierten Bus-Interface-Einheit (BIU) 20 gesteuert.
Durch die Anordnung der Cache- und Speicher-Management-Funktionen auf dem gleichen Chip wie die Instruktions-Pipeline 12 wird ein ausgezeichnetes Kosten/Leistungsvehältnis durch verbesserte Speicherzugriffszeit und -bandbreite bei allen Anwendungsfällen erzielt.
Außerdem ist die CPU 10 mit verfügbaren peripheren Geräten, beispielsweise der Interrupt-Control-Einheit (ICU) 24 (zum Beispiel NS32202) kompatibel. Da das Interface zwischen der ICU 24 und der CPU 10 vollkommen asynchron ist, kann die ICU 24 mit niedrigeren Frequenzen als die CPU 10 betrieben werden.
Die CPU 10 enthält ihren eigenen Taktgenerator. Deshalb ist keine Zeitsteuerungseinheit nötig.
Ferner stützt die CPU 10 sowohl einen externen Cachespeicher 25 als auch einen "Busbeobachter" 26, der dazu beiträgt, die Datenkohärenz im Instruktionscache 14 und Datencache 16 aufrechtzuerhalten.
Die CPU 10 hat, wie Fig. 2 zeigt, 114 Interfacesignale für die Buszeitsteuerung und Kontrolle, Cachekontrolle, Ausnahmeanforderungen und sonstige Funktionen. In der nachfolgenden Liste sind die Interfacesignalfunktionen der CPU 10 zusammengefaßt.
Eingabesignale
Burst Acknowledge (Burstbestätigung) (Aktiv Niedrig).
Wenn als Antwort auf eine Burstanforderung aktiv, zeigt dies an, daß der Speicher Burstzyklen unterstützt.
Bus Error (Busfehler) (Aktiv Niedrig).
Zeigt der CPU 10 an, daß ein Fehler während des laufenden Buszyklus detektiert wurde.
Bus Retry (Buswiederholung) (Aktiv Niedrig).
Zeit an, daß CPU 10 den laufenden Buszyklus erneut durchführen muß.
BW0-BW1Bus Width (Busbreite) (zwei codierte Leitungen).
Diese Leitungen definieren die Busbreite (8, 16 oder 32 Bits) für jeden Datentransfer, wie aus Tabelle 1 hervorgeht. Tabelle 1
CIA0-CIA6Cache Invalidation Address (Cacheinvalidationsadresse) (7 codierte Leitungen).
Die Cacheinvalidationsadresse wird auf dem CIA-Bus präsentiert. Tabelle 2 zeigt die CIA-Leitungen, die für jeden der internen Caches der CPU 10 relevant sind. Tabelle 2 CIA (0 : 4)  Adresse im DC und IC (Setzen)
CIA (5 : 6)  reserviert
CIICache Inhibit In (Cache Sperren Ein) (Aktiv Hoch).
Zeigt der CPU 10 an, daß die Speicherreferenz des laufenden Buszyklus nicht cachefähig ist. Cache Invalidation Enable (Cacheinvalidationsaktivierung).
Eingabe, die festlegt, ob die externen Cacheinvalidationsoptionen oder die Testmodusoperation gewählt wurde. CLKClock (Takt).
Der zur Ableitung der gesamten Zeitsteuerung der CPU 10 benutzte Eingabetakt. Debug Trap Request (Fehlerbeseitigung-Trap-Anforderung ) (fallende Flanke: aktivieren).
Übergang von hoch zu niedrig bei diesem Signal verursacht Trap (DBG). Hold Request (Halte-Anforderung) (Aktiv Niedrig).
Fordert die CPU 10 auf, den Bus für DMA- oder Multiprozessorzwecke freizugeben. Interrupt (Unterbrechen) (Aktiv Niedrig).
Maskierbare Unterbrechungsanforderung. Invalidate Set (Satz Invalidieren) (Aktiv Niedrig).
Wenn niedrig, wird nur ein Satz in den Caches auf dem Chip invalidiert; wenn hoch, wird das gesamte Cache invalidiert. Invalidate Data Cache (Datencache Invalidieren) (Aktiv Niedrig).
Wenn niedrig, erfolgt ein Invalidieren im Datencache. Invalidate Instruction Cache (Instruktionscache Invalidieren) (Aktiv Niedrig).
Wenn niedrig, erfolgt ein Invalidieren im Instruktionscache. I/O-Decode (I/O-Decodieren) (Aktiv Niedrig).
Zeigt der CPU 10 an, daß ein Peripheriegerät vom laufenden Buszyklus adressiert wird. Nonmaskable Interrupt (Nichtmaskierbares Unterbrechen) (aktiviert durch fallende Kante).
Ein Übergang von hoch zu niedrig bei diesem Signal fordert ein nichtmaskierbares Unterbrechen an. RDYReady (Bereit) (Aktiv Hoch).
Wenn dies Signal inaktiv ist, verlängert die CPU 10 den laufenden Buszyklus, um einen langsamen Speicher oder ein langsames Peripheriegerät zu untestützen. Reset (Rücksetzen) (Aktiv Niedrig).
Erzeugt Rücksetzausnahmen zum Initialisieren der CPU 10. Slave Done (Slave erledigt) (Aktiv Niedrig).
Zeigt der CPU 10 an, daß ein Slave-Prozessor die Ausführung eines Befehls beendet hat. Slave Trap (Aktiv Niedrig).
Zeit der CPU 10 an, daß ein Slave-Prozessor beim Ausführen eines Befehls eine Trapbedingung detektiert hat.
Ausgabesignale
A0-A31Adress Bus (Adressenbus) (3 Zustände, 32 Leitungen).
Überträgt während eines Buszyklus die 32-Bitadresse. A0 überträgt das am wenigsten signifikante Bit. Adress Strobe (Aktiv Niedrig, 3 Zustände).
Zeigt an, daß ein Buszyklus begonnen hat und auf dem Adressenbus eine gültige Adresse vorhanden ist. -Byte Enables (Byte Aktivierungen) (Aktiv Niedrig, 3 Zustände, 4 Leitungen).
Signale, die einen Transfer auf jedem Byte des Datenbus ermöglichen, wie in Tabelle 3 gezeigt. Tabelle 3
Begin Memory Transaction (Speichertransaktion Beginnen) (Aktiv Niedrig, 3 Zustände).Zeigt an, daß der laufende Buszyklus gültig ist, das heißt, daß der Buszyklus nicht gelöscht wurde. Früher im Buszyklus verfügbar als .Break Point (bedingter Stop, Haltepunkt) (Aktiv Niedrig).
Zeigt an, daß die CPU 10 eine Fehlerbeseitigungsbedingung festgestellt hat.Burst Request (Burst Anfordern) (Aktiv Niedrig, 3 Zustände).
Die CPU 10 auffordert, Burstzyklen durchzuführen. BUSCLKBus Clock (Bustakt). Ausgangstakt für Buszeitsteuerung. CASECCache Section (Cache-Bereich) (3 Zustände).
Für cachefähige Datenlese-Buszyklen; zeigt den Bereich des Datencache 18 auf dem Chip an, in den die Daten gebracht werden. CIOCache Inhibit (Cache Inhibieren) (Aktiv Hoch).
Anzeige durch die CPU 10, daß die Speicherreferenz des laufenden Buszyklus nicht cachefähig ist; gesteuert vom CI-Bit im Tabelleneintrag der zweiten Aufrufebene (level-2 Page Table Entry). Confirm Bus Cycle (Buszyklus Bestätigen) (Aktiv Niedrig, 3 Zustände).
Zeigt an, daß ein mit ADS initiierter Buszyklus gültig ist; das heißt, der Buszyklus ist nicht gelöscht worden. Data Direction In (Datenrichtung Ein) (Aktiv Niedrig, 3 Zustände).
Zeigt die Richtung von Übertragungen auf dem Datenbus an; wenn während eines Buszyklus niedrig, zeigt dies an, daß die CPU 10 Daten liest; wenn während eines Buszyklus hoch, zeigt dies an, daß die CPU 10 Daten schreibt. Hold Acknowledge (Halten Bestätigen) (Aktiv Niedrig).Aktiviert durch die CPU als Antwort auf den 1--Eingang um anzuzeigen, daß die CPU 10 den Bus freigegeben hat. Interlocked Bus Cycle (Verriegelter Buszyklus) (Aktiv Niedrig).
Zeigt an, daß eine Folge von Buszyklen mit Schutzverriegelung in Bearbeitung ist. I/O-Inhibit (I/O-Inhibieren) (Aktiv Niedrig).
Zeigt an, daß der laufende Buszyklus ignoriert werden soll, falls ein Peripheriegerät adressiert ist. Internal Sequential Fetch (Internes sequentielles Abrufen).
Zeigt gemeinsam mit an, daß die beginnende Befehlsausführung sequentiell (ISF=Niedrig) oder nichtsequentiell (=Hoch) ist. Program Flow Status (Programmfluß-Status) (Aktiv Niedrig).
Ein Impuls in diesem Signal zeigt den Beginn der Ausführung für jeden Befehl an. Slave Processor Control (Slave Prozessorsteuerung) (Aktiv Niedrig).
Datenstrobe für Buszyklen des Slave-Prozessors. ST0-ST4Status (Zustand) (5 codierte Leitungen).
Statuscode des Buszyklus; ST0 ist das am wenigsten signifikante Bit. Das Codieren ist in Tabelle 4 gezeigt.
Tabelle 4
U/User/Supervisor (Benutzer/Überwacher) (3 Zustände).
Gibt den Benutzermodus (U/=Hoch) oder Überwachermodus (U/=Niedrig) an.
Bidirektionale Signale
D0-D31Data Bus (Datenbus) (3 Zustände, 32 Leitungen).
8, 16 beziehungsweise 32 Daten Bits werden während eines Buszyklus übertragen; D0 überträgt das am wenigsten signifikante Bit.
Wie aus Fig. 3 hervorgeht, ist die Zentraleinheit (CPU) 10 intern in acht Haupt-Funktionseinheiten organisiert, die parallel arbeiten, um folgende Operationen zur Ausführung von Befehlen durchzuführen: Vorabrufen, Decodieren, effektive Adressen berechnen und Sourceoperanden lesen, Ergebnisse errechnen und in Register einspeichern, Ergebnisse in Speicher einspeichern.
Ein Lader 28 ruft Befehle vorab und decodiert sie für die Benutzung in einer Adresseneinheit 30 und einer Exekutionseinheit 32. Der Lader 28 überträgt die vom Instruktionscache 14 auf dem IBUS-Bus empfangenen Befehle in eine 8-Byte Befehlswarteschlange. Der Lader 28 kann ein Befehlsfeld in jedem Zyklus extrahieren, wobei ein "Feld" entweder einen Opcode (1 bis 3 Bytes einschließlich Adressiermodusspezifizierer), einen Versatz- oder einen Direktwert bedeutet. Der Opcode wird vom Lader 28 decodiert, um die ursprüngliche Mikrocodeadresse zu erzeugen, die auf dem LADR-Bus an die Exekutionseinheit 32 weitergeleitet wird. Die decodierten allgemeinen Adressiermodi werden auf dem ADMS-Bus an die Adresseneinheit 30 gegeben. Versatzwerte gelangen über den DISP-Bus zur Adresseneinheit 30. Direktwerte stehen auf dem GCBUS-Bus zur Verfügung.
In der Adresseneinheit 30 werden effektive Adressen unter Verwendung eines dedizierten 32-Bitaddierers berechnet und Sourceoperanden für die Exekutionseinheit 32 gelesen. Die Adresseneinheit 30 steuert einen Port von einer Registerdatei 34 zum GCBUS, über den sie Basis- und Indexwerte an den Adressenaddierer und Datenwerte an die Exekutionseinheit 32 überträgt. Effektive Adressen für Operandenreferenzen werden an die MMU 18 und das Datencache 16 über den GVA-Bus übertragen, nämlich dem Bus für virtuelle Adressen.
Zur Exekutionseinheit 32 gehört der Datenpfad und die mikrocodierte Steuerung zum Ausführen von Befehlen und Verarbeiten von Ausnahmen. Der Datenpfad weist eine 32-Bit Arithmetik-Logik-Einheit (ALU), einen 32-Bit Barrelshifter, einen 8-Bit Prioritätscodierer sowie eine Anzahl von Zählern auf. In die Exekutionseinheit 32 eingeschlossene Hardware für Sonderzwecke unterstützt Multiplikation, wobei pro Zyklus ein Bit zurückgegeben wird unter Optimierung für Multiplikatoren mit kleinen Absolutwerten.
Die Exekutionseinheit 32 steuert einen Port zur Registerdatei 34 vom GNA-Bus, auf dem sie Ergebnisse speichert. Der GNA-Bus wird von der Exekutionseinheit 32 auch zum Lesen von Werten dedizierter Register, beispielsweise der Konfigurations- und Unterbrechungsbasisregister benutzt, die in der Registerdatei 34 enthalten sind. Ein Datenpuffer mit zwei Eingängen ermöglicht es der Exekutionseinheit 32, die Ausführung eines Befehls mit der Speicherung von Ergebnissen im Speicher für frühere Befehle überlappt durchzuführen. Der GVA-Bus wird von der Exekutionseinheit 32 zum Durchführen von Speicherreferenzen für komplexe Instruktionen benutzt (zum Beispiel Stringoperationen) sowie für Ausnahmebearbeitung.
Die Registerdatei 34 hat Dualports und erlaubt damit den Lesezugriff durch die Adresseneinheit 30 über die GCBUS sowie den Lese/Schreib-Zugriff durch die Exekutionseinheit 32 über den GNA-Bus. Die Registerdatei 34 enthält die Register für Allgemeinzwecke, dedizierte Register sowie Programmzählerwerte für die Adresseneinheit 30 und die Exekutionseinheit 32.
Die MMU 18 ist mit den Speichermanagementfunktionen der CPU 10 kompatibel. Anforderungen an die MMU 18 für Speicherreferenzen kommen vom Instruktionscache 14, von der Adresseneinheit 30 sowie von der Exekutionseinheit 32. Die MMU 18 entscheidet über die Anforderungen (arbitrage) und gewährt Zugriff zur Übertragung einer virtuellen Adresse auf dem GVA-Bus. Die MMU 18 übersetzt die auf dem GVA-Bus empfangene virtuelle Adresse in die entsprechende physikalische Adresse und benutzt dabei ihren internen Übersetzungspuffer. Die physikalische Adresse wird von der MMU 18 über den MPA-Bus entweder an das Instruktionscache 14 oder das Datencache 16 übertragen, je nachdem, ob es sich um eine Befehls- oder eine Datenreferenz handelt. Für einen externen Buszyklus wird die physikalische Adresse auch an die BIU 20 übertragen.
Die BIU 20 steuert die Buszyklen für Referenzen von dem Instruktionscache 14, der Adresseneinheit 30 und der Exekutionseinheit 32. Für externe Referenzen enthält die BIU 20 einen 3-Eingang Puffer. So kann die BIU 20 beispielsweise einen Buszyklus für eine Befehlsabrufung durchführen, während sie die Informationen für einen weiteren Buszyklus zum Schreiben in den Speicher hält und gleichzeitig die nächsten gelesenen Daten aufnimmt.
Das in Fig. 4 gezeigte Instruktionscache 14 speichert 512 Bytes in einer Direkt-Abbild-Organisation. Die Bits 4 bis einschließlich 8 einer referenzierten Befehlsadresse wählen einen von 32 Sätzen aus. Jeder Satz enthält 16 Bytes, also vier Doppelwörter, Code und ein Log, das Adressenkennzeichen hält, welche die 23 signifikantesten Bits der physikalischen Adresse für die in diesem Satz gespeicherten Orte aufweist. Jedem Doppelwort ist ein Validierungs-Bit zugeordnet.
Das Instruktionscache 14 enthält auch einen 16-Byte Instruktionspuffer, von dem es 32 Bits Code pro Zyklus auf dem IBUS zum Lader 28 übertragen kann. Wenn der gewünschte Befehl im Instruktionscache 14 aufgefunden wird ("Treffer"), wird der Instruktionspuffer vom ausgewählten Satz des Instruktionscaches 14 geladen. Für den Fall eines Fehltreffers überträgt das Instruktionscache 14 die Adresse des fehlenden Doppelwortes auf dem GVA-Bus zur MMU 18, die die Adresse für die BIU 20 übersetzt. Die BIU 20 initiiert einen Burstlesezyklus, der noch näher beschrieben wird, um den Instruktionspuffer über den GBDI-Bus vom externen Speicher zu laden. Dann wird der Instruktionspuffer auf einen der Sätze des Instruktionscaches 14 geschrieben.
Das Instruktionscache 14 hält Zähler sowohl für die virtuellen als auch für die physikalischen Adressen, aus denen das nächste Doppelwort des Instruktionsstromes vorabgerufen wird. Wenn das Instruktionscache 14 mit dem Vorabruf von einem neuen Befehlsstrom beginnen muß, wird die virtuelle Adresse für den neuen Strom vom Lader 28 auf den JBUS übertragen. Beim Übergang auf eine neue Aufruf-Seite (page) überträgt das Instruktionscache 14 die virtuelle Adresse auf dem GVA-Bus und die MMU 18 und erhält die physikalische Adresse auf dem MPA-Bus zurück.
Das Instruktionscache 14 unterstützt auch eine Betriebsweise zum Verrasten seines Inhalts auf feste Orte. Dies Merkmal wird ermöglicht durch das Setzen eines LIC (Sperrbefehlscache)- Bits im Konfigurationsregister. Dies ist in Echtzeitsystemen anwendbar, um zu den kritischsten Routinen einen raschen Zugriff, auf dem Chip, zu ermöglichen. Das Instruktionscache 14 kann dadurch aktiviert werden, daß ein IC (Instruktionscacheaktivierungs)-Bit im Konfigurationsregister gesetzt wird.
Im Datencache 16 sind 1024 Bytes Daten in einer assoziativen Zweiwege-Satz-Organisation gespeichert, wie in Fig. 5 gezeigt. Jeder Satz hat zwei 16 Bytes enthaltende Einträge und zwei Identifizierungskennzeichen, welche die 23 signifikantesten Bits der physikalischen Adresse für die in den beiden Einträgen gespeicherten Orte halten. Jedem Doppelwort ist ein Validierungs-Bit zugeordnet.
Die Zeitsteuerung zum Zugriff auf das Datencache 16 ist in Fig. 6 gezeigt. Zunächst werden die virtuellen Adressen-Bits 4 bis einschließlich 8 auf dem GVA-Bus zur Auswahl des entsprechenden Satzes innerhalb des Datencaches 16 zum Lesen der beiden Eingänge benutzt. Gleichzeitig übersetzt die MMU 18 die virtuelle Adresse und überträgt die physikalische Adresse an das Datencache 16 und die BIU 20 auf den MPA-Bus. Danach vergleicht das Datencache 16 die beiden Adressenkennzeichen mit der physikalischen Adresse, während die BIU 20 einen externen Buszyklus auslöst, um die Daten aus dem externen Speicher zu lesen. Wenn die Referenz ein Treffer ist, werden die ausgewählten Daten vom Datencache 16 ausgerichtet und auf dem GDATA-Bus an die Exekutionseinheit 32 übertragen, und die BIU 20 löscht den externen Buszyklus dadurch, daß sie die BMT- und -Signale nicht geltend macht. Ist die Referenz ein Fehltreffer, dann führt die BIU 20 den externen Buszyklus komplett durch und überträgt Daten vom äußeren Speicher zur Exekutionseinheit 32 und zum Datencache 16, welches dadurch seinen Cacheeingang aktualisiert. Das Datencache 16 kann für Referenzen, die treffen, einen Durchsatz von einem Doppelwort pro Zyklus mit einer Latenz von 1,5 Zyklen aushalten.
Wie das Instruktionscache 14 ist auch das Datencache 16 ein Durchschreibecache. Im Fall von Speicherschreibreferenzen prüft das Datencache 16, ob die Referenz ein Treffer ist. Ist das der Fall, dann wird der Inhalt des Caches aktualisiert. Bei einem Treffer oder einem Fehltreffer werden die Daten von der BIU 20 zum externen Speicher durchgeschrieben. Das Datencache 16 stützt einen Operationsmodus zum Verrasten seines Inhalts auf feste Orte. Dies wird ermöglicht durch das Setzen eines LDC (Sperrdatencache)-Bits im Konfigurationsregister. Dies Merkmal ist in Echtzeitsystemen verwendbar, um zu den kritischsten Datenorten einen raschen Zugriff, auf dem Chip, zu ermöglichen.
Das Datencache 16 kann durch Setzen eines DC (Datencacheaktivierungs)- Bits im Konfigurationsregister aktiviert werden.
Die Zentraleinheit CPU 10 empfängt einen einphasigen Eingangstakt CLK, dessen Frequenz doppelt so groß ist wie die der Betriebsrate der CPU 10. Wenn beispielsweise die CPU 10 mit 20 MHz arbeitet, ist die Frequenz des Eingangstaktes 40 MHz. Die CPU 10 teilt den CLK-Eingang durch zwei, um einen internen Takt zu erhalten, der aus zwei nichtüberlappenden Phasen PHI1 und PHI2 besteht. Die PHI1 wird von der CPU 10 auf das BUSCLK-Ausgangssignal gesteuert.
In Fig. 7 ist das Verhältnis zwischen dem CLK-Eingang und den BUSCLK-Ausgangssignalen dargestellt.
Jede ansteigende Flanke des BUSCLK-Ausgangssignals definiert, wie Fig. 8 zeigt, einen Übergang im Zeitsteuerzustand ("T- Zustand") der CPU 10. Buszyklen treten während einer Folge von T-Zuständen auf, die mit T1, T2 und T2B in den zugehörigen Zeitdiagrammen bezeichnet sind. Zwischen Buszyklen können Leerlauf-T-Zustände (Ti) auftreten. Die Phasenbeziehung zwischen dem BUSCLK-Ausgangssignal und dem CLK-Eingangssignal kann beim Rückstellen hergestellt werden.
Die Bus-Grundzyklen, die die CPU 10 zum Lesen und Schreiben in einen externen Hauptspeicher und periphere Geräte ausführt, treten in zwei Zyklen des Bustaktes auf, die mit T1 und T2 bezeichnet sind. Diese Bus-Grundzyklen können aus zwei Gründen über zwei Taktzyklen hinaus verlängert werden. Zunächst können zusätzliche T2-Zyklen hinzugefügt werden, um auf langsame Speicher und Peripheriegeräte zu warten. Zweitens können beim Lesen aus einem externen Speicher Burstzyklen (die mit "T2B" bezeichnet sind) benutzt werden, um mehrere Doppelwörter von aufeinanderfolgenden Orten zu übertragen.
In Fig. 8 beziehungsweise 9 ist die Zeitsteuerung für die grundlegenden Lese- und Schreib-Grund-Buszyklen ohne "Warte"- Zustände dargestellt. Sowohl für den Lese- als auch den Schreibbuszyklus macht die CPU 10 Address Strobe während der ersten Hälfte von T1 geltend, was den Beginn des Buszyklus anzeigt. Ab dem Beginn von T1 bis zur Beendigung des Buszyklus steuert die CPU 10 den Adressenbus und Steuersignale an für die Signale ST0-ST4, BE0-BE3, , CIO, sowie CASEC.
Wenn der Buszyklus nicht gelöscht ist, das heißt, wenn T2 beim nächsten Takt folgt, macht die CPU 10 während T1 das Signal geltend und macht von der Mitte von T1 bis zur Beendigung des Buszyklus das Signal geltend, welches zu dem zuletzt genannten Zeitpunkt negiert wird.
Am Ende von T2 tastet die CPU 10 ab, ob das Signal RDY aktiv ist, was anzeigt, daß der Buszyklus vollständig durchgeführt wurde; das bedeutet, daß keine zusätzlichen T2-Zustände hinzugefügt werden sollten. Auf T2 folgt entweder T1 für den nächsten Buszyklus oder Ti, wenn die CPU 10 keine Buszyklen durchzuführen hat.
Wie aus Fig. 10 hervorgeht, können die zuvor beschriebenen Lese- und Schreib-Grund-Buszyklen verlängert werden, um längere Zugriffszeiten zu unterstützen. Wie schon gesagt, tastet die CPU 10 am Ende jedes T2-Zustandes RDY ab. Ist RDY inaktiv, dann wird der Buszyklus durch Wiederholen von T2 um einen weiteren Takt verlängert. Die zusätzlichen T2- Zustände nach dem ersten werden als "Warte-Zustände" bezeichnet. Fig. 10 zeigt die Verlängerung eines Lesebuszyklus unter Hinzufügung von zwei Wartezuständen.
Gemäß Fig. 11 können die Lesegrundzyklen auch verlängert werden, um Burstübertragungen von bis zu vier Doppelwörtern aus aufeinanderfolgenden Speicherplätzen zu unterstützen. Während eines Burstlesezyklus wird das anfängliche Doppelwort während einer Folge von T1- und T2-Zuständen übertragen, wie bei einem Lesegrundzyklus. Nachfolgende Doppelwörter werden während "T2B" genannter Zustände übertragen. Burstzyklen werden nur zum Lesen aus 32 Bit breiten Speichern benutzt.
Die Transferanzahl in einem Burstlesezyklus wird durch einen "Handshake" zwischen einem -Ausgangssignal und einem -Eingangssignal während eines T2- oder T2B-Zustandes kontrolliert um anzuzeigen, daß eine weitere Übertragung im Anschluß an die laufende Übertragung angefordert wird. Der Speicher macht das -Signal geltend um anzuzeigen, daß er eine weitere Übertragung stützen kann. Fig. 11 zeigt einen Burstlesezyklus von drei Transfers, bei dem die CPU 10 die Folge durch Negieren des -Signals nach dem zweiten Transfer beendet. In Fig. 12 ist ein Burstzyklus von zwei Transfers gezeigt, der von dem System beendet wird, wenn während des zweiten Transfers das -Signal inaktiv war.
Für jeden Transfer nach dem ersten in der Burstfolge inkrementiert die CPU 10 die Adressenbits 2 und 3, um das nächste Doppelwort auszuwählen. Wie in Fig. 12 für den zweiten Transfer gezeigt, tastet die CPU 10 am Ende jedes T2B-Zustands RDY ab und dehnt die Zugriffszeit für den Bursttransfer aus, wenn RDY inaktiv ist.
Die CPU 10 enthält eine Reihe von Mechanismen, um die Kohärenz zwischen den beiden Caches auf dem Chip, nämlich dem Instruktionscache 14 und dem Datencache 16 und dem externen Speicher aufrechtzuerhalten. Diese Techniken sind in der folgenden Tabelle 5 zusammengefaßt.
Tabelle 5
Die Kohärenz zwischen den beiden Caches auf dem Chip und dem externen Speicher kann durch die Anordnung einer in Fig. 1 gezeigten externen Busbeobachtungsschaltung 26 sichergestellt werden. Diese Schaltung bildet jeweils ein Interface mit den folgenden Bussen:
  • 1. Dem Adressenbus der CPU 10 und dem CASEC-Ausgang, um Informationen darüber zu erhalten, welche der internen Cacheeingänge (Identifizierungskennzeichen) modifiziert sind, und um aktualisierte Kopien interner Cachekennzeichen der CPU 10 aufrechtzuerhalten;
  • 2. dem System Bus um festzustellen, welche internen Speicheradressen modifiziert sind; und
  • 3. dem Cacheinvalidierungsbus der CPU 10, der aus den Signalen , , und CIA0-CIA6 besteht.
Der Busbeobachter 26 unterhält Kennzeichenkopien der Einträge des Instruktionscache 14 und des Datencache 16. Wenn die Adresse eines Speicherschreibzyklus auf dem System Bus zu einem der Kennzeichen im Busbeobachter 26 paßt, wird vom Busbeobachter 26 an die CPU 10 über den Cacheinvalidierungsbus ein Befehl ausgegeben, um den entsprechenden Eintrag im zugehörigen internen Cache ungültig zu machen. Das Ungültigmachen des internen Cacheeintrags durch die CPU 10 erfordert nur einen Taktzyklus und stört den laufenden Buszyklus der CPU 10 nicht. In Datencache 16 werden jeweils auf einmal 32 Bytes ungültig gemacht, während im Instruktionscache 14 jeweils 16 Bytes auf einmal invalidiert werden.
Um einen Befehl auszuführen, ruft die CPU 10 zunächst denjenigen Befehl ab, dessen Adresse im Programmzähler enthalten ist, und führt dann die Operationen für diese spezielle Anweisung durch. Nach der Erledigung dieser Anweisung wird der Programmzähler auf eine von zwei Weisen aktualisiert, um die Adresse des nächsten auszuführenden Befehls zu enthalten: entweder lädt die laufende Instruktion ausdrücklich den Programmzähler (beispielsweise JUMP) oder er wird um die Länge der laufenden Instruktion inkrementiert.
Wie schon gesagt, kann die CPU 10 Operationen überlappt durchführen, um mehrere Anweisungen gleichzeitig in der vierstufigen Instruktions-Pipeline 12 auszuführen. Die allgemeine Struktur der Pipeline 12 geht aus Fig. 13 hervor. Während die Exekutionseinheit 32 die Ergebnisse für eine Anweisung berechnet, kann die Adresseneinheit 30 die effektiven Adressen berechnen und die Sourceoperanden für den folgenden Befehl lesen, und der Lader 28 kann einen dritten Befehl decodieren und einen vierten Befehl in seine 8-Byte- Warteschlange vorabrufen.
Die Auswirkungen der überlappten Ausführung von Befehlen können sich unter Umständen von denen der streng sequentiellen Befehlsausführung unterscheiden. Genauer gesagt, die Reihenfolge der von der CPU 10 vorgenommenen Speicherreferenzen kann unterschiedlich erscheinen, wie im einzelnen noch erläutert wird.
Die Zentraleinheit CPU 10 kann während der Ausführung eines Befehls einige der Sourceoperanden für den folgenden Befehl aus dem Speicher lesen, ehe sie den Befehl komplett abruft. Allerdings beendet die CPU 10 immer das Abrufen eines Befehls und das Lesen der Sourceoperanden desselben, ehe sie dessen Ergebnisse schreibt. Wenn mehr als ein Sourceoperand aus dem Speicher gelesen werden muß, um einen Befehl auszuführen, können die Operanden in beliebiger Reihenfolge gelesen werden. Ähnlich können, wenn mehr als ein Resultat- Operand in den Speicher geschrieben wird, um einen Befehl auszuführen, diese Operanden in beliebiger Reihenfolge geschrieben werden.
Die CPU 10 beginnt mit dem Abruf eines Befehls erst, wenn alle vorhergehenden Befehle vollständig abgerufen sind. Allerdings kann die CPU 10 mit dem Abruf eines Befehls beginnen, ehe für vorhergehende Befehle alle Sourceoperanden gelesen und Ergebnisse geschrieben sind.
Die CPU 10 beginnt mit dem Lesen der Sourceoperanden für einen Befehl erst, nachdem alle vorhergehenden Befehle abgerufen und ihre Sourceoperanden gelesen worden sind. Der Sourceoperand für einen Befehl kann gelesen werden, ehe alle Ergebnisse des vorhergehenden Befehls geschrieben wurden, es sei denn, daß der Wert des Sourceoperanden von dem noch nicht geschriebenen Ergebnis abhängt. Die CPU 10 vergleicht die physikalische Adresse und die Länge des Sourceoperanden mit denen der noch nicht geschriebenen Ergebnisse und verzögert das Lesen des Sourceoperanden, bis alle Ergebnisse, von denen der Sourceoperand abhängt, geschrieben worden sind.
Zusätzlich identifiziert die CPU 10 Sourceoperanden, die sich in memory-mapped Peripherie-Ports befinden und verzögert das Lesen solcher Operanden, bis alle vorhergehenden Ergebnisse, die für memory-mapped Peripherieports bestimmt sind, geschrieben wurden. Wie noch beschrieben wird, gewährleisten gemäß der Erfindung besondere Behandlungsverfahren, daß Lese- und Schreibreferenzen an memory-mapped I/O-Ports immer in der im Programm implizierten Reihenfolge durchgeführt werden.
Die CPU 10 beginnt mit dem Schreiben der Resultat-Operanden eines Befehls erst, nachdem die Ergebnisse aller vorhergehenden Befehle geschrieben worden sind.
Wegen der Überlappung von Operationen für mehrere Befehle kann die CPU 10 einen Befehl abrufen und dessen Sourceoperanden lesen, auch wenn der Befehl nicht ausgeführt wird (beispielsweise, wenn die vorhergehende Anweisung ein Trap verursacht). Wenn die CPU 10 aber feststellt, daß ein Sourceoperand für einen Befehl sich in einem memory-mapped Peripherie-Port befindet, liest sie den Sourceoperanden nur, wenn der Befehl ausgeführt wird.
Die CPU 10 prüft nicht auf gegenseitige Abhängigkeiten zwischen dem Abrufen eines Befehls und dem Schreiben von Ergebnissen voraufgegangener Befehle. Ein selbstmodifizierender Code muß also besonders behandelt werden, um ausgeführt zu werden wie beabsichtigt.
Wie schon gesagt, erfordern die Eigenschaften gewisser peripherer Geräte und die Überlappung der Ausführung von Befehlen in der Pipeline 12 der CPU 10, daß bei memory-mapped I/O-Referenzen eine Spezialbehandlung angewandt wird. I/O- Referenzen unterscheiden sich von Speicherreferenzen auf zweierlei wichtige Weise, was folgende Erfordernisse aufzwingt:
1. Durch das Lesen aus einem Peripherie-Port kann der bei der nächsten Referenz auf den gleichen Port gelesene Wert geändert werden, eine Eigenschaft, die als "destruktives Lesen" bezeichnet wird. In dieser Weise arbeiten zum Beispiel serielle Steuergeräte für die Datenübertragung und FIFO-Speicher. Wie schon erwähnt, kann die CPU 10 die Sourceoperanden für einen Befehl lesen, während der voraufgegangene Befehl ausgeführt wird. Da die vorhergehende Instruktion ein Trap verursachen kann, eine Unterbrechnung erkannt oder der Kontrollfluß auf andere Weise geändert werden kann, ist es erforderlich, destruktives Lesen von Sourceoperanden vor dem Ausführen eines Befehls zu vermeiden.
2. Durch das Einschreiben in einen Peripherie-Port kann der von einem anderen peripheren Port gelesene Wert geändert werden, eine Eigenschaft, die als "Side-Effekt des Schreibens" bezeichnet wird. Ehe zum Beispiel der Zählerwert aus der ICU 24 gelesen wird, muß er zunächst durch Schreiben in ein anderes Steuerregister eingefroren oder gehalten werden. Wie gesagt, kann aber die CPU 10 die Soruceoperanden für einen Befehl lesen, ehe sie die Ergebnisse vorheriger Befehle schreibt, es sei denn, daß die Adressen eine Abhängigkeit zwischen den Lese- und Schreibreferenzen erkennen lassen. Folglich ist es erforderlich, daß Lese- und Schreibreferenzen an Peripheriegeräte, die "Side-Effects" beim Schreiben zeigen, in der gleichen Reihenfolge auftreten, in der Befehle ausgeführt werden.
Die CPU 10 stützt zwei Methoden der Behandlung von memory- mapped I/O. Die erste Methode, nämlich das erfindungsgemäße Verfahren, erfüllt die beiden obengenannten Erfordernisse und erlegt dem Ort von memory-mapped Peripheriegeräten keinerlei Einschränkung auf. Das zweite Verfahren erfüllt nur das Erfordernis nach Side Effects beim Schreiben und schränkt den Platz von memory-mapped I/O-Geräten ein, ist jedoch wirkungsvoller für Geräte, die keine Ports für destruktives Lesen haben.
Das Verfahren gemäß der Erfindung zur Behandlung von memory- mapped I/O benutzt zwei Signale am Systeminterface. Wenn die CPU 10 einen Lesebuszyklus erzeugt, aktiviert sie ein IOINH-Ausgangssignal zum Inhibieren der Eingabe/Ausgabe, wenn das eine oder andere der obengenannten I/O-Erfordernisse nicht erfüllt ist. Mit anderen Worten, die CPU 10 aktiviert das IOINH-Signal, wenn das Lesen entweder vor dem Ausführen des Befehls oder dann erfolgt, wenn das Schreiben von einem vorhergehenden Befehl ansteht. Ferner wird ein IODEC-Eingangssignal zur I/O-Decodierung aktiviert, wenn die Referenz an ein Peripheriegerät geht, das Ports mit destruktivem Lesen oder "Side Effect" des Schreibens implementiert. Wenn die CPU 10 feststellt, daß das IOPEC-Eingangssignal aktiv ist, während auch das IOINH-Ausgangssignal aktiviert ist, verwirft sie die während des Buszyklus gelesenen Daten und bringt serialisiert die Ausführung des Befehls. Wie noch im einzelnen beschrieben wird. Dann erzeugt die CPU 10 erneut den Lesebuszyklus, wobei diesmal die Erfordernisse für I/O erfüllt sind und das IOINH-Ausgangssignal inaktiv gesteuert wird.
Für die zweite Methode der Behandlung von memory-mapped I/O wird ein dedizierter Bereich eines virtuellen Speichers benutzt. Die CPU 10 erkennt, daß virtuelle Adressen zwischen FF000000 (hex) und FFFFFFFF (hex) einschließlich für memory- mapped I/O bestimmt sind. Während das Schreiben an einem Platz ansteht, der als memory-mapped I/O erkannt ist, verzögert die CPU 10 das Lesen von einem Platz, der gleichzeitig als memory-mapped I/O erkannt ist. Allerdings kann die CPU von gewöhnlichen Speicherplätzen lesen, das heißt von denen, deren Adresse kleiner ist als F000000 (hex), während das Schreiben an einen memory-mapped I/O-Platz ansteht. Ähnlich kann die CPU 10 von einem memory-mapped I/O- Platz lesen, während Schreiben an einen gewöhnlichen Speicherplatz ansteht.
Unter bestimmten Umständen, wenn beispielsweise sowohl das IODEC-Eingangssignal als auch das IOINH-Ausgangssignal aktiv ist, serialisiert die CPU 10, wie schon gesagt, die Ausführung eines Befehls. Serialisierte Ausführung eines Befehls bedeutet, daß die CPU 10 das Schreiben der Ergebnisse aller vorhergehenden Befehle in den Speicher beendet und dann mit dem Abrufen und Ausführen der nächsten Anweisung beginnt. Wenn also durch das Ausführen eines entsprechenden Befehls ein neuer Wert in das Programmstatusregister geladen wird, bestimmt dieser neue Registerwert den zum Abrufen und Ausführen des nächsten Befehls benutzten Privilegzustand.
Die Adresseneinheit 30 beziehungsweise die Exekutionseinheit 32 kann Befehle mit einer Spitzenrate von zwei Zyklen pro Befehl verarbeiten. Der Lader 28 kann Befehle mit einer Spitzenrate von einem Zyklus pro Befehl verarbeiten, so daß er typischerweise einen ständigen Vorrat an Befehlen an die Adresseneinheit 30 und die Exekutionseinheit 32 unterhält. Der Lader 28 unterbricht den Durchsatz durch die Instruktions- Pipeline 12 nur, wenn eine Lücke im Befehlsstrom aufgrund eines Sprungbefehls oder eines Instruktionscache- Fehltreffers auftritt.
In Fig. 14 ist die Ausführung von zwei Befehlen Speicher- an-Register mittels der Adresseneinheit 30 und der Exekutionseinheit 32 dargestellt. Die CPU 10 kann eine Ausführungsrate von zwei Zyklen bei den meisten üblichen Befehlen durchhalten und zeigt typischerweise nur in folgenden Fällen Verzögerungen:
  • 1. Speicherverzögerungen aufgrund von Fehltreffern des Caches und Übersetzungspuffers und nicht ausgerichteten Referenzen;
  • 2. Betriebsmittelwettstreit zwischen Stufen der Instruktions- Pipeline 12;
  • 3. Verzweigungsbefehl und sonstiges nichtsequentielles Befehlsabrufen;
  • 4. komplexe Adressierweise, wie skalierter Index und komplexe Operationen, wie Division.
Fig. 15 zeigt die Auswirkung eines Fehltreffers im Datencache 16 bei der Zeitsteuerung der Pipeline 12. Die Exekutionseinheit 32 wird um zwei Zyklen verzögert, bis die BIU 20 die Buszyklen zum Lesen von Daten abschließt.
Fig. 16 zeigt die Wirkung einer Adressen-Register-Verriegelung auf die Zeitsteuerung der Pipeline 12. Ein Befehl modifiziert ein Register, während der nächste Befehl jenes Register für eine Adressenberechnung benutzt. Die Adresseneinheit 30 wird um drei Zyklen verzögert, bis die Exekutionseinheit 32 die Aktualisierung des Registers abschließt. Es sei noch erwähnt, daß für den Fall, daß der zweite Befehl das Register für einen Datenwert statt für eine Adressenkalkulation benutzt hat (zum Beispiel ADDD, R0, R1), eine Bypass-Schaltung in der Exekutionseinheit 32 dafür sorgen würde, eine Verzögerung an die Pipeline 12 zu vermeiden.
Der Lader 28 weist eine Spezialschaltung zur Behandlung von Verzweigungsbefehlen auf. Wenn ein Verzweigungsbefehl decodiert wird, berechnet der Lader 28 die Zieladresse und wählt zwischen dem sequentiellen und dem nichtsequentiellen Befehlsstrom aus. Die Auswahl beruht auf dem Zustand und der Richtung des Verzweigungsbefehls. Wenn der Lader 28 vorhersagt, daß der Verzweigungsbefehl genommen wird, dann wird die Zieladresse auf dem JBUS ins Instruktionscache 14 transferiert. Unabhängig davon, ob vom Verzweigungsbefehl vorhergesagt wird, daß er genommen wird oder nicht, bewahrt der Lader 28 die Adresse des alternativen Befehlsstroms auf. Später erreicht der Verzweigungsbefehl die Exekutionseinheit 32, wo die Bedingung aufgelöst wird. Die Exekutionseinheit 32 signalisiert dem Lader 28, ob der Verzweigungsbefehl befolgt wurde oder nicht. Wenn der Verzweigungsbefehl unrichtigerweise vorhergesagt war, wird die Pipeline 12 gespült; und das Instruktionscache 14 beginnt mit dem Vorabruf von Befehlen aus dem richtigen Strom.
Fig. 17 zeigt die Auswirkung der richtigen Vorhersage eines zu befolgenden Verzweigungsbefehls. Beim Decodieren von Befehlen durch den Lader 28 tritt eine Lücke von zwei Zyklen auf. Diese Lücke ganz oben an der Pipeline 12 läßt sich oft schließen, weil ein vollständig decodierter Befehl zwischen dem Lader 28 und der Adresseneinheit 30 zwischengespeichert ist und weil weitere Verzögerungen gleichzeitig auf späteren Stufen in der Pipeline 12 auftreten können.
Fig. 18 zeigt die Auswirkung einer unrichtigen Vorhersage der Auflösung eines Verzweigungsbefehls. Dabei tritt in der Exekutionseinheit 32 eine Lücke von vier Zyklen auf.

Claims (5)

1. Datenverarbeitungssystem, in welchem die Befehlsverarbeitung in Pipeline implementiert ist, gekennzeichnet durch Einrichtungen zum Detektieren und zur Behandlung von Eingabe/Ausgabe-Lesereferenzen an periphere Geräte, durch die ein erstes Signal aktiviert wird um anzuzeigen, daß das Lesen entweder erfolgte vor dem Ausführen eines Befehls oder während ein Schreiben für einen vorausgegangenen Befehl ansteht, und ein zweites Signal aktiviert wird um anzuzeigen, daß das periphere Gerät Ports entweder mit destruktivem Lesen oder Schreib-side-effects implementiert, wobei der laufende Buszyklus ignoriert wird, wenn sowohl das erste Signal als auch das zweite Signal aktiviert ist.
2. Datenverarbeitungssystem nach Anspruch 1, gekennzeichnet durch eine Einrichtung, die während des Buszyklus gelesene Daten verwirft und die Befehlsausführung serialisiert.
3. Datenverarbeitungssystem nach Anspruch 2, gekennzeichnet durch eine Einrichtung zum Regenerieren des Lesebuszyklus, während das zweite Signal inaktiv ist, so daß Daten aus dem referenzierten Peripheriegerät gelesen werden.
4. Verfahren zum Detektieren und zur Behandlung von Eingabe/ Ausgabe-Lesereferenzen an periphere Geräte in einem Datenverarbeitungssystem, in welchem Pipelinebefehlsverarbeitung implementiert ist, dadurch gekennzeichnet, daß
  • - ein erstes Signal aktiviert wird, wenn das Lesen entweder vor dem Ausführen eines Befehls erfolgte oder während ein Schreiben für einen vorausgegangenen Befehl ansteht;
  • - ein zweites Signal aktiviert wird, wenn das referenzierte periphere Gerät Ports entweder mit destruktivem Lesen oder Schreib-side-effects implementiert;
  • - der laufende Buszyklus ignoriert wird, wenn sowohl das erste Signal als auch das zweite Signal aktiviert ist.
5. Verfahren zum Detektieren und zur Behandlung von memory- mapped I/O in einem Pipeline-Datenverarbeitungssystem, dadurch gekennzeichnet, daß
  • (a) in Antwort auf einen von dem Datenverarbeitungssystem erzeugten Lesebuszyklus ein Ausgangssignal erzeugt wird, wenn das Lesen entweder vor dem Ausführen eines Befehls oder dann erfolgt, wenn ein Schreiben für einen vorausgegangenen Befehl ansteht;
  • (b) ein Eingangssignal aktiviert wird, wenn die Referenz von der Zentraleinheit an ein peripheres Gerät gerichtet ist, welches entweder destruktives Lesen oder Schreib-side-effects vorweist;
  • (c) detektiert wird, wenn sowohl das Eingangssignal als auch das Ausgangssignal aktiv ist;
  • (d) während des Buszyklus gelesene Daten verworfen werden;
  • (e) die Befehlsausführung serialisiert wird; und
  • (f) der Lesebuszyklus regeneriert wird, während die Erfordernisse, daß destruktives Lesen von Sourceoperanden vor dem Ausführen eines Befehls nicht erfolgt und Lese- und Schreibreferenzen an periphere Geräte, die Schreib-side-effects vorweisen, nur in der Reihenfolge auftreten, in der Befehle ausgeführt werden, so daß das Ausgangssignal auf inaktiv gesteuert wird.
DE3801361A 1987-01-22 1988-01-19 Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor Withdrawn DE3801361A1 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/006,012 US4802085A (en) 1987-01-22 1987-01-22 Apparatus and method for detecting and handling memory-mapped I/O by a pipelined microprocessor

Publications (1)

Publication Number Publication Date
DE3801361A1 true DE3801361A1 (de) 1988-08-04

Family

ID=21718849

Family Applications (1)

Application Number Title Priority Date Filing Date
DE3801361A Withdrawn DE3801361A1 (de) 1987-01-22 1988-01-19 Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor

Country Status (4)

Country Link
US (1) US4802085A (de)
JP (1) JPS63193253A (de)
DE (1) DE3801361A1 (de)
GB (1) GB2200484B (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1993007571A1 (fr) * 1991-10-10 1993-04-15 Ion Minca Structure de reseau pour le traitement parallele des logiciels
GB2406265A (en) * 2003-09-23 2005-03-30 Richard Taylor A buoyant keyring or key fob

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63240650A (ja) * 1987-03-28 1988-10-06 Toshiba Corp キヤツシユメモリ装置
US5155822A (en) * 1987-08-13 1992-10-13 Digital Equipment Corporation High performance graphics workstation
US5029124A (en) * 1988-05-17 1991-07-02 Digital Equipment Corporation Method and apparatus for providing high speed parallel transfer of bursts of data
US5073969A (en) * 1988-08-01 1991-12-17 Intel Corporation Microprocessor bus interface unit which changes scheduled data transfer indications upon sensing change in enable signals before receiving ready signal
US5101341A (en) * 1988-08-25 1992-03-31 Edgcore Technology, Inc. Pipelined system for reducing instruction access time by accumulating predecoded instruction bits a FIFO
US5123097A (en) * 1989-01-05 1992-06-16 Bull Hn Information Systems Inc. Apparatus and method for simultaneous execution of a write instruction and a succeeding read instruction in a data processing system with a store through cache strategy
CA1325288C (en) * 1989-02-03 1993-12-14 Ricky C. Hetherington Method and apparatus for controlling the conversion of virtual to physical memory addresses in a digital computer system
US5060144A (en) * 1989-03-16 1991-10-22 Unisys Corporation Locking control with validity status indication for a multi-host processor system that utilizes a record lock processor and a cache memory for each host processor
US5146582A (en) * 1989-06-19 1992-09-08 International Business Machines Corp. Data processing system with means to convert burst operations into memory pipelined operations
US5185694A (en) * 1989-06-26 1993-02-09 Motorola, Inc. Data processing system utilizes block move instruction for burst transferring blocks of data entries where width of data blocks varies
WO1991003786A1 (en) * 1989-09-08 1991-03-21 Auspex Systems, Inc. Enhanced vmebus protocol utilizing pseudosynchronous handshaking and block mode data transfer
JP2509344B2 (ja) * 1989-09-19 1996-06-19 富士通株式会社 デ―タ処理装置
US5253353A (en) * 1990-01-02 1993-10-12 Digital Equipment Corporation System and method for efficiently supporting access to I/O devices through large direct-mapped data caches
EP0440456B1 (de) * 1990-01-31 1997-01-08 Hewlett-Packard Company Stossbetrieb für Mikroprozessor mit externem Systemspeicher
JPH03248244A (ja) * 1990-02-27 1991-11-06 Toshiba Corp キャッシュメモリを備えたプロセッサ
EP0449369B1 (de) * 1990-03-27 1998-07-29 Koninklijke Philips Electronics N.V. Datenverarbeitungssystem mit einem leistungsverbessernden Befehlscachespeicher
US5249286A (en) * 1990-05-29 1993-09-28 National Semiconductor Corporation Selectively locking memory locations within a microprocessor's on-chip cache
US5355469A (en) * 1990-07-30 1994-10-11 Delphi Data, A Division Of Sparks Industries, Inc. Method for detecting program errors
JP2708943B2 (ja) * 1990-08-08 1998-02-04 三菱電機株式会社 キャッシュメモリ制御装置
IE860318L (en) * 1990-10-01 1986-08-05 Digital Equipment Corp System bus for a multi-cache data processing system
US5276852A (en) * 1990-10-01 1994-01-04 Digital Equipment Corporation Method and apparatus for controlling a processor bus used by multiple processor components during writeback cache transactions
US5412787A (en) * 1990-11-21 1995-05-02 Hewlett-Packard Company Two-level TLB having the second level TLB implemented in cache tag RAMs
JP2646854B2 (ja) * 1990-12-18 1997-08-27 三菱電機株式会社 マイクロプロセッサ
GB2256512B (en) * 1991-06-04 1995-03-15 Intel Corp Second level cache controller unit and system
US5392417A (en) * 1991-06-05 1995-02-21 Intel Corporation Processor cycle tracking in a controller for two-way set associative cache
US5319760A (en) * 1991-06-28 1994-06-07 Digital Equipment Corporation Translation buffer for virtual machines with address space match
US5465342A (en) * 1992-12-22 1995-11-07 International Business Machines Corporation Dynamically adaptive set associativity for cache memories
JP3454294B2 (ja) * 1994-06-20 2003-10-06 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチプル・バス情報処理システム及びブリッジ回路
US5649137A (en) * 1994-10-20 1997-07-15 Advanced Micro Devices, Inc. Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5948912A (en) * 1995-02-15 1999-09-07 Neurogen Corporation Certain bridged 4-phenyl-2-aminomethylimidazoles; new dopamine receptor subtype specific ligands
EP0809641A1 (de) * 1995-02-15 1997-12-03 Neurogen Corporation Verbrückte 4-phenyl-2-aminomethylimidazole: neue dopaminrezeptorsubtyp-spezifische liganden
US5911151A (en) * 1996-04-10 1999-06-08 Motorola, Inc. Optimizing block-sized operand movement utilizing standard instructions
US6336158B1 (en) * 1998-10-30 2002-01-01 Intel Corporation Memory based I/O decode arrangement, and system and method using the same
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding
US6836828B2 (en) * 2002-04-03 2004-12-28 Faraday Technology Corp. Instruction cache apparatus and method capable of increasing a instruction hit rate and improving instruction access efficiency
US7965771B2 (en) * 2006-02-27 2011-06-21 Cisco Technology, Inc. Method and apparatus for immediate display of multicast IPTV over a bandwidth constrained network
US8218654B2 (en) * 2006-03-08 2012-07-10 Cisco Technology, Inc. Method for reducing channel change startup delays for multicast digital video streams
US8031701B2 (en) 2006-09-11 2011-10-04 Cisco Technology, Inc. Retransmission-based stream repair and stream join
US7873770B2 (en) 2006-11-13 2011-01-18 Globalfoundries Inc. Filtering and remapping interrupts
US7849287B2 (en) 2006-11-13 2010-12-07 Advanced Micro Devices, Inc. Efficiently controlling special memory mapped system accesses
US7937531B2 (en) * 2007-02-01 2011-05-03 Cisco Technology, Inc. Regularly occurring write back scheme for cache soft error reduction
US8769591B2 (en) * 2007-02-12 2014-07-01 Cisco Technology, Inc. Fast channel change on a bandwidth constrained network
US7940644B2 (en) * 2007-03-14 2011-05-10 Cisco Technology, Inc. Unified transmission scheme for media stream redundancy
US20080253369A1 (en) 2007-04-16 2008-10-16 Cisco Technology, Inc. Monitoring and correcting upstream packet loss
US8787153B2 (en) * 2008-02-10 2014-07-22 Cisco Technology, Inc. Forward error correction based data recovery with path diversity
US20110063749A1 (en) * 2009-09-14 2011-03-17 Tzu-Chen Liu Dual-port hard-disk storage device
US9168946B2 (en) * 2010-03-19 2015-10-27 Javad Gnss, Inc. Method for generating offset paths for ground vehicles
US8631212B2 (en) 2011-09-25 2014-01-14 Advanced Micro Devices, Inc. Input/output memory management unit with protection mode for preventing memory access by I/O devices

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5440537A (en) * 1977-09-07 1979-03-30 Hitachi Ltd Pipeline control system
US4371927A (en) * 1977-11-22 1983-02-01 Honeywell Information Systems Inc. Data processing system programmable pre-read capability
US4305124A (en) * 1978-06-09 1981-12-08 Ncr Corporation Pipelined computer
JPS5858653A (ja) * 1981-10-02 1983-04-07 Hitachi Ltd デ−タ処理装置
JPS593774A (ja) * 1982-06-30 1984-01-10 Fujitsu Ltd アクセス処理方式
US4498136A (en) * 1982-12-15 1985-02-05 Ibm Corporation Interrupt processor

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1993007571A1 (fr) * 1991-10-10 1993-04-15 Ion Minca Structure de reseau pour le traitement parallele des logiciels
US5465369A (en) * 1991-10-10 1995-11-07 Minca; Ion Network structure for parallel software processing
GB2406265A (en) * 2003-09-23 2005-03-30 Richard Taylor A buoyant keyring or key fob

Also Published As

Publication number Publication date
GB8729327D0 (en) 1988-01-27
GB2200484B (en) 1991-06-26
GB2200484A (en) 1988-08-03
US4802085A (en) 1989-01-31
JPS63193253A (ja) 1988-08-10

Similar Documents

Publication Publication Date Title
DE3801361A1 (de) Verfahren und einrichtung zum detektieren und fuer die spezialbehandlung von memory-mapped eingabe/ausgabereferenzen in einem pipelinemikroprozessor
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE69631778T2 (de) Flexible implementierung eines systemverwaltungsmodus in einem prozessor
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE10296989B4 (de) Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms
DE68929483T2 (de) Datenprozessor mit einer Befehlseinheit, die einen Cachespeicher und einen ROM aufweist.
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE102010053088A1 (de) Sammeln und Streuen mehrerer Datenelemente
DE112007003801B3 (de) Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren
DE69332663T2 (de) Datenprozessor mit einem Cachespeicher
DE112005003874B3 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE112011101364B4 (de) Fehlerbehebung in Multithread-Code
DE69233493T2 (de) RISC-Prozessor mit erweiterbarer Architektur
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE60036960T2 (de) Unterscheidung von feinkorntranslation
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE4311441C2 (de) Verfahren zum Betreiben eines Mikroprozessors mit einem externen Anschluß
DE60115976T2 (de) Rechnersystem und Interruptvorgang
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
US5263153A (en) Monitoring control flow in a microprocessor
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus

Legal Events

Date Code Title Description
8128 New person/name/address of the agent

Representative=s name: BLUMBACH, P., DIPL.-ING., 6200 WIESBADEN WESER, W.

8141 Disposal/no request for examination