-
HINTERGRUND DER ERFINDUNG
-
1. Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft das Gebiet der Prozessoren und insbesondere
eine Vorrichtung gemäß Anspruch
1 und ein Verfahren gemäß Anspruch
16.
-
2. Beschreibung des Standes
der Technik
-
Prozessoren
werden oftmals so entworfen, dass sie einen Größenvergleich eines Paares von
Operanden durchführen.
So, wie er hier verwendet wird, ist ein Größenvergleich ein Vergleich,
der die relative Größe der Operanden
bestimmt (z.B. dass ein Operand größer oder kleiner als der andere
Operand ist). Das Ergebnis des Vergleichs ist ein Wert, der die
relative Größe anzeigt.
Zum Beispiel kann das Ergebnis angeben, ob ein erster Operand größer als
ein zweiter Operand ist oder nicht. Alternativ dazu kann das Ergebnis
angeben, ob der erste Operand kleiner als der zweite Operand ist
oder nicht, größer als
oder gleich dem zweiten Operanden ist, kleiner als oder gleich dem
zweiten Operanden ist, und es kann jede Kombination aus dem vorher
Gesagten, etc. angeben.
-
Größenvergleiche
können
während
der Ausführung
einer Vielfalt von Befehlen durchgeführt werden. Zum Beispiel kann
ein Größenvergleich
in einigen Befehlssätzen
verwendet werden, wenn ein bedingter Sprungbefehl ausgeführt wird,
zwei Operanden des Sprungbefehls verglichen werden und der Sprung
bzw. die Verzweigung im Ansprechen auf das Ergebnis des Größenvergleichs
bedingt genommen wird oder nicht. Einige Befehlssätze umfassen
Befehle, die bedingt eine Ausnahmebedingung (z.B. die Trap-Befehle
in dem MIPS-Befehlssatz) auf der Grundlage eines Größenvergleichs
von zwei Operanden des Befehls bewirken. Andere Befehle können so
definiert werden, dass sie auf der Grundlage des Vergleichs zweier
Operanden solcher Befehle ein Register mit einer binären Eins
oder einer binären
Null schreiben. Zum Beispiel umfasst der MIPS-Befehlssatz Satzinstruktionen,
die so definiert sind, dass sie mit dem Ergebnis eines Größenvergleichs ein
Mehrzweckregister schreiben. Ein anderes Beispiel für solche
Befehle können
Vergleichsbefehle sein, die in vielen Befehlssätzen enthalten sind. Vergleichsbefehle
können
jedes Register mit einem Ergebnis (oder mehreren Bits von Ergebnissen,
wie etwa größer als,
kleiner als, gleich, etc.) schreiben. Oftmals aktualisieren Vergleichsbefehle
ein Spezialbedin gungscoderegister (oder Flag-Register) mit mehreren
Bits an Ergebnis auf der Grundlage eines Größenvergleichs.
-
Typischerweise
werden Größenvergleiche
in Prozessoren durchgeführt,
indem ein Volladdierer verwendet wird, um einen ersten der zwei
Operanden, die verglichen werden sollen, von dem zweiten der zwei Operanden
zu subtrahieren. Das Vorzeichen des Ergebnisses der Subtraktion
zeigt an, ob der erste Operand größer als der zweite Operand
ist oder nicht.
-
Realkomparatoren
(die keine Volladdierer verwenden) sind aus
US 5,592,142 (Adams et al.) und
US 5,905,428 (Bechade) bekannt.
Ein 4-Bit-Komparator DM 74LS85 ist von der Firma Fairchild Semiconductor Corporation
bekannt.
-
Die
US 5,592,142 betrifft einen
Komparator, wie er in dem Oberbegriff von Anspruch 1 der vorliegenden
Erfindung definiert ist.
-
Die
US 5,905,428 betrifft einen
Komparator, der die Werte vergleicht, indem er die Anzahl einer
führenden "1" in jedem der Werte bestimmt, die verglichen
werden sollen. Die Positionswerte können bestimmt werden, indem
wenigstes zwei "4-BIT-Schaltungen zur
Bestimmung der Position der führenden
Einsen" und wenigstens
zwei "16-BIT-Schaltungen
zur Bestimmung der Position der führenden Einsen" verwendet werden.
-
Der
4-BIT-Komparator, der von der Firma Fairchild Semiconductor Corporation
bereitgestellt wird, führt einen
Vergleich von reinen Binärcodes
oder BCD-Codes durch. Worte, die länger als 4 Bits sind, können verglichen
werden, indem die Komparatoren kaskadenförmig angeordnet werden. Deshalb
können
durch die Verwendung dieses Komparators nur zwei 4-BIT-Codes verglichen
werden.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Eine
Aufgabe der vorliegenden Erfindung liegt darin, einen Größenkomparator
bereitzustellen, der ein einfaches Layout und eine kleine Anzahl
von Verbindungen zwischen Schaltungen innerhalb des Komparators aufweist.
Diese Aufgabe wird jeweils von dem Komparator gemäß Anspruch
1 und dem Verfahren gemäß An spruch
16 gelöst.
Weitere Ausführungsbeispiele
sind in den jeweiligen Unteransprüchen definiert.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
nachfolgende ausführliche
Beschreibung nimmt Bezug auf die beigefügten Zeichnungen, die nun kurz
beschrieben werden.
-
1 ist
ein Blockdiagramm eines Ausführungsbeispiels
eines Prozessors.
-
2 ist
ein Blockdiagramm eines Teils eines Ausführungsbeispiels einer Integer-Einheit,
die einen Größenkomparator
umfasst.
-
3 ist
ein Beispiel eines Größenkomparators.
-
4 ist
ein zweites Beispiel eines Größenkomparators.
-
5 ist
ein Blockdiagramm eines Teils einer Integer-Einheit, die eine Kombination
aus einer Schaltung zum Zählen
führender
Nullen und einem Größenkomparator
umfasst.
-
6 ist
ein Blockdiagramm eines Ausführungsbeispiels
eines Trägermediums.
-
Obwohl
die Erfindung für
verschiedene Modifikationen und alternative Formen geeignet ist,
sind spezielle Ausführungsbeispiele
davon beispielshalber in den Zeichnungen gezeigt und werden hier
ausführlich
beschrieben. Es sollte aber klar sein, dass die Zeichnungen und
die ausführliche
Beschreibung dazu nicht so gedacht sind, dass sie die Erfindung
auf die bestimmte offenbarte Form beschränken, sondern dass stattdessen die
Erfindung alle Modifikationen, Äquivalente
und Alternativen abdeckt, die in den Schutzumfang und in den Bereich
der vorliegenden Erfindung fallen, wie sie durch die angehängten Ansprüche definiert
ist.
-
AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSBEISPIELE
-
Überblick über den
Prozessor
-
Unter
Bezugnahme auf 1 ist ein Blockdiagramm eines
Ausführungsbeispiels
eines Prozessors 10 gezeigt. Andere Ausführungsbeispiele
sind möglich
und werden in Betracht gezogen. In dem Ausführungsbeispiel von 1 umfasst
der Prozessor 10 einen Befehlscache 12, eine Abruf-/Decodier-/Ausgabeeinheit 14, eine
Sprungvorhersageeinheit (Branch Prediction Unit) 16, einen
Satz von Integer-Ausführungseinheiten 22A–22B,
einen Satz von Fließkomma-Ausführungseinheiten
(FPU; floating point execution units) 24A–24B, einen
Satz von Lade-/Speicher-Ausführungseinheiten 26A–26B,
eine Registerdatei 28, einen Datencache 30 und
eine Busschnittstellen-Einheit 32. Der Befehlscache 12 ist
mit der Busschnittstellen-Einheit 32 gekoppelt und ist
so gekoppelt, dass er eine Abrufadresse von der Abruf-/Decodier-/Ausgabeeinheit 14 empfängt und dieser
entsprechende Befehle bereitstellt. Die Abruf-/Decodier-/Ausgabeeinheit 14 ist
außerdem
mit der Sprungvorhersageeinheit 16 und den Ausführungseinheiten 22A–22B, 24A–24B und 26A–26B gekoppelt.
Insbesondere ist die Abruf-/Decodier-/Ausgabeeinheit 14 so
gekoppelt, dass sie eine Sprungadresse für die Sprungvorhersageeinheit 16 bereitstellt,
und dass sie eine Vorhersage und/oder eine Zieladresse von der Sprungvorhersageeinheit 16 empfängt. Die
Abruf-/Decodier-/Ausgabeeinheit 14 ist so gekoppelt, dass
sie den Ausführungseinheiten 22A–22B, 24A–24B und 26A–26B Befehle
für die
Ausführung
bereitstellt, und dass sie eine berichtigte Abrufadresse von der
Integer-Ausführungseinheit 22A empfängt. Die
Ausführungseinheiten 22A–22B, 24A–24B und 26A–26B sind
im Allgemeinen mit der Registerdatei 28 und dem Datencache 30 gekoppelt,
und der Datencache 30 ist mit der Busschnittstellen-Einheit 32 gekoppelt.
-
Allgemein
gesagt ist die Abruf-/Decodier-/Ausgabeeinheit 14 so konfiguriert,
dass sie Abrufadressen für
den Befehlscache 12 erzeugt und entsprechende Befehle davon
empfängt.
Die Abruf-/Decodier-/Ausgabeeinheit 14 verwendet Sprungvorhersageinformationen,
um die Abrufadressen zu erzeugen, um ein spekulatives Abrufen von
Befehlen vor der Ausführung
der entsprechenden Sprungbefehle zu erlauben. In einem Ausführungsbeispiel
umfasst die Sprungvorhersageeinheit 16 insbesondere eine
Reihe von Sprungprädiktoren, die
von der Sprungadresse indiziert sind (z.B. die typischen Zweibit-Zähler, die
inkrementiert werden, wenn die entsprechende Verzweigung genommen
wird, wobei binär
bei 11 eine Sättigung
eintritt, und die dekrementiert werden, wenn die entsprechende Verzweigung
nicht genommen wird, wobei binär
bei 00 eine Sättigung
eintritt, wobei das signifikanteste Bit anzeigt, ob der Sprung bzw.
die Verzweigung genommen worden ist oder nicht). Obwohl jede Größe und Konfiguration
verwendet werden kann, kann eine Implementierung der Sprungprädiktoren 16 4k
Einträge
in einer direktabgebildeten (direct-mapped) Konfiguration sein.
Außerdem
kann die Sprungvorhersageeinheit 16 in einem Ausführungsbeispiel
einen Pufferspeicher für
Sprungziele enthalten, der eine Reihe von Sprungzieladressen umfasst.
Die Zieladressen können
vorher generierte Zieladressen jedes Typs von Sprung bzw. Verzweigung
sein oder können
nur diejenigen von indirekten Sprüngen sein. Wiederum kann, obwohl
jegliche Konfiguration verwendet werden kann, eine Implementierung 64 Einträge in dem
Pufferspeicher für
Sprungziele bereitstellen. Und außerdem kann ein weiteres Ausführungsbeispiel
einen Rücksprung-Stapelspeicher
umfassen, der dazu verwendet wird, Verknüpfungsadressen von Sprungbefehlen
zu speichern, die eine Verknüpfungsressource
aktualisieren ("Sprung-
und Verknüpfungs"-Befehle). Die Abruf-/Decodier-/Ausgabeeinheit 14 kann
Verknüpfungsadressen
bereitstellen, wenn Sprungbefehle, die das Verknüpfungsregister aktualisieren,
abgerufen werden, um Informationen in den Rücksprung-Stapelspeicher einzuspeichern,
und der Rücksprung-Stapelspeicher
kann die Adresse aus dem obersten Eintrag des Rücksprung-Stapelspeichers als
eine vorhergesagte Rücksprungadresse
bereitstellen. Obwohl jede Konfiguration verwendet werden kann,
kann eine Implementierung 8 Einträge in dem Rücksprung-Stapelspeicher bereitstellen.
-
Die
Abruf-/Decodier-/Ausgabeeinheit 14 decodiert die abgerufenen
Befehle und stellt sie in eine oder mehrere Befehlswarteschlangen
zur Ausgabe an die geeigneten Ausführungseinheiten. Die Befehle
können spekulativ
an die geeigneten Ausführungseinheiten
ausgegeben werden, wiederum vor der Ausführung/Auflösung der Sprungbefehle, die
bewirken, dass die Befehle spekulativ sind. In einigen Ausführungsbeispielen kann
eine Ausführung
mit einer verschobenen Reihenfolge verwendet werden (z.B. können die
Befehle in einer anderen Reihenfolge als der Programmreihenfolge
ausgegeben werden). In anderen Ausführungsbeispielen kann eine
Ausführung
in der richtigen Reihenfolge verwendet werden. Aber es können immer
noch einige spekulative Ausgaben/Ausführungen zwischen der Zeit auftreten,
in der ein Sprungbefehl ausgegeben wird und in der sein Ergebnis
von der Ausführungseinheit
erzeugt wird, die diesen Sprungbefehl ausführt (z.B. kann die Ausführungseinheit
mehr als eine Pipeline-Stufe aufweisen).
-
Die
Integer-Ausführungseinheiten 22A–22B sind
allgemein in der Lage, arithmetische/logische Integer-Operationen,
das Verschieben, das zyklische Vertauschen (rotate), etc. zu handhaben.
Wenigstens die Integer-Ausführungseinheit 22A ist
so konfiguriert, dass sie Sprungbefehle ausführen kann, und in einigen Ausführungsbeispielen
können
beide Integer-Ausführungseinheiten 22A–22B Sprungbefehle
handhaben. In einer Implementierung führt nur die Ausführungseinheit 22B Integer-Multiplikations-
und -Dividierbefehle aus, obwohl in anderen Ausführungsbeispielen beide solche
Befehle handhaben können.
Die Fließkomma-Ausführungseinheiten 24A–24B führen in ähnlicher
Weise die Fließkommabefehle
aus. Die Integer- und Fließkomma-Ausführungseinheiten 22A–22B und 24A–24B können in
dem veranschaulichten Ausführungsbeispiel Operanden
in die Registerdatei 28 schreiben und aus dieser auslesen,
wobei die Registerdatei 28 sowohl Integer- als auch Fließkomma-Register
umfassen kann. Die Lade-/Speicher-Einheiten 26A–26B können Lade-/Speicher-Adressen
im Ansprechen auf Lade-/Speicher-Befehle erzeugen und Cachezugriffe
durchführen, um
Speicherplätze
durch den Datencache 30 (und, falls notwendig, durch die
Busschnittstellen-Einheit 32) zu lesen und zu schreiben,
wodurch auch Daten zu den bzw. von den Registern in der Registerdatei 28 transferiert werden.
-
Der
Befehlscache 12 kann jede geeignete Konfiguration und Größe aufweisen,
die direktabgebildete, vollassoziative und bereichsassoziative Konfigurationen
umfassen. In ähnlicher
Weise kann der Datencache 30 jede geeignete Konfiguration
und Größe aufweisen,
die jede der oben genannten Konfigurationen umfassen. In einer Implementierung
kann sowohl der Befehlscache 12 als auch der Datencache 30 ein
4-Wege-bereichsassoziativer 32 Kilobyte (kb) Cache sein, der 32
Byte Cache-Lines
umfasst. Sowohl der Befehlscache 12 als auch der Datencache 30 sind
mit der Busschnittstellen-Einheit 32 für den Transfer von Befehlen
und Daten in die Caches und aus den Caches heraus im Ansprechen
auf Fehltreffer, Entleerungen, Kohärenzaktivität in dem Bus, etc., gekoppelt.
-
In
einer Implementierung ist der Prozessor 10 für die MIPS-Befehlssatzarchitektur
entworfen (die die anwendungsspezifischen MIPS-3D- und MIPS-MDMX-Erweiterungen umfasst).
Der MIPS-Befehlssatz kann unten als ein spezifisches Beispiel für bestimmte
Befehle verwendet werden. Aber andere Ausführungsbeispiele können die
IA-32- oder IA-64-Befehlssatzarchitekturen, die von der Firma Intel
Corp. entwickelt wurden, die PowerPC-Befehlssatzarchitektur, die
Alpha-Befehlssatzarchitektur, die ARM-Befehlssatzarchitektur oder irgendwelche
anderen Befehlssatzarchitekturen implementieren.
-
Es
sei angemerkt, dass, obwohl 1 zwei Integer-Ausführungseinheiten,
zwei Fließkomma-Ausführungseinheiten
und zwei Lade-/Speicher-Einheiten veranschaulicht, andere Ausführungsbeispiele
jegliche Anzahl von jeder Art von Einheit verwenden kann und sich
die Anzahl einer Art von der Anzahl der anderen Art unterscheiden
kann.
-
Größenkomparator
-
Unter
Bezugnahme auf 2 ist ein Blockdiagramm eines
Ausführungsbeispiels
eines Teils der Integer-Einheit 22A gezeigt. Insbesondere
kann der Teil, der in 2 gezeigt ist, eine Größenkomparatorschaltung
umfassen, die in der Integer-Einheit 22A enthalten ist.
Andere Teile (die nicht gezeigt sind) können Schaltungen zur Durchführung anderer
Integer-Operationen aufweisen. Die Integer-Einheit 22B kann
einen ähnlichen
Größenkomparator
umfassen. Andere Ausführungsbeispiele
sind möglich
und werden in Betracht gezogen. In dem Ausführungsbeispiel von 2 umfasst
der Größenkomparator
eine Schaltung 40 für
einen bitweisen Vergleich, eine Erfassungsschaltung 42,
die zwei Unterschaltungen umfasst (eine ODER-Schaltung (OR-Schaltung) 44 und
eine One-hot-Schaltung 46), und eine A_Gt_B-Schaltung 48.
Die Integer-Einheit 22A ist so gekoppelt, dass sie wenigstens
zwei M-Bit-Operanden (SRCA[M-1:0] und SRCB[M-1:0]) des Befehls, der
ausgeführt
werden soll, und ein vorzeichenversehenes Signal empfängt, das
anzeigt, ob die Operation eine vorzeichenversehene Integer-Operation
oder eine Integer-Operation ohne Vorzeichen ist. Die bitweise Vergleichsschaltung 40 ist
so gekoppelt, dass sie die Operanden empfängt und einen Vektor (Compare_Vector[M-1:0])
erzeugt. Die Erfassungsschaltung 42 (und genauer die ODER-Schaltung 44 und
die One-hot-Schaltung 46) ist so gekoppelt, dass sie den
Vektor Compare_Vector[M-1:0] empfängt. Die ODER-Schaltung 44 ist
so konfiguriert, dass sie einen zweiten Vektor (OR_Vector[M-1:0])
erzeugt. Die One-hot-Schaltung 46 ist so gekoppelt, dass
sie den Vektor OR_Vector[M-1:0] und den Vektor Compare_Vector[M-1:0]
empfängt
und einen Ausgangsvektor (One_Hot[M-1:0]) erzeugt. Die A_Gt_B-Schaltung 48 ist
so gekoppelt, dass sie den One_Hot[M-1:0]-Vektor, den Operanden
SRCA[M-1:0] und das vorzeichenversehene Signal empfängt. Die
A_Gt_B-Schaltung 48 erzeugt ein A_Gt_B-Signal im Ansprechen
auf ihre Eingaben. Das A_Gt_B-Signal kann von der Integer-Einheit 22A ausgegeben
werden oder kann einer anderen Schaltung in der Integer-Einheit 22A bereitgestellt
werden, die den Ausgang auf der Grundlage des Befehls, der ausgeführt wird,
auswählt.
-
Im
Allgemeinen ist der Größenkomparator
so konfiguriert, dass er die beiden Quelloperanden SRCA und SRCB
vergleicht und einen Ausgang erzeugt, der die relative Größe angibt.
In dem veranschaulichten Ausführungsbeispiel
erzeugt der Größenkomparator
zum Beispiel einen Ausgang, der angibt, ob der Operand SRCA größer ist
als der Operand SRCB oder nicht. Andere Ausführungsbeispiele können einen
Ausgang erzeugen, der anzeigt, ob der Operand SRCA kleiner ist als
der Operand SRCB oder nicht, oder können mehrere Ausgänge erzeugen,
die die relative Größe der Operanden
SRCA und SRCB angeben, wobei ähnliche
Schaltungen verwendet werden, wie sie in 2 veranschaulicht
sind.
-
Das
Vergleichen der Größe von zwei
ganzzahligen Zahlen kann im Allgemeinen das Suchen des ersten Bits,
beginnend mit dem signifikantesten Bit und fortschreitend zu dem
am wenigsten signifikanten Bit in der Reihenfolge, beinhalten, in
dem sich die beiden ganzzahligen Zahlen unterscheiden. Die Zahl,
die eine binäre
Eins in dem ersten Bit aufweist (wobei angenommen wird, dass die
Zahlen vorzeichenlos sind, oder vorzeichenbehaftet sind, aber die
gleichen Vorzeichen aufweisen), ist größer als die andere Zahl. Der
Größenkomparator,
der in 2 veranschaulicht ist, erreicht den Größenvergleich,
indem er einen bitweisen Vergleich der beiden ganzen Zahlen durchführt, um
einen Vergleichsvektor (Compare_Vector[M-1:0]) zu erzeugen, das erste
Bit (beginnend mit dem signifikantesten Bit und in der Reihenfolge
fortschreitend bis zum am wenigsten signifikanten Bit) des Vergleichsvektors
erfasst, der angibt, dass die entsprechenden Bits unterschiedlich
sind (nicht gleich sind), und das erste Bit eines der Operanden
als das Ergebnis des Vergleichs auswählt.
-
In
dem veranschaulichten Ausführungsbeispiel
führt die
bitweise Vergleichsschaltung 40 einen bitweisen Vergleich
der Operanden SRCA und SRCB durch, um den Vergleichsvektor Compare_Vector[M-1:0]
zu erzeugen. Jedes Bit des Vergleichsvektors ist das Vergleichsergebnis
für die
gleichzahligen Bits der Operanden SRCA und SRCB. Der Vergleichvektor
ist somit ein Vektor von Bits, der anzeigt, ob die entsprechenden Bits
der Operanden SRCA und SRCB gleich sind oder nicht. Der Vergleichsvektor
wird der Erfassungsschaltung 42 zugeführt, die eine Angabe des signifikantesten
Bits erzeugt, in dem die Operanden SRCA und SRCB nicht gleich sind.
Insbesondere in dem veranschaulichten Ausführungsbeispiel ist die Angabe
ein One-hot-Vektor (One_Hot[M-1:0]), der sein Satzbit an der Bitposition
des signifikantesten Bits aufweist, in dem sich die Operanden SRCA
und SRCB unterscheiden. Die A_Gt_B-Schaltung 48 empfängt den
One-hot-Vektor und den Operanden SRCA und erzeugt das A_Gt_B-Ausgangssignal.
Insbesondere kann die A_Gt_B-Schaltung 48 das Bit des Operanden
SRCA auswählen,
das von dem One-hot-Vektor angezeigt wird. Wenn das Bit gesetzt
ist, dann ist SRCA größer als
SRCB. Wenn das Bit frei (clear) ist, dann kann SRCA kleiner als
SRCB oder gleich SRCB sein.
-
In
einem Ausführungsbeispiel
führt die
bitweise Vergleichsschaltung 40 ein bitweises exklusives ODER
(XOR) der Operanden SRCA und SRCB durch. Da ein XOR von zwei Bits
eine logische Null ist, wenn die Bits gleich sein, und eine logische
Eins ist, wenn die Bits unterschiedlich sind, umfasst der sich ergebende Vergleichsvektor
Satzbits in Bitpositionen, in denen sich die Operanden SRCA und
SRCB unterscheiden, und freie Bits in Bitpositionen, in denen die
Operanden SRCA und SRCB gleich sind.
-
Bei
diesem Ausführungsbeispiel
umfasst die Erfassungsschaltung
42 eine ODER-Schaltung (OR-Schaltung)
44 und
eine One-hot-Schaltung
46. Die ODER-Schaltung
44 empfängt den
Vergleichsvektor und erzeugt einen ODER-Vektorausgang (OR_Vector[M-1:0]).
Jedes Bit des ODER-Vektors ist ein logisches ODER des entsprechenden
Bits des Vergleichsvektors und jedes signifikanteren Bits des Vergleichsvektors. Somit
ist OR_Vector[M-1] gleich Compare_Vector[M-1]; OR_Vector[M-2] ist
gleich Compare_Vector[M-1] ODER Compare_Vector[M-2]; OR_Vector[M-3]
ist gleich Compare_Vector[M-1] ODER Compare_Vector[M-2] ODER Compare_Vector[M-3];
etc. Demgemäß ist der
ODER-Vektor ein Vektor, der binäre
Nullen von dem signifikantesten Bit bis zu dem ersten Bit des Vergleichsvektors,
das gesetzt ist, und binäre
Einsen für
die restlichen Bits umfasst. Der Übergang in dem ODER-Vektor
von einer binären
Null auf eine binäre
Eins identifiziert das erste Bit in den Quelloperanden, die sich
unterscheiden. Der nachfolgende Verilog-Code kann die Schaltungen
der ODER-Schaltung
44 darstellen:
-
Die
ODER-Schaltung 44 kann einen Satz von kaskadierten ODER-Gattern
umfassen, wobei jedes ODER-Gatter den Ausgang des vorhergehenden
ODER-Gatters und ein Bit des Vektors Compare_Vector empfängt (wie
dies von dem obigen Verilog-Code impliziert wird). Alternativ dazu
kann die ODER-Schaltung 44 individuelle ODER-Gatter für jede Bitposition
umfassen, wobei jedes ODER-Gatter das Vergleichsvektor-Bit, das
seiner Bitposition entspricht, und jedes signifikantere Bit des
Vergleichsvektors empfängt
und diese Bits einem logischen ODER unterzieht, um das entsprechende
ODER-Vektor-Bit zu erzeugen. Die ODER-Schaltung 44 kann
unter Verwendung von Standard-Komplementär-Metalloxid-Halbleiter-(CMOS)-Logikgatterschaltungen
realisiert werden, oder kann unter Verwendung irgendeiner anderen
Art von Logikgatterschaltungen realisiert werden, je nachdem, wie
dies gewünscht
wird. Für
die breiteren ODER-Gatter können in
einigen Ausführungsbeispielen
dominodynamische Schaltungen oder Pseudo-NMOS-Schaltungen (in denen
ein schwacher PMOS-Pullup mit einem Ausgangsknoten gekoppelt ist
und sein Gate-Terminal
geerdet ist, und NMOS-Pulldowns die Eingangsbits an ihren jeweiligen
Gate-Terminals empfangen und mit dem Ausgangsknoten gekoppelt sind)
verwendet werden.
-
Die
One-hot-Schaltung 46 codiert den ODER-Vektor neu als einen
One-hot-Vektor (One
Hot[M-1:0]). In einem Ausführungsbeispiel
führt die
One-hot-Schaltung 46 das Neucodieren durch, indem sie jedes
Bit des Vergleichsvektors mit der Inversion des nächsten signifikantesten
Bits des ODER-Vektors einem logischen UND unterzieht. Wenn zum Beispiel
der erste Unterschied (beginnend bei dem signifikantesten Bit) zwischen entsprechenden
Bits der Operanden SRCA und SRCB bei Bit N ist, dann: (i) sind die
Bits M-1 bis N+1 sowohl des ODER-Vektors als auch des Vergleichsvektors
Null; (ii) sind die Bits N sowohl des ODER-Vektors als auch des
Vergleichsvektors Eins; und (iii) sind die Bits N bis Null des ODER-Vektors
eine binäre
Eins. Somit ergeben das logische UND des Vergleichsvektors mit der
Inversion des nächsten
signifikantesten Bits des ODER-Vektors eine Null für die Bits
M-1 bis N+1 (da der Vergleichsvektor für diese Bits Null ist). Das
logische UND des Bits N des Vergleichsvektors (das eine logische
Eins ist) mit der Inversion des Bits N+1 des ODER-Vektors (das eine
binäre
Null ist, und somit ist die Inversion eine binäre Eins) ist eine Eins. Das
logische UND des Vergleichsvektors und der Inversion des nächsten signifikantesten
Bits des ODER-Vektors für
die Bits N-1 bis Null ist eine binäre Null, da die ODER-Vektor-Bits
Einsen sind, und somit ist die Inversion binäre Nullen. Der nachfolgende
Verilog-Code kann die Schaltungen eines Ausführungsbeispiels der One-hot-Schaltung 46 darstellen:
One_Hot[M-1]
= OR_Vector[M-1];
One_Hot[M-2:0] = ~OR_Vector[M-1:1] & Compare_Vector[M-2:0];
-
Die
One-hot-Schaltung 46 kann realisiert werden, indem Standard-CMOS-Logikgatterschaltungen oder
je nach Wunsch irgendwelche anderen Logikgatterschaltungen verwendet
werden.
-
Wie
oben erwähnt
worden ist, kann die A_Gt_B-Schaltung 48 den One-hot-Vektor dazu verwenden, das
Bit auszuwählen,
das von dem One-hot-Vektor aus dem Operanden SRCA als der Ausgang
der A_Gt_B-Schaltung 48 identifiziert worden ist. Da die
Operanden bekanntlich in dem identifizierten Bit unterschiedlich
sind, ist der Operand SRCA größer als
der Operand SRCB, wenn das identifizierte Bit in dem Operanden SRCA
eine Eins ist. Wenn das identifizierte Bit in dem Operanden SRCA
eine Null ist, dann ist der Operand SRCA kleiner als der Operand
SRCB. In einem Ausführungsbeispiel
kann die A_Gt_B-Schaltung 48 ein bitweises logisches UND
des Operanden SRCA und des One-hot-Vektors durchführen und
kann die sich ergebenden Bits einem ODER unterziehen, um das identifizierte
Bit aus dem Operanden SRCA auszuwählen.
-
Die
obige Beschreibung des Größenkomparators
handhabt sowohl vorzeichenlose ganzzahlige Zahlen als auch vorzeichenversehene
ganzzahlige Zahlen, wenn das Vorzeichen das Gleiche ist. Solch ein
Ausführungsbeispiel
kann verwendet werden, wenn Vergleiche ohne Vorzeichen durchgeführt werden
sollen. Eine Zahl ist "vorzeichenlos", wenn die Bits,
die die Zahl bilden, als eine positive Zahl interpretiert werden
(keine Bits werden verwendet, um das Vorzeichen der Zahl anzugeben).
Eine Zahl ist "vorzeichenversehen" bzw. "vorzeichenbehaftet", wenn eines oder
mehrere der Bits das Vorzeichen der Zahl angeben können. Zum
Beispiel werden oftmals ganzzahlige Darstellungen von Zweierkomplementen
verwendet, in denen das signifikanteste Bit jeder ganzzahligen Zahl
das Vorzeichen der Zahl ist (Null, falls positiv, Eins, falls negativ).
-
Für Ausführungsbeispiele,
die sowohl vorzeichenversehene als auch vorzeichenlose Zahlen handhaben,
wird das vorzeichenversehene Eingangssignal verwen det. Im Allgemeinen
kann das vorzeichenversehene Eingangssignal durch das Decodieren
des Befehls erzeugt werden, der von der Integer-Einheit 22A ausgeführt wird.
Einige Befehle können
so definiert sein, dass sie vorzeichenlose Größenvergleiche durchführen, während andere
Befehle so definiert sein können,
dass sie vorzeichenversehene Vergleiche durchführen. Wie oben erwähnt worden
ist, gibt die oben beschriebene Schaltung korrekt an, ob SRCA größer als
SRCB ist oder nicht, wenn die Zahlen vorzeichenlos sind oder wenn
die Vorzeichen identisch sind. Wenn das Vorzeichen unterschiedlich
ist, dann gibt der bitweise Vergleich einen Unterschied zwischen
den signifikantesten Bits der Operanden an. Auch ist der Operand,
der positiv ist (das signifikanteste Bit ist Null), die größere Zahl.
Demgemäß wird das
signifikanteste Bit des Operanden SRCA dann, wenn das vorzeichenversehene
Signal aktiv ist, vor der Durchführung
des logischen UND in der A_Gt_B-Schaltung 48 invertiert.
Auf diese Weise kann das korrekte Größer-als- oder Nicht-größer-als-Ergebnis
ausgewählt
werden. Der nachfolgende Verilog-Code kann die Schaltungen der A_Gt_B-Schaltung 48 darstellen:
Temp[M-1]
= One_Hot[M-1] & (vorzeichenversehen?
~SRCA[M-1]: SRCA[M-1]);
Temp[M-2:0]
= One_Hot[M-2:0] & SRCA[M-2:0];
A_Gt_B = |Temp;
-
Die
A_Gt_B-Schaltung 48 kann realisiert werden, indem Standard-CMOS-Logikgatterschaltungen oder,
je nach Wunsch, irgendwelche anderen Logikgatterschaltungen verwendet
werden. Für
die breiteren ODER-Gatter können
in einigen Ausführungsbeispielen
dominodynamische oder Pseudo-NMOS-Schaltungen verwendet werden.
-
Obwohl
das oben beschrieben Ausführungsbeispiel
eine exklusive ODER-Vergleichsschaltung 40 und eine
ODER-Schaltung 44 verwendet, können andere Ausführungsbeispiele
andere Schaltungen verwenden. Zum Beispiel wird ein Ausführungsbeispiel
in Betracht gezogen, das eine exklusive NICHT-ODER-(XNOR)-Vergleichsschaltung 40 und
eine NICHT UND-Schaltung (NAND-Schaltung) 44 verwendet.
In einem solchen Ausführungsbeispiel
umfasst der Vergleichsvektor Satzbits, um anzugeben, dass die entsprechenden
Bits der Operanden SRCA und SRCB gleich sind, und freie Bits, um
anzugeben, dass die entsprechenden Bits nicht gleich sind. Im Allgemeinen
kann jede Schaltung, die einen bitweisen Vergleich durchführt, als
die bitweise Vergleichsschaltung 40 verwendet werden. Des
Weiteren kann die Schaltung 44 unterschiedliche logische
Operationen bei dem Vergleichsvektor durchführen.
-
Es
sei angemerkt, dass, anstatt einen One-hot-Vektor für das Auswählen eines
Bits des Operanden SRCA zu verwenden, jede andere Angabe verwendet
werden kann. Zum Beispiel könnte
die Angabe ein Multiplexer-Auswahlsignal für das Hinaus-Multiplexen des
identifizierten Bits des Operanden SRCA sein. Und außerdem können andere
Ausführungsbeispiele
jedes Bit des One-hot-Vektors dadurch erzeugen, dass das entsprechende
Bit des ODER-Vektors und die Inversion des nächsten signifikantesten Bits
des ODER-Vektors einem logischen UND unterzogen werden. Andere Ausführungsbeispiele
können
auch das identifizierte Bit aus dem Operanden SRCB auswählen (wodurch
ein B_Gt_A-Ausgangssignal erzeugt wird). Außerdem können andere Ausführungsbeispiele
jedes boolesche Äquivalent
jedes der oben beschriebenen Ausführungsbeispiele verwenden.
-
Es
sei angemerkt, dass sich die obige Beschreibung auf die Operation
bei Operanden mit M Bits bezieht. M kann jede ganze Zahl sein, die
größer als
Null ist. In einigen Ausführungsbeispielen
kann M zum Beispiel 8, 16, 32, 64, 128, etc. sein. In einem Ausführungsbeispiel
ist M 64.
-
Es
sei angemerkt, dass für
das obige Ausführungsbeispiel,
bei dem ein A_Gt_B-Signal erzeugt wird, der Größenkomparator angibt, ob der
Operand SRCA größer als
der Operand SRCB ist oder nicht (d.h., wenn das A_Gt_B-Signal aktiviert
wird, ist der Operand SRCA größer als
der Operand SRCB, und wenn das A_Gt_B-Signal nicht aktiv wird, ist der Operand
SRCA nicht größer als
der Operand SRCB). Wenn der Operand SRCA nicht größer als
der Operand SRCB ist, ist der Operand SRCA entweder kleiner als
der oder gleich dem Operanden SRCB. Wenn die Fälle von kleiner als und gleich
voneinander unterschieden werden sollen, werden mehrere Ausführungsbeispiele
in Betracht gezogen. In einem Ausführungsbeispiel kann auch eine Gleichheits-Vergleichsschaltung
die Operanden SRCA und SRCB empfangen und ein Gleich-Signal aktivieren,
wenn die Operanden SRCA und SRCB gleich sind, um die Fälle zu unterscheiden,
in denen es um kleiner oder gleich geht. Alternativ dazu kann ein
zusätzliches
Bit in dem Vergleichsvektor (rechts von dem am wenigsten signifikanten
Bit) für
jeden Operanden einbezogen werden. Das zusätzliche Bit kann für einen
der Operanden auf Eins gezwungen werden und für den anderen Ope randen auf
Null gezwungen werden. Das zusätzliche
Bit kann durch die Schaltungen zu der A_Gt_B-Schaltung 48 in
der gleichen Art und Weise wie die anderen Bits fließen. Wenn
das am wenigsten signifikante Bit (das dem zusätzlichen Bit entspricht) des One-hot-Vektors
eine Eins ist, dann sind die Operanden gleich. Das am wenigsten
signifikante Bit kann als ein "Gleich"-Ausgang der A_Gt-B-Schaltung 48 bereitgestellt
werden. Die restlichen Bits des One-hot-Vektors können so
behandelt werden, wie dies oben beschrieben worden ist, um das A_Gt_B-Signal
zu erzeugen. In noch einer anderen alternativen Form können die
Vergleichsvektor-Bits einem logischen NICHT ODER unterzogen werden,
um den Gleichheitsfall zu erfassen.
-
So,
wie sie hier verwendet wird, ist eine bitweise Operation eine Operation,
die bei entsprechenden Bits von zwei oder mehr Eingangswerten durchgeführt wird,
um ein Bit des Ausgangs zu erzeugen. Zum Beispiel erzeugt die Operation,
die bei dem Bit 0 der Eingangswerte durchgeführt wird, ein Bit 0 des Ausgangs; die
Operation, die bei Bit 1 der Eingangswerte durchgeführt wird,
erzeugt ein Bit 1 des Ausgangs, usw.. So, wie er hier verwendet
wird, ist ein One-hot-Vektor ein Vektor, der höchstens ein Satzbit umfasst,
und bei dem alle anderen Bits gelöscht (cleared) sind.
-
Es
sei angemerkt, dass die Operanden SRCA und SRCB allgemein Operanden
sein können,
die von dem Befehl spezifiziert werden, der ausgeführt wird.
Die Operanden können
jede Kombination aus Registeroperanden, die in einem Architektur-Register
gespeichert sind (z.B. einem Mehrzweckregister), Direktoperanden,
die einen Teil der Befehle bilden, Speicheroperanden, die in einem
Speicherplatz gespeichert sind, der unter Verwendung von Adressoperanden
des Befehls adressiert wird, usw., sein.
-
In
einigen Ausführungsbeispielen
kann der Größenkomparator,
wie er in 2 veranschaulicht ist, weniger
Schaltungsfläche
einnehmen als eine Volladdiererschaltung. Außerdem kann der Größenkomparator
in einigen Ausführungsbeispielen
ein Ergebnis schneller berechnen, als dies eine Volladdiererschaltung
tun würde.
-
Unter
Bezugnahme auf die 3 und 4 werden
Beispiele der Operation eines Ausführungsbeispiels des Größenkomparators,
der in 2 gezeigt ist, bereitgestellt. Bei beiden Beispielen
wird angenommen, dass sie vorzeichenlose ganze Zahlen sind. Für die Beispiele
wird aus praktischen Gründen 8 als
der Wert von M ausgewählt,
aber es kann jeder Wert von M verwendet werden. Bei den Beispielen führt die
bitweise Vergleichsschaltung 40 eine exklusive ODER-Funktion
durch und die Schaltung 44 führt eine ODER-Funktion durch.
-
Bei
dem Beispiel von 3 ist der Operand SRCA größer als
der Operand SRCB. Das erste Bit (beginnend bei dem signifikantesten
Bit), das bei den Operanden SRCA und SRCB unterschiedlich ist, ist
das Bit 5, das in dem Operanden SRCA eine binäre Eins und in dem Operanden
SRCB eine binäre
Null ist. Der Vergleichsvektor weist binäre Einsen im Bit 5 und auch
im Bit 3 auf, in dem sich die Operanden SRCA und SRCB ebenfalls
unterscheiden. Der ODER-Vektor weist Eins-Bits vom Bit 5 bis zum
Bit 0 auf, wie vorher beschrieben worden ist, und der One-hot-Vektor weist sein
Satzbit als Bit 5 auf. Das Auswählen
des Bits 5 des Operanden SRCA führt
dazu, dass das A_Gt_B-Signal eine binäre Eins ist (aktiviert für dieses
Ausführungsbeispiel,
obwohl andere Ausführungsbeispiele
ein Signal als bei einer binären
Null aktiviert definieren können).
-
In
dem Beispiel von 4 ist der Operand SRCB größer als
der Operand SRCA. Das erste Bit (beginnend bei dem signifikantesten
Bit), das bei den Operanden SRCA und SRCB unterschiedlich ist, ist
das Bit 6, das in dem Operanden SRCA eine binäre Null ist und in dem Operanden
SRCB eine binäre
Eins ist. Der Vergleichsvektor weist binäre Einsen im Bit 6 und auch
in den Bits 5 und 3 auf, in denen sich die Operanden SRCA und SRCB
ebenfalls unterscheiden. Der ODER-Vektor weist Eins-Bits von Bit
6 bis zu Bit 0 auf, wie dies oben beschrieben ist, und der One-hot-Vektor
weist sein Satzbit als Bit 6 auf. Das Auswählen des Bits 6 des Operanden
SRCA führt
dazu, dass das A_Gt_B-Signal eine binäre Null ist (deaktiviert für dieses
Ausführungsbeispiel).
-
Unter
Bezugnahme auf 5 ist ein Blockdiagramm eines
zweiten Ausführungsbeispiels
der Integer-Einheit 22A gezeigt. Andere Ausführungsbeispiele
sind möglich
und werden in Betracht gezogen. In dem Ausführungsbeispiel von 5 ist
der Größenkomparator
in einer kombinieren Schaltung aus Größenvergleich und Zählen führender
Nullen enthalten. Die kombinierte Schaltung kann gewisse Schaltungen
für den Größenkomparator
und die Schaltung zum Zählen
führender
Nullen gemeinsam nutzen. Das veranschaulichte Ausführungsbeispiel
umfasst die bitweise Vergleichsschaltung 40, die Erfassungsschaltung 42 (die
die ODER-Schaltung 44 und die One-hot-Schaltung 46 umfasst)
und die A_Gt_B-Schaltung 48, ähnlich wie bei dem Ausführungsbeispiel
von 2. Zusätzlich
umfasst das veranschaulichte Ausführungsbeispiel eine Schaltung 60 zum
bitweisen Invertieren, einen Multiplexer (Mux) 62 und einen
Codierer 64. Die Integer-Einheit 22A ist so gekoppelt,
dass sie wenigstens die Operanden SRCA und SRCB des Befehls, der
ausgeführt
werden soll, ein vorzeichenversehenes Signal, das angibt, ob die
Operation eine vorzeichenversehene Integer-Operation ist oder nicht,
eine Auswahlsteuerung für
den Mux 62 und ein Größe-32-Signal
empfängt,
das unten noch ausführlicher
beschrieben werden wird. Die bitweise Vergleichsschaltung 40 ist
so gekoppelt, dass sie die Operanden empfängt und eine Vektoreingabe
für den
Mux 62 erzeugt. Der Mux 62 ist außerdem so gekoppelt,
dass er den Operanden SRCA und den Ausgang der bitweisen Invertierungsschaltung 60 empfängt. Die
Schaltung 60 zum bitweisen Invertieren ist so gekoppelt,
dass sie ebenfalls den Operanden SRCA empfängt. Der Ausgang des Mux 62 wird
der Erfassungsschaltung 42 (und noch genauer der ODER-Schaltung 44 und
der One-hot-Schaltung 46) zugeführt. Die ODER-Schaltung 44 ist
so konfiguriert, dass sie einen zweiten Vektor (OR_Vector[M-1:0])
erzeugt. Die One-hot-Schaltung 46 ist so gekoppelt, dass
sie den Vektor OR_Vector[M-1:0] und den Vektor Compare_Vector[M-1:0]
empfängt
und einen Ausgangsvektor (One_Hot[M-1:0]) erzeugt. Die A_Gt_B-Schaltung 48 ist
so gekoppelt, dass sie den Vektor One Hot[M-1:0], den Operanden
SRCA[M-1:0] und das vorzeichenversehene Signal empfängt und
im Ansprechen darauf ein A_Gt_B-Signal erzeugt. Des Weiteren ist
der Codierer so gekoppelt, dass er den Vektor One Hot[M-1:0] und das
Größe-32-Signal
empfängt,
und ist so konfiguriert, dass er einen Ausgang Out[N-1:0] bereitstellt.
Das A_Gt_B-Signal
und/oder der Ausgang Out[N-1:0] können von der Integer-Einheit 22A ausgegeben
werden oder können
einer anderen Schaltung in der Integer-Einheit 22a bereitgestellt
werden, die den Ausgang auf der Grundlage des Befehls, der ausgeführt wird,
auswählt.
-
Die
Schaltung, die in 5 veranschaulicht ist, kann
den Größenvergleich
durchführen,
der oben beschrieben ist, oder kann eine Operation zum Zählen führender
Nullen oder eine Operation zum Zählen
führender
Einsen durchführen,
und zwar in Abhängigkeit
von der Eingabe, die von dem Mux 62 ausgewählt wird. Wenn
ein Größenvergleich
an dem Auswahleingang angegeben wird, wählt der Mux 62 den
Ausgang der bitweisen Vergleichsschaltung 40 als den Ausgang
des Mux 62 aus. In diesem Fall kann die kombinierte Schaltung
aus Größenkomparator
und Zählen
führender
Nullen so funktionieren, wie dies oben im Hinblick auf 2 beschrieben
worden ist.
-
Wenn
dem Mux 62 eine Operation zum Zählen führender Nullen (CLZ; count
leading zero) an dem Auswahleingang angezeigt wird, wird der SRCA-Eingang
durch den Mux 62 für
die Erfassungsschaltung 42 ausgewählt. In diesem Fall führt die
Operation der Erfassungsschaltung 42 (die unverändert ist
von ihrer Operation in der Größenschaltung)
zu dem Erfassen des ersten Bits mit einer binären Eins (beginnend bei dem signifikantesten
Bit) in dem Operanden SRCA. Diese Angabe zeigt auch die Anzahl an
führenden
Nullen an, da die Bits auf der linken Seite der ersten binären Eins-Bits
(signifikantere Bits als das erste binäre Eins-Bit) alle Null sind.
Der Codierer 64 empfängt
den One-hot-Vektor und codiert eine Zählung führender Nullen unter Verwendung
des One-hot-Vektors, um den Ausgang Out[N-1:0] zu erzeugen.
-
Wenn
dem Mux 62 eine Operation zum Zählen führender Einsen (CLO; count
leading one) an dem Auswahleingang angezeigt wird, wählt der
Mux 62 den Ausgang der Schaltung 60 zum bitweisen
Invertieren aus, die eine bitweise Invertierung des Operanden SRCA
durchführt.
Durch das Durchführen
einer Operation zum Zählen
führender
Nullen bei der Inversion des Operanden wird für diesen Operanden eine Operation
zum Zählen
führender
Einsen erzielt. Wiederum empfängt
der Codierer den One-hot-Vektor und codiert eine Zählung führender
Einsen unter Verwendung des One-hot-Vektors, um den Ausgang Out[N-1:0]
zu erzeugen.
-
In
einem alternativen Ausführungsbeispiel
kann die Schaltung 44 die NICHT UND-Schaltung (NAND-Schaltung)
sein, die oben unter Bezugnahme auf 2 beschrieben
worden ist. In einem solchen Ausführungsbeispiel führt die
Schaltung 40 zum bitweisen Vergleichen ein exklusives NICHT
ODER (XNOR) bei den Quelloperanden durch, wie dies oben beschrieben
worden ist. Außerdem
wählt der
Mux 62 den Ausgang der bitweisen Invertierungsschaltung 60,
um eine Operation zum Zählen
führender
Nullen durchzuführen,
und den Operanden SRCA aus, um eine Operation zum Zählen führender
Einsen durchzuführen,
das die NICHT UND-Schaltung 44 Nullen in den signifikantesten
Bits erzeugt, bis die erste Null in dem Eingang entdeckt wird. Mit
anderen Worten, ein solches Ausführungsbeispiel
kann eine Funktion zum Zählen
führender
Einsen durchführen.
Im Allgemeinen kann die Schaltung die Anzahl führender Bits zählen, die
einen ersten Zustand aufweisen, und die Operation zum Zählen führender
Nullen oder zum Zählen
führender
Einsen kann durchgeführt werden,
indem der geeignete aus dem Operanden SRCA oder seiner Inversion
ausgewählt
wird, um die gewünschte
Funktion durchzuführen.
-
Es
sei angemerkt, dass die Anzahl an Bits in dem Ausgang Out (N) auch
in Bezug zu der Anzahl an Bits des Operanden stehen kann. Da der
Out-Ausgang eine Zählung
der Anzahl von führenden
Einsen oder Nullen in dem Operanden ist, liegt die Zählung zwischen
Null und M. Die Anzahl an Bits, die verwendet werden, um Werte zwischen
Null und M darzustellen, ist log2(M+1).
Wenn M zum Beispiel 64 ist, kann N 7 sein.
-
In
einem Ausführungsbeispiel
kann M 64 sein und die Integer-Einheit 22A kann auch Befehle
handhaben, die definiert sind, um bei einem 32-Bit-Operanden zu
arbeiten. In diesem Fall kann das Größe-32-Signal für den Codierer 64 aktiviert
werden. Der Codierer 64 kann dann eine Zählung von
führenden
Nullen/Einsen innerhalb der am wenigsten signifikanten 32 Bits des
Operanden ausgeben. Zum Beispiel kann die Aktivierung des Größe-32-Signals
den Ausgang Out[N] auf Null zwingen. Andere Ausführungsbeispiele können dieses Merkmal
weglassen.
-
Obwohl
das veranschaulichte Ausführungsbeispiel
CLZ, CLO und Größenvergleiche
handhabt, können
andere Ausführungsbeispiele
nur die CLZ und den Größenvergleich
oder nur die CLO und den Größenvergleich
handhaben. Des Weiteren kann der Codierer 64 und die A_Gt_B-Schaltung 48 in
einigen Ausführungsbeispielen
zu einer Schaltung verschmolzen werden, die Out[N-1:0] ausgibt,
und ein Bit des Ausgangs kann das A_Gt_B-Signal sein, wenn die Schaltung
einen Größenvergleich
durchführt
(z.B. das am wenigsten signifikante Bit oder das signifikanteste
Bit von Out[N-1:0]).
-
Es
sei angemerkt, dass, obwohl ein Mux 62 in 5 veranschaulicht
ist, im Allgemeinen jede Art von Auswahlschaltung verwendet werden
kann. Eine Auswahlschaltung ist eine Schaltung, die gekoppelt ist,
um zwei oder mehr Eingaben und eine Auswahlsteuerung zu empfangen,
wobei die Auswahlschaltung so konfiguriert ist, dass sie eine der
Eingaben im Ansprechen auf die Auswahlsteuerung als einen Ausgang
auswählt. Eine
Auswahlschaltung kann einen einzelnen Mux, mehrere Muxe parallelgeschaltet
oder in Reihe geschaltet, oder irgendeine andere Schaltung umfassen.
-
Nun
wird Bezug auf 6 genommen, in der ein Blockdiagramm
eines Trägermediums 300 gezeigt ist,
das eine oder mehrere Datenstrukturen enthält, die re präsentativ
für den
Prozessor 10 ist/sind. Im Allgemeinen kann ein Trägermedium
Speichermedien wie ein magnetisches oder optisches Medium enthalten,
z.B. Disk oder CD-ROM, flüchtige
oder nichtflüchtige
Speichermedien wie etwa RAM (z.B. SDRAM, RDRAM, SRAM, etc.), ROM,
etc., sowie auch Übertragungsmedien
oder Signale wie etwa elektrische, elektromagnetische oder digitale
Signale, die über
ein Kommunikationsmedium wie etwa ein Netzwerk und/oder eine drahtlose
Verbindung übertragen
werden.
-
Im
Allgemeinen kann/können
die Datenstrukturen) des Prozessors 10, die auf dem Trägermedium 300 getragen
wird/werden, von einem Programm gelesen werden und direkt oder indirekt
dazu verwendet werden, die Hardware herzustellen, die den Prozessor 10 umfasst.
Zum Beispiel kann die Datenbasis eine Verhaltensebenen-Beschreibung
oder Register-Transfer-Level-(RTL-)Beschreibung der Hardwarefunktionalität in einer High-Level-Designsprache
(HDL) wie etwa Verflog oder VHDL sein. Die Beschreibung kann von
einem Synthesetool gelesen werden, das die Beschreibung synthetisieren
kann, um eine Netzliste zu erzeugen, die eine Liste von Gattern
aus einer Synthesebibliothek umfasst. Die Netzliste umfasst eine
Gruppe von Gattern, die auch die Funktionalität der Hardware darstellt, die
den Prozessor 10 umfasst. Die Netzliste kann dann platziert und
geroutet werden, um einen Datensatz zu erzeugen, der die geometrischen
Formen beschreibt, die an Masken angelegt werden sollen. Die Masken
können
dann in verschiedenen Halbleiterfabrikationsschritten verwendet
werden, um eine Halbleiterschaltung bzw. Halbleiterschaltungen herzustellen,
die dem Prozessor 10 entsprechen. Alternativ dazu kann/können die
Datenstrukturen) auf dem Trägermedium 100 je
nach Wunsch die Netzliste sein (mit oder ohne Synthesebibliothek)
oder der Datensatz sein. Die Datenstrukturen können einen Schaltungsdefinier-Mechanismus
für den
Prozessor 10 oder Teile davon umfassen.
-
Obwohl
das Trägermedium 300 eine
Repräsentation
des Prozessors 10 trägt,
können
andere Ausführungsbeispiele
je nach Wunsch eine Repräsentation
eines jeglichen Teils des Prozessors 10 tragen, der eine Integer-Einheit
oder Teile davon, Größenkomparatoren,
kombinierte Schaltungen aus Größenkomparator
und Zählen
führender
Nullen, Teile des Größenkomparators,
die bitweise Vergleichsschaltungen, Erfassungsschaltungen, One-hot-Schaltungen,
A_Gt_B-Schaltungen etc. enthalten, Teile der kombinierten Schaltungen
aus Größenkomparator
und Zählen
führender
Nullen, die bitweise Inverter, Codierer und die Größenkomparatorteile
enthalten, etc. umfassen.