DE69814268T2 - Verfahren zur Anbindung eines Prozessors an einen Koprozessor - Google Patents

Verfahren zur Anbindung eines Prozessors an einen Koprozessor Download PDF

Info

Publication number
DE69814268T2
DE69814268T2 DE69814268T DE69814268T DE69814268T2 DE 69814268 T2 DE69814268 T2 DE 69814268T2 DE 69814268 T DE69814268 T DE 69814268T DE 69814268 T DE69814268 T DE 69814268T DE 69814268 T2 DE69814268 T2 DE 69814268T2
Authority
DE
Germany
Prior art keywords
coprocessor
bus
cycle
processor
instruction
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.)
Expired - Fee Related
Application number
DE69814268T
Other languages
English (en)
Other versions
DE69814268D1 (de
Inventor
William C. Dripping Springs Moyer
John Austin Arends
Jeffrey W. Austin Scott
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.)
NXP USA Inc
Original Assignee
Motorola Inc
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 Motorola Inc filed Critical Motorola Inc
Publication of DE69814268D1 publication Critical patent/DE69814268D1/de
Application granted granted Critical
Publication of DE69814268T2 publication Critical patent/DE69814268T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30116Shadow registers, e.g. coupled registers, not forming part of the register space
    • 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
    • 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/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • G06F9/3881Arrangements for communication of instructions and data

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich allgemein auf ein Datenverarbeitungssystem mit einem Prozessor und wenigstens einem Koprozessor und insbesondere auf ein Verfahren und eine Vorrichtung zur Anbindung des Prozessors an den Koprozessor.
  • Hintergrund der Erfindung
  • Die Möglichkeit, die Funktionalität eines Prozessors mit grundlegender Architektur durch spezielle und spezialisierte, funktionale Hardware-Elemente zu erweitern, ist ein wichtiger Aspekt für skalierbare und erweiterbare Architekturen.
  • Eines der bevorzugten Verfahren zur Erweiterung der Funktionalität eines Prozessors mit grundlegender Architektur ist die Verwendung von Koprozessoren. Diese sind übli cherweise spezielle, Prozessoren für einen einzigen Zweck, die nach Anweisung eines Prozessors arbeiten. Eine der traditionellen Verwendungen von Koprozessoren war als mathematische Koprozessoren zur Selektiven Bereitstellung von Gleitkomma-Fähigkeiten für Architekturen, die solche nicht direkt unterstützten. Einige Beispiele für solche mathematischen Koprozessoren sind der Intel 8087 und 80287. Einige andere potentielle Verwendungen oder Typen von Koprozessoren schließen ein: Multiplikations-Akkumulatoren, Modulatoren/Demodulatoren (Modems), digitale Signalprozessoren (DSP), Vitturbi-Rechner, kryptographische Prozessoren, Bildverarbeitungsprozessoren und Vektorprozessoren.
  • Es gibt zwei verschiedene Ansätze für Koprozessoren. Einerseits war die Gleitkomma-Einheit für die Computerfamilie der Digital Equipment Corporation (DEC) PDP-11 sehr eng mit ihrem Primärprozessor gekoppelt. Ein sich ergebendes Problem ist, dass diese enge Kopplung erforderte, dass der Prozessor viel über den Betrieb des Koprozessors weiß. Dies verkompliziert die Auslegung der Schaltung derart, dass eine Hinzufügung eines neuen Koprozessors in ein integriertes System ein größeres technisches Problem darstellt.
  • Die alternative Implementation ist, den Koprozessor locker mit dem Primärprozessor zu koppeln. Dies hatte den Vorteil, den Betrieb des Koprozessors zu abstrahieren und vom Primärprozessor zu isolieren, was die Anstrengungen, die zur Integration eines neuen Koprozessors mit einem bestehenden Prozessor, wesentlich verringert. Dies hat jedoch einen unumgänglichen Preis. Leistungsverlust ist ein Problem dieses Ansatzes. Ein Problem bei der Inkaufnahme dieser Art von Leistungsverlust, der aus dieser lockeren Kopplung resultiert, ist, dass der Amortisationspunkt für den Aufruf eines solchen Koprozessors entsprechend höher liegt. Daher sind viele ansonsten für Koprozessoren attraktive Anwendungen nicht kosteneffizient. Außerdem erfordert solch ein Ansatz oft einen Bus mit all der entsprechenden, zusätzlichen Schaltung und Chipfläche.
  • Es ist daher wichtig, eine Koprozessor-Schnittstelle zu haben, die eng genug angebunden ist, dass die Verwendung der Schnittstelle ausreichend schnell ist, so dass ein Aufruf selbst bei ziemlich einfachen Funktionen vorteilhaft ist, während die Abstraktion der Schnittstelle so weitgehend ist, dass die Prozessorarchitektur von so vielen Details wie möglich eines beliebigen Koprozessors wie möglich isoliert ist. Teil dieses letzteren schließt ein, die Schnittstelle programmierfreundlicher zu machen, um den Zuschnitt neuer Koprozessor-Anwendungen in Software statt in Hardware zu erleichtern.
  • Ein Artikel mit dem Titel "Coprocessor data transfer instructions", VLSI RISC Architecture and Organization, S. 261–265, S B Furber, XP002061358ISBD: 0–8247–8151–1 offenbart eine Klasse von Anweisungen, die verwendet werden, um ein oder mehrere Datenworte zwischen einem Koprozessor und dem Hauptspeicher zu übertragen. Der beschriebene Koprozessor nimmt die Daten bei sequentiel1en Zyklusraten und ist verantwortlich für die Bestimmung der Anzahl übertragenen Worte.
  • Die Europäischen Patentanmeldungen EP-A-0280821 und EP-A-0261685 beschreiben Systeme mit einer Schnittstelle zwischen einem Prozessor und einem Koprozessor, die für die vorliegende Erfindung relevant sind.
  • Kurze Beschreibung der Zeichnungen
  • Die Merkmale und Vorteile der vorliegenden Erfindung werden aus der folgenden, detaillierten Beschreibung in Verbindung mit den beigefügten Figuren klarer verständlich, wobei sich gleiche Bezugszeichen auf gleiche und einander entsprechende Teile beziehen.
  • 1 ist ein Blockdiagramm, das eine Ausführungsform eines Datenverarbeitungssystem gemäß der vorliegenden Erfindung illustriert;
  • 2 ist ein Blockdiagramm, das einen Teil des Prozessors von 1 illustriert;
  • 3 ist ein Blockdiagramm, das eine Ausführungsform eines Teils des Koprozessors von 1 illustriert; 4 ist ein Timing-Diagramm, das eine Register-Snooping-Operation gemäß der vorliegenden Erfindung illustriert;
  • 5 ist ein Timing-Diagramm, das die grundlegende Betriebsweise einer Schnittstellenanweisung zur Anweisung eines Handshakes illustriert;
  • 6 ist ein Timing-Diagramm, das die Schnittstellenanweisungsoperation illustriert, wenn das H_BUSY*-Signal verwendet wird, um die Ausführung der Schnittstellenanweisung zu steuern;
  • 7 ist ein Timing-Diagramm, das das Verwerfen einer Anweisung illustriert;
  • 8 ist ein Timing-Diagramm, das ein Beispiel für eine Verzögerung in der Anweisungs-Pipeline illustriert;
  • 9 ist ein Timing-Diagramm, das ein Beispiel einer End-zu-End- ("back-to-back"-) Ausführung ohne Verzögerungen illustriert;
  • 10 ist ein Timing-Diagramm, das eine End-zu-End-Operation mit internen Pipeline-Verzögerungen illustriert;
  • 11 ist ein Timing-Diagramm, das eine End-zu-End-Koprozessor-Schnittstellenanweisungen 30 mit H_BUSY*-Verzögerungen illustriert;
  • 12 ist ein Timing-Diagramm, das ein Beispiel des H_EXCP*-Signals illustriert, das von einem Koprozessor infolge der Dekodierung und der versuchten Ausführung eines Koprozessor-Schnittstellen-Operationscodes zugeordnet wird;
  • 13 ist ein Timing-Diagramm, das ein Beispiel des H_EXCP*-Signals illustriert, das von einem Koprozessor infolge der Dekodierung und der versuchten Ausführung eines Koprozessor-Schnittstellen-Operationscodes gesetzt wird, wenn die Koprozessor-Schnittstellenanweisung verworfen wird;
  • 14 ist ein Timing-Diagramm, das ein Beispiel illustriert, in dem H_BUSY* gesetzt wurde, um die Ausführung eines Koprozessor-Schnittstellen-Operationscodes zu verzögern;
  • 15 ist ein Timing-Diagramm, das ein Beispiel eines mit dem H_CALL-Grundelement in Beziehung stehenden Registertransfers illustriert;
  • 16 ist ein Timing-Diagramm, das ein Beispiel eines mit dem H_RET-Grundelement in Beziehung stehenden Registertransfers illustriert;
  • 17 ist ein Timing-Diagramm, das den Ablauf eines H_LD-Transfers an die Koprozessorschnittstelle illustriert;
  • 18 ist ein Timing-Diagramm, das das Protokoll illustriert, wenn ein Speicherzugriff zu einer Speicherausnahme führt;
  • 19 ist ein Timing-Diagramm, das ein Beispiel eines mit dem H_ST-Grundelement in Beziehung stehenden Transfers illustriert;
  • 20 ist ein Timing-Diagramm, das ein Beispiel eines Transfers mit verzögerten Speicherdaten illustriert; 21 ist ein Timing-Diagramm, das die Protokollsignale illustriert, wenn die Speicherung zu einem Zugriffsfehler führt;
  • 22 illustriert ein Anweisungsformat für das H_CALL-Grundelement gemäß der vorliegenden Erfindung;
  • 23 illustriert ein Anweisungsformat für das H_RET-Grundelement gemäß der vorliegenden Erfindung; 24 illustriert ein Anweisungsformat für das H_EXEC-Grundelement gemäß der vorliegenden Erfindung;
  • 25 illustriert ein Anweisungsformat für die H_LD-Anweisung gemäß der vorliegenden Erfindung und 26 illustriert ein Anweisungsformat für die H_ST-Anweisung gemäß der vorliegenden Erfindung.
  • Beschreibung einer bevorzugten Ausführungsform
  • In der folgenden Beschreibung werden eine Vielzahl spezifischer Details aufgestellt, wie etwa spezielle Wort- oder Bytelängen etc., um ein tiefgehendes Verständnis der vorliegenden Erfindung zu ermöglichen. Es ist für den Fach mann jedoch offensichtlich, dass die vorliegende Erfindung ohne solche spezifischen Details angewendet werden kann. In anderen Fällen werden Schaltungen in Form von Blockdiagrammen dargestellt, um die vorliegende Erfindung nicht mit überflüssigen Details zu verschleiern. Meistens werden Details, die Timing-Überlegungen und dergleichen betreffen, insoweit ausgelassen, als solche Details nicht erforderlich sind, um ein vollständiges Verständnis der vorliegenden Erfindung zu erhalten und liegen im Bereich des Fachwissens des entsprechenden Fachmanns.
  • Der Ausdruck "Bus" wird verwendet, um eine Mehrzahl von Signalen oder Leitern zu bezeichnen, die verwendet werden können, um einen oder mehrere Typen von Information, wie etwa Daten, Adressen, Steuerbefehle oder Statusangaben zu übermitteln. Die Ausdrücke "setzen" und "negieren" werden verwendet, wenn auf die Änderung eines Signals, Statusbits oder einer ähnlichen Vorrichtung in ihren logisch wahren bzw. logisch falschen Zustand Bezug genommen wird. Hat der logisch wahre Zustand den logischen Pegel Eins, hat der logisch falsche Zustand den logischen Pegel Null. Und wenn der logisch wahre Zustand den logischen Pegel Null hat, hat der logisch falsche Zustand den logischen Pegel Eins.
  • 1 ist ein Blockdiagramm, das eine Ausführungsform eines Datenverarbeitungssystems 10 illustriert, welche einen Prozessor 12, einen Koprozessor 14, einen Koprozessor 16, einen Speicher 18, sonstige Module 20 und eine externe Busschnittstelle 22 enthält, die alle über den Bus 28 bidirektional angeschlossen sind. Alternative Ausführungsformen der vorliegenden Erfindung können auch lediglich einen Koprozessor 14, zwei Koprozessoren 14 und 16 oder sogar mehrere Koprozessoren (nicht gezeigt) enthalten. Die externe Busschnittstelle 22 ist über die integrierten Schaltungsterminals 35 bidirektional mit dem externen Bus 26 verbunden. Der Speicher 24 ist bidirektional mit dem externen Bus 26 verbunden. Der Prozessor 12 kann optional über integrierte Schaltungsterminals 31 extern mit dem Datenverarbeitungssystem 10 verbunden sein. Der Koprozessor 14 kann optional über integrierte Schaltungsterminals 32 extern mit dem Datenverarbeitungssystem 10 verbunden sein. Der Speicher 18 kann optional über integrierte Schaltungsterminals 32 extern mit dem Datenverarbeitungssystem 10 verbunden sein. Die anderen Module 20 können optional über integrierte Schaltungsterminals 34 extern mit dem Datenverarbeitungssystem 10 verbunden sein. Der Prozessor 12 ist über die Koprozessorschnittstelle 30 bidirektional mit dem Koprozessor 14 und dem Koprozessor 16 verbunden.
  • 2 ist ein Blockdiagramm, das einen Teil des Prozessors 12 von 1 illustriert. Bei einem Ausführungsbeispiel enthält der Prozessor 12 eine Steuerschaltung 40, eine Anweisungs-Dekodierungsschaltung 42, eine Anweisungs-Pipeline 44, Register 46, ein Rechenwerk (ALU: arithmetic logic unit) 48, einen signalspeichernden Multiplexer (MUX) 50, einen signalspeichernden Multiplexer (MUX) 52 und einen Multiplexer (MUX) 54. Bei einem Ausführungsbeispiel der vorliegenden Erfindung umfasst die Koprozessorschnittstelle 30 Signale 60 bis 71. Ein Taktgebersignal 60 wird von der Steuerschaltung 40 erzeugt. Koprozessor-Betriebssignale 61 werden von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt.
  • Ein Überwachungsmodus-Signal 62 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Dekodierungssignal 63 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Koprozessor-beschäftigt ("busy")-Signal 64 wird durch die Steuerschaltung 40 von dem Koprozessor 14 oder dem Koprozessor 16 empfangen. Ein Ausführungssignal 65 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Ausnahmesignal 66 wird durch die Steuerschaltung 40 vom Koprozessor 14 oder vom Koprozessor 16 empfangen. Ein "Register Write"-Signal (REGWR*) 67 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Registersignale (REG{4 : 0}) 68 werden von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Fehlersignal (H_ERR*) 69 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Datenfreigabesignal ("data strobe signal") (H_DS*) 70 wird von der Steuerschaltung 40 erzeugt und den Koprozessoren 14 und 16 zur Verfügung gestellt. Ein Datenbestätigungssignal (H_DA*) 71 wird durch die Steuerschaltung 40 vom Koprozessor 14 oder vom Koprozessor 16 empfangen. Hardware-Datenanschlusssignale (HDP{31 : 0}) 72, die auch als Teil der Koprozessorschnittstelle 30 angesehen werden, sind zwischen den Koprozessoren 14 und 16 und der internen Schaltung innerhalb des Prozessors 12 bidirektional.
  • Bei einem Ausführungsbeispiel der vorliegenden Erfindung wird eine Mehrzahl von Signalen dem oder von dem Bus 28 bereitgestellt, um die Daten in den Speicher 18 und/oder den Speicher 24 zu laden oder zu speichern. Bei einem Ausführungsbeispiel enthalten diese Signale ein Übertragungsanforderungssignal (TREQ*) 73, das von der Steuerschaltung 40 erzeugt und dem Bus 28 zur Verfügung gestellt wird. Ein Übertragungsfehler-Bestätigungssignal (TEA*) 74 wird über den Bus 28 an die Steuerschaltung 40 geliefert. Ein Übertragungsbestätigungssignal (TA*) 75 wird über den Bus 28 der Steuerschaltung 40 zur Verfügung gestellt. Über die Leiter 76 werden Anweisungen von dem Bus 28 an die Anweisungspipeline 44 geliefert. Daten werden über die Leiter 76 an den MUX 54 geliefert. Ein Treiberdatensignal 79 versetzt den Tristate-Zwischenspeicher 95 in die Lage, über die Leiter 88 und 76 Daten von dem signalspeichernden MUX 52 zu liefern. Ein Adressauswahlsignal 78 versetzt den signalspeichernden MUX 50 in die Lage, über die Leiter 77 Adressen an den Bus 28 zu liefern. Eine weitere Eingabe des MUX 54 wird von dem HDP-Signal (HDP{31 : 0}) 72 bereitgestellt. Eine weitere Eingabe in den MUX 54 wird über die ALU-Ergebnisleiter 86 bereitgestellt. Die Ausgabe des MUX 54, die Ergebnissignale 83, werden an die Register 46 und an den Eingang des Tristate-Zwischenspeichers 96 geliefert. Das Treiber-HDP-Signal 82 versetzt den Tristate-Zwischenspeicher 96 in die Lage, die Ergebnissignale 83 auf den HDP-Signalen 72 zu verschicken. Der Ausgang des Tristate-Zwischenspeichers 96 ist auch mit dem Eingang des signalspeichernden MUX 52 verbunden. Alternative Ausführungsformen der vorliegenden Erfindung können in den Registern 46 eine beliebige Anzahl von Registern enthalten. Die Ergebnissignale 83 werden als eine Eingabe an den signalspeichernden MUX 50 geliefert. Die Ergebnissignale 83 werden über den MUX 54 an die Register 46 geliefert. Das Ergebnisauswahlsignal (RESULT_SELECT) 81 wählt aus, welcher Eingabe des MUX 54 auf den Ergebnisleitern 83 verschickt werden soll. Ein Quellenauswahlsignal (SOURCE_SELECT) 80 wird von dem signalspeichernden MUX 52 bereitgestellt, um auszuwäh len, welches Signal auf den Leitern 88 zu dem Tristate-Zwischenspeicher 95 geschickt werden soll. Die Steuerschaltung 40 liefert Steuerinformationen und empfängt Statusinformationen von den Registern 46 über die Leiter 91. Die Steuerschaltung 40 liefert Steuersignale und empfängt Statussignale von dem Rechenwerk 48 über die Leiter 92. Die Steuerschaltung 40 liefert Steuersignale und empfängt Statussignale von der Anweisungspipeline 44 und der Anweisungsdekodierungsschaltung 42 über die Leiter 93. Die Anweisungspipeline 44 ist angeschlossen, um der Anweisungsdekodierungsschaltung 42 über die Leiter 89 Anweisungen zu liefern. Die Anweisungsdekodierungsschaltung 42 liefert über die Leiter 90 dekodierte Anweisungsinformationen an die Steuerschaltung 40. Die Register 46 liefern über die Leiter 84 Quelloperanden an das Rechenwerk 48. Die Register 46 liefern im Speicher 18 oder im Speicher 24 zu speichernde Daten über die Leiter 84, den signalspeichernden MUX 52, den Tristate-Zwischenspeicher 95 und die Leiter 76. Die Register 46 liefern Adressinformationen an den Speicher 18 oder den Speicher 24 über die Leiter 84, den signalspeichernden MUX 50 und die Adressleiter 77. Die Register 46 liefern einen zweiten Quelloperanden an das Rechenwerk 48 über die Leiter 85.
  • 3 ist ein Blockdiagramm, das eine Ausführungsform eines Teils des Koprozessors 14 illustriert. Bei einer Ausführungsform enthält der Koprozessor 14 eine Steuerschaltung 100, eine Berechnungsschaltung 102 und eine optionale Speicherschaltung 104. Die Steuerschaltung 100 ist bidirektional mit dem Prozessor 12 über die Koprozessorschnittstelle 30 verbunden, die die Signale 60 bis 72 umfasst. Bei einem Ausführungsbeispiel der vorliegenden Er findung enthält die Steuerschaltung 100 eine Dekodierungsschaltung 106, die die Operationssignale 61 und das Dekodierungssignal 63 vom Prozessor 12 empfängt. Die Steuerschaltung 100 liefert Steuerinformationen und empfängt Statusinformationen von der optionalen Speicherschaltung 104 über die Leiter 108. Die Steuerschaltung 100 liefert Steuerinformationen und empfängt Statusinformationen von der Berechnungsschaltung 102 über die Leiter 109. Die Berechnungsschaltung 102 und die optionale Speicherschaltung 104 sind über die Leiter 110 bidirektional verbunden. Ein oder mehrere Signale 110 können dem oder von dem Bus 28 oder den oder von den integrierten Schaltungsterminals 32 zur Verfügung gestellt werden. Die Steuerschaltung 100 kann über die Leiter 112 von dem Bus 28 oder den integrierten Schaltungsterminals 32 Informationen empfangen oder dem Bus 28 oder den integrierten Schaltungsterminals 32 bereitstellen. Die Signale 72 können bidirektional mit der Berechnungsschaltung 102 und der optionalen Speicherschaltung 104 verbunden sein. Außerdem können die Signale 72 bidirektional mit dem Bus 28 oder den integrierten Schaltungsterminals 32 verbunden sein. Bei einer alternativen Ausführungsform der vorliegenden Erfindung muss die optionale Speicherschaltung 104 nicht verwirklicht sein. Bei Ausführungsformen der vorliegenden Erfindung, bei denen die optionale Speicherschaltung 104 verwirklicht ist, kann sie unter Verwendung der Register, jeder Art von Speicher, jeder Art von Speicherschaltung, die Signalspeicher oder programmierbare, logische Arrays enthalten, etc. implementiert sein. Bei alternativen Ausführungsformen der vorliegenden Erfindung kann die Berechnungsschaltung 102 jede Art von logischen oder Rechenfunktionen durchführen.
  • Das System unterstützt die Aufgabenbeschleunigung durch einen externen Koprozessor 14 (oder Hardware-Beschleuniger), der für Betriebsweisen optimiert ist, die sich auf spezielle Anwendungen beziehen. Diese externen Koprozessoren 14, 16 können so einfach wie ein Koprozessor 14 zur Durchführung einer Zählung von Dateneinträgen sein oder eine kompliziertere Funktion erfüllen, wie etwa ein DSP-Beschleunigungskoprozessor 14 oder ein Koprozessor 14, der in der Lage ist, Multiplikations-/Akkumulations-Operationen mit hoher Geschwindigkeit durchzuführen.
  • Daten werden zwischen dem Prozessor 12 und einem Koprozessor 14 mittels einer oder mehrerer von verschiedenen Mechanismen übertragen, je nach Angemessenheit bei der speziellen Implementation. Diese können eingeteilt werden in Transfers zu dem Koprozessor 14 und Transfers von dem Koprozessor 14.
  • Einer der Datentransfermechanismen zum Übertragen von Daten zu einem Koprozessor 14 ist der Register-Snooping-Mechanismus, der kein Anweisungsgrundelement enthält, sondern ein Nebenprodukt des normalen Betriebs des Prozessors 12 ist. Dieser beinhaltet die Spiegelung von Aktualisierungen in die allgemeinen Register (GPR: General Purpose Registers) 46 des Prozessors 12 über die Schnittstelle, so dass der Koprozessor 14 die Aktualisierungen in einem oder mehreren Registern des Prozessors 12 überwachen kann. Dies kann angemessen sein, wenn ein Koprozessor 14 ein GPR 46 als internes Register oder interne Funktion "überlagert". In diesem Fall ist kein expliziter Übergang von Parametern von dem Prozessor 12 an einen Koprozessor 14 erforderlich.
  • Anweisungsgrundelemente werden in dem Basisprozessor 12 zum expliziten Transfer von Operanden und Anweisungen zwischen externen Koprozessoren 14, 16 und dem Prozessor 12 bereitgestellt. Ein Handshake-Mechanismus wird zur Verfügung gestellt, um die Kontrolle über die Rate von Anweisungen und des Datentransfers zu gestatten.
  • Man beachte, dass die Funktionen des Koprozessors 14 ausgelegt sind, implementationsspezifische Einheiten darzustellen, weshalb die exakte Funktionalität einer gegebenen Einheit frei ist und über verschiedene Implementationen hinweg verändert werden kann, selbst wenn dieselben Anweisungsumsetzungen vorliegen sollten.
  • 4 ist ein Timingdiagramm, das eine Register-Snooping-Operation illustriert. Um den zusätzlichen Aufwand der Parameterübergabe zu einem Koprozessor 14 oder um eine externen Überwachung zu vermeiden, wird ein Register-Snooping-Mechanismus bereitgestellt. Dies gestattet es einem Koprozessor 14, eine Schattenkopie eines oder mehrerer allgemeiner Register 46 des Prozessors 12 zu implementieren. Diese Fähigkeit wird dadurch verwirklicht, dass der Wert, der in eines der GPRs 46 des Prozessors geschrieben wird sowie ein Hinweis darauf, welches Register 46 für jede GPR-Aktualisierung aktualisiert wird, übertragen wird. Für jede Registeraktualisierung wird ein Freigabesignal REGWR* 67 gesetzt. Der Wert wird über den bidirektionalen 32-Bit Datenpfad HDP [31 : 0] 72 übertragen, und ein 5-Bit Registerzahlenbus liefert einen Pointer auf das aktuelle Prozessorregister 46, das aktualisiert wird (REG [4 : 0]) 68. Die Registerzahl kann Bezug nehmen auf ein Register 46 in einer normalen Datei oder einer Ausweichdatei. Bei dem bevorzugten Ausführungsbeispiel werden die Register der Ausweichdatei als REG [4]==1 bezeichnet und Register der normalen Datei durch REG [4]==0. Man beachte jedoch, dass diese Erfin dung in keiner Weise von der tatsächlichen Einteilung des Registersatzes abhängt.
  • Ein Koprozessor 14 kann den Wert intern zusammen mit einem Hinweis auf die Zahl des Zielregisters 46 latchen bzw. speichern, um später eine ausdrückliche Bewegung zu vermeiden. Diese Funktionalität kann auch von einem Fehlersuch-Koprozessor 14 verwendet werden, um den Zustand der Registerdatei 46 oder einer Untergruppe davon zu verfolgen. 4 zeigt ein Beispiel des Snooping-Vermögens.
  • Ein spezieller 12-Bit Anweisungsbus (H_OP[11 : 0]) 61 stellt den Operationscode der Koprozessorschnittstelle 30 bereit, der an den externen Koprozessor 14 ausgegeben wird. Dieser Bus spiegelt die unteren 12 Bit des Operationscodes des Prozessors. Die oberen 4 Bit werden nicht gespiegelt, da sie stets 0b0100 sind. Der Überwachungsmodus-Indikator (H_SUP) 62 wird ebenfalls bereitgestellt, um den aktuellen Zustand des PSR(S)-Bit anzuzeigen, welches anzeigt, ob der Prozessor im Überwachungs- oder Benutzermodus arbeitet. Dies kann nützlich sein, um bestimmte Koprozessorfunktionen auf den Überwachungsmodus zu limitieren. Ein Satz von Handshake-Signalen zwischen dem Prozessor 12 und den externen Koprozessoren 14, 16 koordiniert die Ausführung der Koprozessor-Schnittstellenanweisungen.
  • Die von dem Prozessor 12 erzeugten Steuersignale spiegeln die interne Pipelinestruktur des Prozessors 12 wider. Die Prozessorpipeline 44 besteht aus Stufen für Befehlsabruf, Befehlsdekodierung 42, Ausführung und Ergebniswiedergabe. Sie enthält ein oder mehrere Anweisungsregister (IR: Instruction Registers). Der Prozessor 12 enthält auch einen Vorabruf-Befehlspuffer, um die Zwischenspeicherung einer Anweisung vor der Dekodierungsstufe 42 zu gestatten. Die Anweisungen gelangen von diesem Puffer zu der Anweisungsdekodierungsstufe 42, indem sie in das Anweisungsdekodierungsregister IR eingehen.
  • Der Anweisungsdekodierer 42 empfängt Eingaben von den IR und erzeugt Ausgaben auf Grundlagen des in dem IR gehaltenen Wertes. Diese Ausgaben des Dekodierers 42 sind nicht immer gültig und können aufgrund von Ausnahmebedingungen oder Änderungen im Anweisungsfluss verworfen werden. Selbst wenn sie gültig sind, können die Anweisungen in den IR gehalten werden, bis sie an die Ausführungsstufe der Anweisungspipeline weiter fortschreiten können. Da dies nicht geschehen kann, bis vorangegangene Anweisungen vollständig abgearbeitet sind (was mehrere Takteinheiten in Anspruch nehmen kann), fährt der Dekodierer fort, den in den IR enthaltenen Wert zu dekodieren, bis das IR aktualisiert wird.
  • 5 ist ein Timingdiagramm, das die grundlegende Betriebsweise zur Schnittstellenanweisung für die Anweisung eines Handshakes illustriert. Ein Anweisungsdekodierungs-Freigabesignal (H_DEC*) 63 wird bereitgestellt, um die Dekodierung eines Operationscodes der Koprozessorschnittstelle 30 durch den Prozessor 12 anzuzeigen. Dieses Signal wird gesetzt, wenn in dem IR ein Operationscode der Koprozessorschnittstelle 30 liegt, selbst wenn die Anweisung ohne Ausführung verworfen werden kann. Die H_DEC*-Ausgabe 63 kann für dieselbe Anweisung während mehrerer Takte gesetzt bleiben, bis die Anweisung tatsächlich ausgegeben oder verworfen wird.
  • Ein "Beschäftigt"-Signal (H_BUSY*) 64 wird von dem Prozessor 12 überwacht, um zu bestimmen, ob ein externer Koprozessor 14 eine Koprozessor-Schnittstellenanweisung 30 annehmen kann und steuert teilweise, wann die Befehlsausga be erfolgt. Wenn das H_BUSY*-Signal 64 negiert ist, während H_DEC* 63 gesetzt ist, wird die Befehlsausführung von der Schnittstelle nicht verzögert und das H_EXEC*-Signal 65 kann gesetzt werden, sobald die Befehlsausführung durchgeführt werden kann. Wenn das H_BUSY*-Signal 64 gesetzt ist, wenn der Prozessor 12 einen Koprozessor-Schnittstellen-Operationscode 30 dekodiert (dadurch angezeigt, dass H_DEC* 63 gesetzt ist), wird die Ausführung des Koprozessor-Schnittstellen-Operationscodes 30 zur Verzögerung gezwungen. Sobald das H_BUSY*-Signal 64 negiert ist, kann der Prozessor 12 die Anweisung durch Setzen von H_EXEC* 65 ausgeben. Wenn ein Koprozessor 14 zur Speicherung von Anweisungen fähig ist, kann das H_BUSY*-Signal 64 verwendet werden, um beim Auffüllen des Zwischenspeichers zu helfen.
  • 6 ist ein Timingdiagramm, das den Betrieb der Anweisungsschnittstelle illustriert, wenn H_BUSY* 64 verwendet wird, um die Ausführung einer Koprozessor-Schnittstellenanweisung 30 zu steuern. Sobald irgendeine interne Verzögerungsbedingung aufgelöst ist und das H_BUSY*-Signal 64 negiert wird, kann der Prozessor H_EXEC* 65 setzen, um anzuzeigen, dass die Koprozessor-Schnittstellenanweisung 30 die Ausführungsstufe der Pipeline erreicht hat. Ein externer Koprozessor 14 sollte das H_EXEC*-Signal 65 überwachen, um die tatsächliche Befehlsausführung zu kontrollieren, da es für den Prozessor möglich ist, die Anweisung unter gewissen Umständen vor der Ausführung zu verwerfen. Wenn die Ausführung einer früheren Anweisung zu einer Ausnahme führt, wird das H_EXEC*-Signal 65 nicht gesetzt, und die H_DEC*-Ausgabe 63 wird negiert. Ein ähnlicher Prozess kann auftreten, wenn die Anweisung in dem IR als Resultat einer Änderung im Programmfluss verworfen wird.
  • 7 ist ein Timingdiagramm, das ein Verwerfen einer Anweisung illustriert. Wenn eine Anweisung verworfen wird, wird das H_DEC*-Signal 63 negiert, bevor ein anderer Koprozessor-Schnittstellen-Operationscode 30 in den H_OP [11 : 0] -Bus 61 gestellt wird.
  • 8 ist ein Timingdiagramm, das ein Beispiel einer Verzögerung der Anweisungspipeline illustriert. Es gibt Umstände, bei denen der Prozessor 12 das Setzen von H_EXEC* 65 verzögern kann, obwohl H_DEC* 63 gesetzt und H_BUSY* 64 negiert ist. Dies kann während des Wartens auf die Vollendung einer vorangegangenen Anweisung auftreten.
  • 9 ist ein Timingdiagramm, das ein Beispiel einer End-zu-End-Ausführung ohne Verzögerungen illustriert. Für End-zu-End-Koprozessor-Schnittstellenanweisungen 30 kann das H_DEC*-Signal 63 ohne Negierung gesetzt bleiben, obwohl der H_OP[11 : 0]-Bus 61 aktualisiert wird, wenn neue Anweisungen im IR eingehen. Im Allgemeinen entspricht das Setzen von H_EXEC* 65 der Ausführung der Anweisung, die im vorangegangenen Takt dekodiert wurde.
  • 10 ist ein Timingdiagramm, das eine End-zu-End-Operation mit internen Pipelineverzögerungen illustriert. In diesem Fall ist H_BUSY* 64 negiert, der Prozessor setzt jedoch H_EXEC* 65 für die zweite Koprozessor-Schnittstellenanweisung 30 nicht, bis die interne Verzögerungsbedingung verschwindet.
  • 11 ist ein Timingdiagramm, das End-zu-End-Koprozessor-Schnittstellenanweisungen 30 mit H_BUSY*-Verzögerungen 64 illustriert. In diesem Beispiel ist der Koprozessor 14 beschäftigt und kann nicht unverzüglich die zweite Anweisung annehmen. H_BUSY* 64 wird gesetzt, um den Prozessor 12 davon abzuhalten, die zweite Anweisung aus zugeben. Sobald der Koprozessor 14 frei wird, wird H_BUSY* 64 negiert und die nächste Koprozessor-Schnittstellenanweisung 30 rückt in die Ausführungsstufe vor.
  • Ausnahmen, die in Bezug stehen zu der Dekodierung eines Koprozessorschnittstellen-Operationscodes, 30 können von dem externen Koprozessor 14 mit dem H_EXCP*-Signal 66 angezeigt werden. Diese Eingabe des Prozessors 12 wird während des Taktgeberzyklus gesampelt, indem H_DEC* 63 gesetzt und H_BUSY* 64 negiert wird und führt zu einer Hardware-Koprozessorausnahme, falls der Koprozessor-Schnittstellen-Operationscode 30 nicht, wie zuvor beschrieben, verworfen wird. Details dieser Ausnahmebearbeitung sind weiter unten beschrieben.
  • 12 ist ein Timingdiagramm, das ein Beispiel für ein H_EXCP*-Signal 66 illustriert, das von dem Koprozessor 14 gesetzt wird als Antwort auf die Dekodierung und versuchte Ausführung eines Koprozessor-Schnittstellen-Operatonscodes 30. Das H_EXCP-Signal 66 wird von dem Prozessor 12 während des Taktes gesampelt, indem H_DEC* 63 gesetzt und H_BUSY* 64 negiert wird. Das H_EXEC*-Signal 65 wird gesetzt unabhängig davon, ob von der Schnittstelle eine Ausnahme angezeigt wird. Dieses Setzen unterscheidet den Fall, dass eine Ausnahme vorliegt, von dem Fall, dass eine Anweisung verworfen wird.
  • Man beachte, dass die Ausführung der im vorangegangenen Taktzyklus dekodierten Anweisung entspricht und dass keine tatsächliche Ausführung stattfinden sollte. Ein Koprozessor 14 muss die verletzende Anweisung annehmen und eine Ausnahme anzeigen, bevor sie von der Ausführungsstufe der Prozessorpipeline erkannt wird. Das H_EXCP*-Signal 66 wird für alle Taktzyklen ignoriert, wenn H_DEC* 63 negiert oder H_BUSY* 64 gesetzt ist.
  • 13 ist ein Timingdiagramm, das ein Beispiel eines H_EXCP*-Signals 66 illustriert, das von dem Koprozessor 14 gesetzt wird als Antwort auf die Dekodierung und versuchte Ausführung eines Koprozessor-Schnittstellen-Operationscodes 30. Im Gegensatz zu dem Timingdiagramm von 14 wird in diesem Beispiel die Koprozessor-Schnittstellen-Anweisung 30 verworfen, so dass das H_EXEC*-Signal 65 nicht gesetzt und das H_DEC* 63 negiert wird.
  • 14 ist ein Timingdiagramm, das ein Beispiel illustriert, bei dem H_BUSY* 64 gesetzt ist, um die Ausführung eines Koprozessor-Schnittstellen-Operationscodes 30 zu verzögern, was zu einer Ausnahme führt.
  • Die Signale H_BUSY* 64 und H_EXCP* 66 werden von allen Koprozessoren 14, 16 gemeinsam genutzt, so dass sie in koordinierter Weise betrieben werden müssen. Diese Signale sollten von den Koprozessoren 14, 16 entsprechend H_OP [11 : 10] 61 bei denjenigen Taktzyklen angesteuert werden (entweder high oder low, was immer angemessen ist), bei denen H_DEC* 63 gesetzt ist. Durch Ansteuerung der Ausgabe nur während des Low-Bereiches des Taktgebers können diese Signale von mehreren Koprozessoren 14, 16 ohne Konkurrenz gemeinsam genutzt werden. Ein Haltespeicher in dem Prozessor 12 ist für diese Eingabe vorgesehen, um ihn in einem gültigen Zustand für die High-Phase des Taktgebers zu halten, während sie von keiner Einheit angesteuert wird.
  • Einige der Koprozessor-Schnittstellen-Anweisungsgrundelemente 30 umfassen auch einen Transfer von Datenposten zwischen dem Prozessor 12 und einem externen Koprozessor 14. Operanden können über die Koprozessor- Schnittstelle 30 als Funktion der besonderen, ausgeführten Grundelemente übertragen werden. Es sind Vorkehrungen zur Übertragung eines oder mehrerer der Prozessor-GPRs vom oder zum Koprozessor 14 über einen bidirektionalen 32 Bit Datenpfad getroffen. Außerdem sind Vorkehrungen getroffen, einen einzelnen Datenposten in den oder von dem Speicher 18 zu laden oder zu speichern, wobei als Datensenke/Quelle die Koprozessor-Schnittstelle 30 dient. Der Prozessor 12 schickt Parameter über den HDP[31 : 0]-Bus 72 an die externen Koprozessoren 14, 16, während des High-Bereiches der CLK 60. Operanden von der Koprozessor-Schnittstelle 30 werden von dem Prozessor 12 während der Low-Phase des Taktgebers empfangen und gespeichert. Eine Verzögerung ist vorgesehen, wenn der Taktgeber in einen High-Zustand übergeht, bevor eine Ansteuerung erfolgt, um eine kurze Zeitspanne vor einem Bus-Handoff zu ermöglichen. Eine Koprozessor-Schnittstelle 14 muss dieselbe kurze Verzögerung an der abfallenden Taktgeberkante bereitstellen. Das Handshaking von Datenposten wird unterstützt von den Datenfreigabeausgangs(H_DS* 70), den Datenbestätigungseingangs- (H_DA* 71) und den Datenfehlerausgangs-Signalen (H_ERR* 69).
  • Der Prozessor 12 bietet die Fähigkeit zum Transfer einer Liste von Aufruf- und Rückgabe-Parametern an die Koprozessor-Schnittstelle 30 auf im Wesentlichen die gleiche Weise, wie Software-Subroutinen aufgerufen werden bzw. wie an sie zurückgegeben wird. In den H_CALL- oder H_RET-Grundelementen ist ein Argumentenzähler angezeigt zur Steuerung der Anzahl durchgesetzter Parameter. Die Registerwerte werden, beginnend mit dem Inhalt des Registers R4 des Prozessors 12 zum (vom) externen Koprozessor 14 als Teil der Ausführung der H_CALL (H_RET)-Grundelemente übermit telt. Bis zu 7 Registerparameter können durchgesetzt werden. Diese Konvention ist ähnlich der Software-Subroutinen-Aufrufskonvention.
  • Handshaking der Operandentransfers wird von dem Datenfreigabe-Ausgangssignal (H_DS* 70) und dem Datenbestätigungseingangssignal (H_DA* 71) gesteuert. Datenfreigabe wird von dem Prozessor 12 für die Dauer der Transfers gesetzt und die Transfers erfolgen in überlappender Weise, im Wesentlichen auf die gleiche Weise wie die Prozessor-Schnittstellen-Operation. Datenbestätigung (H_DA* 71) wird verwendet, um anzuzeigen, dass ein Datenelement akzeptiert oder von einem Koprozessor 14 angesteuert wurde.
  • 15 ist ein Timingdiagramm, das ein Beispiel eines Registertransfers 46 in Verbindung mit dem H_CALL-Grundelement illustriert. Anweisungsgrundelemente werden bereitgestellt, um eine Mehrzahl von Prozessorregistern zu transferieren, und die Transfers können Idealerweise bei jedem Takt erfolgen. Für Transfers zu einem externen Koprozessor 14 fängt der Prozessor automatisch an, den nächsten Operanden (falls notwendig) vor (oder konkurrierend mit) der Bestätigung des aktuellen Elementes anzusteuern. Die externe Logik muss zu einem Zwischenspeicherpegel fähig sein, um sicherzustellen, dass keine Daten verloren gehen. Diese Figur zeigt den Ablauf eines H_CALL-Transfers zu der Koprozessor-Schnittstelle 30, wobei zwei Register transferiert werden müssen. Der zweite Transfer wird aufgrund einer negierten Datenbestätigung (H_DA*) 71 wiederholt.
  • Für Transfers von einem externen Koprozessor 14 zu den Prozessorregistern 46 kann der Prozessor 12 Werte von einem externen Koprozessor 14 während jedes Taktgeberzyklus akzeptieren, nachdem H_DS* 70 gesetzt wurde, und diese Werte werden in die Registerdatei 46 geschrieben, sobald sie empfangen werden, so dass keine Zwischenspeicherung erforderlich ist.
  • 16 ist ein Timingdiagramm, das ein Beispiel von Registertransfers 46 in Verbindung mit dem H_RET-Grundelement illustriert. Bei diesem Beispiel werden zwei Registerwerte 46 transferiert. Der Koprozessor 14 kann zu Beginn des Taktes, der auf das Setzen des H_EXEC*-Signals 65 folgt, beginnen, Daten zu schicken, da dies derjenige Takt ist, in dem H_DS* 70 zuerst gesetzt wird. Die H_DS*-Ausgabe 70 ändert sich mit der ansteigenden Flanke von CLK 60, während die H_DA*-Eingabe 71 während der Low-Phase von CLK 60 gesampelt wird.
  • Der Prozessor 12 bietet die Fähigkeit, einen einzelnen Speicheroperanden mit den H_LD- oder H_ST-Anweisungs-Grundelementen zu oder von der Koprozessor-Schnittstelle 30 zu transferieren.
  • Das H_LD-Grundelement wird verwendet, um Daten aus dem Speicher 18 zu dem Koprozessor 14 zu transferieren. Das Handshaking des Operandentransfers zum Koprozessor 14 wird von dem Datenfreigabesignal (H_DS*) 70 gesteuert. Die Datenfreigabe wird von dem Prozessor 12 gesetzt, um anzuzeigen, dass ein gültiger Operand in den HDP [31 : 0]-Bus 72 gestellt wurde. Die Datenbestätigungseingabe (H_DA*) 71 wird für diesen Transfer ignoriert.
  • 17 ist ein Timingdiagramm, das den Ablauf eines H_LD-Transfers an die Koprozessor-Schnittstelle 30 illustriert. In diesem Fall gibt es einen Zugriff auf den Speicher 18 mit No-Wait-Zustand. Bei Zugriffen auf den Speicher 18 mit n-Wait-Zuständen, würde der Operand und H_DS* 70 n Takte später verschickt. Wird die Option, das Basisregister 46 mit der effektiven Ladeadresse zu aktualisieren, gewählt, wird der Aktualisierungswert auf HDP [31 : 0] 72 beim ersten Takt, nachdem er berechnet wurde, angesteuert (beim Takt der dem Setzen von H_EXEC* 65 folgt).
  • 18 ist ein Timingdiagramm, das das Protokoll illustriert, wenn ein Zugriff auf den Speicher 18 zu einer Zugriffsausnahme führt. In einem solchen Fall wird das H_ERR*-Signal 69 zu dem externen Koprozessor 14 zurückgesetzt.
  • Das H_ST-Grundelement kann für einen Datentransfer von einem Koprozessor 14 zum Speicher 18 verwendet werden. Wenn die Option, das Basisregister 46 mit der effektiven Speicheradresse zu aktualisieren, ausgewählt ist, wird der Aktualisierungswert auf HDP [31 : 0] 72 beim ersten Takt, nachdem er berechnet wurde, angesteuert (der Takt, der dem Setzen von H_EXEC* 65 folgt).
  • 19 ist ein Timingdiagramm, das ein Beispiel eines mit dem H_ST-Grundelement in Beziehung stehenden Transfers illustriert. Das Handshaking, das mit dem H_ST-Grundelement in Beziehung steht, besteht aus zwei Teilen, einem Anfangshandshake vom Koprozessor 14, der Speicherdaten liefern muss, und ein Vollendungshandshake vom Prozessor 12, sobald die Speicherung im Speicher 18 vollendet ist.
  • Der Anfangshandshake benutzt die H_DA*-Eingabe 71 zum Prozessor 12, um zu signalisieren, dass der Koprozessor 14 die Speicherdaten dem Prozessor 12 übergeben hat. Das H_DA*-Signal 71 wird in demselben Takt gesetzt, in dem die Daten von dem Koprozessor 14 auf den HDP [31 : 0]-Bus 72 geführt werden. Die Speicherdaten werden zur Speicherung einer halben Wortlänge von der unteren Hälfte des Busses ge nommen. Die oberen 16 Bit werden nicht in den Speicher 18 geschrieben. Das H_DA*-Signal 71 wird, beginnend mit dem Takt, in dem das H_EXEC*-Signal 65 gesetzt wird, gesampelt. Der Speicherzyklus muss während des Taktes, in dem H_DA* 71 erkannt wird, erfolgen, und die Speicherdaten werden im folgenden Takt dem Speicher 18 zugeführt. Sobald die Speicherung vollendet ist, setzt der Prozessor 12 das H_DS*-Signal 70.
  • 20 ist ein Timingdiagramm, das ein Beispiel eines Transfers mit verzögerten Speicherdaten illustriert.
  • 21 ist ein Timingdiagramm, das die Protokollsignale illustriert, wenn die Speicherung zu einem Zugriffsfehler führt. Man beachte hier, dass das H_ERR*-Signal 69 gesetzt ist. Wenn die Hardware-Einheit die Anweisung durch Setzen von H_EXCP* 66 in dem Takt abbricht, in dem H_EXEC* 65 gesetzt wird, sollte das H_DA*-Signal 71 nicht gesetzt werden.
  • Die 22 bis 26 illustrieren Anweisungen, die als Teil des Anweisungssatzes der Schnittstelle zu einem Hardware-Beschleuniger (oder Koprozessor) 14 bereitgestellt werden. Der Prozessor 12 interpretiert einige der Felder in den Grundelementen, andere werden allein vom Koprozessor 14 interpretiert.
  • 22 illustriert ein Anweisungsformat für das H_CALL-Grundelement. Diese Anweisung wird benutzt, um eine von dem Koprozessor 14 implementierte Funktion aufzurufen ("call"). Das Paradigma ist ähnlich einer Standardsoftware-Aufrufkonvention, jedoch im Handware-Kontext. Das H_CALL-Grundelement wird sowohl vom Prozessor 12 als auch vom Koprozessor 14 interpretiert, um eine Liste von "Aufrufpara metern" oder Argumenten vom Prozessor 12 zu transferieren und eine spezielle Funktion im Koprozessor 14 anzustoßen.
  • Die W- und CODE-Felder des Anweisungswortes werden nicht vom Prozessor 12 interpretiert. Diese werden verwendet, um eine für den Koprozessor 14 spezifische Funktion zu spezifizieren. Das W-Feld kann einen speziellen Koprozessor 14, 16 spezifizieren, und das CODE-Feld kann eine besondere Betriebsweise spezifizieren. Das CNT-Feld wird sowohl vom Prozessor 12 als auch vom Koprozessor 14 interpretiert und spezifiziert eine Anzahl von Registerargumenten, die an den Koprozessor 14 gehen.
  • Die Argumente werden von allgemeinen Register 46 verschickt, beginnend mit R4 und weiter bis R(4 + CNT – 1). Bis zu sieben Parameter oder Register 46 können in einem einzigen H_CALL-Aufruf verschickt werden.
  • Die H_Call-Anweisung kann verwendet werden, um einen modularen Modulaufruf zu implementieren. Von der Verwendung dieses Typs von Schnittstelle ist seit langem bekannt, dass es in Softwaresystemen zu einer höheren Zuverlässigkeit und weniger Fehlern führt. Funktionsparameter werden üblicherweise am Besten durch ihren Wert verschickt. Dies reduziert Seiteneffekte signifikant. In vielen Fällen verschicken moderne Compiler für blockstrukturierte Sprachen, wie etwa C und C++, kurze Sequenzen von Parametern oder Argumenten, um Funktionen oder Subroutinen im Register 46 aufzurufen. Diese Technik kann mit der H_CALL-Anweisung implementiert werden. Ein Compiler kann so konfiguriert werden, dass bis zu sieben Parameter oder Argumente, beginnend bei R4, in aufeinander folgende Register 46 geladen werden und dann die H_CALL-Anweisung erzeugt wird, welche die standardmäßige, vom Compiler erzeugte Subroutinen Verbindungsanweisung ersetzt.
  • 23 illustriert ein Anweisungsformat für das H_RET-Grundelement. Diese Anweisung wird für die "Rückkehr von" einer vom Koprozessor 14 implementierten Funktion verwendet. Das Paradigma ist ähnlich der Softwareaufrufskonvention, die vom Prozessor 12 verwendet wird, jedoch in einem Hardware-Kontext. Das H_RET-Grundelement wird sowohl vom Prozessor 12 als auch vom Koprozessor 14 verwendet, um eine Liste von "Rückkehrparametern" oder Werten von einem Koprozessor 14 zum Prozessor 12 zu transferieren.
  • Die W- und CODE-Felder des Anweisungswortes werden vom Prozessor 12 nicht interpretiert. Diese werden verwendet, um eine für den Koprozessor 14 spezifische Funktion zu spezifizieren. Das W-Feld kann eine Hardware-Einheit spezifizieren und das CODE-Feld kann eine besondere Betriebsweise oder einen Satz von Registern 46 im Koprozessor 14 für die Rückkehr spezifizieren. Das CNT-Feld wird sowohl vom Prozessor 12 als auch vom Koprozessor 14 interpretiert und spezifiziert die Anzahl von Registerargumenten 46, die vom Koprozessor 14 zum Prozessor 12 geschickt werden sollen.
  • Die Argumente werden von den allgemeinen Registern 46 des Prozessors 12, beginnend mit R4 und weiter bis R(4 + CNT-1), verschickt. Bis zu sieben Parameter (oder Registerinhalte) können zurückgegeben werden.
  • Wie bei der H_CALL-Anweisung kann auch die H_RET-Anweisung zur Implementierung modularer Programmierung verwendet werden. Strukturiertes Programmieren erfordert, dass Funktionsrückgabewerte am Besten über ihren Wert an die aufrufende Routine zurückgeschickt werden. Dies wird von Compilern oft auf effiziente Weise durchgeführt, indem ein oder mehrere Rückgabewerte in Register für eine Subroutinen- oder Funktionsrückkehr gestellt werden. Es sollte jedoch beachtet werden, dass die traditionelle, strukturierte Programmierung erwartet, dass eine Subroutine oder Funktion nach Aufruf der Subroutine oder Funktion unverzüglich zurückkehrt. Im Fall des Koprozessors 14 erfolgt die Ausführung oft asynchron mit derjenigen des aufrufenden Prozessors 12. Die H_RET-Anweisung kann zur Resynchronisierung von Prozessor 12 und Koprozessor 14 verwendet werden. Der Prozessor 12 kann daher ein oder mehrere Register 46 laden, den Koprozessor 14 mit einer oder mehreren H_CALL-Anweisungen aktivieren, andere, unabhängige Anweisungen abarbeiten und sich dann mit dem Koprozessor 14 resynchronisieren, während er einen Ergebniswert oder Ergebniswerte, die von der H_RET-Anweisung ausgegeben wurden, vom Koprozessor 14 empfängt.
  • 24 illustriert ein Anweisungsformat für das H_EXEC-Grundelement. Diese Anweisung wird verwendet, um eine Funktion zu initiieren oder um in einen von dem Beschleuniger implementierten Operationsmodus einzusteigen. Die H_EXEC-Anweisung kann verwendet werden, um eine Funktion in einem spezifischen Koprozessor 14, 16, wie er von dem W-Feld spezifiziert ist, zu spezifizieren. Das CODE-Feld wird vom Prozessor 12 nicht interpretiert, sondern ist vielmehr dem bestimmten Koprozessor 14, 16 vorbehalten. Die W- und CODE-Felder des Anweisungswortes werden vom Prozessor 12 nicht interpretiert. Diese werden verwendet, um eine für den Koprozessor 14 spezifische Funktion zu spezifizieren. Das W-Feld kann einen spezifischen Prozessor 14, 16 spezifizieren, und das CODE-Feld kann eine besondere Betriebsweise spezifizieren.
  • 25 illustriert ein Anweisungsformat für die H_LD-Anweisung. Diese Anweisung wird verwendet, um einen Wert vom Speicher 18 zu einem Koprozessor 14 zu verschicken, ohne den Speicheroperanden vorübergehend im allgemeinen Register (GPR: General Purpose Register) 46 zu speichern. Der Speicheroperand wird unter Verwendung eines Basispointers und eines Offsets adressiert.
  • Die H_LD-Anweisung führt das Laden eines Wertes in den Speicher 18 aus und verschickt den Speicheroperanden an den Koprozessor 14, ohne ihn in einem Register 46 zu speichern. Die H_LD-Operation hat drei Optionen: w = Wort h = halbes Wort und u = Aktualisierung (update). DISP wird durch Skalierung des IMM2-Feldes mit der Größe der Ladedaten und Auffüllen mit Nullen erreicht. Dieser Wert wird zu dem Wert des Registers RX addiert, und ein Laden der spezifizierten Größe wird von dieser Adresse aus durchgeführt mit dem Ergebnis, dass das Laden an die Hardware-Schnittstelle 28 weitergereicht wird. Beim Laden von halben Wörtern werden die geholten Daten auf 32 Bit mit Nullen aufgefüllt. Wenn die u-Option spezifiziert ist, wird die effektive Ladeadresse, nachdem sie berechnet ist, in das Register RX 46 eingestellt.
  • Das W-Feld des Anweisungswortes wird vom Prozessor 12 nicht interpretiert. Dieses Feld kann einen speziellen Koprozessor 14, 16 spezifizieren. Das SZ-Feld spezifiziert die Größe des Operanden (nur Halbwort oder Wort). Das DISP-Feld spezifiziert einen vorzeichenlosen Offsetwert, der zu dem Inhalt des von dem RBASE-Feld spezifizierten Registers addiert wird, um die effektive Ladeadresse zu bilden. Der Wert des DISP-Feldes wird mit der Größe des zu transferierenden Operanden skaliert. Das Up-Feld spezifiziert, ob das RBASE-Register 46 mit der effektiven Ladeadresse aktualisiert werden soll, nachdem diese berechnet ist. Diese Option erlaubt einen automatisch aktualisierten ("auto-update") Adressierungsmodus.
  • 26 illustriert ein Anweisungsformat für die H_ST-Anweisung. Diese Anweisung wird verwendet, um einen Wert von einem Koprozessor 14 an den Speicher 18 weiterzureichen, ohne den Speicheroperanden zwischenzeitlich in einem Register 46 des Prozessors 12 zu speichern. Der Speicheroperand wird unter Verwendung eines Basispointers und eines Offsets adressiert.
  • Das UU-Feld des Anweisungswortes wird vom Prozessor 12 nicht interpretiert. Vielmehr kann dieses Feld einen speziellen Koprozessor 14, 16 spezifizieren. Das SZ-Feld spezifiziert die Größe des Operanden (nur Halbwort oder Wort). Das DISP-Feld spezifiziert einen vorzeichenlosen Offsetwert, der zu dem Inhalt des von dem RBASE-Feld spezifizierten Registers 46 addiert wird, um die effektive Speicheradresse zu bilden. Der Wert des DISP-Feldes wird mit der Größe des zu transferierenden Operanden skaliert. Das Up-Feld spezifiziert, ob das RBASE-Register mit der effektiven Speicheradresse aktualisiert werden soll, nachdem diese berechnet ist. Diese Option erlaubt einen Adressierungsmodus mit "automatischer Aktualisierung".
  • Die H_ST-Anweisung führt eine Speicherung eines Operanden vom Koprozessor 14 in den Speicher 18 aus, ohne ihn in einem Register 46 zu speichern. Die H_ST-Operation hat drei Optionen: w = Wort, h = halbes Wort und u = Aktualisierung (update). DISP wird durch Skalierung des IMM2- Feldes mit der Speichergröße und Auffüllen mit Nullen erreicht. Dieser Wert wird zu dem Wert des Registers RX addiert, und eine Speicherung der spezifizierten Größe wird an diese Adresse vorgenommen, wobei die Daten für diese Speicherung von der Hardware-Schnittstelle erhalten werden. Wenn die u-Option spezifiziert ist, wird die effektive Ladeadresse, nachdem sie berechnet ist, in das Register RX eingestellt.
  • Die H_LD-Anweisung und die H_ST-Anweisung liefern einen effizienten Mechanismus, um Operanden vom Speicher 18 zu einem Koprozessor 14 und von einem Koprozessor 14 zum Speicher 18 zu bewegen, ohne die zu bewegenden Daten über die Register 46 zu leiten. Die Offset- und Index-Vorkehrungen bieten einen Mechanismus, um effizient durch Arrays zu laufen. Diese Anweisungen sind daher innerhalb von Schleifen besonders nützlich. Es sollte beachtet werden, dass beide Anweisungen für jeden geladenen oder gespeicherten Operanden den Prozessor 12 mit dem Koprozessor 14 synchronisieren. Ist dies nicht erforderlich oder sogar nicht bevorzugt, kann man alternativ Daten zum Koprozessor 14 leiten, indem man ein ausgewähltes Register oder ausgewählte Register 46 wiederholt mit Daten aus dem Speicher 18 belädt und den Koprozessor 14 diese Beladungen detektieren lässt, da der Koprozessor-Schnittstellen-Bus 30 auch für die Registersuchaktionen ("register snooping") verwendet wird.
  • Der Fachmann wird erkennen, dass Modifikationen und Variationen durchgeführt werden können, ohne sich von dem Umfang der Erfindung zu entfernen. Es ist daher vorgesehen, dass diese Erfindung all solche Variationen und Modifikati onen umfasst, die in den Bereich der beigefügten Ansprüche fallen.

Claims (10)

  1. Verfahren zum Betreiben eines Prozessors (12), der eingerichtet ist, um mit einem mit ihm über einen Koprozessor-Bus (30) verbundenen Koprozessor (14, 16) zusammenzuarbeiten, wobei der Koprozessor-Bus von dem System-Bus getrennt ist und der Prozessor in der Lage ist, bei einer Ausführung wenigstens einer Anweisung (H_CALL), welche ein Zähler-Feld, das eine Anzahl von an den Koprozessor zu transferierenden Argumenten definiert, und ein Code-Feld umfasst, mit dem Koprozessor über den Koprozessor-Bus ohne Verwendung des System-Busses zu kommunizieren, wobei das Verfahren die folgenden Schritte umfasst: Empfangen der Anweisen, Liefern des Zähler-Feldes und des Code-Feldes an den Koprozessor, über einen ersten Zyklus auf dem Koprozessor-Bus, falls das Zähler-Feld einen Wert n hat, der größer als Null ist, liefern eines ersten Operanden an den Koprozessor über einen zweiten Zyklus auf dem Koprozessor-Bus, und Vollenden der Anweisung.
  2. Verfahren nach Anspruch 1, weiter umfassend die Schritte: Empfangen eines ersten Eingangssignals (64) von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus, wobei, falls das von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus empfangene erste Eingangsignal einen ersten Zustand hat, der erste Zyklus wiederholt wird, wobei der Schritt des Wiederholen des ersten Zyklus umfasst: Liefern des Zähler- und des Code-Feldes an den Koprozessor über den ersten Zyklus auf dem Koprozessor-Bus, und Empfangen des ersten Eingangssignals von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus, und wobei, wenn das von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus empfangene erste Eingangssignal einen zweiten Zustand hat, ein erstes Ausgangssignal (65) an den Koprozessor über den zweiten Zyklus des Koprozessor-Busses geliefert wird.
  3. Verfahren nach Anspruch 1, weiter umfassend die Schritte: wenn ein Zähler-Feld-Wert n größer als 1 ist, dann während jedes von (n–1) Zyklen auf dem Koprozessor-Bus: Liefern eines nächsten von (n–1) Operanden an den Koprozessor über den Koprozessor-Bus, und Empfangen eines zweiten Eingangssignals vom Koprozessor über den Koprozessor-Bus.
  4. Verfahren nach Anspruch 1, wobei der Prozessor geeignet ist, bei der Ausführung der Anweisung mit einer Mehr zahl von mit ihm über den Koprozessor-Bus verbundenen Koprozessoren zusammenzuarbeiten, wobei das Verfahren weiter den Schritt umfasst: Liefern eines Identifikator-Feldes an die Mehrzahl von Koprozessoren über den Koprozessor-Bus während des ersten Zyklus, wobei ein Identifikator-Feld einen Wert hat, der einen ausgewählten der Mehrzahl von Koprozessoren eindeutig identifiziert.
  5. Verfahren nach Anspruch 1, wobei der Prozessor eine Mehrzahl von Registern zum Speichern ausgewählter Operanden umfasst, und wobei der Schritt des Lieferns des ersten Operanden an den Koprozessor über den Koprozessor-Bus während des zweiten Zyklus weiter gekennzeichnet ist, durch: wenn das Zähler-Feld einen Wert n hat, der größer als Null ist, Liefern eines in einem vorbestimmten der Mehrzahl von Registern gespeicherten Operanden an den Koprozessor über einen zweiten Zyklus auf dem Koprozessor-Bus.
  6. Verfahren zum Betreiben eines Prozessors (12), der eingerichtet ist, um mit einem mit ihm über einen Koprozessor-Bus (30) verbundenen Koprozessor (14, 16) zusammenzuarbeiten, wobei der Koprozessor-Bus von dem System-Bus getrennt ist und der Prozessor in der Lage ist, bei einer Ausführung von wenigstens einer Anweisung (H_RET), die ein Zähler-Feld, welches eine Anzahl von von dem Koprozessor zu empfangenden Argumenten definiert, und ein Code-Feld umfasst, mit dem Koprozessor über den Koprozessor-Bus ohne Verwendung des System-Busses zu kommunizieren, wobei das Verfahren die Schritte umfasst: Empfangen der Anweisung, Liefern des Zähler- und des Code-Feldes an den Koprozessor über einen ersten Zyklus auf dem Koprozessorbus-Bus, wenn das Zähler-Feld einen Wert n hat, der größer als Null ist, Empfangen eines ersten Operanden von dem Koprozessor über einen zweiten Zyklus auf dem Koprozessor-Bus, und Vollenden der Anweisung.
  7. Verfahren nach Anspruch 6, weiter umfassend den Schritt des Empfangens eines ersten Eingangssignals (64) von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus, wobei: wenn das von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus empfangene erste Eingangssignal einen ersten Zustand hat, der erste Zyklus wiederholt wird, wobei der Schritt des Wiederholens des ersten Zyklus umfasst: Liefern des Zähler- und des Code-Feldes an den Koprozessor über den ersten Zyklus auf dem Koprozessor-Bus, und Empfangen des ersten Eingangssignals von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus, und wenn das von dem Koprozessor über den Koprozessor-Bus während des ersten Zyklus empfangene erste Eingangssignal einen zweiten Zustand hat, Liefern eines ersten Ausgangssignals (65) an den Koprozessor über den zweiten Zyklus auf dem Koprozessor-Bus.
  8. Verfahren nach Anspruch 6, weiter umfassend die Schritte: wenn der Zähler-Feld-Wert n größer als eins ist, dann bei jedem von (n-1) Zyklen auf den Koprozessor-Bus: Empfangen eines zweiten Eingangssignals von dem Koprozessor über den Koprozessor-Bus, wobei, falls das zweite Eingangssignal einen ersten Zustand hat, ein nächster von (n-1) Operanden von dem Koprozessor über den Koprozessor-Bus empfangen wird.
  9. Verfahren nach Anspruch 6, wobei der Prozessor eingerichtet ist, um bei der Ausführung der Anweisung mit einer Mehrzahl von mit ihm über den Koprozessor-Bus verbundenen Koprozessoren zusammenzuarbeiten, wobei das Verfahren weiter den Schritt umfasst: Liefern eines Identifikator-Feldes an die Mehrzahl von Koprozessoren über den Koprozessor-Bus während des ersten Zyklus, wobei das Identifikator-Feld einen Wert hat, der einen ausgewählten der Mehrzahl von Koprozessoren eindeutig identifiziert.
  10. Verfahren nach Anspruch 6, wobei der Prozessor eine Mehrzahl von Registern zum Speichern ausgewählter Operanden umfasst, bei der Schritt des Empfangens des ersten Operanden von dem Koprozessor über den Koprozessor-Bus während des zweiten Zyklus weiter gekennzeichnet ist, durch: wenn das Zähler-Feld einen Wert n hat, der größer als Null ist, Empfangen eines Operanden von dem Koprozessor über einen zweiten Zyklus auf dem Koprozessor-Bus und Speichern des Operanden in einem vorbestimmten der Mehrzahl von Registern.
DE69814268T 1997-09-05 1998-08-24 Verfahren zur Anbindung eines Prozessors an einen Koprozessor Expired - Fee Related DE69814268T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/924,518 US6505290B1 (en) 1997-09-05 1997-09-05 Method and apparatus for interfacing a processor to a coprocessor
US924518 1997-09-05

Publications (2)

Publication Number Publication Date
DE69814268D1 DE69814268D1 (de) 2003-06-12
DE69814268T2 true DE69814268T2 (de) 2004-01-22

Family

ID=25450311

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69814268T Expired - Fee Related DE69814268T2 (de) 1997-09-05 1998-08-24 Verfahren zur Anbindung eines Prozessors an einen Koprozessor

Country Status (8)

Country Link
US (3) US6505290B1 (de)
EP (2) EP1282035A1 (de)
JP (1) JP3920994B2 (de)
KR (1) KR100563012B1 (de)
CN (3) CN1307536C (de)
DE (1) DE69814268T2 (de)
SG (2) SG102528A1 (de)
TW (1) TW385410B (de)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001092663A (ja) * 1999-09-17 2001-04-06 Sanyo Electric Co Ltd データ処理装置
US6829697B1 (en) * 2000-09-06 2004-12-07 International Business Machines Corporation Multiple logical interfaces to a shared coprocessor resource
EP2804106A1 (de) * 2000-09-06 2014-11-19 Ericsson Modems SA Zwischenprozessorkommunikationssystem
JP2002149402A (ja) * 2000-11-14 2002-05-24 Pacific Design Kk データ処理装置およびその制御方法
JP2002169724A (ja) * 2000-12-01 2002-06-14 Oki Electric Ind Co Ltd キャッシュメモリにおける部分無効化装置
US6754804B1 (en) * 2000-12-29 2004-06-22 Mips Technologies, Inc. Coprocessor interface transferring multiple instructions simultaneously along with issue path designation and/or issue order designation for the instructions
US7287147B1 (en) 2000-12-29 2007-10-23 Mips Technologies, Inc. Configurable co-processor interface
US7237090B1 (en) 2000-12-29 2007-06-26 Mips Technologies, Inc. Configurable out-of-order data transfer in a coprocessor interface
US7168066B1 (en) 2001-04-30 2007-01-23 Mips Technologies, Inc. Tracing out-of order load data
US7240203B2 (en) * 2001-07-24 2007-07-03 Cavium Networks, Inc. Method and apparatus for establishing secure sessions
GB2378271B (en) * 2001-07-30 2004-12-29 Advanced Risc Mach Ltd Handling of coprocessor instructions in a data processing apparatus
US7228401B2 (en) * 2001-11-13 2007-06-05 Freescale Semiconductor, Inc. Interfacing a processor to a coprocessor in which the processor selectively broadcasts to or selectively alters an execution mode of the coprocessor
US6886092B1 (en) * 2001-11-19 2005-04-26 Xilinx, Inc. Custom code processing in PGA by providing instructions from fixed logic processor portion to programmable dedicated processor portion
US6795877B2 (en) * 2001-11-29 2004-09-21 Intel Corporation Configurable serial bus to couple baseband and application processors
FR2834154B1 (fr) * 2001-12-21 2005-03-11 Oberthur Card Syst Sa Unite electronique incluant des moyens de cryptographie capables de traiter des informations a haut debit
US7305567B1 (en) 2002-03-01 2007-12-04 Cavium Networks, In. Decoupled architecture for data ciphering operations
US7154941B2 (en) * 2002-06-28 2006-12-26 Nokia Corporation Modem having a vector-architecture processor, and associated methodology therefor
EP1387259B1 (de) * 2002-07-31 2017-09-20 Texas Instruments Incorporated Zwischen-Prozessor Steuerung
JP4182801B2 (ja) * 2003-04-24 2008-11-19 日本電気株式会社 マルチプロセサシステム
KR100849296B1 (ko) * 2003-06-13 2008-07-29 삼성전자주식회사 주제어부와 보조제어부를 구비하는 시스템에서의보조제어부의 초기화 장치 및 방법
JP4224430B2 (ja) * 2003-07-07 2009-02-12 株式会社ルネサステクノロジ 情報処理装置
US7441106B2 (en) 2004-07-02 2008-10-21 Seagate Technology Llc Distributed processing in a multiple processing unit environment
EP1615123B1 (de) * 2004-07-09 2010-04-07 Michael Colin George Chapman Hochleistungsfähiger benutzer-konfigurierbarer Prozessor
JP3768516B1 (ja) * 2004-12-03 2006-04-19 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサシステムとそのシステムにおけるプログラム実行方法
US20060155974A1 (en) * 2005-01-07 2006-07-13 Moyer William C Data processing system having flexible instruction capability and selection mechanism
JP3867804B2 (ja) * 2005-03-22 2007-01-17 セイコーエプソン株式会社 集積回路装置
US7472261B2 (en) * 2005-11-08 2008-12-30 International Business Machines Corporation Method for performing externally assisted calls in a heterogeneous processing complex
KR100781340B1 (ko) * 2006-09-18 2007-11-30 삼성전자주식회사 사용자 정의 확장 연산을 처리하는 연산 시스템 및 방법
US8095699B2 (en) * 2006-09-29 2012-01-10 Mediatek Inc. Methods and apparatus for interfacing between a host processor and a coprocessor
WO2008045341A1 (en) * 2006-10-05 2008-04-17 Arc International Inter-processor communication method
US20080147357A1 (en) * 2006-12-15 2008-06-19 Iintrinisyc Software International System and method of assessing performance of a processor
FR2942556B1 (fr) * 2009-02-24 2011-03-25 Commissariat Energie Atomique Unite d'allocation et de controle
US9632794B2 (en) 2009-06-23 2017-04-25 Seiko Epson Corporation Subprocessor, integrated circuit device, and electronic apparatus
EP2278452A1 (de) * 2009-07-15 2011-01-26 Nxp B.V. Koprozessorprogrammierung
JP5632651B2 (ja) * 2010-05-19 2014-11-26 スパンション エルエルシー 半導体回路及び設計装置
WO2012134532A1 (en) 2011-04-01 2012-10-04 Intel Corporation Vector friendly instruction format and execution thereof
CN102736895B (zh) * 2011-04-07 2015-06-10 中兴通讯股份有限公司 一种实现寄存器文件间的数据传输方法及装置
EP2525286A1 (de) * 2011-05-17 2012-11-21 Nxp B.V. Koprozessorschnittstelle
JP2012252374A (ja) * 2011-05-31 2012-12-20 Renesas Electronics Corp 情報処理装置
JP5653865B2 (ja) * 2011-08-23 2015-01-14 日本電信電話株式会社 データ処理システム
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9329870B2 (en) 2013-02-13 2016-05-03 International Business Machines Corporation Extensible execution unit interface architecture with multiple decode logic and multiple execution units
US9203835B2 (en) 2013-03-01 2015-12-01 Paypal, Inc. Systems and methods for authenticating a user based on a biometric model associated with the user
US20150261535A1 (en) * 2014-03-11 2015-09-17 Cavium, Inc. Method and apparatus for low latency exchange of data between a processor and coprocessor
CN105988773B (zh) * 2015-02-10 2021-03-09 恩智浦美国有限公司 硬件接口组件和用于硬件接口组件的方法
CN106648400B (zh) * 2015-11-03 2020-04-03 华为终端有限公司 一种触摸数据上报的方法及电子设备
CN108076476B (zh) * 2016-11-18 2020-11-06 华为技术有限公司 用于传输数据的方法和装置
US11263014B2 (en) * 2019-08-05 2022-03-01 Arm Limited Sharing instruction encoding space between a coprocessor and auxiliary execution circuitry
CN110532040A (zh) * 2019-08-29 2019-12-03 北京地平线机器人技术研发有限公司 固件程序的加载方法及装置、存储介质和电子设备
CN111917471B (zh) * 2020-09-09 2021-09-28 西安工程大学 一种自由空间可见光通信系统及其通信性能优化算法

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4270167A (en) 1978-06-30 1981-05-26 Intel Corporation Apparatus and method for cooperative and concurrent coprocessing of digital information
US4547849A (en) 1981-12-09 1985-10-15 Glenn Louie Interface between a microprocessor and a coprocessor
US4509116A (en) 1982-04-21 1985-04-02 Digital Equipment Corporation Special instruction processing unit for data processing system
US4729094A (en) 1983-04-18 1988-03-01 Motorola, Inc. Method and apparatus for coordinating execution of an instruction by a coprocessor
US4731736A (en) 1983-04-18 1988-03-15 Motorola, Inc. Method and apparatus for coordinating execution of an instruction by a selected coprocessor
US4715013A (en) 1983-04-18 1987-12-22 Motorola, Inc. Coprocessor instruction format
US4763242A (en) * 1985-10-23 1988-08-09 Hewlett-Packard Company Computer providing flexible processor extension, flexible instruction set extension, and implicit emulation for upward software compatibility
JPH079643B2 (ja) 1986-09-24 1995-02-01 株式会社日立マイコンシステム コプロセツサデ−タ転送制御方式
US5001624A (en) 1987-02-13 1991-03-19 Harrell Hoffman Processor controlled DMA controller for transferring instruction and data from memory to coprocessor
US5226170A (en) * 1987-02-24 1993-07-06 Digital Equipment Corporation Interface between processor and special instruction processor in digital data processing system
IN171198B (de) 1987-02-24 1992-08-15 Digital Equipment Corp
US5091845A (en) * 1987-02-24 1992-02-25 Digital Equipment Corporation System for controlling the storage of information in a cache memory
US5341482A (en) * 1987-03-20 1994-08-23 Digital Equipment Corporation Method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions
JPS63259727A (ja) 1987-04-17 1988-10-26 Hitachi Ltd コプロセツサのインタ−フエイス方式
US4991078A (en) 1987-09-29 1991-02-05 Digital Equipment Corporation Apparatus and method for a pipelined central processing unit in a data processing system
JPH0679307B2 (ja) 1987-10-22 1994-10-05 日本電気株式会社 コプロセッサの並行動作制御方式
JPH01147656A (ja) 1987-12-03 1989-06-09 Nec Corp マイクロプロセッサ
JPH01277934A (ja) * 1988-04-29 1989-11-08 Nec Corp パラメータリスト参照方法の切換え方式
JP2741867B2 (ja) * 1988-05-27 1998-04-22 株式会社日立製作所 情報処理システムおよびプロセツサ
US5109514A (en) * 1988-07-28 1992-04-28 Sun Microsystems, Inc. Method and apparatus for executing concurrent CO processor operations and precisely handling related exceptions
JP2754825B2 (ja) 1989-02-03 1998-05-20 日本電気株式会社 マイクロプロセッサ
US5093908A (en) 1989-04-17 1992-03-03 International Business Machines Corporation Method and apparatus for executing instructions in a single sequential instruction stream in a main processor and a coprocessor
US5218711A (en) 1989-05-15 1993-06-08 Mitsubishi Denki Kabushiki Kaisha Microprocessor having program counter registers for its coprocessors
US5247650A (en) * 1989-08-30 1993-09-21 Industrial Technology Institute System for combining originally software incompatible control, kinematic, and discrete event simulation systems into a single integrated simulation system
WO1991011765A1 (en) 1990-01-29 1991-08-08 Teraplex, Inc. Architecture for minimal instruction set computing system
EP0468831B1 (de) 1990-06-29 1997-10-15 Digital Equipment Corporation Busprotokoll für Prozessor mit write-back cache
US5305446A (en) 1990-09-28 1994-04-19 Texas Instruments Incorporated Processing devices with improved addressing capabilities, systems and methods
US5826101A (en) 1990-09-28 1998-10-20 Texas Instruments Incorporated Data processing device having split-mode DMA channel
US5283881A (en) * 1991-01-22 1994-02-01 Westinghouse Electric Corp. Microcoprocessor, memory management unit interface to support one or more coprocessors
JP3206006B2 (ja) * 1991-01-25 2001-09-04 株式会社日立製作所 二重化バス制御方法及び装置
US5488729A (en) 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5767939A (en) 1991-10-09 1998-06-16 Seiko Epson Corporation Eyeglass lens
US5708784A (en) * 1991-11-27 1998-01-13 Emc Corporation Dual bus computer architecture utilizing distributed arbitrators and method of using same
JPH07504054A (ja) 1992-02-18 1995-04-27 アプル・コンピュータ・インコーポレーテッド コンピュータシステムにおけるコプロセッサのプログラミングモデル
US5481743A (en) 1993-09-30 1996-01-02 Apple Computer, Inc. Minimal instruction set computer architecture and multiple instruction issue method
US5706478A (en) * 1994-05-23 1998-01-06 Cirrus Logic, Inc. Display list processor for operating in processor and coprocessor modes
JP2987308B2 (ja) * 1995-04-28 1999-12-06 松下電器産業株式会社 情報処理装置
US5603047A (en) 1995-10-06 1997-02-11 Lsi Logic Corporation Superscalar microprocessor architecture
US5898897A (en) * 1996-10-18 1999-04-27 Samsung Electronics Company, Ltd. Bit stream signal feature detection in a signal processing system
US5953741A (en) * 1996-11-27 1999-09-14 Vlsi Technology, Inc. Stack cache for stack-based processor and method thereof
US5715439A (en) * 1996-12-09 1998-02-03 Allen-Bradley Company, Inc. Bi-directional co-processor interface
GB2326253A (en) 1997-06-10 1998-12-16 Advanced Risc Mach Ltd Coprocessor data access control
US6760833B1 (en) 1997-08-01 2004-07-06 Micron Technology, Inc. Split embedded DRAM processor
US6226738B1 (en) 1997-08-01 2001-05-01 Micron Technology, Inc. Split embedded DRAM processor
US6163836A (en) 1997-08-01 2000-12-19 Micron Technology, Inc. Processor with programmable addressing modes
US6216222B1 (en) 1998-05-14 2001-04-10 Arm Limited Handling exceptions in a pipelined data processing apparatus
US6247113B1 (en) 1998-05-27 2001-06-12 Arm Limited Coprocessor opcode division by data type
US6434689B2 (en) 1998-11-09 2002-08-13 Infineon Technologies North America Corp. Data processing unit with interface for sharing registers by a processor and a coprocessor
KR100308618B1 (ko) 1999-02-27 2001-09-26 윤종용 단일 칩 상의 마이크로프로세서-코프로세서 시스템을 구비한 파이프라인 데이터 처리 시스템 및 호스트 마이크로프로세서와 코프로세서 사이의 인터페이스 방법
US6446221B1 (en) 1999-05-19 2002-09-03 Arm Limited Debug mechanism for data processing systems
US6557069B1 (en) 1999-11-12 2003-04-29 International Business Machines Corporation Processor-memory bus architecture for supporting multiple processors
US6526469B1 (en) 1999-11-12 2003-02-25 International Business Machines Corporation Bus architecture employing varying width uni-directional command bus
US6513091B1 (en) 1999-11-12 2003-01-28 International Business Machines Corporation Data routing using status-response signals
US6658545B1 (en) 2000-02-16 2003-12-02 Lucent Technologies Inc. Passing internal bus data external to a completed system
US6626489B2 (en) * 2001-07-18 2003-09-30 Evenflo Company, Inc. Infant seat providing a cushioned carry

Also Published As

Publication number Publication date
US6505290B1 (en) 2003-01-07
CN1983167A (zh) 2007-06-20
EP1282035A1 (de) 2003-02-05
CN1299218C (zh) 2007-02-07
KR19990029361A (ko) 1999-04-26
JP3920994B2 (ja) 2007-05-30
EP0901071A3 (de) 1999-10-13
DE69814268D1 (de) 2003-06-12
CN1307536C (zh) 2007-03-28
EP0901071B1 (de) 2003-05-07
US20020049894A1 (en) 2002-04-25
EP0901071A2 (de) 1999-03-10
SG103282A1 (en) 2004-04-29
CN1560729A (zh) 2005-01-05
CN1211012A (zh) 1999-03-17
TW385410B (en) 2000-03-21
JPH11154144A (ja) 1999-06-08
US6327647B1 (en) 2001-12-04
KR100563012B1 (ko) 2007-04-10
SG102528A1 (en) 2004-03-26
US7007154B2 (en) 2006-02-28
CN100573445C (zh) 2009-12-23

Similar Documents

Publication Publication Date Title
DE69814268T2 (de) Verfahren zur Anbindung eines Prozessors an einen Koprozessor
DE4206062C2 (de) Pipelineverarbeitung von Instruktionen
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
US4587632A (en) Lookahead stack oriented computer
DE69631778T2 (de) Flexible implementierung eines systemverwaltungsmodus in einem prozessor
DE19735348B4 (de) Vektorprozessor zur Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern und zugehöriges Verfahren zum Betreiben desselben
US4395757A (en) Process synchronization utilizing semaphores
DE19735350B4 (de) Vektorprozessor zum Ausführen paralleler Operationen und Verfahren hierfür
US4369494A (en) Apparatus and method for providing synchronization between processes and events occurring at different times in a data processing system
DE2317870C2 (de) Schaltungsanordnung zur Steuerung der Datenübertragung zwischen dem Hauptspeicher und mindestens einem E/A-Gerät in einer digitalen Datenverarbeitungsanlage
US5019967A (en) Pipeline bubble compression in a computer system
KR860001274B1 (ko) 병렬처리용 데이터 처리 시스템
DE69233412T2 (de) Vorrichtung und Rechnerprogrammprodukt zur Ausführung von Verzweigungsbefehlen
US6298434B1 (en) Data processing device for processing virtual machine instructions
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
DE2755616C2 (de) Datenverarbeitungsanlage
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
JPH0731603B2 (ja) Forth特定言語マイクロプロセサ
DE69919081T2 (de) Datenprozessor mit Verzweigungssteuerung und -verfahren
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
US4562538A (en) Microprocessor having decision pointer to process restore position
US4394729A (en) Jump return stack
DE69632970T2 (de) Mikroprozessor mit reduzierten Programmcodes
DE19735349B4 (de) Vektorprozessor und Verfahren zu dessen Betrieb

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: FREESCALE SEMICONDUCTOR, INC., AUSTIN, TEX., US

8339 Ceased/non-payment of the annual fee