-
Die Erfindung betrifft Prioritätskodierer. Prioritätskodierer sind Schaltungen, die zum
Quittieren bzw. Bestätigen der Anforderung mit der höchsten Priorität unter mehreren
Anforderungen dienen, die an dem Kodierer als aktive Signale ankommen. Eine Anforderungsquittierung
bzw. -bestätigung umfaßt das Freigeben bzw. Aktivieren einer Schaltung (oft ein
Mikroprozessor), so daß die Schaltung die der Anforderung entsprechende Aufgabe ausführt.
-
Ein Prioritätskodierer kann eine Anforderung oder mehrere gleichzeitige Anforderungen auf
jeweiligen Anforderungsleitungen empfangen, denen jeweilige Ränge zugeordnet sind,
beispielsweise von 1 bis n. Der Prioritätskodierer quittiert zu einem Zeitpunkt eine Anforderung
durch Quittierungs- bzw. Bestätigungsleitungen. Bei einigen Kodierern entsprechen die
Quittierungsleitungen direkt Anforderungsleitungen, und der Kodierer überträgt über die
Quittierungsleitungen nur die quittierte Anforderung. In einigen Kodierern liefern die
Quittierungsleitungen den Binärrang der quittierten Anforderung.
-
Es existieren zwei Arten von Prioritätskodierern: sogenannte "lineare" Kodierer und
sogenannte "Ringkodierer" bzw. "zirkulare" Kodierer.
-
In linearen Kodierern werden die den Anforderungsleitungen zugeordneten Prioritäten
unterschieden, wobei die Prioritäten beispielsweise nach fallender Ordnung den Rängen der
Anforderungsleitungen zugeordnet sind. Lineare Kodierer bestätigen immer die Anforderung mit
dem niedrigsten Rang. Eine Anforderung mit einem bestimmten Rang wird nicht bestätigt,
solange Anforderungen mit niedrigeren Rängen verbleiben.
-
Lineare Kodierer werden gewöhnlich als eine nicht sequentielle logische Schaltung vom
Übertrag-Ausbreitungstyp implementiert, welche die Anforderung mit dem niedrigsten Rang
kurz (als Funktion der Übertrag-Ausbreitungszeit) nach irgendeiner Änderung der Zustände
der Anforderungsleitungen bestätigt.
-
Bei zirkularen Kodierern sind die Anforderungsleitungen alle demselben Prioritätsniveau
zugeordnet. Ein solcher Kodierer muß sicherstellen, daß jede dieser Anforderungen zu einer
vorgegebenen Zeit quittiert wird, wenn mehrere Anforderungen zur gleichen Zeit aktiv sind.
-
Um diese Funktion zu erfüllen, werden herkömmliche zirkulare Kodierer mit Hilfe einer
sequentiellen Logikschaltung gebildet, welche die Anforderungsleitungen mit einer Taktrate
zirkular abruft. Bei jedem Taktzyklus fragt die sequentielle Schaltung eine
Anforderungsleitung ab. Wenn die abgefragte Anforderungsleitung aktiv ist, wird die entsprechende
Bestätigung übertragen und das Abfragen der Anforderungsleitungen dann von der letzten
abgefragten Leitung fortgesetzt. Wenn die Anforderungsleitung mit dem letzten Rang n abgefragt
wurde, wird mit dem Abfragen der Anforderungsleitung vom Rang 1 wieder begonnen, usw.
-
Ein Nachteil der oben beschriebenen zirkularen Kodierer besteht deshalb darin, daß sie
während jedes Taktzyklus nur eine Anforderungsleitung verarbeiten. Dieses bedeutet mit anderen
Worten, daß die Anforderung vom Rang j erst j - i Taktzyklen später quittiert wird, wenn die
Schaltung die Leitung vom Rang i abfragt, während die nächste aktive Anforderung vom
Rang j (j > i) ist.
-
Aufgabe der Erfindung ist es deshalb, einen zirkularen Prioriätskodierer zu schaffen, welcher
Anforderungen von beliebigem Rang in aufeinanderfolgenden Taktzyklen quittiert.
-
Es ist weiterhin Aufgabe der Erfindung, einen Zweifach-Prioritätskodierer zu schaffen, der
einen Teil der Anforderungen als Anforderungen mit unterschiedlicher Priorität (lineares
Kodieren) programmierbar verarbeitet und einen anderen Teil der Anforderungen als
Anforderungen mit derselben Priorität (zirkulares Kodieren bzw. Ringkodieren) verarbeitet, während
bei jedem Taktzyklus eine Anforderung bestätigt wird.
-
Diese Aufgaben werden mit einem zirkularen Prioritätskodierer nach Anspruch 1 gelöst. Der
zirkulare Prioritäskodierer umfaßt einen linearen Prioritätskodierer, welcher eine Vielzahl von
Anforderungen von Rang 1 bis n auf entsprechenden Anforderungsleitungen empfängt und
auf einer Bestätigungsausgabe die Anforderung mit niedrigstem Rang unter den empfangenen
Anforderungen bestätigt; ein Maskenregister, das so verbunden ist, daß es zum linearen
Kodieren nur diejenigen Anforderungen überträgt, deren Ränge durch die Ränge aktiver Bits
einer im Maskenregister enthaltenen Maske bestimmt sind; und einen Maskengenerator,
welcher an das Maskenregister eine Maske liefert, deren Bits von Rang 1 bis i (i = 1, 2 ... n) inaktiv
und deren übrige Bits aktiv sind, wenn eine Anforderung vom Rang i vom linearen Kodierer
bestätigt wird.
-
Nach einer Ausführungsform der Erfindung umfaßt das Maskenregister einen
Initialisierungseingang, der aktiviert ist, wenn die Bestätigungsausgabe des linearen Kodierers auf Null ist.
-
Erfindungsgemäß ist darüber hinaus ein Prioritätskodierer geschaffen, der weiterhin Mittel
zum Zwingen von ausgewählten Bits aus den mit Hilfe des Maskengenerators erzeugten
Masken in einen aktiven Zustand umfaßt.
-
Nach einer Ausführungsform der Erfindung umfaßt der Kodierer Mittel zum Autorisieren des
Ladens einer Maske in dem Maskenregister nur, wenn die bestätigte Anforderung den Bits
entspricht, welche nicht in einen aktiven Zustand der Masken gezwungen werden.
-
Die Erfindung wird im folgenden anhand von Ausführungsbeispielen unter Bezugnahme auf
die Zeichnungen näher erläutert. Hierbei zeigen:
-
Fig. 1 eine Ausführungsform eines erfindungsgemäßen zirkularen Prioritätskodierers;
-
Fig. 2 ein Zeitablaufdiagramm des Betriebs des Kodierers nach Fig. 1;
-
Fig. 3 eine Ausführungsform des erfindungsgemäßen Zweifach-Prioritätskodierers; und
-
Fig. 4 eine alternative Ausführungsform des Zweifach-Prioritätskodierers nach Fig. 3.
-
Gemäß Fig. 1 umfaßt ein erfindungsgemäßer zirkularer Prioritätskodierer einen linearen
Prioritätskodierer 10. Der lineare Kodierer empfängt Anforderungsleitungen vom Rang 1 bis
n durch ein Maskenregister 12. Die Anforderungsleitungen, die mit dem Eingang des
Maskenregisters verbunden sind, sind mit RQ bezeichnet; die Anforderungsleitungen, welche
zwischen das Maskenregister und den linearen Kodierer 10 gekoppelt sind, sind mit RQM
bezeichnet. Die Bestätigungsausgabe ACK des linearen Kodierers 10 ist mit einem
Maskengenerator 14 verbunden, welcher an das Maskenregister 12 eine Maske M liefert, die eine
Funktion des Rangs der Anforderung ist, welche mit Hilfe des Linearkodierers 10 bestätigt
wurde.
-
Eine durch den Maskengenerator 14 erzeugte Maske M umfaßt ein Bit, das mit jeder
Anforderungsleitung RQ in Verbindung steht. Das Maskenregister 12 ist so gebildet, daß ein aktiver
Zustand einer Anforderungsleitung RQ an den linearen Kodierer 10 nur übertragen wird,
wenn das entsprechende Bit der Maske aktiv ist, beispielsweise bei 1.
-
Darüber hinaus empfängt das Maskenregister 12 ein Taktsignal CK, das, zum Beispiel bei
jeder ansteigenden Flanke, die Speicherung der Zustände der Anforderungsleitungen RQ und
der Maske M veranlaßt, die durch den Maskengenerator 14 geliefert wird. Das
Maskenregister 12 umfaßt einen asynchronen "Setz"-Eingang S (welcher die Maskenbits in dem
Maskenregister auf "1" setzt, sobald er aktiviert ist). Der Setzeingang S wird aktiviert, wenn der
lineare Kodierer 10 keinerlei Anforderungen zu bestätigen hat, das heißt, wenn seine Ausgabe
ACK auf 0 ist. Praktisch bedeutet dies, daß die Ausgabe ACK an ein NICHT-ODER-Gatter
16 geliefert wird, dessen Ausgang auf den Setseingang S des Maskenregisters 12 gegeben
wird.
-
Der Maskengenerator 14 ist so gebildet, daß er eine Maske liefert, deren Bits der Ränge 1 bis
i auf "0" und deren übrige Bits auf "1" sind, wenn der lineare Kodierer 10 die Anforderung
vom Rang i bestätigt. Solch ein Maskengenerator kann vom Fachmann leicht mit Hilfe
logischer Gatter gebildet werden.
-
Fig. 2 zeigt mit Hilfe eines Zeitablaufdiagramms den Betrieb des erfindungsgemäßen
zirkularen Kodierers. Fig. 2 zeigt die Veränderungen des Taktsignals CK der in das
Maskenregister 12 geladenen Masken M und die Bestätigung ACK verschiedener Anforderungen. Zeiten
t1 bis t4 bezeichnen aufeinanderfolgende Anstiegsflanken des Taktsignals CK, und Zeiten
t1' bis t3' bezeichnen abfallende Flanken.
-
Zum Zeitpunkt t1 wird eine Anfangsmaske in das Maskenregister 12 geladen, wobei alle Bits
der Anfangsmaske auf "1" sind; die Zustände der Anforderungsleitungen RQ werden im
Register 12 gespeichert. Der lineare Kodierer 10 bestätigt keinerlei Anforderungen, seine
Ausgabe ACK ist auf "0". Alle Anforderungen auf den Leitungen RQ werden an den linearen
Kodierer 10 übertragen. Es wird angenommen, daß nur die Leitung vom Rang i aktiv ist. Kurz
nach dem Zeitpunkt t1, beispielsweise nahe dem Zeitpunkt t1' auf der abfallenden Flanke des
Taktsignals CK, bestätigt der lineare Kodierer 10 die Anforderung i. Sobald die Anforderung
i bestätigt ist, erzeugt der Maskengenerator 14 eine Maske M, deren Bits vom Rang 1 bis i auf
"0" und deren übrige Bits auf "1" sind.
-
Zum Zeitpunkt t2 wird die oben erwähnte, von dem Maskengenerator 14 erzeugte Maske in
das Maskenregister 12 geladen, und die Zustände der Anforderungsleitungen RQ werden
gespeichert. Wie in dem Ablaufdiagramm nach Fig. 2 gezeigt ist, übertragen die Leitungen RQ
neue Anforderungen vom Rang j und k (j < k), die kleiner als der Rang i sind. Mit der Maske,
die zum Zeitpunkt t2 geladen wurde, werden jedoch Anforderungen mit den Rängen j und k
maskiert; der lineare Kodierer 10 empfängt deshalb keinerlei Anforderungen auf RQM. Nahe
dem Zeitpunkt t2' erzeugt der lineare Kodierer 10 einen Wert "0" auf seinem
Bestätigungsausgang ACK. Sobald der Bestätigungsausgang sich auf "0" ändert, wird das Maskenregister
12 durch Gatter 16 auf "1" gesetzt, was eine Übertragung der Anforderungen der Ränge j und
k an den linearen Kodierer 10 veranlaßt. Somit bestätigt der lineare Kodierer 10 kurz nach
dem Übergang des Bestätigungsausgangs ACK auf "0" die Anforderungen vom Rang j, weil
Rang j niedriger als Rang k ist. Der Maskengenerator 14 erzeugt dann eine Maske M, deren
Bits vom Rang 1 bis j auf "0" und deren übrige Bits auf "1" sind.
-
Zum Zeitpunkt t3 wird diese neue Maske in das Maskenregister 12 geladen, und es werden
die neuen Anforderungen auf den Leitungen RQ gespeichert. Die Anforderungen der Ränge j
und k sind noch aktiv. Die Anforderung von Rang j ist jetzt jedoch maskiert und wird nicht an
den linearen Kodierer 10 übertragen. Nur die Anforderung von Rang k wird an den linearen
Kodierer 10 übertragen, welcher diese Anforderung nahe dem Zeitpunkt t3' bestätigt. Auf
diese Bestätigung erzeugt der Maskengenerator 14 eine neue Maske M, deren Bits der Ränge
1 bis k auf "0" und deren übrige Bits auf "1" sind, usw.
-
Das Zeitablaufdiagramm nach Fig. 2 zeigt, daß die Schaltung nach Fig. 1 als ein zirkularer
Prioritätskodierer mit dem Vorteil arbeitet, daß bei jedem Taktzyklus eine aktive Anforderung
bestätigt wird.
-
Bestätigungen werden durch andere Schaltungen allgemein auf den ansteigenden Flanken des
Taktsignals CK berücksichtigt. Deshalb wird der Übergang auf "0" zwischen den Zeitpunkten
t2' und t3 ignoriert.
-
Fig. 3 repräsentiert eine Ausführungsform eines erfindungsgemäßen
Zweifach-Prioritätskodierers. Dieser Zweifach-Prioritätskodierer verarbeitet Anforderungen mit niedrigen
Rängen als Anforderungen unterschiedlicher Prioritäten (lineares Kodieren) und verarbeitet
Anforderungen mit höheren Rängen als Anforderungen mit identischen Prioritäten (zirkulares
Kodieren). In Fig. 3 sind gleiche Elemente wie in Fig. 1 mit denselben Bezugszeichen
bezeichnet.
-
Im Vergleich zu Fig. 1 wurden mehrere ODER-Gatter 18 hinzugefügt, die alle ein Bit von
einem Register 20 und ein Bit von einer Maske M1 erhalten, die mit Hilfe des Maskengenerators
14 erzeugt wird. Die Ausgänge der ODER-Gatter 18 liefern die Maske M an das
Maskenregister 12. Bei dieser Konfiguration ist das entsprechende Bit der Maske M immer auf
"1", wenn ein Bit des Registers 20 auf "1" ist, unabhängig von der mittels des
Maskengenerators 14 erzeugten Maske M1.
-
Da ein Prioritätskodierer im allgemeinen mit einem Mikroprozessor in Verbindung steht,
kann auf das Register 20 in der Schreib-Betriebsart durch den Mikroprozessor zugegriffen
werden, was einem Programm ermöglicht, Werte in dieses Register zu schreiben.
-
Wenn angenommen wird, daß die Bits vom Rang 1 bis i des Registers 20 auf "1" sind,
werden die Anforderungen vom Rang 1 bis i immer an den linearen Kodierer 10 übertragen. Die
Anforderungen vom Rang 1 bis i werden deshalb fortdauernd in herkömmlicher linearer
Weise durch den linearen Kodierer 10 als Anforderungen mit unterschiedlichen Prioritäten
verarbeitet. Im Gegensatz dazu arbeitet der Maskengenerator 14 in der vorher beschriebenen
Weise, und die übrigen Anforderungen mit den Rängen i + 1 bis n zirkular verarbeitet werden.
-
Solange eine Anforderung mit den Rängen 1 bis i aktiv ist, bestätigt der Kodierer 10
tatsächlich die Anforderung mit der höchsten Priorität unter diesen aktiven Anforderungen. Der
Maskengenerator 14 liefert bei jeder dieser Bestätigungen eine Maske, deren Bits auf "0"
sind, die mit Hilfe der ODER-Gatter 18 jedoch auf "1" gezwungen werden.
-
Wenn dagegen keine Anforderung mit einem Rang zwischen 1 und i existiert, verhält sich die
Schaltung für Anforderungen mit Rängen größer als i zirkular, ähnlich der Schaltung nach
Fig. 1.
-
Fig. 4 zeigt eine beispielhafte, der Schaltung nach Fig. 3 hinzugefügte Logikschaltung, die
es dem erfindungsgemäßen Zweifachkodierer ermöglicht, die Anforderungen nach irgend
einer mit Hilfe des Registers 20 bestimmten Kombination zirkular oder linear zu bearbeiten.
-
Das beschriebene Beispiel entspricht dem Fall, bei dem so viele Bestätigungsleitungen ACK
wie Anforderungsleitungen RQ vorliegen. Jeder Bestätigungsleitung ACK ist mit einem
ersten Eingang eines betreffenden UND-Gatters 40 verbunden. Jede Ausgangsleitung L/C des
Registers 20 ist mit einem zweiten invertierenden Eingang des entsprechenden UND-Gatters
40 verbunden. Die Ausgänge der Gatter 40 sind mit einem ODER-Gatter 42 verbunden.
-
Bei dieser Konfiguration ist der Ausgang des Gatters 42 nur aktiv, wenn eine zirkulare
Prioritätsanforderung bestätigt wird. Der Ausgang des Gatters 42 aktiviert die Übertragung des
Taktsignals CK an das Maskenregister 12 durch ein UND-Gatter 44. Dementsprechend wird
eine neue Maske M in das Maskenregister 12 nur geladen, wenn eine zirkulare
Prioritätsanforderung bestätigt wird.