Arithmetik-Logikeinheit

Im Computer, ein Arithmetik-Logikeinheit (Alu) ist ein Kombination Digitaler Schaltung das läuft Arithmetik und Bitgewise Operations an ganze Zahl Binärzahlen.[1][2][3] Dies steht im Gegensatz zu a schwimmende Punkteinheit (FPU), das arbeitet schwimmender Punkt Zahlen. Es ist ein grundlegender Baustein vieler Arten von Computerschaltungen, einschließlich der Zentrale Verarbeitungseinheit (CPU) von Computern, FPUs und Grafikverarbeitungseinheiten (GPUs).[4]
Die Eingaben für eine ALU sind die Daten, auf die man bedient werden soll, genannt Operandenund ein Code, der die Operation angibt, die erledigt werden soll; Die Ausgabe des Alu ist das Ergebnis des durchgeführten Betriebs. In vielen Designs verfügt die ALU auch über Statuseingänge oder -ausgänge oder beides, die Informationen über einen vorherigen Betrieb bzw. den aktuellen Betrieb zwischen Alu und Extern vermitteln Statusregister.
Signale
Ein Alu hat eine Vielzahl von Eingaben und Ausgaben Netze, die die sind Elektrikleiter verwendet, um zu vermitteln Digitale Signale zwischen Alu und externen Schaltkreisen. Wenn ein ALU arbeitet, wenden externe Schaltungen Signale auf die ALU -Eingänge an, und als Reaktion darauf erzeugt und vermittelt die ALU Signale an externe Schaltkreise über ihre Ausgänge.
Daten
Ein grundlegender Alu hat drei parallele Daten Busse bestehend aus zwei Eingaben Operanden (A und B) und eine Ergebnisausgabe (Y). Jeder Datenbus ist eine Gruppe von Signalen, die eine binäre Ganzzahlnummer vermitteln. Typischerweise sind die Busbreiten A, B und Y (die Anzahl der Signale, die jeden Bus umfassen) identisch und stimmen mit dem Native überein Wortgröße der externen Schaltkreise (z. B. die einkapselende CPU oder einen anderen Prozessor).
Opcode
Das Opcode Die Eingabe ist ein paralleler Bus, der dem ALU einen Operationsauswahlcode vermittelt, der ein ist Aufzähliger Wert Dies gibt den gewünschten Arithmetik- oder Logikoperation an, der von der ALU durchgeführt werden soll. Die Opcode -Größe (seine Busbreite) bestimmt die maximale Anzahl unterschiedlicher Operationen, die die ALU ausführen kann. Beispielsweise kann ein Vier-Bit-Opcode bis zu sechzehn verschiedene ALU-Operationen angeben. Im Allgemeinen ist ein Alu -Opcode nicht dasselbe wie a Maschinensprache OpcodeObwohl es in einigen Fällen direkt als Bitfeld innerhalb eines Maschinensprache -Opcode codiert werden kann.
Status
Ausgänge
Die Statusausgaben sind verschiedene einzelne Signale, die ergänzende Informationen zum Ergebnis des aktuellen ALU -Betriebs vermitteln. Allgemeine Alus haben üblicherweise Statussignale wie:
- Durchführen, was die vermittelt tragen aufgrund eines Additionsvorgangs, der Ausleihe aufgrund eines Subtraktionsvorgangs oder des Überlaufbits, der sich aus einem Binärverschiebungsvorgang ergibt.
- Null, was angibt, dass alle Bits von y logisch Null sind.
- Negativ, was das Ergebnis einer arithmetischen Operation angibt, ist negativ.
- Überlauf, was das Ergebnis einer arithmetischen Operation angibt, hat den numerischen Bereich von Y überschritten.
- Parität, was angibt, ob eine gleichmäßige oder ungerade Anzahl von Bits in y logisch ist.
Nach Abschluss jedes ALU -Betrieb Arithmetik mit mehreren Präzisions) oder zur Kontrolle Bedingte Verzweigung. Die Sammlung von Bitregistern, die die Statusausgaben speichern, werden häufig als ein einziges Multi-Bit-Register behandelt, das als "Statusregister" oder "Bedingungscode Register" bezeichnet wird.
Eingänge
Die Statuseingaben ermöglichen dem ALU, dass zusätzliche Informationen bei der Durchführung eines Vorgangs zur Verfügung stehen. In der Regel handelt es sich um ein einzelnes "Übertragung" -Bit, das die gespeicherte Übertragung einer früheren ALU-Operation enthält.
Schaltungsbetrieb

Ein Alu ist ein Kombinationslogik Schaltung, was bedeutet, dass sich seine Ausgänge als Reaktion auf Eingangsänderungen asynchron ändern. Beim normalen Betrieb werden stabile Signale auf alle ALU -Eingänge und, wenn genügend Zeit (bekannt als "bezeichnet, angewendet.Ausbreitungsverzögerung") hat für die Signale weitergegeben, um sich durch die ALU -Schaltung zu verbreiten, das Ergebnis des ALU -Vorgangs erscheint an den ALU -Ausgängen Ausreichende Zeit für die Signale, um sich durch die ALU auszuprobieren, bevor das ALU -Ergebnis probiert.
Im Allgemeinen steuert die externe Schaltkreise eine ALU, indem sie Signale auf seine Eingänge anwenden. Typischerweise beschäftigt die externe Schaltkreise Sequentielle Logik Um den ALU -Betrieb zu kontrollieren, der von a abgestimmt ist Taktsignal von einer ausreichend niedrigen Frequenz, um genug Zeit zu gewährleisten, damit die ALU-Ausgänge unter schlimmsten Fall erledigt werden können.
Zum Beispiel beginnt eine CPU einen ALU -Additionsbetrieb, indem sie Operanden aus ihren Quellen (die normalerweise register) zu den Operandeneingaben des Alu geleitet werden, während die Steuergerät Gleichzeitig wendet er einen Wert auf die Opcode -Eingabe des ALU an und konfiguriert ihn für die Ergänzung. Gleichzeitig leitet die CPU auch die ALU -Ergebnisausgabe an ein Zielregister, das die Summe erhält. Die Eingangssignale des Alu, die bis zur nächsten Uhr stabil gehalten werden, dürfen sich durch das Alu und das Zielregister ausbreiten, während die CPU auf die nächste Uhr wartet. Wenn die nächste Uhr eintrifft, speichert das Zielregister das ALU -Ergebnis. Da der ALU -Betrieb abgeschlossen ist, können die ALU -Eingänge für den nächsten ALU -Betrieb eingerichtet werden.
Funktionen
Eine Reihe grundlegender arithmetischer und bitgewiärer Logikfunktionen werden üblicherweise von Alus unterstützt. Basic, Allzwecke Alus enthält typischerweise diese Operationen in ihr Repertoire:[1][2][3][5]
Rechenoperationen
- Hinzufügen: A und B werden summiert und die Summe erscheint bei y und dem Durchführen.
- Mit Tragen hinzufügen: A, B und das Traging werden summiert und die Summe erscheint bei Y und Carry-out.
- Subtrahieren: B wird von a (oder umgekehrt) abgezogen und der Unterschied erscheint bei y und dem Durchführen. Für diese Funktion ist das Durchführen effektiv ein "Ausleihen" -Izator. Dieser Vorgang kann auch verwendet werden, um die Größen von A und B zu vergleichen. In solchen Fällen kann die Y -Ausgabe vom Prozessor ignoriert werden, der nur an den Statusbits (insbesondere Null und negativ) interessiert ist, die sich aus der Operation ergeben.
- Mit Ausleihen subtrahieren: B wird von a (oder umgekehrt) mit Ausleihen (Übertragung) abgezogen, und der Unterschied erscheint bei y und dem Durchführung (Ausleihen).
- Zwei ergänzt (negieren): A (oder b) wird von Null abgezogen und der Unterschied erscheint bei Y.
- Zuwachs: A (oder b) wird durch eins erhöht und der resultierende Wert erscheint bei Y.
- Abnahme: A (oder b) wird durch eins verringert und der resultierende Wert erscheint bei Y.
- Durchlaufen: Alle Bits von a (oder b) erscheinen bei Y unmodifiziert. Dieser Vorgang wird normalerweise verwendet, um die Parität des Operanden zu bestimmen oder ob sie Null oder negativ ist, oder um den Operanden in ein Prozessorregister zu laden.
Bitime logische Operationen
- UND: Das Bitgewise und von A und B erscheint bei Y.
- ODER: Das Bitgewise oder von A und B erscheint bei Y.
- Exklusiv oder: Das bitweise XOR von A und B erscheint bei Y.
- Einen Ergänzung: Alle Teile von A (oder B) sind invertiert und erscheinen bei Y.
Bit -Shift -Operationen
Typ | Links | Recht |
---|---|---|
Arithmetische Verschiebung | ![]() | ![]() |
Logische Verschiebung | ![]() | ![]() |
Drehen | ![]() | ![]() |
Durch das Tragen drehen | ![]() | ![]() |
Alu Shift Operations bewirkt, dass der Operand a (oder b) nach links oder rechts (je nach Opcode) verlagert wird und der verschobene Operand bei Y erscheint. Einfach Alus kann den Operanden normalerweise nur um eine Bitposition verschieben, während komplexer Alus eingesetzt wird Fassschieber Dadurch können sie den Operanden durch eine willkürliche Anzahl von Bits in einem Vorgang verschieben. In allen Single-Bit-Schaltvorgängen erscheint das Bit aus dem Operanden auf dem Laufenden. Der Wert des Bits, der in den Operanden verschoben wurde, hängt von der Art der Verschiebung ab.
- Arithmetische Verschiebung: Der Operand wird als als behandelt Zwei ergänzt Ganzzahl, was bedeutet, dass das bedeutendste Bit ein "Zeichen" ist und erhalten bleibt.
- Logische Verschiebung: Eine logische Null wird in den Operanden verschoben. Dies wird verwendet, um nicht signierte Ganzzahlen zu verschieben.
- Drehen: Der Operand wird als kreisförmiger Bitpuffer behandelt, sodass seine am wenigsten und signifikantesten Bits effektiv benachbart sind.
- Durch das Tragen drehen: Das Tragebit und der Operand werden gemeinsam als kreisförmiger Bitpuffer behandelt.
Anwendungen
Arithmetik mit mehreren Präzisions
In ganzzahligen arithmetischen Berechnungen,, Arithmetik mit mehreren Präzisions ist ein Algorithmus, der auf Ganzzahlen arbeitet, die größer sind als die Alu -Wortgröße. Zu diesem Zweck behandelt der Algorithmus jeden Operand als eine geordnete Sammlung von Alu-Größe-Fragmenten, die vom meist signifikantesten (ms) bis zu den am wenigsten signifikanten (LS) oder umgekehrt angeordnet sind. Zum Beispiel im Fall eines 8-Bit-Alu die 24-Bit-Ganzzahl 0x123456
würde als Sammlung von drei 8-Bit-Fragmenten behandelt werden: 0x12
(FRAU), 0x34
, und 0x56
(Ls). Da die Größe eines Fragments genau mit der Alu -Wortgröße übereinstimmt, kann der Alu direkt auf diesem "Stück" des Operanden arbeiten.
Der Algorithmus verwendet die ALU, um direkt an bestimmten Operandenfragmenten zu arbeiten und somit ein entsprechendes Fragment (ein "partiell") des Multi-Prescision-Ergebniss zu erzeugen. Jedes Teil wird, wenn er generiert wird, in eine zugehörige Speicherregion geschrieben, die für das Ergebnis mehrerer Präzisionsgebnisse ausgewiesen wurde. Dieser Vorgang wird für alle Operandenfragmente wiederholt, um eine vollständige Sammlung von Teilern zu generieren, was das Ergebnis des Mehrfachverschreibungsvorgangs ist.
In arithmetischen Operationen (z. B. Addition, Subtraktion) beginnt der Algorithmus mit der Aufgabe eines Alu -Betriebs auf den LS -Fragmenten der Operanden, wodurch sowohl ein LS -Teil als auch ein Bit -Bit erzeugt werden. Der Algorithmus schreibt den teilweise bis bezeichneten Speicher, während die Statusmaschine des Prozessors typischerweise das Bit -Out -Bit in ein ALU -Statusregister speichert. Der Algorithmus steigt dann zum nächsten Fragment der Sammlung jedes Operanden fort und ruft zusammen mit dem gespeicherten Bit des vorherigen ALU -Operation eine ALU -Operation auf diesen Fragmenten auf, wodurch ein weiteres (bedeutendere) Teil und ein Bit erzeugt wird. Nach wie vor wird das Carry -Bit im Statusregister gespeichert und das Teil in den festgelegten Speicher geschrieben. Dieser Vorgang wiederholt sich, bis alle Operandenfragmente verarbeitet wurden, was zu einer vollständigen Sammlung von Teilern im Speicher führt, die das arithmetische Ergebnis mit mehreren Präzision umfassen.
Bei Verschiebungsvorgängen mit mehreren Präzisions hängt die Reihenfolge der Operandenfragmentverarbeitung von der Schaltrichtung ab. Bei Linksverschiebungsoperationen werden Fragmente zuerst verarbeitet, da das LS-Bit jedes Teils-das über das gelagerte Tragbit übertragen wird-aus dem MS-Bit des zuvor links verschobenen, weniger signifikanten Operanden erhalten werden. Umgekehrt werden Operanden zuerst MS im Rechtsverschiebungsvorgang verarbeitet, da das MS-Bit jedes Teils aus dem LS-Bit des zuvor rechtsschobenen, signifikanteren Operanden erhalten werden muss.
In bitwizen logischen Operationen (z. B. logisch und, logisch oder) können die Operandenfragmente in beliebiger Reihenfolge verarbeitet werden, da jedes Teil nur von den entsprechenden Operandenfragmenten abhängt (das gespeicherte Bit des vorherigen Alu -Operation wird ignoriert).
Komplexe Operationen
Obwohl eine ALU so konzipiert werden kann, dass sie komplexe Funktionen ausführen, macht die daraus resultierende Komplexität, Kosten, Stromverbrauch und größere Größe dies in vielen Fällen unpraktisch. Infolgedessen sind ALUs häufig auf einfache Funktionen beschränkt, die mit sehr hohen Geschwindigkeiten (d. H. sehr kurze Ausbreitungsverzögerungen) ausgeführt werden können, und die externe Prozessorschaltung ist für die Ausführung komplexer Funktionen verantwortlich, indem eine Folge einfacherer ALU -Operationen orchestriert.
Beispielsweise kann die Berechnung der Quadratwurzel einer Zahl auf verschiedene Weise implementiert werden, abhängig von der Alu -Komplexität:
- Berechnung in a Einzeluhr: Eine sehr komplexe ALU, die eine Quadratwurzel in einer Operation berechnet.
- Berechnungspipeline: Eine Gruppe einfacher Alus, die eine quadratische Wurzel in Stufen berechnet, wobei Zwischenergebnisse durch Alus fließen wie eine Fabrik Fließband. Diese Schaltung kann neue Operanden akzeptieren, bevor sie die vorherigen beenden, und erzeugt Ergebnisse so schnell wie der sehr komplexe Alu, obwohl die Ergebnisse durch die Summe der Ausbreitungsverzögerungen der ALU -Stufen verzögert werden. Weitere Informationen finden Sie im Artikel zu Unterrichtspipelining.
- Iterative Berechnung: Eine einfache ALU, die die Quadratwurzel durch mehrere Schritte unter der Richtung von a berechnet Steuergerät.
Die Implementierungen über den Übergang von schnellsten und teuersten bis langsamsten und am wenigsten kostspielig. Die Quadratwurzel wird in allen Fällen berechnet, aber die Prozessoren mit einfachem ALUs dauern länger, um die Berechnung durchzuführen, da mehrere ALU -Operationen durchgeführt werden müssen.
Implementierung
Ein Alu wird normalerweise entweder als eigenständig Integrierter Schaltkreis (IC), wie die 74181, oder als Teil eines komplexeren IC. Im letzteren Fall wird eine ALU typischerweise durch Synthese von einer Beschreibung in der in geschriebenen Beschreibung instanziiert VHDL, Verilog oder ein anderer Hardware -Beschreibung Sprache. Zum Beispiel beschreibt der folgende VHDL -Code einen sehr einfachen 8 Bit Alu:
Einheit Alu ist Hafen ( - Die ALU-Verbindungen zu externen Schaltkreisen: A : in unterzeichnet(7 bis zu 0); - Operand a B : in unterzeichnet(7 bis zu 0); - Operand b Op : in ohne Vorzeichen(2 bis zu 0); - Opcode Y : aus unterzeichnet(7 bis zu 0)); - Betriebsergebnis Ende Alu; die Architektur Verhalten von Alu ist Start Fall Op ist - Dekodieren Sie den Opcode und führen Sie den Vorgang aus: Wenn "000" => Y <= A + B; -- hinzufügen Wenn "001" => Y <= A - B; - Subtrahieren Wenn "010" => Y <= A - 1; - Abnahme Wenn "011" => Y <= A + 1; -- Zuwachs Wenn "100" => Y <= nicht A; - Ergänzung von 1 Wenn "101" => Y <= A und B; - bitweise und Wenn "110" => Y <= A oder B; - bitweise oder Wenn "111" => Y <= A xor B; - bitweise xor Wenn Andere => Y <= (Andere => 'X'); Ende Fall; Ende Verhalten;
Geschichte
Mathematiker John von Neumann schlug das ALU -Konzept von 1945 in einem Bericht über die Stiftungen für einen neuen Computer namens The vor Edvac.[6]
Die Kosten, die Größe und der Stromverbrauch der elektronischen Schaltkreise waren während der gesamten Kinderschuhe relativ hoch Informationszeitalter. Folglich alle Seriencomputer und viele frühe Computer, wie die PDP-8, hatte eine einfache ALU, die gleichzeitig mit einem Datenbit arbeitete, obwohl sie den Programmierern häufig eine breitere Wortgröße präsentierten. Einer der frühesten Computer, die mehrere diskrete Single-Bit-Alu-Schaltungen haben, war die 1948 Wirbelwind i, in dem sechzehn solche "Mathematikeinheiten" verwendet wurden, um es mit 16-Bit-Wörtern zu ermöglichen.
1967,, Fairchild Einführte die erste ALU, die als integrierter Schaltkreis implementiert wurde, das Fairchild 3800, das aus einem Acht-Bit-ALU mit Akkumulator bestand.[7] Andere integrierte Kreislauf-Alus entstanden bald, darunter Vier-Bit-Alus wie die AM2901 und 74181. Diese Geräte waren normalerweise "Bit Slice"fähig, was bedeutet, dass sie Signale mit" Carry-Look voraus "hatten, die die Verwendung mehrerer miteinander verbundener ALU-Chips erleichterten, um eine ALU mit einer breiteren Wortgröße zu erstellen. Diese Geräte wurden schnell populär und wurden häufig in Minicomputern mit Bit-Slice verwendet.
Mikroprozessoren erschienen in den frühen 1970er Jahren. Obwohl die Transistoren kleiner geworden waren, gab es oft unzureichende Sterblichkeitsraum für eine Wörter-Breite von Alu, und infolgedessen verwendeten einige frühe Mikroprozessoren einen schmalen ALU, der mehrere Zyklen pro Sprachanweisung maschinell benötigte. Beispiele hierfür sind die beliebten Zilog Z80, die acht Bit Ergänzungen mit einem Vier-Bit-Alu durchführten.[8] Im Laufe der Zeit schrumpfte Transistor Geometries weiter, folgte weiter Moores Gesetzund es wurde machbar, auf Mikroprozessoren breitere Alus zu bauen.
Moderne Transistoren für integrierte Schaltung (IC) sind Größenordnungen, die kleiner sind als die der frühen Mikroprozessoren, wodurch es möglich ist, hochkomplexe ALUs für ICs anzupassen. Heute haben viele moderne Alus große Wortbreiten und architektonische Verbesserungen wie z. Fassschieber und Binäre Multiplikatoren Dadurch können sie in einem einzelnen Taktzyklus Operationen ausführen, für die mehrere Vorgänge bei früheren ALUs erforderlich waren.
Alus kann als realisiert werden als mechanisch, elektromechanisch oder elektronisch Schaltungen[9][Fehlgeschlagene Überprüfung] Und in den letzten Jahren wurde die Forschung zu biologischem Alus durchgeführt[10][11] (z.B., Aktin-basierend).[12]
Siehe auch
- Addierer (Elektronik)
- Adressgenerierungseinheit (AGU)
- Last -Store -Einheit
- Binärer Multiplikator
- Ausführungseinheit
Verweise
- ^ a b A.P.Godse; D.A.Godse (2009). "3". Digitales Logikdesign. Technische Veröffentlichungen. S. 9–3. ISBN 978-81-8431-738-1.
- ^ a b Führungserziehung und Ausbildung (LET) 2: Programmierter Text. Hauptquartier, Abteilung der Armee. 2001. S. 371–.
- ^ a b A.P.Godse; D.A.Godse (2009). "Anhang". Digitale Logikkreise. Technische Veröffentlichungen. S. C - 1. ISBN 978-81-8431-650-6.
- ^ "1. Eine Einführung in die Computerarchitektur - Entwerfen eingebetteter Hardware, 2. Ausgabe [Buch]". www.orilly.com. Abgerufen 2020-09-03.
- ^ Horowitz, Paul; Winfield Hill (1989). "14.1.1". Die Kunst der Elektronik (2. Aufl.). Cambridge University Press. S. 990–. ISBN 978-0-521-37095-0.
- ^ Philip Levis (8. November 2004). "Jonathan von Neumann und Edvac" (PDF). cs.berkeley.edu. S. 1, 3. archiviert aus das Original (PDF) am 23. September 2015. Abgerufen 20. Januar, 2015.
- ^ Lee Boyssel (2007-10-12). "Machen Sie Ihre ersten Million (und andere Tipps für angehende Unternehmer)". U. Mich. EECS -Präsentation / ECE -Aufzeichnungen. Archiviert von das Original Am 2012-11-15.
- ^ Ken Shirriff."Der Z-80 hat einen 4-Bit-Alu. So funktioniert es." 2013, righto.com
- ^ Reif, John H. (2009), "Mechanisches Computer: Die rechnerische Komplexität physikalischer Geräte"in Meyers, Robert A. (Hrsg.), Enzyklopädie der Komplexität und Systemwissenschaft, New York, NY: Springer, S. 5466–5482, doi:10.1007/978-0-387-30440-3_325, ISBN 978-0-387-30440-3, abgerufen 2020-09-03
- ^ Lin, Chun-liang;Kuo, Ting-yu;Li, Wei-Xian (2018-08-14). "Synthese der Kontrolleinheit für zukünftige Biokomputer". Journal of Biological Engineering. 12 (1): 14. doi:10.1186/s13036-018-0109-4. ISSN 1754-1611. PMC 6092829. PMID 30127848.
- ^ Gerd Hg Moe-Chehrens. "Der biologische Mikroprozessor oder wie man einen Computer mit biologischen Teilen baut".
- ^ Das, Biplab;Paul, Avijit Kumar;De, Debashis (2019-08-16). "Ein unkonventionelles Konstruktion und Berechnung von arithmetischen Logikeinheiten und Computing in Actin Quantum Cellular Automata". Mikrosystemtechnologien. doi:10.1007/s00542-019-04590-1. ISSN 1432-1858. S2CID 202099203.
Weitere Lektüre
- Hwang, Enoch (2006). Digital Logic und Mikroprozessordesign mit VHDL. Thomson. ISBN 0-534-46593-5.
- Stallings, William (2006). Computerorganisation & Architektur: Entwerfen für die Leistung (7. Aufl.).Pearson Prentice Hall. ISBN 0-13-185644-8.