DE69424626T2 - Parallele Datenverarbeitung in einem Einzelprozessor - Google Patents
Parallele Datenverarbeitung in einem EinzelprozessorInfo
- Publication number
- DE69424626T2 DE69424626T2 DE69424626T DE69424626T DE69424626T2 DE 69424626 T2 DE69424626 T2 DE 69424626T2 DE 69424626 T DE69424626 T DE 69424626T DE 69424626 T DE69424626 T DE 69424626T DE 69424626 T2 DE69424626 T2 DE 69424626T2
- Authority
- DE
- Germany
- Prior art keywords
- bit
- partial
- multiplier
- word
- partition
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000004044 response Effects 0.000 claims description 16
- 238000000034 method Methods 0.000 claims description 7
- 238000005192 partition Methods 0.000 description 114
- 230000000295 complement effect Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 102100039250 Essential MCU regulator, mitochondrial Human genes 0.000 description 1
- 101000813097 Homo sapiens Essential MCU regulator, mitochondrial Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5324—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
- G06F7/505—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
- G06F7/506—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages
- G06F7/508—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages using carry look-ahead circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Nonlinear Science (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Description
- Die vorliegende Erfindung bezieht sich auf die parallele Datenverarbeitung in einem Einzelprozessorsystem.
- Im allgemeinen führen Einzelprozessorsysteme Operationen mit zwei Operanden sequentiell durch. In einem 32-Bit-Computer beispielsweise hat jeder ganzzahlige Operand 32 Bit. In einem 64-Bit-Computer hat jeder ganzzahlige Operand 64 Bit. Somit addiert ein ganzzahliger "Addieren"-Befehl in einem 64-Bit-Computer zwei ganzzahlige 64-Bit-Operanden, um ein ganzzahliges 64-Bit-Ergebnis zu erzeugen. Bei den meisten pipelinemäßig angeordneten 64-Bit-Prozessoren benötigt ein 64-Bit-Addieren-Befehl einen Zyklus Ausführungszeit.
- In vielen Fällen beträgt der einschlägige Bereich der Operanden 16 Bit oder weniger. Bei gegenwärtigen 32-Bit- und 64-Bit-Computern wird jedoch immer noch ein vollständiger Befehl benötigt, um eine Operation auf ein Paar von 16-Bit- Operanden durchzuführen. Somit ist die Anzahl von Ausführungszyklen, die erforderlich sind, um eine Operation auf zwei 16-Bit-Operanden durchzuführen, die gleiche wie die Anzahl der Ausführungszyklen, die benötigt werden, um die Operation auf 32-Bit-Operanden in einem 32-Bit-Computer oder auf zwei 64-Bit-Operanden in einem 64-Bit-Computer durchzuführen.
- Im Stand der Technik erforderte eine parallele Datenverarbeitung die Wiederholung von Funktionseinheiten, wobei jede Funktionseinheit in der Lage ist, Daten mit der vollen Wortlänge handzuhaben. Es sei beispielsweise auf Michael Flynn, Very High-Speed Computing Systems. Proceedings of IEEE, Bd. 54, Nr. 12, Dezember 1966, Seiten 1.901 bis 1.909 verwiesen.
- Die EP 0 395 348 A2 betrifft eine Vorrichtung für eine Mul ti-Gauge-Berechnung mit einer CPU, die vier unabhängige Verarbeitungseinheiten umfaßt, die gemeinsam einen Zugriff auf ein Befehls-Gauge, einen Cache-Speicher, eine Speicherverwaltungseinheit und eine Speicherbusschnittstelle haben. Multiplizieren-Teilbefehle sind vorgesehen, die Bit- oder Halb-Wort-Multiplikanden mit einem gemeinsamen Multiplizierer multiplizieren und unabhängige Bit- oder Halb-Wort-Produkte zurückgeben. Jede Verarbeitungseinheit umfaßt einen 32-Bit-Multiplizierer, der in zwei unabhängige 16-Bit- oder vier unabhängige 8-Bit-Multiplizierer teilbar ist. Der Multiplizieren-Teilbefehl bildet einen vorzeichenbehafteten Multiplikanden von jedem der 4-Bit- oder zwei halben Wörter in einem Register B, wobei jedes Bit des Registers B mit einem Register A multipliziert wird. Jedes Bit oder Halbwort wird unabhängig multipliziert, und die Ergebnisse werden in den jeweiligen Bits oder Halbwörtern des Produktregisters gespeichert. Nur die höherwertigen 16 Bit des Registers A werden als Multiplizierer verwendet, während die niederwertigen 16 Bit des Registers A ignoriert werden.
- Die GB 215 498 A und die GB 2 172 129 A beschreiben binäre Addierer und/oder Subtrahierer. In der EP 0 231 899 A ist eine Multipliziererarrayschaltung beschrieben.
- Solche Implementationen einer Parallelverarbeitung sind jedoch sowohl bezüglich der erforderlichen Hardware als auch der Komplexität des Entwurfs signifikant teuer.
- Gemäß dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung wird ein System präsentiert, das eine parallele Datenverarbeitung innerhalb eines Einzelprozessors ermöglicht. Um eine parallele Verarbeitung von Daten zu ermöglichen, wird eine arithmetisch-logische Einheit oder eine andere Operationen-ausführende Entität innerhalb des Verarbeitungssystems, wie z. B. eine Schiebeeinrichtung, parti tioniert. Innerhalb jeder Partition werden Operationen durchgeführt. Wenn die durchzuführende Operation sich auf Operanden mit einer vollen Wortlänge bezieht, ist keine Parallelverarbeitung vorhanden. Somit können Daten über Grenzen zwischen den Partitionen frei laufen. Wenn die Operation unter Verwendung einer Mehrzahl von Operanden, deren Wortlänge kleiner als die volle Wortlänge ist, durchgeführt wird, wird verhindert, daß die Daten über zumindest eine Grenze zwischen den Partitionen laufen.
- Wenn die Operation beispielsweise eine Additionsoperation ist (z. B. eine Zweier-Komplement-Addition), führt jede der Mehrzahl von Partitionen eine Additionsoperation durch. Wenn die durchzuführende Addition sich auf Operanden mit der vollen Wortlänge bezieht, können Überträge zwischen den Partitionen laufen. Wenn die Additionsoperation auf eine Mehrzahl von Operandensätzen mit einer Wortlänge kleiner als der vollen Wortlänge parallel durchgeführt wird, kann ein Übertrag nicht über zumindest eine Grenze zwischen den Partitionen laufen.
- Wenn auf ähnliche Art und Weise die Operation eine Verschiebung ist, führt jede der Mehrzahl von Partitionen eine Schiebeoperation durch. Wenn die Verschiebung mit Operanden mit der vollen Wortlänge durchgeführt werden soll, können die Verschiebungen zwischen den Partitionen durchgeführt werden. Wenn die Operation unter Verwendung einer Mehrzahl von Operanden mit einer Wortlänge kleiner als der vollen Wortlänge parallel durchgeführt wird, kann eine Verschiebung zumindest eine Grenze zwischen den Partitionen nicht kreuzen.
- Ebenfalls gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung implementiert ein Multiplizierer sowohl eine Multiplikation von Multiplikanden, deren Länge gleich einem ganzen Wort ist, als auch eine parallele Multiplikation von Teilwort-Multiplikanden. Eine Schaltungsanordnung, beispielsweise ein Array von logischen UND-Gattern (oder ihren Äquivalenten), erzeugt Teilprodukte. Eine Teilprodukt-Summiererschaltungsanordnung summiert die Teilprodukte, um ein Ergebnis zu erzeugen. Eine Teilprodukt-Steuereinrichtung zwingt ansprechend auf die Auswahl einer parallelen Multiplikation von Teilwortmultiplikanden, daß ausgewählte Teilprodukte einen Wert von Null haben, wodurch eine Parallelmultiplikation von Teilwortmultiplikanden implementiert ist. Wenn der Multiplizierer eine Ganzwort-Multiplikation implementiert, wird keines der Teilprodukte zwangsweise dazu gebracht, einen Wert von Null zu haben. Die Teilprodukt-Steuereinrichtung kann beispielsweise unter Verwendung von dritten Eingängen zu zumindest einem Abschnitt der logischen UND-Gatter implementiert werden.
- Die vorliegende Erfindung ermöglicht es, daß ein Einzelprozessorsystem leistungsmäßig deutlich verbessert wird, indem eine Parallelverarbeitung von Operationen ermöglicht wird, wenn die Operanden eine kleinere Länge als die gesamte Wortlänge haben. Diese günstige Verwendung eines Parallelismus resultiert in einer deutlichen Leistungszunahme für Berechnungen, die diesen Typ des Datenparallelismus verwenden können, ohne daß bedeutsame zusätzliche Kosten an Siliziumplatz auf einem Prozessorchip oder eine Komplexität im Entwurf hinzugefügt werden. Die vorliegende Erfindung ermöglicht es ferner, daß eine Parallelverarbeitung von Operationen, die von einem Prozessor durchgeführt werden, ansprechend auf einen einzigen Befehl durchgeführt wird.
- Fig. 1 zeigt ein vereinfachtes Blockdiagramm eines Operationsausführungsdatenwegs innerhalb eines Prozessors gemäß bevorzugten Ausführungsbeispielen der vorliegenden Erfindung.
- Fig. 2 zeigt ein vereinfachtes Blockdiagramm einer arithmetisch-logischen Einheit (ALU), die in Fig. 1 ge zeigt ist, gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 3 zeigt eine Implementation eines Zweier-Komplement- Addierers innerhalb der ALU, die in Fig. 2 gezeigt ist, gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 4 zeigt ein anderes vereinfachtes Blockdiagramm der arithmetisch-logischen Einheit (ALU), die in Fig. 1 gezeigt ist, gemäß einem anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 5 zeigt ein weiteres anderes vereinfachtes Blockdiagramm der arithmetisch-logischen Einheit (ALU), die in Fig. 1 gezeigt ist, gemäß einem weiteren anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 6 zeigt eine Implementation einer Schiebeeinrichtung, die in Fig. 1 gezeigt ist, gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 7 zeigt einen Multiplizierer gemäß dem Stand der Technik.
- Fig. 8 zeigen einen Multiplizierer, der gemäß bevorzugten und 9 Ausführungsbeispielen der vorliegenden Erfindung implementiert ist.
- Fig. 10 zeigt eine Implementation eines Übertrag-Vorausgriff-Addierers ("Carry Look-Ahead Adder") innerhalb der ALU, die in Fig. 1 gezeigt ist, gemäß einem anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung.
- Fig. 11 zeigt ein Beispiel für ein Befehlslayout gemäß einem anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung
- Fig. 1 zeigt ein vereinfachtes Blockdiagramm eines Operationsausführungsdatenwegs innerhalb eines Prozessors gemäß bevorzugten Ausführungsbeispielen der vorliegenden Erfindung. Operanden für anstehende Operationen und Ergebnisse von durchgeführten Operationen werden in allgemeinen Registern 25 gespeichert. Wenn Operationen durchgeführt werden, wird ein erster Operand, der in einem ersten Register innerhalb der allgemeinen Register 25 gespeichert ist, auf einem ersten Quellenbus 21 plaziert. Wenn die Operation einen weiteren Operanden erfordert, wird ein zweiter Operand, der in einem zweiten Register innerhalb der allgemeinen Register 25 gespeichert ist, auf einem zweiten Quellenbus 22 plaziert.
- Nach einer Durchführung der Operation wird das Ergebnis auf einem Ergebnisbus 23 plaziert und in ein Register innerhalb der allgemeinen Register 25 geladen. Die Operation wird durch eine arithmetisch-logische Einheit (ALU) 26 oder 'durch eine Schiebeeinrichtung 29 durchgeführt. Eine Vorschiebeeinrichtung 27 und eine Komplementen-Schaltungsanordnung 28 können jeweils dazu verwendet werden, Operanden zu modifizieren, bevor sie von der ALU 26 empfangen werden. Für einen allgemeinen Hintergrund bezüglich der Architektur von Einzelprozessorsystemen, die ähnlich zu der vorliegenden Erfindung aufgebaut sind, sei beispielsweise auf Ruby B. Lee, Precision Architecture, IEEE Computer, Bd. 22, Nr. 1, Januar 1989, Seiten 78 bis 91, verwiesen.
- Gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung kann die ALU partitioniert sein, um eine parallele Datenverarbeitung zu ermöglichen. Beispielsweise zeigt Fig. 2 eine ALU 26, die in zwei Partitionen geteilt ist. Eine erste Partition 41 führt Operationen auf niederwertige Bits 42 eines ersten Operanden und auf niederwertige Bits 43 eines zweiten Operanden durch, um Ergebnisse 44 für die niederwertigen Bits zu erzeugen. Eine zweite Partition 51 führt Operationen mit höherwertigen Bits 52 des ersten Operanden und höherwertigen Bits 53 des zweiten Operanden durch, um Ergebnisse 54 für die höherwertigen Bits zu erzeugen.
- Ansprechend auf eine Steuereingabe 49 wird eine Auswahleinrichtung 50 verwendet, um es zu ermöglichen, daß Informationen auf dem Datenweg 45 von der ersten Partition 41 zu der zweiten Partition 51 laufen können, oder daß Informationen auf dem Datenweg 45 abgefangen werden, bevor sie von der ersten Partition 41 zu der zweiten Partition 51 laufen. Insbesondere können bei arithmetischen Operationen, die auf Voll-Wort-Operanden durchgeführt werden, Informationen von der ersten Partition 41 durch die Auswahleinrichtung 50 zu der zweiten Partition 51 laufen. Für das Durchführen von parallelen arithmetischen Operationen auf Halb-Wort-Operanden verhindert die Auswahleinrichtung 50, daß Informationen von der ersten Partition 41 zu der zweiten Partition 51 laufen können. Im allgemeinen existiert bei Logikoperationen kein Laufen von Informationen von der ersten Partition 41 zu der zweiten Partition 51.
- In einem Computer beispielsweise, der einen Datenweg mit einer Breite von 32 Bit hat, hat jeder Voll-Wort-Operand 32 Bit. Wenn daher Operationen unter Verwendung von 32-Bit- Voll-Wort-Operanden durchgeführt werden, ermöglicht es die Auswahleinrichtung 50, daß Informationen von der ersten Partition 41 durch die Auswahleinrichtung 50 zu der zweiten Partition 51 laufen können. Wenn zwei parallele Operationen unter Verwendung von 16-Bit-Halbwort-Operanden durchgeführt werden, verhindert die Auswahleinrichtung 50, daß Informationen von der ersten Partition 41 durch die Auswahleinrichtung 50 zu der zweiten Partition 51 laufen. Statt dessen wird der Wert auf einer Leitung 59 zu der Partition 51 weitergeleitet. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf die Eingangsleitung 59 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf die Eingangsleitung 59 plaziert.
- Bei dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung ist eine übliche arithmetische Operation, die von der ALU 26 durchgeführt wird, die in Fig. 1 gezeigt ist, eine Zweierkomplementaddition. Wie es für Fachleute klar ist, implementiert die Verwendung einer Zweierkomplementschaltungsanordnung 28, um ein Zweierkomplement auf einen Operanden durchzuführen, bevor eine Zweierkomplementadditionsoperation in der ALU durchgeführt wird, eine Zweierkomplementsubtraktion. Ferner implementiert die Verwendung einer Vorschiebeeinrichtung 27, um einen Operanden vorzuschieben, bevor eine Zweierkomplementadditionsoperation in der ALU durchgeführt wird, eine Verschieben-und-Addieren- Operation.
- Fig. 3 zeigt eine Implementation eines Zweierkomplementaddierers mit einer Übertrag-Ausbreiten-Addition innerhalb der ALU 26 gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. Alternativ umfaßt die ALU 26 einen Zweierkomplementaddierer mit Übertrag-Vorausgriff. Ein Halbaddierer 60 empfängt ein einzelnes Bit X&sub0; eines ersten Operanden und ein einzelnes Bit Y&sub0; eines zweiten Operanden. Der Halbaddierer 60 erzeugt ein Summenbit 20 und ein Übertragbit C&sub0;. Ein Volladdierer 61 empfängt ein einzelnes Bit X&sub1; des ersten Operanden, ein einzelnes Bit Y&sub1; des zweiten Operanden und das Übertragbit C&sub0;. Der Volladdierer 61 erzeugt ein Summenbit Z&sub1; und ein Übertragbit C&sub1;. Ein Volladdierer 65 empfängt ein einzelnes Bit Xi&submin;&sub1; des ersten Operanden, ein einzelnes Bit Yi-1 des zweiten Operanden und ein Übertragbit von einem vorherigen Addierer (d. h. Ci-2, nicht gezeigt). Der Volladdierer 65 erzeugt ein Summenbit 2i-1 und ein Übertragbit Ci-1. Ein Volladdierer 66 empfängt ein einzelnes Bit X&sub1; des ersten Operanden und ein einzelnes Bit Y&sub1; des zweiten Operanden. Abhängig von einem Wert eines Freigabe-Bits 49 empfängt der Volladdierer 66 ferner durch die Auswahleinrichtung 50 (oder eine äquivalente Logikschaltungsanordnung, wie es für Fachleute offensichtlich ist) das Übertragbit Ci-1. Der Volladdierer 66 erzeugt ein Summenbit 21 und ein Übertragbit C&sub1;. Ein Volladdierer 69 empfängt ein einzelnes Bit des ersten Operanden, ein einzelnes Bit des zweiten Operanden und ein tibertragbit von einem vorherigen Addierer (nicht gezeigt). Der Volladdierer 69 erzeugt ein Summenbit Zi-1 und ein Übertragbit Cj-1.
- Bei dem Ausführungsbeispiel des Addierers, der in Fig. 3 gezeigt ist, ist "j" die Größe des Datenwegs und die Bitlänge von Vollwortoperationen. Ferner ist "i" gleich "j" geteilt durch 2. Beispielsweise ist "j" gleich 32 und "i" gleich 16.
- Die Auswahleinrichtung 50 ist ebenfalls in Fig. 3 gezeigt. Wenn Operationen unter Verwendung von "j"-Bit Vollwortoperanden durchgeführt werden, ist das Freigabebit 49 gleich einer logischen Eins und ermöglicht es, daß sich ein Übertrag durch die Auswahleinrichtung 50 zu dem Volladdierer 66 ausbreiten kann. Wenn zwei parallele Operationen unter Verwendung von "i"-Bit Halbwortoperanden durchgeführt werden, ist das Freigabebit 49 gleich einer logischen Null und verhindert es, daß sich der Übertrag durch die Auswahleinrichtung 50 zu dem Volladdierer 66 ausbreiten kann. Statt dessen wird der Wert auf der Leitung 59 zu dem Volladdierer 66 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Eingangsleitung 59 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Eingangsleitung 59 plaziert.
- Während die Fig. 2 und 3 Implementationen der ALU 26 mit zwei Partitionen erörtern, kann eine ALU, die gemäß anderen bevorzugten Ausführungsbeispielen der vorliegenden Erfindung entworfen ist, verschiedene Partitionen haben. Beispielsweise zeigt Fig. 4 ein anderes vereinfachtes Blockdiagramm der ALU 26 gemäß einem anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. In Fig. 4 ist die ALU 26 in vier Partitionen geteilt. Eine erste Partition 71 führt Operationen auf niederwertige Bits 72 eines ersten Operanden und niederwertige Bits 73 eines zweiten Operanden durch, um Ergebnisse 74 für die niederwertigen Bits zu erzeugen. Eine zweite Partition 81 führt Operationen auf Bits 82 des ersten Operanden und Bits 83 des zweiten Operanden durch, um Ergebnis-Bits 84 zu erzeugen. Eine dritte Partition 91 führt Operationen auf Bits 92 des ersten Operanden und Bits 93 des zweiten Operanden durch, um Ergebnis-Bits 94 zu erzeugen. Eine vierte Partition 101 führt Operationen auf höherwertige Bits 102 des ersten Operanden und höherwertige Bits 103 des zweiten Operanden durch, um Ergebnisse 104 für höherwertige Bits zu erzeugen.
- Ansprechend auf eine Steuereingabe 79 wird eine Auswahleinrichtung 80 verwendet, um es zu ermöglichen, daß Informationen auf dem Datenweg 75 von der ersten Partition 71 zu der zweiten Partition 81 laufen können, oder um Informationen auf dem Datenweg 75 abzufangen, bevor sie von der ersten Partition 71 zu der zweiten Partition 81 laufen können. Insbesondere können für arithmetische Operationen, die auf Voll-Wort-Operanden oder Halb-Wort-Operanden durchgeführt werden, Informationen von der ersten Partition 71 durch die Auswahleinrichtung 80 zu der zweiten Partition 81 laufen. Für das Durchführen von parallelen arithmetischen Operationen auf Viertel-Wort-Operanden verhindert die Auswahleinrichtung 80, daß Informationen von der ersten Partition 71 zu der zweiten Partition 81 laufen. Statt dessen wird der Wert auf einer Leitung 88 zu der Partition 81 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 88 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 88 plaziert. Im allgemeinen existiert bei Logikoperationen keine Ausbreitung von Informationen zwischen Partitionen.
- Ansprechend auf eine Steuereingabe 89 wird die Auswahleinrichtung 90 dazu verwendet, Informationen auf dem Datenweg 85 von der zweiten Partition 81 zu der dritten Partition 91 laufen zu lassen, oder um Informationen auf dem Datenweg 85 abzufangen, bevor sie von der zweiten Partition 81 zu der dritten Partition 91 laufen können. Insbesondere können für arithmetische Operationen, die auf Voll-Wort-Operanden durchgeführt werden, Informationen von der zweiten Partition 81 durch die Auswahleinrichtung 90 zu der dritten Partition 91 laufen. Für die Durchführung von parallelen arithmetischen Operationen auf Viertel-Wort-Operanden oder Halb- Wort-Operanden verhindert die Auswahleinrichtung 90, daß Informationen von der zweiten Partition 81 zu der dritten Partition 91 laufen können. Statt dessen wird der Wert auf einer Leitung 98 zu der Partition 91 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 98 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 98 plaziert.
- Ansprechend auf eine Steuereingabe 99 wird die Auswahleinrichtung 100 dazu verwendet, Informationen auf dem Datenweg 95 von der dritten Partition 91 zu der vierten Partition 101 laufen zu lassen, oder um Informationen auf dem Datenweg 95 abzufangen, bevor sie von der dritten Partition 91 zu der vierten Partition 101 laufen können. Insbesondere können bei arithmetischen Operationen, die auf Voll-Wort-Operanden und Halb-Wort-Operanden durchgeführt werden, Informationen von der dritten Partition 91 durch die Auswahleinrichtung 100 zu der vierten Partition 101 laufen. Für das Durchführen von parallelen arithmetischen Operationen auf Viertel-Wort-Operanden verhindert die Auswahleinrichtung 100, daß Informationen von der dritten Partition 91 zu der vierten Partition 101 laufen können. Statt dessen wird der Wert auf einer Leitung 108 zu der Partition 101 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 108 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 108 plaziert.
- In einem Computer beispielsweise, der einen Datenweg mit einer Breite von 64 Bit hat, hat jeder Voll-Wort-Operand 64 Bit. Wenn daher Operationen unter Verwendung von 64-Bit- Voll-Wort-Operanden durchgeführt werden, ermöglicht es die Auswahleinrichtung 80, daß Informationen von der ersten Partition 71 durch die Auswahleinrichtung 80 zu der zweiten Partition 81 laufen können, ermöglicht es die Auswahleinrichtung 90, daß Informationen von der zweiten Partition 81 durch die Auswahleinrichtung 90 zu der dritten Partition 91 laufen können, und ermöglicht es die Auswahleinrichtung 100, daß Informationen von der dritten Partition 91 durch die Auswahleinrichtung 100 zu der vierten Partition 101 laufen können. Wenn zwei parallele Operationen unter Verwendung von 32-Bit-Halbwort-Operanden durchgeführt werden, ermöglicht es die Auswahleinrichtung 80, daß Informationen von der ersten Partition 71 durch die Auswahleinrichtung 80 zu der zweiten Partition 81 laufen können, ermöglicht es die Auswahleinrichtung 90, daß Informationen von der zweiten Partition 81 durch die Auswahleinrichtung 90 zu der dritten Partition 91 laufen können, und ermöglicht es die Auswahleinrichtung 100, daß Informationen von der dritten Partition 91 durch die Auswahleinrichtung 100 zu der vierten Partition 101 laufen können. Wenn vier parallele Operationen unter Verwendung von 16-Bit-Viertelwort-Operanden durchgeführt werden, verhindert es die Auswahleinrichtung 80, daß Informationen von der ersten Partition 71 durch die Auswahleinrichtung 80 zu der zweiten Partition 81 laufen, verhindert es die Auswahleinrichtung 90, daß Informationen von der zweiten Partition 81 durch die Auswahleinrichtung 90 zu der dritten Partition 91 laufen, und verhindert es die Auswahleinrichtung 100, daß Informationen von der dritten Partition 91 durch die Auswahleinrichtung 100 zu der vierten Partition 101 laufen.
- Fig. 5 zeigt ein weiteres anderes vereinfachtes Blockdiagramm einer ALU 26 gemäß einem weiteren anderen bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. In Fig. 5 ist die ALU 26 in Partitionen geteilt, von denen jede eine Breite von einem Bit hat. Eine erste Partition 111 führt Operationen auf ein niederwertiges Bit 112 eines ersten Operanden und auf ein niederwertiges Bit 113 eines zweiten Operanden durch, um ein niederwertiges Ergebnis-Bit 114 zu erzeugen. Eine zweite Partition 121 führt Operationen auf ein Bit 122 des ersten Operanden und ein Bit 123 des zweiten Operanden durch, um ein Ergebnis-Bit 124 zu erzeugen. Eine Partition 131 führt Operationen auf ein Bit 132 des ersten Operanden und ein Bit 133 des zweiten Operanden durch, um ein Ergebnis-Bit 134 zu erzeugen. Eine Partition 141 führt Operationen auf ein Bit 142 des ersten Operanden und ein Bit 143 des zweiten Operanden durch, um ein Ergebnis-Bit 144 zu erzeugen. Eine Partition 151 führt Operationen auf ein hochwertiges Bit 152 des ersten Operanden und ein hochwertiges Bit 153 des zweiten Operanden durch, um ein hochwertiges Ergebnis-Bit 154 zu erzeugen.
- Ansprechend auf eine Steuereingabe 119 wird eine Auswahleinrichtung 120 verwendet, um es zu ermöglichen, daß Informationen auf dem Datenweg 115 von der ersten Partition 111 zu der zweiten Partition 121 laufen, oder um Informationen auf dem Datenweg 115 abzufangen, bevor sie von der ersten Partition 111 zu der zweiten Partition 121 laufen. Wenn Daten abgefangen werden, wird der Wert auf einer Leitung 128 zu der Partition 121 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 128 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 128 plaziert.
- Ansprechend auf eine Steuereingabe 129 wird eine Auswahleinrichtung 130 verwendet, um es zu ermöglichen, daß Informationen auf einem Datenweg von einer unmittelbar vorherigen Partition (nicht gezeigt) von der unmittelbar vorhergehenden Partition zu der Partition 131 laufen, oder um Informationen auf dem Datenweg von der unmittelbar vorherigen Partition abzufangen, bevor sie zu der Partition 131 laufen können. Wenn Daten abgefangen werden, wird der Wert auf einer Leitung 138 zu der Partition 131 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 138 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 138 plaziert.
- Ansprechend auf eine Steuereingabe 139 wird eine Auswahleinrichtung 140 dazu verwendet, um es zu ermöglichen, daß Informationen auf dem Datenweg 135 von der Partition 131 zu einer Partition 141 laufen können, oder um Informationen auf dem Datenweg 135 abzufangen, bevor sie von der Partition 131 zu der Partition 141 laufen. Wenn Daten abgefangen werden, wird der Wert auf einer Leitung 148 zu der Partition 141 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 148 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 148 plaziert.
- Ansprechend auf eine Steuereingabe 149 wird eine Auswahleinrichtung 150 verwendet, um es zu ermöglichen, daß Informationen auf einem Datenweg von einer unmittelbar vorhergehenden Partition (nicht gezeigt) von der unmittelbar vorhergehenden Partition zu der Partition 151 laufen, oder um Informationen auf dem Datenweg von der unmittelbar vorhergehenden Partition abzufangen, bevor sie zu der Partition 151 laufen können. Wenn Daten abgefangen werden, wird der Wert auf einer Leitung 158 zu der Partition 151 weitergereicht. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Leitung 158 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Leitung 158 plaziert.
- Die Steuereingaben in die Auswahleinrichtungen können verwendet werden, um eine Parallelverarbeitung von Operanden mit variabler Länge zu ermöglichen. In einem Verarbeitungssystem mit einem Datenweg mit einer Breite von 64 Bit beispielsweise könnten die Steuereingaben ausgewählt werden, so daß eine Parallelverarbeitung von zwei 16-Bit- und vier 8-Bit-Arithmetikoperationen gleichzeitig durchgeführt werden. Zusätzlich könnte jede beliebige Bitkombination, die nicht mehr als die Wortgröße ergibt, verwendet werden. Beispielsweise kann ferner eine Parallalverarbeitung von arithmetischen Operationen mit 17 Bit, 3 Bit, 16 Bit, 12 Bit, 5 Bit und 11 Bit gleichzeitig durchgeführt werden.
- Die oben erörterten Prinzipien beziehen sich auch auf einen Übertrag-Vorausgriff-Addierer, der in der Technik auch als "Carry-Look-Ahead"-Addierer bekannt ist. Beispielsweise zeigt Fig. 10 eine Implementation eines Zweierkomplement- Addierers mit Übertrag-Vorausgriff innerhalb der ALU 26 gemäß einem weiteren bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. Eine Übertrag-Vorausgriffschaltung 470 erzeugt Überträge für den Addierer. Ein Halb-Addierer 460 empfängt ein einzelnes Bit X&sub0; eines ersten Operanden und ein einzelnes Bit Y&sub0; eines zweiten Operanden. Ein Halbaddierer 460 erzeugt ein Summenbit 20. Ein Volladdierer 461 empfängt ein einzelnes Bit X&sub1; des ersten Operanden, ein einzelnes Bit Y&sub1; des zweiten Operanden und ein Übertragbit C&sub0;. Ein Volladdierer 461 erzeugt ein Summenbit 21. Ein Volladdierer 165 empfängt ein einzelnes Bit Xi-1 des ersten Operanden, ein einzelnes Bit Yi-1 des zweiten Operanden und ein Übertragbit Ci-2. Ein Volladdierer 465 erzeugt ein Summenbit Zi-1. Ein Volladdierer 466 empfängt ein einzelnes Bit Xi des ersten Operanden, ein einzelnes Bit Y&sub1; des zweiten Operanden und ein Übertragbit Ci-1. Der Volladdierer 466 erzeugt ein Summenbit 21. Ein Volladdierer 469 empfängt ein einzelnes Bit Xj-1 des ersten Operanden, ein einzelnes Bit des zweiten Operanden und ein Übertragbit Cj-2. Ein Volladdierer 469 erzeugt ein Summenbit Zj-1.
- Bei dem Ausführungsbeispiel des in Fig. 10 gezeigten Addierers ist "j" die Größe des Datenwegs und die Bitlänge von Vollwortoperationen. Ebenfalls ist "i" gleich "j" geteilt durch 2. Beispielsweise ist "j" gleich 32 und "i" gleich 16. Wenn alternativ j gleich 32 ist, kann i gleich einer Ganzzahl kleiner als 32 sein.
- Wenn Operationen unter Verwendung von "j"-Bit-Vollwortoperanden durchgeführt werden, ist ein Freigabebit 452 gleich einer logischen Eins und ermöglicht es, daß sich alle Überträge ausbreiten können. Wenn zwei parallele Operationen unter Verwendung von "i"-Bit-Unterwortoperanden, die zwischen den Bits i und i+1 geteilt sind, durchgeführt werden, ist ein Freigabebit 452 gleich einer logischen Null und verhindert es, daß sich der Übertrag über die Grenze der Partition ausbreitet. Statt dessen wird der Wert auf der Leitung 451 als der Wert verwendet, der zu dem Volladdierer 466 weitergereicht wird. Wenn ein "Addieren" durchgeführt wird, wird eine logische Null auf der Eingangsleitung 451 plaziert. Wenn ein "Subtrahieren" durchgeführt wird, wird eine logische Eins auf der Eingangsleitung 451 plaziert.
- Der Betrieb von Übertrag-Vorausgriff-Addierern ist in der Technik bekannt. Beispielsweise sei angenommen, daß A[i] ein Bit einer Eingabe ist, daß B[i] ein Bit der anderen Eingabe ist, und S[i] ein Bit der Summe von dem Addierer ist. Dann ist die Summe von einem Bit des Addierers durch die nachfolgende Gleichung 1 gegeben:
- Gleichung 1
- S[i] = A[i] XOR B[i] XOR C[i-1]
- In Gleichung 1 ist C[i-1] der Übertrag aus den vorherigen Bits des Übertrag-Vorausgriff-Addierers. Der Übertrag-Vorausgriff-Addierer arbeitet beim Erzeugen dieser Übertragbits schnell.
- Es sei G[i] ein Signal, das bezeichnet, daß ein Übertrag von diesem Bit erzeugt werden soll, und P[i] ist ein Signal, daß ein Übertrag von den vorherigen Bits zu der Ausgabe dieses Bits laufen kann. Diese werden gemäß Gleichung 2 nachfolgend bestimmt:
- Gleichung 2
- G[i] = A[i] UND B[i];
- P[i] = A[i] ODER B[i].
- Daher können für vier Bits innerhalb eines Übertrag-Vorausgriff-Addierers die Übertragbits, wie in der nachfolgenden Gleichung 3 gegeben, erzeugt werden:
- Gleichung 3
- C[i] = G[i] + P[i] * (G[i-1] + P[i-1] * (G[i-2] + P[i-2] * (G[i-3] + P[i-3] * C[i-4])))
- C[i-1] = G[i-1] + P[i-1] * (G[i-2] + P[i-2] * (G[i-3] + P(i-3] * C[i-4]))
- C[i-2] = G[i-2] + P[i-2] * (G[i-3] + P[i-3] * C[i-4]) C[i-3] = G[i-3] + p[i-3] * C[i-4]
- In der obigen Gleichung 3 ist "*" einer logischen UND-Operation gleich, und "+" ist einer logischen ODER-Operation gleich.
- Wenn ein bevorzugtes Ausführungsbeispiel der vorliegenden Erfindung implementiert wird, wird ein Übertrag bei einem speziellen Bit angehalten, wenn Erzeugen G[i] und Ausbreiten P[i] zwangsweise zu unwahr werden. In der obigen Gleichung 3 beispielsweise wird, wenn G[i-3] und P[i-3] unwahr sind, C[i-3] unwahr sein, und C[i-4] kann niemals den Wert von C[i-2), C[i-1] und C[i] beeinträchtigen. Wenn ähnlichenfalls G[i-2] und P[i-2] unwahr sind, wird C[i-2] unwahr sein, und G[i-3] und P[i-3] und C[i-4] können niemals den Wert von C[i-1] und C[i] beeinflussen.
- Wenn M[i] vereinbarungsgemäß ein Maskenbit ist, das die Übertragkette zwischen Bit [i] und Bit [i+1] unterbricht, wenn M[i] 1 ist, dann kann eine neue Gleichung 4 folgendermaßen erzeugt werden:
- Gleichung 4
- Gm[i] = !M[i] * (A[i] * B[i])
- Pm[i] = !M[i] * (A[i] * B[i])
- Wenn M[i] nun 1 ist, wird kein Übertrag vom Bit [i] erzeugt werden dürfen oder durch das Bit [i] laufen können.
- Für eine Subtraktion durch Erzeugen des Einerkomplements von einem der Operanden und durch Addieren desselben zu dem anderen Operanden mit einem Übertrag hinein (Zweierkomplement-Arithmetik), muß ein Übertrag zwangsweise in einem Bit erzeugt werden, wenn M[i] 1 ist.
- F sei ein Signal, das, wenn es wahr ist, zwangsweise bewirkt, daß ein Übertrag in einem Bit erzeugt wird, wenn M[i] 1 ist. Die Gleichung für Gs[i] und Ps[i] wird so, wie es in der nachfolgenden Gleichung 5 dargelegt ist:
- Gleichung 5
- Gs[i] = (M[i] * F) + (!M[i] * (A(i) * B[i])) - (M[i] * F) + (!M[i] * G[i])
- Ps[i] = Pm[i]
- Wenn nun M[i] 1 ist, wird der Wert von Gs[i] durch F bestimmt. Wenn M[i] 0 ist, wird der Wert von Gs[i] durch A[i] und B[i] bestimmt, wie es vorher der Fall war. Das Ausbreiten muß nicht durch das Signal F erzwungen werden.
- Die Gleichung für den Übertrag heraus ist durch die nachfolgende Gleichung 6 gegeben:
- Gleichung 6
- C[i] = Gs[i] + Ps[i] * C[i-1]
- Wie es für Fachleute klar sein wird, sind die Prinzipien der vorliegenden Erfindung nicht auf arithmetische Operationen innerhalb Computersystem-ALUs begrenzt. Beispielsweise kann das Partitionieren, wie es für die ALU gezeigt ist, ebenfalls auf andere Entitäten innerhalb des Computersystems ausgedehnt werden, die mit Daten arbeiten. Beispielsweise zeigt Fig. 6 die vorliegende Erfindung in einer Vorschiebeeinrichtung 27 implementiert. Das gleiche Ausführungsbeispiel der vorliegenden Erfindung kann ebenfalls verwendet werden, um die Schiebeeinrichtung 29 zu implementieren. Die Partitionierung der Vorschiebeeinrichtung 27 und der Schiebeeinrichtung 29 erlaubt beispielsweise die Implementation von parallelen Schieben- und Addieren-Operationen und von parallelen Schiebe-Operationen.
- Die Vorschiebeeinrichtung 27 umfaßt einen Schieberegister- Ein-Bit-Schlitz 160, einen Schieberegister-Ein-Bit-Schlitz 161, einen Schieberegister-Ein-Bit-Schlitz 165, einen Schieberegister-Ein-Bit-Schlitz 166 und einen Schieberegister- Ein-Bit-Schlitz 169.
- Wenn Daten nach links geschoben werden, wird eine Date an einem Eingang 171, typischerweise ein logischer Wert von Null, als Eingabe in den Schieberegister-Ein-Bit-Schlitz 160 verwendet. Wenn Daten nach rechts geschoben werden, wählt eine Auswahleinrichtung 175 ansprechend auf eine Steuereingabe 182 entweder eine Date am Eingang 181 (einen logischen Wert von Null oder einen logischen Wert von Eins) aus, oder wählt den Wert, der gegenwärtig von dem Schieberegister- Ein-Bit-Schlitz 169 gespeichert ist, um den Wert dann in den Schieberegister-Ein-Bit-Schlitz 169 einzugeben.
- Immer wenn die Schiebeeinrichtung partitioniert werden soll, werden zusätzliche Auswahleinrichtungen zu der Schiebeeinrichtung hinzugefügt. Beispielsweise zeigt Fig. 6, daß die Schiebeeinrichtung zwischen dem Schieberegister-Ein-Bit- Schlitz 165 und dem Schieberegister-Ein-Bit-Schlitz 166 partitioniert ist. Hier wurden eine Auswahleinrichtung 174 und eine Auswahleinrichtung 173 hinzugefügt. Für Verschiebeoperationen mit partitionierten Operanden wählt die Auswahleinrichtung 173, wenn Daten nach links geschoben werden, ansprechend auf eine Steuereingabe 185 eine Date am Eingang 172, typischerweise einen logischen Wert von Null aus, damit die Date als Eingabe in den Schieberegister-Ein-Bit-Schlitz 166 verwendet wird. Für Verschiebeoperationen auf Voll- Wort-Operanden wählt die Auswahleinrichtung 173, wenn Daten nach links verschoben werden, daß die Ausgabe von dem Schieberegister-Ein-Bit-Schlitz 165 als Eingabe in den Schieberegister-Ein-Bit-Schlitz 166 verwendet wird.
- Für Verschiebeoperationen mit partitionierten Operanden wählt die Auswahleinrichtung 174, wenn Daten nach rechts verschoben werden, ansprechend auf eine Steuereingabe 184 entweder eine Date am Eingang 182 (einen logischen Wert von Null oder einen logischen Wert von Eins) oder den Wert, der gegenwärtig von dem Schieberegister-Ein-Bit-Schlitz 166 gespeichert ist, als Eingabe in den Schieberegister-Ein-Bit- Schlitz 165 aus. Für Verschiebeoperationen mit Voll-Wort- Operanden wählt die Auswahleinrichtung 174, wenn Daten nach rechts verschoben werden, die Ausgabe von dem Schieberegister-Ein-Bit-Schlitz 166 aus, um als Eingabe in den Schieberegister-Ein-Bit-Schlitz 165 verwendet zu werden.
- Fig. 6 zeigt eine Schiebeeinrichtung mit nur zwei Partitionen. Aus der vorangegangenen Diskussion von Partitionen in einer ALU ist zu sehen, daß die Verschiebeeinrichtung auf eine Vielzahl von Arten und Weisen partitioniert werden kann. Eine 64-Bit-Schiebeeinrichtung kann beispielsweise in gleiche Partitionen mit einer Größe von 2, 4, 8, 16, 32 oder 64 Bit partitioniert werden. Zusätzlich ist es keine Anforderung der vorliegenden Erfindung, daß die Partitionen immer auf eine gleiche Anzahl von Bits wirken.
- Obwohl das obige Ausführungsbeispiel die Vorschiebeeinrichtung 27 und die Schiebeeinrichtung 29 als Schieberegister implementiert beschreibt, das eine Serie von Ein-Bit-Schlitzen umfaßt, sind alternative bevorzugte Ausführungsbeispiele Vorschiebeeinrichtungen und Schiebeeinrichtungen, die mit Multiplexern implementiert sind. Typischerweise ist eine Vorschiebeeinrichtung 27 durch eine Ebene von Multiplexern implementiert, da sie üblicherweise um höchstens eine kleine Anzahl von Bit verschieben kann, beispielsweise um 0, 1, 2, 3 oder 4 Bit. Die Schiebeeinrichtung 29 ist typischerweise durch drei Ebenen von Multiplexern implementiert, wobei jede Ebene von Multiplexern ein Vier-zu-Eins-Multiplexer ist. Beispielsweise wird in einer 64-Bit-Schiebeeinrichtung 29 die erste Ebene von Multiplexern entweder um 0, 16, 32 oder 48 Bit schieben. Die zweite Ebene von Multiplexern kann entweder um 0, 4, 8 oder 12 Bit schieben. Die dritte Ebene von Multiplexern kann um 0, 1, 2 oder 3 Bit schieben. Dies ergibt eine Verschiebung einer beliebigen Anzahl von Bits von 0 bis 63. In einer solchen Schiebeeinrichtung, die aus drei Stufen von Multiplexern aufgebaut ist, können immer noch Ein-Bit-Schlitze identifiziert werden. Die Blockierung der Verschiebungen zwischen beliebigen zwei Bits muß jedoch in einer oder in mehreren der drei Multiplexerstufen durchgeführt werden, wie es für Fachleute verständlich ist.
- Die Prinzipien der vorliegenden Erfindung können ebenfalls auf andere Elemente in einem Computersystem ausgedehnt werden. Beispielsweise kann ein Multiplizierer gemäß einem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung derart implementiert werden, daß er Teilwort-Parallelmultiplikationen zusätzlich zu Ganzwort-Multiplikationen ermöglicht.
- Beispielsweise zeigt Fig. 7 einen Vier-Bit-Multiplizierer gemäß dem Stand der Technik. Der Multiplizierer multipliziert einen ersten Vier-Bit-Multiplikanden X&sub3;X&sub2;X&sub1;X&sub0; (Basis 2) mit einem zweiten Vier-Bit-Multiplikanden Y&sub3;Y&sub2;Y&sub1;Y&sub0; (Basis 2), um ein Acht-Bit-Ergebnis Z&sub7;Z&sub6;Z&sub5;Z&sub4;Z&sub3;Z&sub2;Z&sub1;Z&sub0; (Basis 2) zu erzeugen. Für Fachleute ist es verständlich, daß die logischen UND-Gatter 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215 und 216 verwendet werden können, um Teilprodukte für die Multiplikation zu erzeugen. Eine Teilprodukt-Summenschaltung 220 summiert die Teilprodukte, die durch die logischen UND-Gatter 201 bis 216 erzeugt werden, um das Ergebnis zu erzeugen.
- Die zwei Multiplikanden X&sub3;X&sub2;X&sub1;X&sub0; und Y&sub3;Y&sub2;Y&sub1;Y&sub0;, die Teilpro dukte, die durch die logischen UND-Gatter 201 bis 216 erzeugt werden, und das Resultat, das durch die Teilprodukt- Summenschaltung 220 erzeugt wird, können in einer Tabelle derart plaziert werden, daß die Operation des Multiplizierers zusammengefaßt ist. Beispielsweise ist eine solche Tabelle als nachfolgende Tabelle 1 gezeigt: Tabelle 1
- In der in der obigen Tabelle 1 verwendeten Notation sind die Bitposition jedes Bits von beiden Multiplikanden und das Ergebnis spezifisch identifiziert. Zusätzlich sind die Bits des Multiplikanden, die verwendet werden, um jedes Teilprodukt zu bilden, spezifisch dargelegt. Wie es für Fachleute ersichtlich ist, können die in Tabelle 1 oben gezeigten Informationen unter Verwendung einer abgekürzten oder vereinfachten Notation dargelegt werden, wie es in Tabelle 2 nachfolgend durchgeführt wurde. Tabelle 2
- In der obigen Tabelle 2 wird jedes Bit des ersten Multiplikanden durch ein "X" dargestellt, wird jedes Bit des zweiten Multiplikanden durch ein "Y" dargestellt, wird jedes Bit eines Teilprodukts durch ein "z" dargestellt, und wird jedes Bit des Ergebnisses durch ein "Z" dargestellt. Unter Verwendung der einfacheren Notation von Tabelle 2 kann ein Acht- Bit-Multiplizierer beschrieben werden, wie es in der nachfolgenden Tabelle 3 gezeigt ist: Tabelle 3
- Der in Tabelle 3 gezeigte Multiplizierer multipliziert einen ersten Acht-Bit-Multiplikanden XXXXXXXX(gasis 2) mit einem zweiten Acht-Bit-Multiplikanden YYYYYYYY(Basis 2)' um ein 16-Bit-Ergebnis ZZZZZZZZZZZZZZZZ(Basis 2) zu erzeugen. Auf ähnliche Art und Weise kann unter Verwendung der einfacheren Notation der Tabelle 2 und der Tabelle 3 (wobei jedoch Räume zwischen Bitpositionen eliminiert sind) ein 16- Bit-Multiplizierer beschrieben werden, wie es in der nachfolgenden Tabelle 4 dargelegt ist: Tabelle 4
- Der in Tabelle 4 gezeigte Multiplizierer multipliziert einen ersten 16-Bit-Multiplikanden XXXXXXXXXXXXXXXX(Basis 2) mit einem zweiten 16-Bit-Multiplikanden YYYYYYYYYYYYYYYY(Basis 2)' um ein 32-Bit-Ergebnis ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ(Basis 2) zu erzeugen.
- Gemäß bevorzugten Ausführungsbeispielen der vorliegenden Erfindung kann ein Standardmultiplizierer modifiziert werden, um einen Multiplizierer zu implementieren, der eine parallele Multiplikation von Teilworten zusätzlich zu einer Multiplikation von ganzen Worten liefert. Beispielsweise zeigt Fig. 8 einen Vier-Bit-Multiplizierer gemäß dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung. Die logischen UND-Gatter 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315 und 316 erzeugen Teilpro dukte für die Multiplikation. Eine Teilprodukt-Summenschaltung 320 summiert die Teilprodukte, die von den logischen UND-Gattern 310 bis 316 erzeugt werden, um das Ergebnis zu erzeugen.
- Bei dem in Fig. 8 gezeigten Multiplizierer kann eine Teilprodukt-Summenschaltung 320 genau wie die Teilprodukt-Summenschaltung 220 von Fig. 7 implementiert werden. Der Unterschied zwischen dem in Fig. 8 gezeigten Multiplizierer und dem in Fig. 7 gezeigten Multiplizierer ist die Hinzufügung einer Steuerleitung 321, die mit einem zusätzlichen Eingang verbunden ist, der in jedem der logischen UND-Gatter 303, 304, 307, 308, 309, 310, 313 und 314 enthalten ist.
- Wie es in Fig. 8 gezeigt ist, führt der Multiplizierer, wenn die Steuerleitung 321 auf eine logische Eins gesetzt ist, eine Ganzwort-Multiplikation auf einen ersten Vier-Bit-Multiplikanden X&sub3;X&sub2;X&sub1;X&sub0; (Basis 2) und einen zweiten Vier-Bit- Multiplikanden Y&sub3;Y&sub2;Y&sub1;Y&sub0; (Basis 2) durch, um ein Acht-Bit-Ergebnis Z&sub7;Z&sub6;Z&sub5;Z&sub4;Z&sub3;Z&sub2;Z&sub1;Z&sub0; (Basis 2) zu erzeugen. Die zwei Multiplikanden X&sub3;X&sub2;X&sub1;X&sub0; und Y&sub3;Y&sub2;Y&sub1;Y&sub0;, die Teilprodukte, die von den logischen UND-Gatter 301 bis 316 erzeugt werden, und das Ergebnis, das von der Teilprodukt-Summenschaltung 320 erzeugt wird, können in Tabellenform, wie es in der nachfolgenden Tabelle 5 gezeigt ist, dargestellt werden: Tabelle 5
- Ein Vergleich von Tabelle 5 und Tabelle 1 oben bestätigt, daß, wenn die Leitung 321 auf eine logische Eins gesetzt ist, die Operation des in Fig. 8 gezeigten Multiplizierers identisch zu einer Operation des in Fig. 7 gezeigten Multiplizierers ist. Daher kann ähnlich zur obigen Tabelle 2 die vereinfachte Notation verwendet werden, um die Operation des in Fig. 8 gezeigten Multiplizierers zu beschreiben, wodurch sich die nachfolgende Tabelle 6 ergibt: Tabelle 6
- Fig. 9 zeigt den in Fig. 8 gezeigten Multiplizierer, jedoch mit der Ausnahme, daß die Steuerleitung auf eine logische Null gesetzt ist. Dies führt zwangsweise dazu, daß die Hälfte der Teilprodukte auf Null gesetzt ist, was es dem Multiplizierer ermöglicht, eine parallele Multiplikation von Teil- (Zwei-Bit-) Worten durchzuführen. Das heißt, daß in einer ersten Multiplikation ein Zwei-Bit-Multiplikand A&sub1;A&sub0; (Basis 2) mit einem Zwei-Bit-Multiplikanden C&sub1;C&sub0; (Basis 2) multipliziert wird, um ein Vier-Bit-Ergebnis E&sub3;E&sub2;E&sub1;E&sub0; (Basis 2) zu erzeugen. In einer zweiten Multiplikation wird ein Zwei-Bit-Multiplikand B&sub1;B&sub0; (Basis 2) mit einem Zwei-Bit-Multiplikanden D&sub1;D&sub0; (Basis 2) multipliziert, um ein Vier-Bit- Ergebnis F&sub3;F&sub2;F&sub1;F&sub0; (Basis 2) zu erzeugen. Die Teilprodukte, die für die parallelen Multiplikationen nicht verwendet werden, sind zwangsweise auf eine logische Null eingestellt. Die Parallelmultiplikation kann in Tabellenform dargestellt werden, wie es in der nachfolgenden Tabelle 7 geschehen ist: Tabelle 7
- Unter Verwendung der vereinfachten Notation, die zuerst in Tabelle 2 eingeführt wurde, kann der in Fig. 9 gezeigte Multiplizierer, wie in der Tabelle 8 nachfolgend dargelegt, dargestellt werden: Tabelle 8
- Wie es durch Tabelle 7 und Tabelle 8 gezeigt ist, wird eine Parallelmultiplikation von Teilworten in einem Multiplizierer durch zwangsweises Setzen von ausgewählten Teilprodukten in dem Multiplizierer auf Null implementiert. Im allgemeinen kann ein Standardmultiplizierer mit beliebiger Größe verwendet werden, um eine Parallelmultiplikation durchzuführen, indem nicht verwendete Teilprodukte auf Null gezwungen werden. Die Teilprodukte werden zwangsweise auf eine logische Null gebracht, beispielsweise unter Verwendung von einem oder mehreren Steuereingängen und von drei logischen UND- Eingangsgattern (oder ihren Äquivalenten).
- Beispielsweise kann, wie es oben erörtert wurde, ein Acht- Bit-Multiplizierer, wie es durch Tabelle 3 beschrieben ist, implementiert werden. Dieser Multiplizierer kann verwendet werden, um eine Parallelmultiplikation von Teilwort-Multiplikanden durch Bereitstellen einer Schaltungsanordnung durchzuführen, wie sie in den Fig. 8 und 9 gezeigt ist, um Teilprodukte gemäß den Lehren der vorliegenden Erfindung auf Null zwangsweise zu bringen. Keine Modifikation ist für die Teilprodukt-Summenschaltungsanordnung erforderlich. Somit ermöglicht ein Modifizieren des durch Tabelle 3 beschriebenen Multiplizierers gemäß den Lehren der vorliegenden Erfindung beispielsweise das Durchführen von zwei parallelen Multiplikationen unter Verwendung von Vier-Bit-Multiplikanden, wie es durch die nachfolgende Tabelle 9 implementiert ist: Tabelle 9
- Wie es aus der obigen Tabelle 9 zu sehen ist, wird in einer ersten parallelen Multiplikation von Teilwort-Multiplikanden ein Vier-Bit-Multiplikand AAAA(Basis 2) mit einem Vier-Bit- Multiplikanden 0000(Basis 2) multipliziert, um ein Acht- Bit-Ergebnis EEEEEEEE(Basis 2) zu erzeugen. In einer zweiten parallelen Multiplikation von Teilwort-Multiplikanden wird ein Vier-Bit-Multiplikand BBBB(Basis 2) mit einem Vier-Bit- Multiplikanden DDDD(gasis 2) multipliziert, um ein Acht- Bit-Ergebnis FFFFFFFF(Basis 2) zu erzeugen. Die Multiplikation von zwei Ganzwort- (Acht-Bit-) Multiplikanden wird durch den Multiplizierer implementiert, indem nicht alle Teilprodukte zwangsweise auf Null gebracht werden.
- Genauso kann, wie es oben erörtert wurde, ein 16-Bit-Multiplizierer implementiert werden, wie es durch Tabelle 4 gezeigt ist. Dieser selbe Multiplizierer kann verwendet werden, um Parallelmultiplikationen von Teilwort-Multiplikanden durchzuführen, indem eine Schaltungsanordnung bereitgestellt wird, wie sie in Fig. 8 und Fig. 9 gezeigt ist, um Teilprodukte zwangsweise auf Null zu bringen, und zwar gemäß den Lehren der vorliegenden Erfindung. Keine Modifikation muß an der Teilprodukt-Summenschaltungsanordnung durchgeführt werden. Somit erlaubt ein Modifizieren des durch Tabelle 4 gemäß den Lehren der vorliegenden Erfindung beschriebenen Multiplizierers beispielsweise das Durchführen von zwei parallelen Multiplikationen unter Verwendung von Acht-Bit- (Teilwort-) Multiplikanden, wie durch die nachfolgende Tabelle 10 dargelegt ist: Tabelle 10
- Aus der obigen Tabelle 10 ist zu sehen, daß in einer ersten parallelen Multikation ein Acht-Bit-Multiplikand AAAAAAAA(Basis 2) mit einem Acht-Bit-Multiplikanden CCCCCCCC(Basis 2) multipliziert wird, um ein 16-Bit-Ergebnis EEEEEEEEEEEEEEEE(Basis 2) zu erzeugen. In einer zweiten parallelen Multikation wird ein Acht-Bit-Multiplikand BBBBBBBB(Basis 2) mit einem Acht-Bit-Multiplikanden DDDDDDDD(Basis 2) multipliziert, um ein 16-Bit-Ergebnis FFFFFFFFFFFFFFFF(Basis 2) zu erzeugen. Die Multiplikation von zwei Ganzwort- (16-Bit-) Multiplikanden wird durch den Multiplizierer implementiert, indem nicht sämtliche der Teilprodukte auf Null gezwungen werden.
- Obwohl die obige Beschreibung eine parallele Multiplikation von Halb-Worten zeigt, ist es für Fachleute offensichtlich, daß sowohl die Anzahl der parallelen Multiplikationen, die durchgeführt werden, als auch die Größe des Teilworts variiert werden können, indem die entsprechenden Teilprodukte zwangsweise auf Null gebracht werden.
- Beispielsweise kann der 16-Bit-Multiplizierer, der, wie es durch Tabelle 4 (und/oder Tabelle 10) beschrieben ist, implementiert ist, verwendet werden, um drei gleichzeitige parallele Multiplikationen durchzuführen, indem eine Schaltungsanordnung vorgesehen wird, wie sie in den Fig. 8 und 9 gezeigt ist, um gemäß den Lehren der vorliegenden Erfindung Teilprodukte auf Null zu zwingen. Somit ermöglicht ein Modifizieren des durch Tabelle 4 beschriebenen Multiplizierers gemäß den Lehren der vorliegenden Erfindung beispielsweise das Durchführen von einer parallelen Multiplikation unter Verwendung von Acht-Bit-Multiplikanden und von zwei paralle len Multiplikationen unter Verwendung von Vier-Bit-Multiplikanden, wie es durch die nachfolgende Tabelle 11 implementiert ist: Tabelle 11
- Aus Tabelle 11 oben ist zu sehen, daß in einer ersten parallelen Multikation ein Acht-Bit-Multiplikand AAAAAAAA(Basis 2) mit einem Acht-Bit-Multiplikanden DDDDDDDD(Basis 2) multipliziert wird, um ein 16-Bit-Ergebnis GGGGGGGGGGGGGGGG(gasis 2) zu erzeugen. In einer zweiten parallelen Multikation wird ein Vier-Bit-Multiplikand BBBB(Basis 2) mit einem Vier-Bit-Multiplikanden EEEE(Basis 2) multipliziert, um ein Acht-Bit-Ergebnis HHHHHHHH(Basis 2) zu erzeugen. In einer dritten parallelen Multikation wird ein Vier-Bit-Multiplikand CCCC(Basis 2) mit einem Vier-Bit- Multiplikanden FFFF(gasis 2) multipliziert, um ein Acht- Bit-Ergebnis IIIIIIII(Basis 2) zu erzeugen. Für Fachleute ist es offensichtlich, daß für jedes Teilprodukt, das in Tabelle 11 gezeigt ist, mit einem Wert von Null notwendig ist, ein logisches UND-Gatter mit drei Eingängen oder ein logisches Äquivalent desselben zu haben, damit das Teilprodukt zwangsweise auf Null gebracht werden kann, wenn parallele Multiplikationsoperationen durchgeführt werden. Wenn jedoch eine Mischung von unterschiedlich dimensionierten Partitionierungen verwendet wird, wie es in Tabelle 11 der Fall ist, können bei bestimmten Implementationen unterschiedliche Steuereingänge nötig sein, um unterschiedliche Teilproduktterme auf Null zu zwingen, wie es für Fachleute ersichtlich sein wird.
- Aus der obigen Diskussion kann gesehen werden, daß eine parallele Multiplikation von Teilworten vollständig in einem Multiplizierer implementiert werden kann, indem Teilprodukte eines Multiplizierers selektiv zwangsweise auf Null gebracht werden. Die Größe des Worts, die Anzahl von gleichzeitig durchgeführten parallelen Multiplikationen und die Größe der Teilworte können gemäß den Lehren der vorliegenden Erfindung frei variiert werden.
- Fig. 11 zeigt ein Beispiel für Befehle, die gemäß dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung ausgeführt werden können. Beispielsweise umfaßt ein Befehl 500 ein Feld 501, ein Unterfeld 502 des Felds 501, ein Feld 503, ein Feld 504 und ein Feld 505. Das Feld 501 umfaßt den Operationscode. Das Feld 501 umfaßt beispielsweise eine Addieren-, eine Verschieben-und-Addieren-, eine Subtrahieren-, eine Verschieben-und-Subtrahieren-, eine Verschieben-nachlinks-, eine Verschieben-nach rechts-, eine Multiplizieren- oder irgendeine einer beliebigen Anzahl von anderen Operationen. Das Unterfeld 502 von 501 zeigt an, ob die Operation als Paralleloperationen durchzuführen ist, und, wenn das so ist, was die Größe der Operanden ist. Das Feld 503 zeigt ein erstes Quellenregister an. Das Feld 504 zeigt ein zweites Quellenregister an. Das Feld 505 zeigt ein Zielregister an.
- Wie es in der Technik bekannt ist, stellt der Befehl 500 einen einer großen Anzahl von möglichen Arten und Weisen dar, wie ein Befehl organisiert sein kann. Beispielsweise zeigt der Befehl 510 ein anderes Ausführungsbeispiel, bei dem die Anzeige für die parallele Operation in einem getrennten Feld ist. Insbesondere umfaßt der Befehl 510 ein Feld 511, ein Feld 512, ein Feld 513, ein Feld 514 und ein Feld 515. Das Feld 511 legt den Operationscode dar. Das Feld 511 legt beispielsweise eine Addieren-, eine Verschieben- und-Addieren-, eine Subtrahieren-, eine Verschieben-und-Subtrahieren-, eine Verschieben-nach inks-, eine Verschiebennach-rechts-, eine Multiplizieren- oder irgendeine Anzahl von weiteren möglichen Operationen dar. Das Feld 512 zeigt an, ob die Operation als parallele Operationen durchgeführt werden soll, und, wenn das so ist, was die Größe der Operanden ist. Das Feld 513 zeigt ein erstes Quellenregister an. Das Feld 514 zeigt ein zweites Quellenregister an. Das Feld 515 zeigt ein Zielregister an.
- Wie es in der Technik verstanden werden wird, arbeitet die vorliegende Erfindung auch für andere Multiplizierer, wo Teilprodukte erzeugt werden. Beispielsweise kann die vorliegende Erfindung in einem Booth-codierten Multiplizierer verwendet werden. In einem Booth-codierten Multiplizierer werden weniger Reihen von Teilprodukttermen erzeugt, indem mehr als ein Bit des Multiplizierers (y-Multiplikand) für jede Reihe des Teilproduktterms berücksichtigt wird. Es sei beispielsweise auf John Hennessy & David Patterson, Computer Architecture, A Ouantitative Aporoach. Morgan Kaufmann, 1990, Anhang, Seiten A-39 bis A-49, verwiesen. Wie in dem Fall des obigen Multiplizierers werden die Werte von bestimmten Teilprodukttermen, die durch den Booth-codierten Multiplizierer erzeugt werden, verändert, um die Parallelverarbeitung zu berücksichtigen, wie es für Fachleute ersichtlich sein wird.
- Insbesondere werden bei einem Booth-codierten Multiplizierer die UND-Gatter 301 bis 316, die in den Fig. 8 und 9 gezeigt sind, durch Multiplexer ersetzt. Beispielsweise untersucht ein Booth-codierten Multiplizierer unter Verwendung des Verfahrens nach den "überlappenden Dreiergruppen" drei Bits des Multiplizierers (d. h. y-Multiplikand) jedesmal, statt einem Bit zu einem Zeitpunkt, um eine Reihe von Teilprodukten zu erzeugen, die +x, +2x, -2x, -x oder Null ist, statt einer Reihe von Teilprodukten, die immer +x oder Null ist, wie bei dem in den Fig. 8 und 9 gezeigten Multiplizierer. Dies kann als ein Fünf-zu-Eins-Multiplexer implementiert werden. Der Name "überlappende Dreiergruppen" ist aufgrund der Tatsache vorhanden, daß dieses Verfahren nach drei Bits des Multiplizierers (y-Multiplikand) schaut und zwei Bits des Multiplizierers (y-Multiplikand) für jede Reihe zurückzieht. Die Überlappung tritt auf, wenn, für die nächste Reihe, das niederstwertige Bit der drei Multiplizierer-Bits (y-Multiplikand), die von dieser nächsten Reihe verwendet werden, das höchstwertige Bit der drei Multiplizierer-Bits war, die von der vorherigen Reihe verwendet wurden.
- Um eine parallele Teilwortmultiplikation zu implementieren, werden die Bits des x-Multiplikanden, die nicht dem Teilwortprodukt entsprechen, dessen Teilproduktreihen gebildet werden, auf Null gesetzt. Dies kann mit Multiplexern wie in dem unmodifizierten Booth-codierten Multiplizierer implementiert werden, wodurch die Steuersignale für die Multiplexer modifiziert werden. Das Vorzeichen der Teilproduktreihe kann ebenfalls als zusätzliche Eingabe in die Multiplexer verwendet werden.
Claims (10)
1. Ein Multiplizierer, der Multiplikanden multipliziert,
wobei der Multiplizierer sowohl eine
Ganzwort-Multiplikation von Ganzwort-Multiplikanden als auch eine
parallele Multiplikation von Teilwort-Multiplikanden
implementiert, wobei der Multiplizierer folgende
Merkmale aufweist:
eine Teilprodukterzeugungseinrichtung (301-316) zum
Erzeugen von Teilprodukten aus den Multiplikanden,
wobei die Teilprodukterzeugungseinrichtung (301-316)
ein Array von Logikgattern (301-316) aufweist, wobei
jedes Logikgatter in dem Array von Logikgattern (301 -
316) ein Bit von jedem Multiplikanden empfängt und ein
Teilprodukt erzeugt;
eine Teilproduktsummenschaltungsanordnung (320), die
mit der Teilprodukterzeugungseinrichtung (301-316)
gekoppelt ist, zum Summieren der Teilprodukte, um ein
Ergebnis zu erzeugen;
eine Auswahleinrichtung (321) zum Auswählen von
entweder der Ganzwort-Multiplikation oder einer
parallelen Multiplikation von Teilwort-Multiplikanden; und
eine Teilproduktauswahleinrichtung, die mit der
Teilprodukterzeugungseinrichtung (301-316) und mit der
Auswahleinrichtung (321) gekoppelt ist, um,
ansprechend auf die Auswahleinrichtung (321), die eine
parallele Multiplikation von Teilwort-Multiplikanden
auswählt, ausgewählte Teilprodukte zwangsweise dazu zu
bringen, einen neuen Wert zu haben, wobei die
Teilproduktauswahleinrichtung dritte Eingänge in zumindest
einen Anteil der Logikgatter (301-316) hat.
2. Ein Multiplizierer gemäß Anspruch 1, bei dem die
Teilproduktauswahleinrichtung ansprechend auf die
Auswahleinrichtung (321), die eine parallele Multiplikation
von Teilwort-Multiplikanden auswählt, die ausgewählten
Teilprodukte zwangsweise dazu bringt, einen Wert von
Null zu haben.
3. Ein Multiplizierer gemäß Anspruch 2, bei dem das Array
von Logikgattern (301-316) ein Array von logischen
UND-Gattern (301-316) aufweist.
4. Ein Multiplizierer gemäß Anspruch 2, bei dem, wenn der
Multiplizierer eine Ganzwort-Multiplikation
implementiert, die Teilproduktauswahleinrichtung nicht
jegliche Teilprodukte zwangsweise dazu bringt, einen Wert
von Null zu haben.
5. Ein Multiplizierer gemäß Anspruch 1, der als
Boothcodierter Multiplizierer ausgeführt ist.
6. Ein Verfahren zum Durchführen sowohl einer
Multiplikation von Ganzwort-Multiplikanden als auch einer
parallelen Multiplikation von Teilwort-Multiplikanden unter
Verwendung eines einzigen Hardware-Multiplizierers mit
folgenden Schritten:
(a) Erzeugen von Teilprodukten, wobei der Schritt (a)
unter Verwendung eines Arrays von Logikgattern
(301-316) durchgeführt wird, wobei jedes
Logikgatter in dem Array von Logikgattern (301-316)
ein Teilprodukt erzeugt;
(b) ansprechend auf eine Auswahl, um eine parallele
Multiplikation von Teilwort-Multiplikanden
durchzuführen, zwangsweises Bewirken, daß ausgewählte
Teilprodukte einen neuen Wert haben, durch
Verwenden eines dritten Eingangs in einen Anteil der
Logikgatter (301-316); und
(c) Summieren der Teilprodukte, um ein Ergebnis zu
erzeugen, wobei das Summieren unter Verwendung
einer Teilproduktsummenschaltungsanordnung (320)
durchgeführt wird.
7. Ein Verfahren gemäß Anspruch 6, bei dem der Schritt
(b) ansprechend auf die Auswahl, um eine parallele
Multiplikation von Teilwort-Multiplikanden
durchzuführen, das zwangsweise Bewirken aufweist, daß
Teilprodukte einen Wert von Null haben.
8. Ein Verfahren gemäß Anspruch 7, bei dem der Schritt
(a) unter Verwendung eines Arrays von logischen UND-
Gattern (301-316) durchgeführt wird.
9. Ein Verfahren gemäß Anspruch 8, bei dem der Schritt
(b) , der zwangsweise dazu führt, daß ausgewählte
Teilprodukte einen Wert von Null haben, durch Plazieren
einer logischen Null an Eingängen in einen Anteil der
logischen UND-Gatter (301-316) implementiert wird.
10. Ein Verfahren gemäß Anspruch 7, bei dem im Schritt
(b) , wenn der Multiplizierer eine
Ganzwort-Multiplikation implementiert, nicht jegliche Teilprodukte
zwangsweise dazu gebracht werden, einen Wert von Null
zu haben.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15734693A | 1993-11-23 | 1993-11-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69424626D1 DE69424626D1 (de) | 2000-06-29 |
DE69424626T2 true DE69424626T2 (de) | 2001-01-25 |
Family
ID=22563337
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69428466T Expired - Fee Related DE69428466T2 (de) | 1993-11-23 | 1994-07-05 | Parallele Datenverarbeitung in einem Einzelprozessor |
DE69424626T Expired - Fee Related DE69424626T2 (de) | 1993-11-23 | 1994-07-05 | Parallele Datenverarbeitung in einem Einzelprozessor |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69428466T Expired - Fee Related DE69428466T2 (de) | 1993-11-23 | 1994-07-05 | Parallele Datenverarbeitung in einem Einzelprozessor |
Country Status (4)
Country | Link |
---|---|
US (1) | US5636351A (de) |
EP (2) | EP0654733B1 (de) |
JP (1) | JP3578502B2 (de) |
DE (2) | DE69428466T2 (de) |
Families Citing this family (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3479385B2 (ja) * | 1995-06-29 | 2003-12-15 | 東芝マイクロエレクトロニクス株式会社 | 情報処理装置 |
US5734599A (en) * | 1995-07-07 | 1998-03-31 | Hewlett-Packard Company | Performing a population count using multiplication |
US5953241A (en) | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US5742840A (en) | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US7483935B2 (en) * | 1995-08-16 | 2009-01-27 | Microunity Systems Engineering, Inc. | System and method to implement a matrix multiply unit of a broadband processor |
US6295599B1 (en) | 1995-08-16 | 2001-09-25 | Microunity Systems Engineering | System and method for providing a wide operand architecture |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US7395298B2 (en) * | 1995-08-31 | 2008-07-01 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed data |
CN101794213B (zh) * | 1995-08-31 | 2014-09-17 | 英特尔公司 | 控制移位分组数据的位校正的装置 |
US6385634B1 (en) | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US6092094A (en) * | 1996-04-17 | 2000-07-18 | Advanced Micro Devices, Inc. | Execute unit configured to selectably interpret an operand as multiple operands or as a single operand |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
GB2317469B (en) * | 1996-09-23 | 2001-02-21 | Advanced Risc Mach Ltd | Data processing system register control |
GB2317464A (en) * | 1996-09-23 | 1998-03-25 | Advanced Risc Mach Ltd | Register addressing in a data processing apparatus |
GB2317467B (en) * | 1996-09-23 | 2000-11-01 | Advanced Risc Mach Ltd | Input operand control in data processing systems |
GB2317466B (en) * | 1996-09-23 | 2000-11-08 | Advanced Risc Mach Ltd | Data processing condition code flags |
GB2317465B (en) * | 1996-09-23 | 2000-11-15 | Advanced Risc Mach Ltd | Data processing apparatus registers. |
US5793654A (en) * | 1996-09-30 | 1998-08-11 | Intel Corporation | Saturating alignment shifter |
US5784602A (en) * | 1996-10-08 | 1998-07-21 | Advanced Risc Machines Limited | Method and apparatus for digital signal processing for integrated circuit architecture |
US5996066A (en) * | 1996-10-10 | 1999-11-30 | Sun Microsystems, Inc. | Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions |
US6003125A (en) * | 1997-01-24 | 1999-12-14 | Texas Instruments Incorporated | High performance adder for multiple parallel add operations |
US6223198B1 (en) * | 1998-08-14 | 2001-04-24 | Advanced Micro Devices, Inc. | Method and apparatus for multi-function arithmetic |
GB2381913B (en) * | 1998-02-27 | 2003-06-25 | Mosaid Technologies Inc | A multiplier circuit |
US6088800A (en) | 1998-02-27 | 2000-07-11 | Mosaid Technologies, Incorporated | Encryption processor with shared memory interconnect |
EP0983557B1 (de) | 1998-03-18 | 2019-10-02 | Koninklijke Philips N.V. | Datenverarbeitungsvorrichtung zur parallelen Ausführung von Additionen und Subtraktionen auf gepackte Daten |
US6282633B1 (en) | 1998-11-13 | 2001-08-28 | Tensilica, Inc. | High data density RISC processor |
US6397241B1 (en) * | 1998-12-18 | 2002-05-28 | Motorola, Inc. | Multiplier cell and method of computing |
WO2000049494A1 (en) * | 1999-02-17 | 2000-08-24 | Analog Devices, Inc. | Fast multi-format adder |
AU3884100A (en) * | 1999-03-23 | 2000-10-09 | Sony Electronics Inc. | Adder circuit |
US6449629B1 (en) * | 1999-05-12 | 2002-09-10 | Agere Systems Guardian Corp. | Three input split-adder |
US6654870B1 (en) * | 1999-06-21 | 2003-11-25 | Pts Corporation | Methods and apparatus for establishing port priority functions in a VLIW processor |
US6725360B1 (en) * | 2000-03-31 | 2004-04-20 | Intel Corporation | Selectively processing different size data in multiplier and ALU paths in parallel |
US6748411B1 (en) | 2000-11-20 | 2004-06-08 | Agere Systems Inc. | Hierarchical carry-select multiple-input split adder |
FR2818145B1 (fr) * | 2000-12-18 | 2003-11-28 | Oreal | Compositions cosmetiques antisolaires a base d'un melange synergetique de filtres et utilisations |
AU2002339867A1 (en) * | 2001-09-04 | 2003-03-18 | Microunity Systems Engineering, Inc. | System and method for performing multiplication |
US7430578B2 (en) * | 2001-10-29 | 2008-09-30 | Intel Corporation | Method and apparatus for performing multiply-add operations on packed byte data |
JP2003186567A (ja) * | 2001-12-19 | 2003-07-04 | Matsushita Electric Ind Co Ltd | マイクロプロセッサ |
FR2853425B1 (fr) * | 2003-04-07 | 2006-01-13 | Atmel Corp | Sequence de multiplication efficace pour operandes a grands nombres entiers plus larges que le materiel multiplicateur |
US7099910B2 (en) * | 2003-04-07 | 2006-08-29 | Sun Microsystems, Inc. | Partitioned shifter for single instruction stream multiple data stream (SIMD) operations |
US7668897B2 (en) * | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
US7433912B1 (en) | 2004-02-19 | 2008-10-07 | Sun Microsystems, Inc. | Multiplier structure supporting different precision multiplication operations |
DE102004013484B3 (de) * | 2004-03-18 | 2005-08-11 | Infineon Technologies Ag | Rechenwerk |
DE102004051251B3 (de) | 2004-10-21 | 2006-03-02 | Thomas, Götz, Dipl.-Ing. | Sternförmiger Dekorationsartikel sowie Zuschnitte und Verfahren zu seiner Herstellung |
TWI307874B (en) * | 2005-04-06 | 2009-03-21 | Himax Tech Inc | Shift register circuit |
US7716264B2 (en) * | 2005-08-16 | 2010-05-11 | International Business Machines Corporation | Method and apparatus for performing alignment shifting in a floating-point unit |
US20080282052A1 (en) * | 2005-11-18 | 2008-11-13 | Xiang Ma | Operating Media Devices in Pre-Os Environment |
US20080229065A1 (en) * | 2007-03-13 | 2008-09-18 | Hung Qui Le | Configurable Microprocessor |
US20080229058A1 (en) * | 2007-03-13 | 2008-09-18 | Hung Qui Le | Configurable Microprocessor |
MY177563A (en) * | 2010-04-15 | 2020-09-20 | Univ Malaya | Parallel self-timed adder (pasta) |
JP5664039B2 (ja) * | 2010-09-08 | 2015-02-04 | 富士通株式会社 | リダクション演算装置、処理装置及びコンピュータシステム |
US9329835B1 (en) * | 2011-10-19 | 2016-05-03 | Marvell International Ltd. | Systems and methods for performing mathematical functions |
US10747534B1 (en) * | 2018-11-26 | 2020-08-18 | Xilinx, Inc. | Vectorization of wide integer data paths into parallel operations with value extraction for maintaining valid guard bands |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE2222195A1 (de) * | 1972-05-05 | 1973-11-22 | Siemens Ag | Anordnung zur verarbeitung von operanden von programmen |
US4128872A (en) * | 1977-06-20 | 1978-12-05 | Motorola, Inc. | High speed data shifter array |
US4161784A (en) * | 1978-01-05 | 1979-07-17 | Honeywell Information Systems, Inc. | Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands |
US4418383A (en) * | 1980-06-30 | 1983-11-29 | International Business Machines Corporation | Data flow component for processor and microprocessor systems |
US4707800A (en) * | 1985-03-04 | 1987-11-17 | Raytheon Company | Adder/substractor for variable length numbers |
US4754412A (en) * | 1985-10-07 | 1988-06-28 | Schlumberger Systems & Services, Inc. | Arithmetic logic system using the output of a first alu to control the operation of a second alu |
JPS62229440A (ja) * | 1986-03-31 | 1987-10-08 | Toshiba Corp | 配列乗算器 |
US4864529A (en) * | 1986-10-09 | 1989-09-05 | North American Philips Corporation | Fast multiplier architecture |
JPS63253433A (ja) * | 1987-04-10 | 1988-10-20 | Hitachi Ltd | 演算処理装置 |
US5189636A (en) * | 1987-11-16 | 1993-02-23 | Intel Corporation | Dual mode combining circuitry |
US5047975A (en) * | 1987-11-16 | 1991-09-10 | Intel Corporation | Dual mode adder circuitry with overflow detection and substitution enabled for a particular mode |
KR920003908B1 (ko) * | 1987-11-19 | 1992-05-18 | 미쓰비시뎅끼 가부시끼가이샤 | 승산기(乘算器) |
GB2215496A (en) * | 1988-02-25 | 1989-09-20 | Texas Instruments Ltd | Multi-stage parallel binary adders and/or subtractors |
EP0333884B1 (de) * | 1988-03-19 | 1994-06-08 | Deutsche ITT Industries GmbH | CMOS-Parallel-Serien-Multiplizierschaltung sowie deren Multiplizier- und Addierstufen |
US5126964A (en) * | 1988-04-01 | 1992-06-30 | Digital Equipment Corporation | High performance bit-sliced multiplier circuit |
US4901268A (en) * | 1988-08-19 | 1990-02-13 | General Electric Company | Multiple function data processor |
US4953119A (en) * | 1989-01-27 | 1990-08-28 | Hughes Aircraft Company | Multiplier circuit with selectively interconnected pipelined multipliers for selectively multiplication of fixed and floating point numbers |
US5001662A (en) * | 1989-04-28 | 1991-03-19 | Apple Computer, Inc. | Method and apparatus for multi-gauge computation |
US5020013A (en) * | 1989-09-29 | 1991-05-28 | Cyrix Corporation | Bidirectional variable bit shifter |
US5038314A (en) * | 1989-11-17 | 1991-08-06 | Digital Equipment Corporation | Method and apparatus for correction of underflow and overflow |
US5203002A (en) * | 1989-12-27 | 1993-04-13 | Wetzel Glen F | System with a multiport memory and N processing units for concurrently/individually executing 2N-multi-instruction-words at first/second transitions of a single clock cycle |
JP2523962B2 (ja) * | 1990-08-20 | 1996-08-14 | 松下電器産業株式会社 | 浮動小数点演算装置 |
US5163139A (en) * | 1990-08-29 | 1992-11-10 | Hitachi America, Ltd. | Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions |
US5218564A (en) * | 1991-06-07 | 1993-06-08 | National Semiconductor Corporation | Layout efficient 32-bit shifter/register with 16-bit interface |
US5247471A (en) * | 1991-12-13 | 1993-09-21 | International Business Machines Corporation | Radix aligner for floating point addition and subtraction |
US5257218A (en) * | 1992-01-06 | 1993-10-26 | Intel Corporation | Parallel carry and carry propagation generator apparatus for use with carry-look-ahead adders |
FR2693287B1 (fr) * | 1992-07-03 | 1994-09-09 | Sgs Thomson Microelectronics Sa | Procédé pour effectuer des calculs numériques, et unité arithmétique pour la mise en Óoeuvre de ce procédé. |
US5268855A (en) * | 1992-09-14 | 1993-12-07 | Hewlett-Packard Company | Common format for encoding both single and double precision floating point numbers |
US5327369A (en) * | 1993-03-31 | 1994-07-05 | Intel Corporation | Digital adder and method for adding 64-bit, 16-bit and 8-bit words |
-
1994
- 1994-07-05 DE DE69428466T patent/DE69428466T2/de not_active Expired - Fee Related
- 1994-07-05 DE DE69424626T patent/DE69424626T2/de not_active Expired - Fee Related
- 1994-07-05 EP EP94110410A patent/EP0654733B1/de not_active Expired - Lifetime
- 1994-07-05 EP EP99107195A patent/EP0924601B1/de not_active Expired - Lifetime
- 1994-11-22 JP JP31267194A patent/JP3578502B2/ja not_active Expired - Fee Related
-
1995
- 1995-02-17 US US08/390,908 patent/US5636351A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0924601A3 (de) | 1999-07-21 |
US5636351A (en) | 1997-06-03 |
JP3578502B2 (ja) | 2004-10-20 |
DE69428466T2 (de) | 2002-05-23 |
EP0654733B1 (de) | 2000-05-24 |
EP0924601A2 (de) | 1999-06-23 |
JPH07200260A (ja) | 1995-08-04 |
DE69424626D1 (de) | 2000-06-29 |
DE69428466D1 (de) | 2001-10-31 |
EP0654733A1 (de) | 1995-05-24 |
EP0924601B1 (de) | 2001-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69424626T2 (de) | Parallele Datenverarbeitung in einem Einzelprozessor | |
DE69416283T2 (de) | Überlaufsteuerung für arithmetische Operationen | |
DE69430838T2 (de) | Schaltung und Verfahren zur parallelen Verschiebung und Addition | |
DE60318494T2 (de) | Verfahren, einrichtung und system zur durchführung von kalkulationsoperationen | |
DE69811877T2 (de) | ARITHMETISCHER PROZESSOR, der endliche Felder Arithmetik und ganzzahlige modular Arithmetik kombiniert. | |
DE69429342T2 (de) | Vereinheitlicher gleitkommadatenpfad und ganzzahldatenpfad für einen risc-prozessor | |
DE2900324C2 (de) | ||
DE69712720T2 (de) | Gerät zur schnellen Berechnung tranzedentaler Funktionen | |
DE19540102A1 (de) | Gleitkomma-Recheneinheit mit einer Logik für eine Vierfach-Präzisions-Arithmetik | |
DE69519449T2 (de) | Raumzeigersdatenpfad | |
DE68928376T2 (de) | Vorrichtung zum multiplizieren, teilen und ziehen der quadratwurzel | |
DE69131267T2 (de) | Datenverarbeitungssystem für Daten mit einfacher Präzision und mit doppelter Präzision | |
DE68923262T2 (de) | Zweierkomplementmultiplikation mit einem Vorzeichen-/Grössen-Multiplizierer. | |
DE69624578T2 (de) | Multiplixier-addierungsvorrichtung für gepackte daten | |
DE3789132T2 (de) | Digitale Multipliziererarchitektur mit Dreifachgitter zur Summation von Teilprodukten. | |
DE69130623T2 (de) | Dividierer mit hoher Grundzahl | |
DE102007014808A1 (de) | Multiplizier- und Multiplizier- und Addiereinheit | |
DE3485771T2 (de) | Leistungsfaehiger paralleler vektorprozessor. | |
EP1499954B1 (de) | Berechnung eines ergebnisses einer modularen multiplikation | |
DE69808362T2 (de) | Multiplizierverfahren und Multiplizierschaltung | |
DE69032391T2 (de) | Mehrere Bit umkodierender Multiplizierer | |
DE60316342T2 (de) | Multiplizierer mit nachschlagetabellen | |
DE69324992T2 (de) | Datenverarbeitungssystem und -verfahren zur Berechnung der Summe von Basis und Versatz | |
DE112018000138B4 (de) | Schaltung, System und Verfahren zum Verbinden mehrerer Ausführungseinheiten zum Berechnen eines einzelnen breiten Skalaren Ergebnisses | |
DE68928248T2 (de) | Hochgeschwindigkeits-Multiplizierer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD CO. (N.D.GES.D.STAATES DELAWARE), |
|
8327 | Change in the person/name/address of the patent owner |
Owner name: HEWLETT-PACKARD DEVELOPMENT CO., L.P., HOUSTON, TE |
|
8339 | Ceased/non-payment of the annual fee |