DE69726400T2 - Festkörper-datenprozessor mit vielseitiger mehrquellen-unterbrechungsorganisation - Google Patents

Festkörper-datenprozessor mit vielseitiger mehrquellen-unterbrechungsorganisation Download PDF

Info

Publication number
DE69726400T2
DE69726400T2 DE69726400T DE69726400T DE69726400T2 DE 69726400 T2 DE69726400 T2 DE 69726400T2 DE 69726400 T DE69726400 T DE 69726400T DE 69726400 T DE69726400 T DE 69726400T DE 69726400 T2 DE69726400 T2 DE 69726400T2
Authority
DE
Germany
Prior art keywords
interrupt
int
vector
bus
data processor
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 - Lifetime
Application number
DE69726400T
Other languages
English (en)
Other versions
DE69726400D1 (de
Inventor
Augusto Jose DE OLIVEIRA
Andreas Hendrik KLAP
Frederik Zandveld
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 BV
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Application granted granted Critical
Publication of DE69726400D1 publication Critical patent/DE69726400D1/de
Publication of DE69726400T2 publication Critical patent/DE69726400T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/46Multiprogramming arrangements
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4818Priority circuits therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)

Description

  • HINTERGRUND DER ERFINDUNG
  • Die vorliegende Erfindung bezieht sich auf einen Datenprozessor entsprechend dem Vorwort von Anspruch 1. Insbesondere können die verschiedenen Unterbrechungsquellen über eine Vielzahl von einzelnen Prioritätsverkettungen verteilt sein.
  • Unterbrechungsorganisationen gibt es seit längerer Zeit, jedoch besteht immer noch der Bedarf nach einer weiteren Verbesserung und Erweiterung. Eine derartige Entwicklung kann auf verschiedenen Qualitäts- und Quantitätsebenen liegen, und aus diesem Grund sollte die vorliegende Erfindung insbesondere für Folgendes sorgen:
    • – sie sollte eine große Anzahl verschiedener Unterbrechungsquellen und/oder Unterbrechungsursachen, typischerweise 200 oder mehr, unterstützen;
    • – sie sollte eine große Anzahl verschiedener Prioritätsebenen, typischerweise 16 oder 32, unterstützen;
    • – sie sollte eine Vektorunterstützung bieten, um die schnelle Auswahl einer geeigneten Behandler-Routine zu erleichtern;
    • – sie sollte in ihrer Größe leicht erweiterbar sein;
    • – sie sollte eine flexible Zuordnung von Unterbrechungsprioritäten erlauben;
    • – sie sollte nur ein Minimum an Routing-Aufwand erfordern.
  • Es wurde kein System angetroffen, das in der Lage ist, alle oben genannten Anforderungen zu einem akzeptablen Preis/Leistungs-Verhältnis zu erfüllen.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung hat daher unter anderem zur Aufgabe, einen Datenprozessor mit einer Unterbrechungsarchitektur zu schaffen, der eine umfassende und vielseitige Lösung für die Kombination aller obigen Anforderungen bietet. Zu diesem Zweck ist die Erfindung gemäß einem ersten Aspekt dadurch gekennzeichnet, dass die genannten Unterbrechungsbehandler-Mittel einen Lese-Vektor-Befehl an alle Unterbrechungsquellen parallel kommunizieren, um daraufhin die Übertragung eines tatsächlichen Unterbrechungsadressvektors auf den genannten Busmitteln zu erlauben. Insbesondere kann der Bus für andere Transportarten außerhalb der Unterbrechungsprozedur verwendet werden, wodurch die Hardware-Anforderungen gemindert werden.
  • Vorteilhafterweise bildet ein Unterbrechungs-Standardvektor-Generator den Abschluss der genannten Prioritätsverkettungsmittel. Dieses Merkmal verhindert die Entwicklung eines blockierten Fortgangs. Weitere vorteilhafte Aspekte werden in den abhängigen Ansprüchen genannt.
  • KURZE BESCHREIBUNG DER ZEICHNUNG
  • Diese und andere Aspekte und Vorteile der Erfindung werden im Folgenden unter Bezugnahme auf die Beschreibung der bevorzugten Ausführungsbeispiele und insbesondere unter Bezugnahme auf die beigefügten Figuren ausführlicher beschrieben. Es zeigen:
  • 1 ein elementares Ausführungsbeispiel einer erfindungsgemäßen Unterbrechungsarchitektur;
  • 2 ein Timing-Diagramm des Unterbrechungsmechanismus;
  • 3 ein Blockschaltbild der Unterbrechungssteuerung;
  • 4 ein Blockschaltbild einer Unterbrechungsquelle;
  • die 5A bis 5D vier verschiedene Implementierungen einer Unterbrechungsquelle;
  • 6 ein Blockschaltbild eines Unterbrechungs-Standardvektor-Generators;
  • 7 ein ausführliches Beispiel eines Verbindungsschemas;
  • 8 ein beispielhaftes Verbindungsschema;
  • 9 eine Übersicht über eine Unterbrechungsarchitektur;
  • 10 die Unterbrechungsquittierungs-Prioritätsverkettung und den Vektorauswahlmechanismus.
  • AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSBEISPIELE
  • In 1 ist ein elementares Ausführungsbeispiel einer erfindungsgemäßen Unterbrechungsarchitektur dargestellt. Das Blockschaltbild enthält die wesentlichen Teilsysteme eines Datenprozessors einer höchstintegrierten Schaltung. Wie abgebildet ist die zentrale Verarbeitungseinheit (CPU) 20 mit dem PI-Bus 30 verbunden, ebenso wie eine Unterbrechungssteuerung 22, die Unterbrechungsquellen 24 und 26 und der Unterbrechungs-Standardvektor-Generator 28. In der Praxis kann die Anzahl der Unterbrechungsquellen groß sein: ein betrachtetes System kann mehr als 20 derartige physikalische Quellen aufweisen, die gemeinsam mehr als 200 verschiedene Unterbrechungsursachen erzeugen können, welche durch einen zugehörigen einzigartigen oder nicht-einzigartigen Unterbrechungsvektor unterschieden werden können. Wie nachstehend in 4 dargestellt, sind die physikalischen Unterbrechungsquellen effizient mit ODER verknüpft, um der Unterbrechungssteuerung 22 auf einer der INTREQ-Leitungen eine Unterbrechungsanforderungs-Signalisierung vorzulegen, und auf ähnliche Weise in Reihen verkettet, um auf der niedrigeren Mehrbit-Leitung eine Unterbrechungsquittierungs-Signalisierung, eine für jede mit ODER verknüpfte Leitung, von der Unterbrechungssteuerung 22 zu erhalten. Die Anzahl dieser Leitungen kann größer als 1 sein, und der Unterbrechungsbehandler kann entscheiden, welche Anforderung zuerst zu behandeln ist, z. B. basierend auf einer Hierarchie, auf einem zyklischen Warteschlangenbetrieb. Die Steuerung 22 legt weiterhin allen derartigen Quellen ein Unterbrechungslesevektor-Signal (Interrupt Read Vector) auf Leitung 32 vor. Der Unterbrechungsvektor kann der zentralen Verarbeitungseinheit 20 durch die eigentlich teilweise selbstgewählte aktive Quelle auf dem Gesamtbus 30 vorgelegt werden. Vorzugsweise ist dies der sogenannte PI-Bus, wie in der PCT-Anmeldung EP 94/01711 beschrieben. Weiterhin wurde der Prozessor mit einem On-Chip- oder Off-Chip-Speicher 34, einem E/A-Teilsystem 36 und einem Teilsystem „Verschiedenes", bezeichnet mit 38, zum Beispiel einer Steuereinheit BCU, die nicht Teil der Erfindung ist, dargestellt. Unterbrechungserzeugende Vorrichtungen würden in der Kette 2426 angeordnet. Vorzugsweise sollte die Architektur sowohl niederrangige als auch anspruchsvolle Unterbrechungsquellen erlauben.
  • Der Prozessor kann beispielsweise, wobei dieses Beispiel nicht einschränkend zu sehen ist, ein RISC-Prozessor sein, und die Anzahl der mit ODER verknüpften Unterbrechungsanforderungsleitungen kann gleich 16 sein. Nach Erhalt einer Unterbrechungsanforderung führt die Unterbrechungssteuerung oder der Unterbrechungsbehandler 22 eine Unterbrechungs-Maskierung durch und bestimmt außerdem, welche der möglicherweise gleichzeitig vorliegenden Unterbrechungen die höchste Priorität hat. Ein geeignetes Ein-Bit-Signal gibt der zentralen Verarbeitungseinheit 20 die Existenz einer nicht-maskierten Unterbrechung an. Wenn die zentrale Verarbeitungseinheit 20 den eigentlichen Unterbrechungsvektor lesen möchte, erzeugt die Unterbrechungssteuerung 22 ein Quittie rungssignal auf der betreffenden Leitung des Quittierungsbusses, die der mit ODER verknüpften Leitung entspricht, die die Quelle damals gewählt hat oder sogar in diesem Augenblick wählt. Wenn eine Unterbrechungsquelle das eigentliche Quittierungssignal akzeptiert, erzeugt sie den unteren Teil des Unterbrechungsvektors, während die Unterbrechungssteuerung den oberen Teil erzeugt. Wenn das Unterbrechungsquittierungssignal unter bestimmten Umständen von keiner der angeschlossenen Quellen akzeptiert wird, sondern beim Unterbrechungs-Standardvektor-Generator 28 eintrifft, wird letzterer stattdessen den unteren Teil des Unterbrechungsvektors erzeugen. Anschließend wird der Unterbrechungsvektor dem Bus 30 für die zentrale Verarbeitungseinheit zugeführt.
  • Definitionen
  • CPU: Die CPU ist eine Verarbeitungseinheit auf der integrierten Schaltung (IC). Es werden Unterbrechungen erzeugt, um den normalen Programmablauf zu unterbrechen und Unterbrechungsbehandlungsprogramme durchzuführen.
  • CPU_INT[M-1..0]: Dies ist der einzige CPU-Unterbrechungsbus, der aus M Leitungen besteht, die die Unterbrechungssteuerung mit der CPU verbinden.
  • Unterbrechungssteuerung: Decodiert die Unterbrechungsanforderung von den verschiedenen Unterbrechungsquellen zu CPU-Unterbrechungsanforderungen, und wählt eine von den möglicherweise zahlreichen (16) mit ODER verknüpften Anforderungen (Requests) aus. Sie quittiert auch die Unterbrechungen und erzeugt den oberen Teil des Unterbrechungsvektors.
  • Unterbrechungs-Standardvektor-Generator: Erzeugt den unteren Teil des Unterbrechungsvektors, wenn dies keine Unterbrechungsquelle tut. Unterbrechungsquelle: Jedes Modul auf dem IC, das die CPU eventuell unterbrechen möchte. Ein bestimmtes Modul kann mehrere verschiedene Unterbrechungen auf einer oder mehreren mit ODER verknüpften Anforderungsleitungen erzeugen.
  • INT-REQ[N-1..0]: Die N Leitungen des Unterbrechungsanforderungsbusses verbinden die Unterbrechungsquellen mit der Unterbrechungssteuerung.
  • INT_ACK[N-1..0]: Die N Leitungen des Unterbrechungsquittierungsbusses verlaufen von der Unterbrechungssteuerung über die Unterbrechungsquellen zu dem Unterbrechungs-Standardvektor-Generator. Jede Leitung INT_ACK[x] entspricht einer mit ODER verknüpften Unterbrechungsanforderungsleitung INT_REQ[x].
  • INT_CLEAR: Die Unterbrechungsstatus-Variable INT_STATUS in der Unterbrechungsquelle kann gelöscht werden, indem eine „1" in die entsprechende Unterbrechungslöschungs-Variable INT_CLEAR geschrieben wird.
  • INT_ENABLE: Die Unterbrechungsaktivierungs-Variable INT_ENABLE in der Unterbrechungsquelle kann auf „1" gestellt werden, um eine Unterbrechung für die Unterbrechungsanforderungsleitungen zuzulassen, oder auf „0", um sie zu ignorieren.
  • INT_MASK: Die (optionale) Unterbrechungsmaskierungs-Variable zum Maskieren der verschiedenen Unterbrechungsanforderungsleitungen INT_REQ[x].
  • INT_MASK LEVEL: Die (optionale) Unterbrechungsmaskierungspegel-Variable zum Maskieren aller Unterbrechungsanforderungsleitungen INT_REQ[x] unterhalb eines bestimmten Pegels.
  • INT_PRIORITY[N-1..0]: Die (optionalen) Unterbrechungsanforderungsleitungs-Prioritätsvariablen, so dass die Priorität für jede Unterbrechungsanforderungsleitung INT_REQ[x] separat einfacher variiert werden kann.
  • INT_RD_VECTOR: Diese Unterbrechungslesevektorleitung verbindet die Unterbrechungssteuerung mit allen Unterbrechungsquellen. Es wird durch die Unterbrechungssteuerung festgestellt, wann die CPU den Unterbrechungsvektor INT_VECTOR lesen möchte: zuerst kommt das Signal ACK, und danach der RD_Vektor.
  • INT_SET: Die optionale Unterbrechungsstatus-Variable INT_STATUS in der Unterbrechungsquelle kann eingestellt werden, indem eine „1" in die entsprechende Unterbrechungseinstellvariable INT_CLEAR geschrieben wird.
  • INT_STATUS: Die Unterbrechungsstatus-Variable INT_STATUS in der Unterbrechungsquelle entspricht „1 ", wenn die Quelle die CPU unterbrechen möchte, oder „0", wenn die Unterbrechungsquelle keine Unterbrechung wünscht.
  • INT_VECTOR: Die CPU wird die Unterbrechungsvektor-Variable lesen, um zu der entsprechenden Unterbrechungsroutine zu verzweigen, wenn sie unterbrochen wird. Die Unterbrechungsvektor-Variable ist in zwei 16-Bit-Teile unterteilt:
  • INT_VECTOR[31..16]: Der obere Teil der Unterbrechungsvektor-Variablen wird immer durch die Unterbrechungssteuerung erzeugt;
  • INT_VECTOR[15..0]: Der untere Teil des Unterbrechungsvektors kann durch die verschiedenen Unterbrechungsquellen oder durch den Unterbrechungs-Standardvektor-Generator erzeugt werden.
  • L: Die Anzahl der Bustaktzyklen, die erforderlich ist, damit das prioritätsverkettete Unterbrechungsquittierungssignal durch alle Unterbrechungsquellen (und zurück zur Unterbrechungssteuerung) läuft.
  • M: Die CPU-abhängige Breite des CPU-Unterbrechungsbusses. Im Allgemeinen ist M = 1.
  • N: Die Breite des Unterbrechungsanforderungsbusses. Typischerweise entspricht N 16 oder 32. Außerdem ist N die Anzahl der INT_ACK-Leitungen.
  • PI-Bus D: Diese Leitungen sind die Datenleitungen des Busses.
  • PI-Bus CLK: Dies ist das Taktsignal des Busses.
  • Variable in den Unterbrechungsquellen und in der Unterbrechungssteuerung
  • Die Variablen sind Teil der Register, die über den Bus ausgelesen und geladen werden können. Die Adressen der Register werden innerhalb des Busadressbereichs abgebildet, der der betreffenden Unterbrechungsquelle oder der Unterbrechungssteuerung zugeordnet ist.
  • Jede Unterbrechungsquelle hat eine Anzahl von Variablen. Es gibt eine Gruppe von Variablen (INT_STATUS, INT_ENABLE, INT_CLEAR und optional INT_SET) für jede Unterbrechung, die sie erzeugen kann, und normalerweise wird eine weitere Gruppe von Variablen das weitere Verhalten der Vorrichtung mit der Unterbrechungsquelle steuern. Außerdem können ein oder mehrere INT_VECTOR[15..0] Variablen oder Konstanten Teil einer Unterbrechungsquelle sein.
  • Die Unterbrechungssteuerung hat eine Anzahl von Variablen wie INT_VECTOR[31..16], und weitere Variablen für die Maskierung und Prioritätsdecodierung. Die Adresse des gesamten Unterbrechungsvektors INT_VECTOR wird in den Adressbereich abgebildet, der der Unterbrechungssteuerung zugeordnet ist.
  • Der Unterbrechungs-Standardvektor-Generator kann eine programmierbare Standardvariable INT_VECTOR[15..0] haben. Wenn dies der Fall ist, wird ihre Adresse in den Adressbereich abgebildet, der dem Unterbrechungs-Standardvektor-Generator zugeordnet ist.
  • Anfordern einer Unterbrechung
  • Wenn eine Unterbrechungsquelle eine (interne) Unterbrechungsanforderung hat, schreibt sie eine „1" in die entsprechende Variable INT_STATUS. Wenn auch die ent sprechende Variable INT_ENABLE gleich „1" ist, wird die Anforderung über die Unterbrechungsanforderungsleitung INT_REQ[x], mit der diese spezielle Unterbrechung verbunden ist, an die Unterbrechungssteuerung gesendet. Wenn die Variable INT_ENABLE gleich „0" ist, wird die interne Anforderung ignoriert. Sie wird nur an die Unterbrechungssteuerung gesendet, wenn INT_ENABLE auf „1" gesetzt wurde.
  • Maskieren und Setzen von Prioritäten
  • Die Implementierung der Maskierung und Prioritätensetzung ist nicht spezifiziert. Es gibt keine explizite Reihenfolge unter den N Unterbrechungsanforderungsleitungen INT_REQ[N-1..0] und den M CPU-Unterbrechungsleitungen CPU_INT[M-1..0]. Der Prioritätsdecoder kann in der Hardware festgelegt oder programmierbar sein. Das Maskierungsmerkmal ist keine unbedingte Voraussetzung.
  • Die einfachste Implementierung der Maskierung und Prioritätensetzung besteht in der Nutzung einer strengen und festgelegten Hierarchie. Eine weitere Lösung besteht darin, ein N-Bit-Unterbrechungsmaskierungsregister zu implementieren, wobei jedes Bit des Registers eine Unterbrechungsanforderungsleitung maskiert. Wenn ein Bit des Unterbrechungsmaskierungsregisters gleich „1" ist, wird die entsprechende Unterbrechungsanforderungsleitung aktiviert, und wenn das Bit gleich „0" ist, wird die entsprechende Unterbrechungsanforderungsleitung deaktiviert. Eine dritte Lösung besteht darin, ein Unterbrechungsmaskierungspegekegister zu implementieren. Es werden nur Unterbrechungsanforderungsleitungen mit einem Rang aktiviert, der mindestens dem Wert des Unterbrechungsmaskierungspegelregisters entspricht, die anderen bleiben deaktiviert. Die Prioritätensetzung kann erfolgen, indem man eine Prioritätsvariable für jede Unterbrechungsanforderungsleitung implementiert, so dass die Priorität für jede Unterbrechungsanforderungsleitung INT_REQ[x] separat eingestellt werden kann. Kombinationen der obigen Lösungen sind ebenfalls möglich. Oft sind auch weitere Möglichkeiten zum Bestimmen der höchsten Priorität realisierbar, zum Beispiel ein zyklischer Warteschlangenbetrieb.
  • Schnittstelle mit der CPU
  • Die Weise, in der die N Unterbrechungsanforderungsleitungen INT_REQ[N-1..0] (nach dem Maskieren und Festlegen der Prioritäten) mit den M CPU-Unterbrechungsleitungen CPU_INT[M-1..0] verbunden werden, hängt von der jeweiligen Implementierung ab. Normalerweise reicht M = 1 aus. Wenn die CPU unterbrochen wird, kann sie einige spezifische Aktionen durchführen, zum Beispiel Kontextsicherung, und verzweigt dann zu einem Unterbrechungsvektor. Am Ende verzweigt die Software zum Unterbrechungsbehandler, wobei der Unterbrechungsvektor INT_VECTOR als Versatz zu einer Verzweigungstabellen-Basisadresse benutzt wird: dies ist eine schnelle Möglichkeit, weil keine weitere Verarbeitung der verschiedenen Bits von INT_VECTOR, dem Unterbrechungsbehandler oder der eigentlichen Quelle erforderlich ist.
  • Erzeugen der Quittierung und Erhalten des Unterbrechungsvektors
  • Der Unterbrechungsvektor INT_VECTOR wird als Busregister adressiert, das auf den Adressbereich abgebildet ist, welcher der Unterbrechungssteuerung zugeordnet ist. Wenn die Unterbrechungssteuerung eine Busleseanforderung für den Unterbrechungsvektor erhält, wird sie ein Quittierungssignal wählen, das der Anforderung REQ und ihrer Prioritätsmaske zugeordnet ist; eine aktive Quelle wird sich anschließend entsprechend der Prioritätsverkettung (oder dem Unterbrechungs-Standardvektor-Generator) und über eine Unterbrechungsquittierungsleitung selbst wählen und die Unterbrechungsquelle (oder den Unterbrechungs-Standardvektor-Generator) auffordern, den unteren Teil des Unterbrechungsvektors (INT_VECTOR[15..0] auf die PI-Bus D-Leitungen zu geben. Der obere Teil INT_VECTOR[31..16] wird immer durch die Unterbrechungssteuerung selbst erzeugt.
  • Die Unterbrechungssteuerung wird den aktuellen Wert der Unterbrechungsanforderungsleitungen vor oder nach dem Maskieren und Festlegen der Prioritäten zwischenspeichern. Nur die aktive Unterbrechungsanforderungsleitung mit der zurzeit höchsten Priorität – abhängig von der Maskierung und der Festlegung der Prioritäten – wird mit einem prioritätsverketteten Abfragesignal auf ihrer entsprechenden Unterbrechungsquittierungsleitung beantwortet. Andere Unterbrechungsanforderungsleitungen bleiben für den Augenblick unbeantwortet. Die Prioritätsverkettung beginnt, die mit der bestätigten Unterbrechungsquittierungsleitung verbundenen Unterbrechungsquellen zu durchlaufen.
  • Wenn mehr als eine Unterbrechungsquelle eine Anforderung auf der gewählten Unterbrechungsanforderungsleitung erzeugt hat, sorgt die Prioritätsverkettung dafür, dass nur eine der Unterbrechungsquellen die Quittierung bekommt. Dies wird die Unterbrechungsquelle sein, die logisch am engsten mit der Unterbrechungssteuerung verbunden ist. Andere Quellen, die „nachgeschaltet" sind, werden von der Quittierung ferngehalten. Dies führt zu einem impliziten Schema von Unterprioritäten für jedes Paar der Unterbrechungsanforderungs- und Quittierungsleitungen. Die Unterbrechungsquelle, die am engsten mit der Unterbrechungssteuerung verbunden ist, hat innerhalb der Prioritätsverkettung eine höhere Unterpriorität.
  • Es wird eine Verzögerung eingeführt, um dem Quittierungssignal genug Zeit zu geben, die Prioritätsverkettung zu durchlaufen. Während dieser Verzögerung wird die Unterbrechungssteuerung die Busquittierungs-ACK-Leitungen mit der WAT-Quittierung ansteuern. Die Verzögerung entspricht L Bustaktzyklen synchron zur ansteigenden Flanke des Bustakts CLK. Die genaue Anzahl der Buswartezyklen wird durch die Verzögerung in den prioritätsverketteten Unterbrechungsquittierungsleitungen bestimmt und hängt von der Implementierung ab.
  • Nach dieser Verzögerung bestätigt die Unterbrechungssteuerung das Unterbrechungslesevektor-Signal INT_RD_VECTOR während der letzten WAT-Quittierung (weil das INT_RD_VECTOR Signal ein frühes Signal ist) und steuert die Bus-ACK-Leitungen mit der RDY-Quittierung statt mit der WAT-Quittierung an. In diesem Zyklus wird die Unterbrechungssteuerung auch die Bits 31 bis 16 des Unterbrechungsvektors INT_VECTOR[31..16] auf den Bus geben, während die Bits 15 bis 0 des INT_VECTOR[15..0] entweder durch die quittierte Unterbrechungsquelle oder durch den Unterbrechungs-Standardvektor-Generator angesteuert werden.
  • Die Unterbrechungssteuerung friert die Quittierung der neuen Unterbrechungen während des Lesens des Vektors quasi ein, um mögliche Wettlaufsituationen zu vermeiden. Der obere Teil des Unterbrechungsvektors, INT_VECTOR[31..16], kann die Prioritätssignalisierung enthalten und wird immer durch die Unterbrechungssteuerung erzeugt. Es gibt viele verschiedene untere Teile des Unterbrechungsvektors INT_VECTOR[15..0], von mindestens einem (in dem Unterbrechungs-Standardvektor-Generator) bis zu einem für jede Unterbrechung.
  • Löschen der Unterbrechungsanforderung
  • Wenn die Unterbrechungsanforderung durch eine Unterbrechungsroutine bedient wurde, kann die Unterbrechungsquelle gelöscht werden, indem eine „1" in die entsprechende Variable INT_CLEAR geschrieben wird. Es empfiehlt sich nicht, die Variable INT_STATUS durch Schreiben einer „0" zu löschen, weil eine Lesen-Modifizieren-Schreiben-Aktion die Hardware stören könnte und andere Bis in dem gleichen Register ändern könnte.
  • In 2 ist ein Diagramm des vollständigen Timing-Mechanismus der Architektur dargestellt. Das Signal INT_REQ[x] ist asynchron mit dem Bustakt CLK, das Signal INT_RD_VECTOR synchron. Die aufeinanderfolgenden Verläufe zeigen die folgenden Signale: den Systembustakt, die Buslese-Operation, den Bus-Operationscode, die Bus-Adressensignalisierung, insbesondere die in dem Unterbrechungsvektor enthaltene Adresse, die Bus-Datenschlitze, von denen der letzte den Unterbrechungsvektor überträgt, die Busquittierung, die vier Wartezyklen gefolgt von einem einzelnen Quittierungszyklus hat, die Unterbrechungsanforderungssignalisierung, die CPU-Unterbrechungssignalisierung, die Unterbrechungsquittierung, die Rücksendung der Unterbrechungsquittierung (keine Signalisierung), und schließlich den Unterbrechungslesevektor. Die vertikalen Linien geben Intervalle von geeigneter Größe an.
  • Signale
  • INT_REQ[N-1..0] verbindet die Unterbrechungsquellen mit der Unterbrechungssteuerung. Es wird keine Reihenfolge oder Priorität spezifiziert. Die Unterbrechungsquellen werden über ODER-Gatter mit diesen Leitungen verbunden. Jede Unterbrechungsquelle kann mit einer oder mehreren Unterbrechungsanforderungsleitungen verbunden werden. Die Unterbrechungsanforderungsleitungen sind asynchron und aktiv hoch.
  • INT_ACK[N-1..0]: Jede Unterbrechungsquittierungsleitung INT_ACK[x] entspricht einer Unterbrechungsanforderungsleitung INT_REQ[x]. Die Unterbrechungsquittierungsleitungen sind asynchron und aktiv hoch.
  • Wenn die CPU die Unterbrechungssteuerung adressiert, um INT_VECTOR zu lesen, aktiviert die Steuerung genau eine der Unterbrechungsquittierungsleitungen. Prioritätenfestlegung und Maskierung bestimmen, welche Quittierungsleitung aktiviert wird. Die Unterbrechungsquittierungsleitungen werden durch die Unterbrechungsquellen, die REQ entsprechen, prioritätsverkettet. Jede Quelle kann das Quittierungssignal für andere, „nachgeschaltete" Unterbrechungsquellen blockieren, wenn eine Unterbrechung auf der entsprechenden Anforderungsleitung aussteht.
  • INT_RD_VECTOR: Die Unterbrechungslesevektor-Leitung verbindet die Unterbrechungssteuerung mit den Unterbrechungsquellen, die in der Lage sind, die untere Hälfte des Unterbrechungsvektors zu erzeugen, einschließlich des Unterbrechungs-Standardvektor-Generators. Wenn die CPU die Unterbrechungssteuerung adressiert, um INT_VECTOR zu lesen, wird dieser nach einer Verzögerung von L-1 Bustaktzyklen durch die Unterbrechungssteuerung bestätigt. Die Unterbrechungslesevektor-Leitung ist aktiv hoch und synchron mit dem Bustakt CLK.
  • CPU_INT[M-1..0]: Diese M sind die CPU-Unterbrechungsleitungen, normalerweise M = 1, um die Unterbrechungssteuerung mit der CPU zu verbinden. Wenn die Unterbrechungssteuerung eine oder mehrere Unterbrechungsanforderungen auf den Unterbrechungsanforderungsleitungen INT_REQ[N-1..0] erhält, bestätigt sie eine oder mehrere der CPU-Unterbrechungsleitungen (wenn nicht alle REQs maskiert sind). Welche Leitungen) bestätigt wird (werden), hängt von der Maskierung und der Festlegung der Prioritäten sowie von der Abbildung auf die CPU-Unterbrechungsleitungen ab, die alle implementierungsspezifisch sind. Der aktive Pegel und das Timing-Verhalten der CPU-Unterbrechungsleitungen hängen von der CPU ab.
  • PI-Bus D: diese Leitungen sind PI-Bus-Datenleitungen.
  • PI-Bus CLK: dies ist das Taktsignal des PI-Busses.
  • ACK = WAT (warten), ACK = RDY (bereit), je nach vorliegender Situation.
  • In 3 ist ein Blockschaltbild der Unterbrechungssteuerung dargestellt. Oben rechts treffen die N Unterbrechungsanforderungsleitungen 302 ein. Nach Durchlaufen des Maskierungs-, Prioritätenfestlegungs- und Zwischenspeicherblocks 310 werden die N Leitungen auf die M normalerweise einzelnen (M = 1) CPU-Unterbrechungsleitungen 306 abgebildet 308.
  • Eine Busleseanforderung für den Unterbrechungsvektor wird über die Busschnittstelle 318 an den Steuerblock 314 weitergeleitet. Dieser Block steuert den Zwischenspeicherblock 310 und den Quittierungserzeugungsblock 312, der die geeignete prioritätsverkettete Unterbrechungsquittierung auf Leitung 304 erzeugt.
  • Nach einer Verzögerung von L-1 Bustaktzyklen fordert der Steuerblock den oberen Vektorblock auf, die Daten des Unterbrechungsvektors INT_VECTOR[31..16] im nächsten Bustaktzyklus CLK auf die D-Leitungen von Bus 322 zu geben. Gleichzeitig bestätigt der Steuerblock 314 die INT_RD_VECTOR Leitung, um den unteren Vektorblock (in einer der Unterbrechungsquellen oder in dem Unterbrechungs-Standardvektor-Generator) aufzufordern, die Daten von INT_VECTOR[15..0] im nächsten PI-Bus-Taktzyklus CLK auf die D-Leitungen des Busses zu geben. In der Unterbrechungssteuerung nur ist nur die Variable INT_VECTOR obligatorisch.
  • INT_VECTOR: Diese Unterbrechungsvektor-Variable wird durch die CPU gelesen, indem eine PI-Bus-Leseanforderung ausgegeben wird. Die Variable INT_VECTOR wird in zwei Teile unterteilt. Die oberen 16 Bits INT_VECTOR[31..16] werden immer durch die Unterbrechungssteuerung erzeugt. Die unteren 16 Bits INT_VECTOR[15..0] werden entweder durch die quittierte Unterbrechungsquelle oder durch den Unterbrechungs-Standardvektor-Generator erzeugt.
  • Die Unterbrechungsvektor-Variablen INT_VECTOR[31..16] in der Unterbrechungssteuerung können feste Konstanten (nur lesen) oder programmierbar (auch schreibbar) sein. Entsprechend der Entscheidungen, die durch den Mechanismus zur Maskierung oder Festlegung der Prioritäten getroffen wurde, kann eine andere Variable INT_VECTOR[31:16] oder Konstante ausgewählt werden. Die Priorität kann Teil von INT_VECTOR[31:16] sein.
  • INT_MASK: eine optionale Unterbrechungsmaskierungsvariable zum Maskieren der verschiedenen Unterbrechungsanforderungsleitungen INT_REQ[x]. Jedes Bit INT_MASK[x] = 0 in dieser Variablen wird die entsprechende Unterbrechungsanforderungsleitung INT_REQ[x] maskieren.
  • INT_MASK_LEVEL: Wenn eine optionale Unterbrechungsmaskierungspegel-Variable verwendet wird, um alle Unterbrechungsanforderungsleitungen INT_REQ[x] unterhalb eines bestimmten Pegels zu maskieren, wird sie INT_MASK_LEVEL genannt. Wenn diese Variable einen Wert von y hat, werden alle Unterbrechungsanforderungsleitungen INT_REQ[x] mit x < y maskiert (wenn y = 0, wird keine der Unterbrechungsanforderungsleitungen maskiert).
  • INT_PRIORITY[N-1..0]: Wenn die optionalen Unterbrechungsanforderungsleitungs-Prioritätsvariablen implementiert sind, werden sie mit INT_PRIORITY[N-1..0] bezeichnet. Diese Variablen haben typischerweise eine Breite von vier Bits (für N = 16) und erleichtern die separate Einstellung der Priorität für jede einzelne Unterbrechungsanforderungsleitung INT_REQ[x].
  • In 4 ist ein einfaches Blockschaltbild einer Unterbrechungsquelle dargestellt. In den Ecken oben rechts und links treffen die Unterbrechungsanforderungsleitungen ein 402 bzw. gehen heraus 406. Wenn die eintreffende Unterbrechungsanforderungsleitung aktiv ist, wird auch die herausgehende Unterbrechungsanforderungsleitung aktiv sein. Wenn die eintreffende Unterbrechungsanforderungsleitung nicht aktiv ist, kann die heraus gehende Unterbrechungsanforderungsleitung aktiv sein, wenn der Unterbrechungsquelle über die ODER-Verknüpfung 404 eine (aktivierte) Unterbrechungsanforderung zur Verfügung steht.
  • In der Mitte auf der linken und der rechten Seite der Unterbrechungsquelle trifft die Unterbrechungsquittierungsleitung ein 416 bzw. geht heraus 414. Die herausgehende Unterbrechungsquittierungsleitung wird nur aktiv sein, wenn die eintreffende Unterbrechungsquittierungsleitung aktiv ist und bei der Unterbrechungsquelle keine aktivierte Unterbrechungsanforderung über die UND-Verknüpfung 410 aussteht. Diese UND-Verknüpfung ist optional und braucht nicht implementiert zu werden, wenn die Unterbrechungsquelle nicht ihren eigenen INT_VECTOR[15..0] erzeugt, sondern den Standardvektor INT_VECTOR[15..0] nutzt, der durch die Unterbrechungssteuerung erzeugt wird.
  • Unten auf dem Bild sind die Busschnittstelle 420 und die Zuführung der Lesevektorleitung INT_RD_VECTOR 422 dargestellt. Wenn die Lesevektorleitung INT_RD_VECTOR aktiv ist und bei der Unterbrechungsquelle eine quittierte Unterbrechungsanforderung ansteht, wird der untere Teil des Unterbrechungsvektors IN_VECTOR[15..0] in dem nächsten Buszyklus auf die D-Leitungen des Busses gegeben. Wenn die Quelle nicht ihren eigenen INT_VECTOR[15..0] erzeugt, ist auch die Leitung INT_RD_VECTOR nicht implementiert.
  • Jede Unterbrechungsquelle wird drei (und eine optionale vierte) 1-Bit-Variablen für jede Unterbrechung haben, die sie erzeugen kann. Sie hat auch eine optionale Variable INT_VECTOR[15..0].
    • 1 INT_STATUS: Diese Variable entspricht „1", wenn die Quelle die CPU unterbrechen möchte, oder „0", wenn die Unterbrechungsquelle keine Unterbrechung wünscht. Diese Variable kann ein separates Register oder ein Flipflop sein oder durch einen Zustand in einer (finiten) Zustandsmaschine dargestellt werden. Die Variable kann mit Hilfe des Busses zum Abfragen gelesen werden. In der Zwischenzeit können andere Variablen im gleichen Register durch die Hardware geändert werden. Das Löschen und Setzen der Variablen kann über die Variable INT_CLEAR (und optional INT_SET, zum Beispiel Diagnosezwecke) erfolgen. Die Adresse der Variablen wird innerhalb des Bus-Adressbereichs abgebildet, der der betreffenden Unterbrechungsquelle zugeordnet ist.
    • 2 INT_ENABLE: Diese Variable kann auf „1" gesetzt werden, um die Variable INT_STATUS für die Unterbrechungsanforderungsleitungen (über das ODER-Gatter) zuzulassen, oder auf „0" gesetzt werden, um die Variable INT_STATUS zu ignorie ren und sie von den Unterbrechungsanforderungsleitungen zu trennen. INT_ENABLE kann über den PI-Bus gelesen und geschrieben werden. Die Adresse der Variablen wird innerhalb des PI-Bus-Adressbereichs abgebildet, der der betreffenden Unterbrechungsquelle zugeordnet ist.
    • 3 INT_CLEAR:INT_STATUS[b] kann gelöscht werden, indem eine „1" in die entsprechende Variable INT_CLEAR geschrieben wird. Wenn eine „0" in diese Variable geschrieben wird, wird dies ignoriert. Nachdem eine „1" in diese Variable geschrieben wurde, wird die Variable automatisch auf „0" zurückgestellt. Die Adresse der Variablen wird innerhalb des Bus-Adressbereichs abgebildet, der der betreffenden Unterbrechungsquelle zugeordnet ist.
    • 4 INT_SET: Diese optionale Variable kann auf „1" gesetzt werden, indem eine „1" in die entsprechende Variable INT_SET geschrieben wird, um eine Unterbrechung dieser betreffenden Quelle simulieren zu können. Wenn eine „0" in diese Variable geschrieben wird, wird dies ignoriert. Nachdem eine „1" in diese Variable geschrieben wurde, wird die Variable automatisch auf „0" zurückgestellt. Diese Variable ist optional. Die Adresse der Variablen wird innerhalb des PI-Bus-Adressbereichs abgebildet, der der betreffenden Unterbrechungsquelle zugeordnet ist.
  • INT_VECTOR[15..0]: Die unteren 16 Bits der Unterbrechungsvektor-Variablen INT_VECTOR werden durch die Unterbrechungsquelle 418 erzeugt. Dies geschieht, nachdem die Unterbrechungsquelle eine Anforderung auf der Lesevektorleitung INT_RD_VECTOR 422 erhalten hat und die betreffende Unterbrechung quittiert wurde. Die Variable INT_VECTOR[15..0] kann eine feste Konstante oder ein programmierbares Register sein. Wenn es sich um eine feste Konstante handelt, ist ihr Wert festverdrahtet. Wenn es sich um ein programmierbares Register handelt, wird die Adresse in den PI-Bus-Adressbereich abgebildet, der der Unterbrechungsquelle zugeordnet ist (eine programmierbare Variable INT_VECTOR[15..0] in einer Unterbrechungsquelle kann über ihre lokale Adresse INT_VECTOR[15..0] in der Unterbrechungsquelle gelesen werden). Im Allgemeinen sollten die beiden niedrigstwertigen Bits immer Null sein, um ihre Verwendung als 32-Bit-Adresswort zu ermöglichen, das als Versatz in einer Tabelle benutzt wird. Diese Variable ist optional; standardmäßig wird die Unterbrechungs-Standardquelle die unteren 16 Bits von INT_VECTOR erzeugen. Der Kürze halber wurde eine detaillierte Abbildung der obigen Variablen und anderer Parameter innerhalb der Unterbrechungsquelle hier nicht weiter spezifiziert. Eine separate PI-Bus-Adresse kann gebildet werden, indem in einem oder mehreren adressierbaren Registern addiert oder kombiniert wird.
  • Bei jeder Unterbrechungsquelle können alle Unterbrechungen entweder mit der gleichen Unterbrechungsanforderungsleitung INT_REQ[x] oder mit unterschiedlichen Unterbrechungsanforderungsleitungen verbunden sein. Siehe die 5A und 5B, die verschiedene Implementierungen durch ODER-Gatter veranschaulichen. Die Lösung B ist flexibler. Die verschiedenen Unterbrechungsanforderungen können auf Wunsch auf einer Unterbrechungsanforderungsleitung verkettet werden, siehe 5C. Es ist zulässig, die Unterbrechungsanforderungsleitung programmierbar zu machen, wenn die korrekte Abbildung auf die Unterbrechungsanforderungsleitungen multiplexiert wird, siehe 5D.
  • Einfache Unterbrechungsquellen können zusammengefasst und zu einer größeren Unterbrechungsquelle kombiniert werden, um den Aufwand für die Bus-Schnittstelle, den Anforderungs- und Quittierungsmechanismus und die Variable INT_VECTOR[15..0] zu reduzieren. Jede Unterbrechungsquelle sollte mindestens eine Leitung haben, aber nicht mehr als der Unterbrechungsbehandler handhaben kann. Für jede Unterbrechungsanforderungsleitung INT_REQ[x] kann eine Unterbrechungsquittierungsleitung INT_ACK[x] implementiert werden oder nicht.
  • In 6 ist ein Blockschaltbild des Unterbrechungs-Standardvektor-Generators dargestellt. Auf der linken Seite treffen die Unterbrechungsquittierungsleitungen INT_ACK[N-1..0] 602 zugeführt. Unten im Bild sind die PI-Bus-Schnittstelle 608 und die Zuführung der Lesevektorleitung INT_RD_VECTOR 610 dargestellt. Wenn der Eingang der INT_RD_VECTOR-Leitung und ein INT_ACK[x] aktiv sind, wird der untere Teil des Unterbrechungsvektors INT_VECTOR[15..0] 606 in dem nächsten PI-Bus-Zyklus 612 durch den Unterbrechungs-Standardvektor-Generator auf die D-Leitungen des PI-Busses gegeben.
  • INT_VECTOR[15..0]: Dies sind die unteren 16 Bits der (standardmäßigen) Unterbrechungsvektor-Variablen INT_VECTOR, die durch den Unterbrechungs-Standardvektor-Generator erzeugt werden. Dies geschieht, nachdem er eine Anforderung auf der Lesevektorleitung INT_RD_VECTOR erhalten hat und ein INT_ACK[x] aktiv ist. Alle Details sind für die Variable INT_VECTOR[15..0] innerhalb der Unterbrechungsquellen die gleichen.
  • Es kann eine Anordnung aus N verschiedenen Variablen INT_VECTOR[15..0] implementiert werden, z. B. eine für jede eintreffende Leitung INT_ACK[x], so dass ein unterschiedlicher Unterbrechungsvektor für jede Prioritätsebene erzeugt werden kann. Der Unterbrechungs-Standardvektor-Generator kann mit der Unterbrechungssteuerung zusammengefasst werden, um die Kosten zu reduzieren.
  • Die einzigen Anforderungen an die CPU bestehen darin, dass sie genügend Unterbrechungseingänge hat, damit die CPU-Unterbrechungsleitungen CPU_INT[M-1..0] angeschlossen werden können und damit sie eine Busleseanforderung ausgeben kann, um den Unterbrechungsvektor INT_VECTOR zu lesen. Diese Leseanforderung kann direkt durch die CPU-Hardware oder softwaremäßig über eine Unterbrechungsroutine ausgegeben werden.
  • Verbindung
  • Es gibt eine Reihe von Anforderungen in Bezug auf das Verbindungsschema für die CPU, die Unterbrechungssteuerung und die verschiedenen Unterbrechungsquellen.
  • Die Unterbrechungsanforderungsleitungen INT_REQ[x] können nicht aufgeteilt werden. Sie sind alle Punkt-zu-Punkt-Verbindungen zwischen entweder:
    • – dem Ausgang INT_REQ[x] und dem Eingang INT_REQ[x] von zwei verschiedenen Unterbrechungsquellen,
    • – dem Ausgang INT_REQ[x] einer Unterbrechungsquelle und einem anderen Eingang INT_REQ[x] der gleichen Unterbrechungsquelle; siehe 5
    • – dem Ausgang INT_REQ[x] einer Unterbrechungsquelle und dem Eingang INT_REQ[x] der Unterbrechungssteuerung.
  • Wenn bei einer Unterbrechungsquelle ein Unterbrechungsanforderungsleitungseingang INT_REQ[x] angeschlossen ist, muss auch der Ausgang INT_REQ[x] angeschlossen sein.
  • Der Eingang INT_REQ[x] der ersten Unterbrechungsquelle in einer Kette wird mit einem logischen „0"-Pegel verbunden.
  • Die Unterbrechungsquittierungsleitungen INT_ACK[x] können nicht aufgeteilt werden. Sie sind alle Punkt-zu-Punkt-Verbindungen zwischen entweder:
    • – dem Ausgang INT_ACK[x] und dem Eingang INT_ACK[x] von zwei verschiedenen Unterbrechungsquellen;
    • – dem Ausgang INT_ACK[x] und einem weiteren Eingang INT_ACK[x] der gleichen Unterbrechungsquelle;
    • – dem Ausgang INT_ACK[x] der Unterbrechungssteuerung und dem Eingang INT_ACK[x] einer Unterbrechungsquelle;
    • – dem Ausgang INT_ACK[x] einer Unterbrechungsquelle und dem Eingang INT_ACK[x] des Unterbrechungs-Standardvektor-Generators;
    • – dem Ausgang INT_ACK[x] der Unterbrechungssteuerung und dem Eingang INT_ACK[x] des Unterbrechungs-Standardvektor-Generators.
  • Wenn bei einer Unterbrechungsquelle ein Unterbrechungsquittierungsleitungsausgang INT_ACK[x] angeschlossen ist, müssen auch der INT_ACK[x] Eingang und Ausgang angeschlossen sein. Der INT_ACK[x] Ausgang der letzten Unterbrechungsquelle in der Kette wird an den entsprechenden INT_ACK[x] Eingang des Unterbrechungs-Standardvektor-Generators geleitet.
  • Jede Unterbrechungsquelle ist mit mindestens einer Unterbrechungsanforderungsleitung INT_REQ[x] und mit höchstens allen Unterbrechungsanforderungsleitungen verbunden.
  • Für jede Leitung INT_REQ[x] muss es eine entsprechende Leitung INT_ACK[x] geben. Selbst wenn keine Unterbrechungsquellen mit dieser Leitung INT_ACK[x] verbunden sind, muss sie zum Unterbrechungs-Standardvektor-Generator geleitet werden, damit dieser den Standardvektor INT_VECTOR[15..0] erzeugen kann. Der Unterbrechungs-Standardvektor-Generator muss mit allen INT-ACK[N-1..0] Leitungen verbunden werden.
  • Jede Unterbrechungsquelle kann mit einer bis zu allen Unterbrechungsquittierungsleitungen INT_ACK[x] verbunden werden. Unterbrechungsquellen, die INT_VECTOR[15..0] nicht erzeugen, brauchen nicht mit den Unterbrechungsquittierungsleitungen INT_ACK[x] verbunden zu werden.
  • Unterbrechungsquellen, die INT_VECTOR[15..0] erzeugen, müssen mit der Unterbrechungslesevektor-Leitung INT_RD_VECTOR verbunden werden. Unterbrechungsquellen, die INT_VECTOR[15..0] nicht erzeugen, brauchen nicht mit der Unterbrechungslesevektor-Leitung INT_RD-VECTOR verbunden zu werden. Auch der Unterbrechungs-Standardvektor-Generator muss mit der Leitung INT_RD_VECTOR verbunden werden.
  • Die Unterbrechungssteuerung, alle Unterbrechungsquellen und der Unterbrechungs-Standardvektor-Generator müssen mit dem PI-Bus verbunden werden.
  • Die CPU-Unterbrechungsleitungen CPU_INT[M-1..0] sind durch die CPU-Unterbrechungsleitungsausgänge der Unterbrechungssteuerung mit den Unterbrechungseingängen der CPU verbunden.
  • 7 zeigt ein realisierbares Verbindungsschema. Hier ist N = 4 und M = 1. Es gibt vier Unterbrechungsanforderungsleitungen INT_REQ[3..0] und auch vier Unterbrechungsquittierungsleitungen INT_ACK[3..0].
  • Wie verschiedene Unterbrechungsquellen miteinander verbunden werden können, ist in 8 dargestellt. Weiterhin sind alle Unterbrechungsquellen, die Unterbrechungssteuerung und der Unterbrechungs-Standardvektor-Generator mit der Unterbrechungslesevektor-Leitung INT_RD-VECOTR und dem PI-Bus verbunden. Die CPU ist nicht dargestellt, jedoch besteht der CPU-Unterbrechungsbus aus nur einer Leitung CPU_INT. Es ist zu beachten, dass die Quelle C in diesem Fall nicht mit INT_ACK[x] verbunden ist, sondern offensichtlich auf der effektiven Erzeugung des Standardvektors beruht.
  • In 9 ist die Unterbrechungsarchitektur zusammenfassend dargestellt, insbesondere die Funktion des Unterbrechungssteuerungskerns INTC in Bezug auf die vielen möglichen Unterbrechungsquellen. Zugeführt werden rechts 32 Anforderungsleitungen 918, die jede eine Prioritätsebene darstellen. Die Information auf diesen Leitungen kann in dem Latch 904 zwischengespeichert werden. Das Maskenregister 906 führt über die bitweise UND-Verknüpfung im UND-Gatter 902 zum prioritätsbestimmenden Element 908 und dem Codierer 903 weiter. Der Codierer codiert zum Sechs-Bit-Signal CPU_INT[5:0] auf Leitung 920, obwohl eines ausreichen würde. Nach Bestimmung der Priorität wird auf 32 Quittierungsleitungen 909 quittiert, die durch entsprechende Quellen 910, 912, ... 914 verkettet sind, welche kollektiv ein weiteres Steuersignal 911 vom Kern erhalten. Wie abgebildet senden die Quellen Signale an den Anforderungsleitungskanal und auch an den Systembus 916. Der Prozessor wird, wenn er den Sechs-Bit-Unterbrechungscode erhält, unabhängig von der Unterbrechungsquelle selbständig die Handhabungszeitpunkt vorgeben. Er wird dann den Status sichern und zu einer Unterbrechungsroutine verzweigen.
  • Anschließend wird der Prozessor einen Buslesesignal für den Unterbre chungsvektor ausgeben: hierbei handelt es sich um eine Adresse, und die Unterbrechungssteuerung wird die zurzeit höchste Unterbrechungsebene zwischenspeichern und eine prio ritätsverkettete Abfrage für die mit dieser Ebene verbundenen Quellen erzeugen. Die Unterbrechungsquelle wird nach der Verzögerung der Prioritätsverkettung ihren Vektor auf den Bus geben. Die Steuerung gibt anschließend ein ACK = OK auf die Bus-ACK-Leitungen. Der Prozessor kann jetzt den tatsächlich erhaltenen Wert als einen Adressversatz verwenden, um weitere Aktionen zu beschließen. Auf diese Weise wird eine zweidimensionale matrixartige Unterbrechung realisiert, in der sowohl die physikalischen Unterbrechungsquellen als auch ihre jeweils erzeugten Unterbrechungen unabhängige Werte haben können.
  • In der Quelle gibt es verschiedene Variablen: INT_X signalisiert, dass eine Unterbrechung vorhanden ist (1) oder nicht; hierbei kann es sich um ein Flipflop handeln. Das Flipflop wird zurückgesetzt, indem in eine PI-Bus-abgebildete Adresse in dem PI-Bus-Bereich geschrieben wird, der der Einheit zugeordnet ist, zu der diese Unterbrechungsquelle gehört. Außerdem signalisiert ENAB_X(1), INT_X auf der entsprechenden Leitung INT_REQ(L) zuzulassen; hierbei kann es sich um ein weiteres Flipflop handeln, das über den Bus gelesen und in das über den Bus geschrieben werden kann. Seine Adresse befindet sich in dem Busbereich, der zu der Einheit zugeordnet ist, zu der diese Quelle gehört.
  • 10 zeigt ein Beispiel für eine Unterbrechungsquittierungs-Prioritätsverkettung und den Vektorauswahlmechanismus für eine bestimmte Unterbrechungsquelle. Oben befinden sich das Unterbrechungssteuerungskern-Bündel 1002 (= 909) und der Systembus 1004 (= 916). Von links treffen das Bit INT_REQ_X und die Unterbrechungsquittierung INT_ACK_IN ein. Letztere wird in Element 1016 invertiert, um den Latch 1008 zu aktivieren, wodurch INT_REQ_X zwischengespeichert wird. Wenn eine „0" gespeichert wird, öffnet der invertierte Latch-Ausgang das UND-Gatter 1014 und erlaubt hiermit INT_ACK_OUT, weiter nach rechts zu laufen. Wenn eine „1" gespeichert wird, ist das UND-Gatter 1014 blockiert, aber das UND-Gatter 1010 geöffnet, falls eine weitere „1" von dem Unterbrechungssteuerungskern zugeführt wird, wodurch der Puffer 1012 aktiviert wird. Hierdurch wird dann der Unterbrechungsvektor auf den Bus gegeben.
  • Text in der Zeichnung
  • Figur 1
    CPU zentrale Verarbeitungseinheit
    CPU INT CPU-Unterbrechung
    INT CTR Unterbrechungssteuerung
    INT SOU Unterbrechungsquelle
    INT DEF VECT Unterbrechungs-Standardvektor-Generator
    MEM Speicher
    I/O E/A
    VAR Variable
    Figur 2
    Address of INT_VECTOR Adresse des INT_VECTOR
    WAT Warten
    RDY Bereit
    Figur 3
    CPU_INT[M-1..0] Outputs CPU_INT[M-1..0] Ausgänge
    Mapping Abbildung
    Masking Maskierung
    Prioritising Prioritätensetzung
    Latching Zwischenspeicherung
    INT_REQ[N-1..0] inputs INT_REQ[N-1..0] Eingänge
    Acknowledge generation Quittierungserzeugung
    Upper vector Oberer Vektor
    Control Steuerung
    PI-bus interface PI-Bus-Schnittstelle
    Figur 4
    Output Ausgang
    Input Eingang
    Outputs Ausgänge
    Inputs Eingänge
    Control variables Steuerung d. Variablen
    Control Steuerung
    OR ODER
    AND UND
    Lower vector unterer Vektor
    PI-bus interface PI-Bus-Schnittstelle
    Figur 5A
    Output Ausgang
    Input Eingang
    Enabled requests Aktivierte Anforderungen
    Interrupt source Unterbrechungsquelle
    OR ODER
    Figur 5B, 5C, 5D
    OR ODER
    Interrupt source Unterbrechungsquelle
    Multiplexer Multiplexer
    Figur 6
    Inputs Eingänge
    Input Eingang
    Control Steuerung
    Lower vector unterer Vektor
    PI-bus interface PI-Bus-Schnittstelle
    Figur 7
    Interrupt controller Unterbrechungssteuerung
    Interrupt cource Unterbrechungsquelle
    Interrupt default vector generator Unterbrechungs-Standardvektor-Generator
    PI-bus PI-Bus
    Figur 8
    Interrupt source Unterbrechungsquelle
    Figur 9
    Core Kern
    LATCH Latch
    MASK Maskierung
    "many" int. sources viele Unterbrechungsquellen
    32 req lines 32 Anforderungsleitungen
    32 ack lines 32 Quittierungsleitungen
    enabling the vector Aktivierung des Vektors
    Figur 10
    Vector Vektor
    INTC signals Unterbrechungssteuerungssignale
    LAT Latch

Claims (11)

  1. Datenprozessor, der Folgendes als Teilsysteme umfasst: eine zentrale Verarbeitungseinheit (20), Unterbrechungsbehandler-Mitteln (22), um der genannten zentralen Verarbeitungseinheit selektiv einen einzelnen Unterbrechungsvektor zu signalisieren, mehrere Unterbrechungsquellen (24, 26), die über Prioritätsverkettungsmittel mit den genannten Unterbrechungsbehandler-Mitteln verbunden sind, um hierüber Unterbrechungsanforderungssignale und Unterbrechungsquittierungssignale auszutauschen, und Busmittel (30), um alle obigen Teilsysteme miteinander zu verbinden, dadurch gekennzeichnet, dass die genannten Unterbrechungsbehandler-Mittel einen Lese-Vektor-Befehl an alle Unterbrechungsquellen parallel kommunizieren, um daraufhin die Übertragung eines tatsächlichen Unterbrechungsadressvektors auf den genannten Busmitteln (30) zu erlauben.
  2. Datenprozessor nach Anspruch 1, wobei die Prioritätsverkettungsmittel eine Vielzahl von einzelnen Prioritätsverkettungen umfassen, während sie die Festlegung der Prioritäten unter diesen einzelnen Prioritätsverkettungen erlauben.
  3. Datenprozessor nach Anspruch 1, wobei ein Unterbrechungs-Standardvektor-Generator den Abschluss der genannten Prioritätsverkettungsmittel bildet.
  4. Datenprozessor nach Anspruch 1, wobei die genannten Busmittel andere Transportarten außerhalb einer Unterbrechungsprozedur erlauben.
  5. Datenprozessor nach Anspruch 1, wobei der Unterbrechungsvektor einen oberen Teil hat, der den Unterbrechungsbehandler-Mitteln kommuniziert wird, und einen unteren Teil über die Prioritätsverkettungsmittel.
  6. Datenprozessor nach Anspruch 1, wobei die Unterbrechungsbehandler-Mittel Unterbrechungs-Entscheidungs-Mittel umfassen, um unter einer Vielzahl von Unterbrechungsebene-Signalisierungen, die gleichzeitig empfangen wurden, zu entscheiden, um eine einzelne Unterbrechungssignalisierung an die zentrale Verarbeitungseinheit weiterzuleiten.
  7. Datenprozessor nach Anspruch 1, mit einem zweidimensionalen Unterbrechungssignalisierungsmittel, das mehrere separate Prioritätsverkettungen parallel umfasst, wobei die genannten Signalisierungsmittel die separate Prioritätsbestimmung in Bezug auf verschiedene Teilfelder eines bestimmten Unterbrechungsvektors erlauben.
  8. Datenprozessor nach Anspruch 7, und mit Sequentialisierungsmitteln, um in einem ersten Sequentialisierungsintervall durch die genannten Unterbrechungsbehandler-Mittel auf zentralisierte Weise unter einer Vielzahl von Unterbrechungsanforderungen zu wählen, und um in einem zweiten Sequentialisierungsintervall eine verteilte prioritätsverkettete Auswahl unter einer Vielzahl von Unterbrechungsanforderungen durchzuführen, deren Ursprung logisch entlang der genannten Prioritätsverkettung aufgereiht ist.
  9. Datenprozessor nach Anspruch 1, und der mindestens 200 verschiedene Unterbrechunsgquellen und/oder Unterbrechungsursachen zulässt.
  10. Datenprozessor nach Anspruch 1, der eine Anzahl verschiedener Prioritätsebenen unterstützt, die ungefähr 16 oder 32 entspricht.
  11. Datenprozessor nach Anspruch 1, und der eine flexible Zuordnung der Unterbrechungsprioritäten unter einer Vielzahl von Unterbrechungsquellen und/oder Unterbrechungsursachen erlaubt.
DE69726400T 1996-09-20 1997-09-03 Festkörper-datenprozessor mit vielseitiger mehrquellen-unterbrechungsorganisation Expired - Lifetime DE69726400T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP96202630 1996-09-20
EP96202630 1996-09-20
PCT/IB1997/001055 WO1998012634A2 (en) 1996-09-20 1997-09-03 Solid state data processor with versatile multisource interrupt organization

Publications (2)

Publication Number Publication Date
DE69726400D1 DE69726400D1 (de) 2004-01-08
DE69726400T2 true DE69726400T2 (de) 2004-08-26

Family

ID=8224405

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69726400T Expired - Lifetime DE69726400T2 (de) 1996-09-20 1997-09-03 Festkörper-datenprozessor mit vielseitiger mehrquellen-unterbrechungsorganisation

Country Status (6)

Country Link
US (1) US6098144A (de)
EP (1) EP0865633B1 (de)
JP (1) JP3894579B2 (de)
KR (1) KR19990071464A (de)
DE (1) DE69726400T2 (de)
WO (1) WO1998012634A2 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10115885B4 (de) * 2001-03-30 2006-09-21 Infineon Technologies Ag Anordnung zur Priorisierung eines Interrupts
GB2381891B (en) * 2001-11-12 2003-10-29 Mentor Graphics Testing the interrupt priority levels in a microprocessor
GB2381890B (en) * 2001-11-12 2003-10-29 Mentor Graphics Testing the interrupt sources of a microprocessor
GB2396445B (en) * 2002-12-19 2005-12-21 Advanced Risc Mach Ltd An interrupt controller and interrupt controlling method for prioritizing interrupt requests generated by a plurality of interrupt sources
US9753765B1 (en) * 2004-03-22 2017-09-05 Altera Corporation Multi-processor integrated circuits
US7752353B2 (en) 2007-10-22 2010-07-06 Sandisk Il Ltd. Signaling an interrupt request through daisy chained devices
US7953913B2 (en) * 2008-04-10 2011-05-31 Sandisk Il Ltd. Peripheral device locking mechanism
US8850281B2 (en) 2009-05-12 2014-09-30 Empire Technology Development Llc Digital signatures
US9032476B2 (en) * 2009-05-12 2015-05-12 Empire Technology Development Llc Secure authentication
US8379856B2 (en) * 2009-06-17 2013-02-19 Empire Technology Development Llc Hardware based cryptography
US8606975B2 (en) * 2010-05-21 2013-12-10 Oracle International Corporation Managing interrupts in a virtualized input/output device supporting multiple hosts and functions
US9672186B2 (en) * 2014-06-20 2017-06-06 Nxp Usa, Inc. Electronic monitoring device having wake-up for daisy chain
CN110121703B (zh) * 2016-12-28 2023-08-01 英特尔公司 用于向量通信的系统和方法
CN116150054B (zh) * 2023-02-24 2023-09-05 广州万协通信息技术有限公司 一种基于pcie的中断信息处理方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0259949A (ja) * 1988-08-26 1990-02-28 Toshiba Corp ディジーチェーン割込み処理装置
JPH03142504A (ja) * 1989-10-30 1991-06-18 Toshiba Corp プログラマブルコントローラ
JPH05233318A (ja) * 1992-02-18 1993-09-10 Nec Corp マイクロプロセッサ
US5481725A (en) * 1993-08-03 1996-01-02 Intel Corporation Method for providing programmable interrupts for embedded hardware used with programmable interrupt controllers
US5511200A (en) * 1993-12-01 1996-04-23 Intel Corporation Method and apparatus for providing an enhanced programmable priority interrupt controller
US5745772A (en) * 1996-08-02 1998-04-28 Micron Electronics, Inc. Advanced programmable interrupt controller

Also Published As

Publication number Publication date
WO1998012634A3 (en) 1998-06-04
US6098144A (en) 2000-08-01
JP3894579B2 (ja) 2007-03-22
WO1998012634A2 (en) 1998-03-26
EP0865633B1 (de) 2003-11-26
KR19990071464A (ko) 1999-09-27
JP2000501538A (ja) 2000-02-08
EP0865633A2 (de) 1998-09-23
DE69726400D1 (de) 2004-01-08

Similar Documents

Publication Publication Date Title
DE69233655T2 (de) Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren
DE2809405C3 (de) Prioritätssteuerschaltung
DE1774296C2 (de) Restruktuierbare Steuereinheit für elektronische Digitalrechner
DE69726400T2 (de) Festkörper-datenprozessor mit vielseitiger mehrquellen-unterbrechungsorganisation
DE4035405C2 (de)
DE69632634T2 (de) Arbitrierungseinheit zum Multiprozessorsystembuszugriff mit Wiederholungsfähigkeit
DE3909948C2 (de)
EP0006164B1 (de) Multiprozessorsystem mit gemeinsam benutzbaren Speichern
DE60118622T2 (de) Benutzer-konfigurierbares on-chip speichersystem
DE2411963A1 (de) Datenverarbeitungsanlage
DE10296959T5 (de) System und Verfahren zum Steuern der Buszuteilung während Cache-Speicher-Burstzyklen
DE3438869A1 (de) Computersystem mit adressumwandlung
DE2847216A1 (de) Datenverarbeitungssystem mit mehrprogrammbetrieb
DE3642324A1 (de) Multiprozessoranlage mit prozessor-zugriffssteuerung
DE69531270T2 (de) Unterbrechungssteuerungsgeräte in symmetrischen Mehrprozessorsystemen
DE60132424T2 (de) Taktschutz für gemeinsame Komponenten einer Multiprozessor-DSP Vorrichtung
DE102016122375A1 (de) Dynamischer containerisierter Systemspeicherschutz für Niedrigenergie-MCUs
DE60034998T2 (de) Verbesserungen in oder bezüglich von Mikroprozessoren
DE602004010399T2 (de) Neuadressierbare virtuelle dma-steuer und statusregister
EP0062141B1 (de) Schaltungsanordnung zur Eingabe von Steuerbefehlen in ein Mikrocomputersystem
DE3114921A1 (de) Datenverarbeitungssystem
DE4022365C2 (de) Datenübertragungssystem
DE3936339A1 (de) Controller fuer direkten speicherzugriff
DE602004005820T2 (de) Prozessorarray
DE3344340C2 (de) Datenverarbeitungsanordnung zum Durchführen von Mikrobefehlen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: EISENFUEHR, SPEISER & PARTNER, 10178 BERLIN

8327 Change in the person/name/address of the patent owner

Owner name: NXP B.V., EINDHOVEN, NL