DE60216210T2 - Binärer Grösse-Vergleicher - Google Patents

Binärer Grösse-Vergleicher Download PDF

Info

Publication number
DE60216210T2
DE60216210T2 DE60216210T DE60216210T DE60216210T2 DE 60216210 T2 DE60216210 T2 DE 60216210T2 DE 60216210 T DE60216210 T DE 60216210T DE 60216210 T DE60216210 T DE 60216210T DE 60216210 T2 DE60216210 T2 DE 60216210T2
Authority
DE
Germany
Prior art keywords
operand
vector
circuit
bit
indication
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
DE60216210T
Other languages
English (en)
Other versions
DE60216210D1 (de
Inventor
Daniel C. San Jose Murray
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.)
Broadcom Corp
Original Assignee
Broadcom Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Broadcom Corp filed Critical Broadcom Corp
Publication of DE60216210D1 publication Critical patent/DE60216210D1/de
Application granted granted Critical
Publication of DE60216210T2 publication Critical patent/DE60216210T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • G06F7/026Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Hardware Redundancy (AREA)
  • Manipulation Of Pulses (AREA)
  • Facsimile Image Signal Circuits (AREA)

Description

  • 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 22A22B, einen Satz von Fließkomma-Ausführungseinheiten (FPU; floating point execution units) 24A24B, einen Satz von Lade-/Speicher-Ausführungseinheiten 26A26B, 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 22A22B, 24A24B und 26A26B 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 22A22B, 24A24B und 26A26B Befehle für die Ausführung bereitstellt, und dass sie eine berichtigte Abrufadresse von der Integer-Ausführungseinheit 22A empfängt. Die Ausführungseinheiten 22A22B, 24A24B und 26A26B 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 22A22B 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 22A22B 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 24A24B führen in ähnlicher Weise die Fließkommabefehle aus. Die Integer- und Fließkomma-Ausführungseinheiten 22A22B und 24A24B 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 26A26B 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:
    Figure 00090001
  • 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.

Claims (24)

  1. Vorrichtung mit: einer ersten Schaltung (40), die so gekoppelt ist, dass sie einen ersten Operanden und einen zweiten Operanden empfängt, wobei die erste Schaltung so konfguriert ist, dass sie im Ansprechen auf den ersten Operanden und den zweiten Operanden einen ersten Vektor erzeugt, und wobei jedes Bit des ersten Vektors angibt, ob die entsprechenden Bits des ersten Operanden und des zweiten Operanden gleich sind oder nicht; einer zweiten Schaltung (42), die so gekoppelt ist, dass sie den ersten Vektor empfängt, und so konfiguriert ist, dass sie im Ansprechen auf den ersten Vektor eine Angabe des signifikantesten Bits erzeugt, in dem der erste Operand und der zweite Operand nicht gleich sind; die zweite Schaltung (42) weist eine erste Unterschaltung (44) auf, wobei die erste Unterschaltung (44) so gekoppelt ist, dass sie den ersten Vektor empfängt und einen zweiten Vektor erzeugt; und einer dritten Schaltung (48), die so gekoppelt ist, dass sie die Angabe von der zweiten Schaltung (42) und den ersten Operanden empfängt, wobei die dritte Schaltung (48) so konfiguriert ist, dass sie im Ansprechen auf die Angabe und den ersten Operanden einen Ausgang erzeugt, der angibt, ob der erste Operand größer ist als der zweite Operand oder nicht, dadurch gekennzeichnet, dass jedes Bit des zweiten Vektors gleich einer logischen Kombination des entsprechenden Bits des ersten Vektors und jedes signifikanteren Bits des zweiten Vektors ist, wobei die erste Unterschaltung (44) einen Satz kaskadierter Logikgatter aufweist, wobei jedes Logikgatter den Ausgang des vorhergehenden Logikgatters und das entsprechende Bit des ersten Vektors empfängt.
  2. Vorrichtung nach Anspruch 1, wobei die erste Schaltung (40) so konfiguriert ist, dass sie ein bitweise exklusives ODER (exclusive OR) durchführt, und wobei die logische Kombination ein logisches ODER (OR) ist.
  3. Vorrichtung nach Anspruch 1, wobei die erste Schaltung (40) so konfiguriert ist, dass sie ein bitweise exklusives NICHT ODER (NOR) durchführt, und wobei die logische Kombination ein logisches NICHT UND (NAND) ist.
  4. Vorrichtung nach Anspruch 1, wobei die zweite Schaltung (42) des Weiteren eine zweite Unterschaltung (46) aufweist, die so gekoppelt ist, dass sie den zweiten Vektor empfängt und die Angabe erzeugt.
  5. Vorrichtung nach Anspruch 4, wobei die dritte Schaltung (48) so konfiguriert ist, dass sie das durch die Angabe des ersten Operanden angegebene Bit als Ausgang auswählt.
  6. Vorrichtung nach Anspruch 5, wobei die Angabe ein One-hot-Vektor mit einem Satzbit ist, das dem signifikantesten Bit entspricht, in dem der erste Operand und der zweite Operand nicht gleich sind.
  7. Vorrichtung nach Anspruch 6, wobei die dritte Schaltung (48) so konfiguriert ist, dass sie jedes Bit des One-hot-Vektors und ein entsprechendes Bit des ersten Operanden einem logischen UND (AND) unterzieht, und das Ergebnis der logischen UNDs (ANDs) einem logischen ODER (OR) unterzieht.
  8. Vorrichtung nach Anspruch 7, wobei die dritte Schaltung (48) so konfguriert ist, dass sie das signifikanteste Bit des ersten Vektors vor dem logischen UND (AND) invertiert, wenn die Operanden vorzeichenversehen sind.
  9. Vorrichtung nach Anspruch 1, die des Weiteren aufweist: eine Auswahlschaltung (62), die so gekoppelt ist, dass sie zwei oder mehrere Eingaben, die den ersten Vektor und den ersten Operanden enthalten, empfängt, wobei die Auswahlschaltung so konfiguriert ist, dass sie eine ihrer Eingaben im Ansprechen auf eine Auswahlsteuerung als ersten Ausgang auswählt, wobei die zweite Schaltung (42) so gekoppelt ist, dass sie den ersten Ausgang empfängt, und so konfiguriert ist, dass sie eine Angabe des signifikantesten Bits des ersten Ausgangs erzeugt, das sich in einem ersten Zustand befindet, und die dritte Schaltung (48) so gekoppelt ist, dass sie sie Angabe von der zweiten Schaltung (42) und den ersten Operanden empfängt, wobei die dritte Schaltung (48) so konfiguriert ist, dass sie im Ansprechen auf die Angabe und den ersten Operanden einen zweiten Ausgang erzeugt, der angibt, ob der erste Operand größer ist als der zweite Operand oder nicht; und einen Codierer (64), der so gekoppelt ist, dass er die Angabe empfängt, und so konfiguriert ist, dass er einen dritten Ausgang erzeugt, der eine Anzahl führender Bits in dem ersten Ausgang angibt, die einen ersten binären Zustand aufweisen.
  10. Vorrichtung nach Anspruch 9, wobei die Auswahlsteuerung (62) angibt, welche einer Vielzahl von Operationen durchzuführen ist.
  11. Vorrichtung nach Anspruch 10, wobei die Vielzahl von Operationen einen Größenvergleich umfasst, und wobei der erste Vektor ausgewählt wird, wenn der Größenvergleich durchzuführen ist.
  12. Vorrichtung nach Anspruch 10, wobei die Vielzahl von Operationen eine Operation zum Zählen führender Nullen umfasst, und wobei der erste Operand ausgewählt wird, wenn die Operation zum Zählen führender Nullen durchzuführen ist.
  13. Vorrichtung nach Anspruch 10, die des Weiteren eine Schaltung zum bitweise Invertieren (60) aufweist, die so gekoppelt ist, dass sie den ersten Operanden empfängt und eine Invertierung des ersten Operanden bereitstellt, wobei die Auswahlschaltung (62) so gekoppelt ist, dass sie die Invertierung des ersten Operanden als eine der beiden oder mehreren Eingaben empfängt, und wobei die Vielzahl von Operationen eine Operation zum Zählen führender Einsen umfasst, und wobei die Invertierung des ersten Operanden ausgewählt wird, wenn die Operation zum Zählen führender Einsen durchzuführen ist.
  14. Vorrichtung nach Anspruch 9, wobei der erste binäre Zustand eine binäre Null ist.
  15. Vorrichtung nach Anspruch 9, wobei der erste binäre Zustand eine binäre Eins ist.
  16. Verfahren, das umfasst: Erzeugen eines ersten Vektors im Ansprechen auf einen ersten Operanden und einen zweiten Operanden, wobei jedes Bit des ersten Vektors angibt, ob die entsprechenden Bits des ersten Operanden und des zweiten Operanden gleich sind oder nicht; Erzeugen, im Ansprechen auf den ersten Vektor, einer Angabe des signifikantesten Bits, in dem erste Operand und der zweite Operand nicht gleich sind, wobei das Erzeugen der Angabe das Erzeugen eines zweiten Vektors im Ansprechen auf den ersten Vektor umfasst, Erzeugen, im Ansprechen auf die Angabe und den ersten Operanden, eines Ausgangs, der angibt, ob der erste Operand größer ist als der zweite Operand oder nicht, wobei das Verfahren dadurch gekennzeichnet ist, dass jedes Bit des zweiten Vektors gleich einer logischen Kombination des entsprechenden Bits des ersten Vektors und jedes signifikanteren Bits des zweiten Vektors ist.
  17. Verfahren nach Anspruch 16, wobei das Erzeugen des ersten Vektors das Durchführen eines bitweise exklusiven ODER (OR) umfasst, und wobei die logische Kombination ein logisches ODER (OR) ist.
  18. Verfahren nach Anspruch 16, wobei das Erzeugen des ersten Vektors das Durchführen eines bitweise exklusiven NICHT ODER (exclusive NOR) um fasst, und wobei die logische Kombination ein logisches NICHT UND (NAND) ist.
  19. Verfahren nach Anspruch 18, wobei das Erzeugen des Ausgangs das Auswählen des durch die Angabe des ersten Operanden angegebenen Bits als Ausgang umfasst.
  20. Verfahren nach Anspruch 19, wobei die Angabe ein One-hot-Vektor mit einem Satzbit ist, das dem signifikantesten Bit entspricht, in dem der erste Operand und der zweite Operand nicht gleich sind.
  21. Verfahren nach Anspruch 20, wobei das Auswählen das Durchführen eines logischen UND (AND) für jedes Bit des One-hot-Vektors und ein entsprechendes Bit des ersten Operanden umfasst, sowie das Durchführen eines logischen ODER (OR) für das Ergebnis der logischen UNDs (ANDs).
  22. Verfahren nach Anspruch 21, das des Weiteren das Invertieren des signifikantesten Bits des ersten Vektors vor dem logischen UND (AND) umfasst, wenn die Operanden vorzeichenbehaftet sind.
  23. Schaltungsdefinier-Mechanismus, der eine oder mehrere Datenstrukturen aufweist, die die Vorrichtung nach einem der Ansprüche 1 bis 15 repräsentieren.
  24. Trägermedium, das den Schaltungsdefinier-Mechanismus nach Anspruch 23 trägt.
DE60216210T 2001-09-19 2002-09-18 Binärer Grösse-Vergleicher Expired - Lifetime DE60216210T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/956,399 US6907443B2 (en) 2001-09-19 2001-09-19 Magnitude comparator
US956399 2001-09-19

Publications (2)

Publication Number Publication Date
DE60216210D1 DE60216210D1 (de) 2007-01-04
DE60216210T2 true DE60216210T2 (de) 2007-10-11

Family

ID=25498195

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60216210T Expired - Lifetime DE60216210T2 (de) 2001-09-19 2002-09-18 Binärer Grösse-Vergleicher

Country Status (4)

Country Link
US (2) US6907443B2 (de)
EP (1) EP1296222B1 (de)
AT (1) ATE346335T1 (de)
DE (1) DE60216210T2 (de)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6907443B2 (en) * 2001-09-19 2005-06-14 Broadcom Corporation Magnitude comparator
US7284028B2 (en) * 2002-11-01 2007-10-16 International Business Machines Corporation Comparator eliminating need for one's complement logic for signed numbers
US8326903B2 (en) * 2008-01-04 2012-12-04 International Business Machines Corporation System and method for improved vector analysis
US9052887B2 (en) 2010-02-16 2015-06-09 Freescale Semiconductor, Inc. Fault tolerance of data processing steps operating in either a parallel operation mode or a non-synchronous redundant operation mode
US9176739B2 (en) * 2011-08-05 2015-11-03 Cisco Technology, Inc. System and method for checking run-time consistency for sequentially and non-sequentially fetched instructions
US20130159680A1 (en) * 2011-12-19 2013-06-20 Wei-Yu Chen Systems, methods, and computer program products for parallelizing large number arithmetic
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9268566B2 (en) 2012-03-15 2016-02-23 International Business Machines Corporation Character data match determination by loading registers at most up to memory block boundary and comparing
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9588762B2 (en) 2012-03-15 2017-03-07 International Business Machines Corporation Vector find element not equal instruction
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
WO2014080245A1 (en) 2012-11-22 2014-05-30 Freescale Semiconductor, Inc. Data processing device, method of execution error detection and integrated circuit
US9823983B2 (en) 2014-09-25 2017-11-21 Nxp Usa, Inc. Electronic fault detection unit

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5281946A (en) * 1992-08-17 1994-01-25 Motorola, Inc. High-speed magnitude comparator circuit
US5539332A (en) * 1994-10-31 1996-07-23 International Business Machines Corporation Adder circuits and magnitude comparator
US5592142A (en) * 1995-09-15 1997-01-07 International Business Machines Corporation High speed greater than or equal to compare circuit
US5781465A (en) * 1995-12-22 1998-07-14 Lucent Technologies Inc. Method and apparatus for fast carry generation detection and comparison
JPH1091397A (ja) * 1996-09-12 1998-04-10 Toshiba Corp 演算回路
US5689228A (en) * 1996-10-15 1997-11-18 Hewlett-Packard Company Parallel magnitude comparison using manchester carry chains
US5905428A (en) * 1997-07-15 1999-05-18 International Business Machines Corporation N-bit comparator using count leading 1 circuits
US6216147B1 (en) * 1997-12-11 2001-04-10 Intrinsity, Inc. Method and apparatus for an N-nary magnitude comparator
US6907443B2 (en) * 2001-09-19 2005-06-14 Broadcom Corporation Magnitude comparator

Also Published As

Publication number Publication date
EP1296222B1 (de) 2006-11-22
US6907443B2 (en) 2005-06-14
EP1296222A3 (de) 2005-09-07
US20050228846A1 (en) 2005-10-13
DE60216210D1 (de) 2007-01-04
EP1296222A2 (de) 2003-03-26
US20030061539A1 (en) 2003-03-27
ATE346335T1 (de) 2006-12-15

Similar Documents

Publication Publication Date Title
DE60216210T2 (de) Binärer Grösse-Vergleicher
DE19983860B4 (de) Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage
DE19540102C2 (de) Verfahren und Gleitkomma-Recheneinheit mit einer Logik für eine Vierfach-Präzisions-Arithmetik
DE102008059371B9 (de) Funktionseinheit für verschmolzenes Multiplizieren und Addieren
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE60032794T2 (de) Bit-dekompression-verarbeitung mit einem vielseitigen ausrichtungswerkzeug
DE2900324A1 (de) Mikroprogrammierbare arithmetische fliesskommaeinheit
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE2714805A1 (de) Datenverarbeitungssystem
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
DE102009051288A1 (de) Befehl und Logik zur Ausführung von Bereichserkennung
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE19983870B4 (de) Berechnung impliziter Datentypbits für Simd-Operationen
DE102014002510A1 (de) Präzise Ausnahmesignalisierung für Mehrfachdatenarchitektur
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018124944A1 (de) Vorrichtung und Verfahren zum Umsetzen eines Gleitkommawertes von halber Genauigkeit in einfache Genauigkeit
DE60127524T2 (de) Cachespeicher für arithmetische Rechenoperationen mit partieller Resultatsausgabe bei partieller Operandenübereinstimmung

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: BOSCH JEHLE PATENTANWALTSGESELLSCHAFT MBH, 80639 M