Arithmetik-Logikeinheit - Arithmetic logic unit

Eine symbolische Darstellung einer ALU und ihrer Eingangs- und Ausgangssignale, angezeigt durch Pfeile, die in die bzw. aus der ALU zeigen. Jeder Pfeil repräsentiert ein oder mehrere Signale. Steuersignale treten von links ein und Statussignale treten rechts aus; Daten fließen von oben nach unten.

Beim Rechnen ist eine arithmetisch-logische Einheit (ALU) eine kombinatorische digitale Schaltung , die arithmetische und bitweise Operationen an ganzzahligen Binärzahlen durchführt . Dies steht im Gegensatz zu einer Gleitkommaeinheit (FPU), die mit Gleitkommazahlen arbeitet . Es ist ein grundlegender Baustein vieler Arten von Computerschaltungen, einschließlich der zentralen Verarbeitungseinheit (CPU) von Computern, FPUs und Grafikverarbeitungseinheiten (GPUs).

Die Eingaben in eine ALU sind die zu bearbeitenden Daten, Operanden genannt , und ein Code, der die auszuführende Operation anzeigt; die Ausgabe der ALU ist das Ergebnis der ausgeführten Operation. In vielen Designs hat die ALU auch Statuseingänge oder -ausgänge oder beides, die Informationen über eine vorherige Operation bzw. die aktuelle Operation zwischen der ALU und den externen Statusregistern übermitteln .

Signale

Eine ALU hat eine Vielzahl von Eingabe- und Ausgabenetzen , welche die sind elektrische Leiter verwendet zu vermitteln digitale Signale zwischen den ALU und externen Schaltkreisen. Wenn eine ALU in Betrieb ist, legen externe Schaltungen Signale an die ALU-Eingänge an, und als Reaktion darauf erzeugt die ALU Signale und leitet sie über ihre Ausgänge an externe Schaltungen weiter.

Daten

Eine grundlegende ALU verfügt über drei parallele Datenbusse , bestehend aus zwei Eingangsoperanden ( A und B ) und einen Ergebnisausgang ( Y ). Jeder Datenbus ist eine Gruppe von Signalen, die eine binäre ganze Zahl überträgt. Typischerweise sind die A-, B- und Y-Busbreiten (die Anzahl von Signalen, die jeden Bus umfassen) identisch und stimmen mit der nativen Wortgröße der externen Schaltung (zB der kapselnden CPU oder eines anderen Prozessors) überein .

Opcode

Der Opcode- Eingang ist ein paralleler Bus, der der ALU einen Operationsauswahlcode übermittelt, der ein aufgezählter Wert ist , der die gewünschte arithmetische oder logische Operation angibt, die von der ALU ausgeführt werden soll. Die Opcode-Größe (seine Busbreite) bestimmt die maximale Anzahl verschiedener Operationen, die die ALU ausführen kann; beispielsweise kann ein 4-Bit-Opcode bis zu sechzehn verschiedene ALU-Operationen spezifizieren. Im Allgemeinen ist ein ALU-Opcode nicht dasselbe wie ein Maschinensprachen-Opcode , obwohl er in einigen Fällen direkt als Bitfeld innerhalb eines Maschinensprachen-Opcodes codiert sein kann.

Status

Ausgänge

Die Statusausgänge sind verschiedene Einzelsignale, die ergänzende Informationen über das Ergebnis der aktuellen ALU-Operation übermitteln. Allzweck-ALUs haben normalerweise Statussignale wie:

  • Carry-out , das den aus einer Additionsoperation resultierenden Übertrag , den aus einer Subtraktionsoperation resultierenden Borrow oder das aus einer binären Schiebeoperation resultierende Überlaufbit überträgt .
  • Zero , was anzeigt, dass alle Bits von Y logisch Null sind.
  • Negative , was angibt, dass das Ergebnis einer arithmetischen Operation negativ ist.
  • Overflow , der angibt, dass das Ergebnis einer arithmetischen Operation den Zahlenbereich von Y überschritten hat.
  • Parität , die angibt, ob eine gerade oder ungerade Anzahl von Bits in Y logisch Eins sind.

Nach Beendigung jeder ALU-Operation werden die Statusausgangssignale normalerweise in externen Registern gespeichert, um sie für zukünftige ALU-Operationen (zB um eine Arithmetik mit mehrfacher Genauigkeit zu implementieren ) oder zum Steuern einer bedingten Verzweigung verfügbar zu machen . Die Sammlung von Bitregistern, die die Statusausgaben speichern, wird oft als ein einzelnes Mehrbitregister behandelt, das als "Statusregister" oder "Zustandscoderegister" bezeichnet wird.

Eingänge

Über die Statuseingänge können der ALU bei der Durchführung einer Operation zusätzliche Informationen zur Verfügung gestellt werden. Typischerweise ist dies ein einzelnes "Übertrags"-Bit, das der gespeicherte Übertrag von einer vorherigen ALU-Operation ist.

Schaltungsbetrieb

Die kombinatorische Logikschaltung der integrierten Schaltung 74181 , bei der es sich um eine einfache 4-Bit-ALU . handelt

Eine ALU ist eine kombinatorische Logikschaltung , was bedeutet, dass sich ihre Ausgänge als Reaktion auf Eingangsänderungen asynchron ändern. Im Normalbetrieb werden stabile Signale an alle ALU-Eingänge angelegt und wenn genügend Zeit (bekannt als " Ausbreitungsverzögerung ") verstrichen ist, damit sich die Signale durch die ALU-Schaltung ausbreiten können, erscheint das Ergebnis der ALU-Operation an der ALU Ausgänge. Die mit der ALU verbundene externe Schaltung ist dafür verantwortlich, die Stabilität der ALU-Eingangssignale während des gesamten Vorgangs sicherzustellen und den Signalen ausreichend Zeit zu geben, sich durch die ALU auszubreiten, bevor das ALU-Ergebnis abgetastet wird.

Im Allgemeinen steuert eine externe Schaltung eine ALU durch Anlegen von Signalen an ihre Eingänge. Typischerweise verwendet die externe Schaltung eine sequentielle Logik , um den ALU-Betrieb zu steuern, der durch ein Taktsignal einer ausreichend niedrigen Frequenz stimuliert wird, um genügend Zeit für die ALU-Ausgänge zu gewährleisten, sich unter ungünstigsten Bedingungen einzuschwingen.

Beispielsweise beginnt eine CPU eine ALU-Additionsoperation, indem sie Operanden von ihren Quellen (die normalerweise Register sind) an die Operandeneingänge der ALU weiterleitet, während die Steuereinheit gleichzeitig einen Wert an den Opcode-Eingang der ALU anlegt und ihn so konfiguriert, dass eine Addition durchgeführt wird. Gleichzeitig leitet die CPU auch die ALU-Ergebnisausgabe an ein Zielregister, das die Summe empfängt. Die Eingangssignale der ALU, die bis zum nächsten Takt stabil gehalten werden, können sich durch die ALU und zum Zielregister ausbreiten, während die CPU auf den nächsten Takt wartet. Wenn der nächste Takt ankommt, speichert das Zielregister das ALU-Ergebnis, und da die ALU-Operation abgeschlossen ist, können die ALU-Eingänge für die nächste ALU-Operation eingerichtet werden.

Funktionen

Eine Reihe grundlegender arithmetischer und bitweiser Logikfunktionen werden allgemein von ALUs unterstützt. Grundlegende Allzweck-ALUs enthalten in der Regel diese Operationen in ihrem Repertoire:

Rechenoperationen

  • Add : A und B werden summiert und die Summe erscheint bei Y und Übertrag.
  • Addieren mit Carry : A, B und Carry-In werden aufsummiert und die Summe erscheint bei Y und Carry-Out.
  • Subtrahieren : B wird von A subtrahiert (oder umgekehrt) und die Differenz erscheint bei Y und Übertrag. Für diese Funktion ist Carry-Out effektiv ein "Borrow"-Indikator. Diese Operation kann auch verwendet werden, um die Größen von A und B zu vergleichen; in solchen Fällen kann der Y-Ausgang vom Prozessor ignoriert werden, der nur an den Statusbits (insbesondere Null und negativ) interessiert ist, die sich aus der Operation ergeben.
  • Subtrahieren mit Borgen : B wird von A (oder umgekehrt) mit Borgen (Übertragen) subtrahiert und die Differenz erscheint bei Y und Übertrag (Ausleihe).
  • Zweierkomplement (negiert) : A (oder B) wird von Null abgezogen und die Differenz erscheint bei Y.
  • Inkrement : A (oder B) wird um eins erhöht und der resultierende Wert erscheint bei Y.
  • Dekrementieren : A (oder B) wird um eins verringert und der resultierende Wert erscheint bei Y.
  • Pass through : Alle Bits von A (oder B) erscheinen bei Y unverändert. Diese Operation wird typischerweise verwendet, um die Parität des Operanden zu bestimmen oder ob er null oder negativ ist, oder um den Operanden in ein Prozessorregister zu laden.

Bitweise logische Operationen

  • UND : das bitweise UND von A und B erscheint bei Y.
  • ODER : das bitweise ODER von A und B erscheint bei Y.
  • Exklusiv-ODER : das bitweise XOR von A und B erscheint bei Y.
  • Einerkomplement : Alle Bits von A (oder B) werden invertiert und erscheinen bei Y.

Bit-Shift-Operationen

Beispiele für Bitverschiebungen für eine Acht-Bit-ALU
Art Links Recht
Arithmetische Verschiebung Logisch nach links drehen.svg Arithmetisch nach rechts drehen.svg
Logische Verschiebung Logisch nach links drehen.svg Logisch nach rechts drehen.svg
Drehen Nach links drehen.svg Nach rechts drehen.svg
Durch das Tragen drehen Nach links drehen durch carry.svg Nach rechts drehen durch carry.svg

ALU-Schiebeoperationen bewirken, dass Operand A (oder B) nach links oder rechts verschoben wird (je nach Opcode) und der verschobene Operand erscheint bei Y. Einfache ALUs können den Operanden normalerweise nur um eine Bitposition verschieben, während komplexere ALUs Barrel-Shifter verwenden , die erlauben Sie ihnen, den Operanden um eine beliebige Anzahl von Bits in einer Operation zu verschieben. Bei allen Einzelbit-Schiebeoperationen erscheint das aus dem Operanden herausgeschobene Bit beim Übertrag; der Wert des in den Operanden verschobenen Bits hängt von der Art der Verschiebung ab.

  • Arithmetische Verschiebung : Der Operand wird alsGanzzahl im Zweier-Komplement behandelt, was bedeutet, dass das höchstwertige Bit ein "Vorzeichen"-Bit ist und erhalten bleibt.
  • Logische Verschiebung : Eine logische Null wird in den Operanden verschoben. Dies wird verwendet, um vorzeichenlose Ganzzahlen zu verschieben.
  • Rotieren : Der Operand wird als Ringpuffer von Bits behandelt, sodass seine niederwertigsten und höchstwertigen Bits effektiv benachbart sind.
  • Durch Übertrag rotieren : Übertragsbit und Operand werden gemeinsam als Ringpuffer von Bits behandelt.

Anwendungen

Multi-Präzisions-Arithmetik

Bei ganzzahligen arithmetischen Berechnungen ist die Mehrfachpräzisionsarithmetik ein Algorithmus, der mit ganzen Zahlen arbeitet, die größer als die ALU-Wortgröße sind. Dazu behandelt der Algorithmus jeden Operanden als eine geordnete Sammlung von Fragmenten der Größe ALU, die vom höchstwertigen (MS) zum niederwertigsten (LS) oder umgekehrt angeordnet sind. Im Fall einer 8-Bit-ALU würde die 24-Bit-Ganzzahl 0x123456beispielsweise als eine Sammlung von drei 8-Bit-Fragmenten behandelt: 0x12(MS) 0x34, und 0x56(LS). Da die Größe eines Fragments genau der Wortgröße der ALU entspricht, kann die ALU direkt mit diesem "Stück" des Operanden arbeiten.

Der Algorithmus verwendet die ALU, um direkt an bestimmten Operandenfragmenten zu arbeiten und somit ein entsprechendes Fragment (ein "Teil") des Mehrfachpräzisionsergebnisses zu erzeugen. Jeder Teil wird, wenn er erzeugt wird, in einen zugeordneten Speicherbereich geschrieben, der für das Ergebnis mit Mehrfachpräzision bestimmt wurde. Dieser Vorgang wird für alle Operandenfragmente wiederholt, um eine vollständige Sammlung von Teilwerten zu erzeugen, die das Ergebnis der Mehrfachpräzisionsoperation ist.

Bei arithmetischen Operationen (zB Addition, Subtraktion) beginnt der Algorithmus mit dem Aufrufen einer ALU-Operation an den LS-Fragmenten der Operanden, wodurch sowohl ein LS-Partial- als auch ein Übertrags-Ausführungsbit erzeugt werden. Der Algorithmus schreibt den Teil in einen bestimmten Speicher, während die Zustandsmaschine des Prozessors typischerweise das Übertrags-Ausführungsbit in einem ALU-Statusregister speichert. Der Algorithmus schreitet dann zum nächsten Fragment der Sammlung jedes Operanden fort und ruft eine ALU-Operation an diesen Fragmenten zusammen mit dem gespeicherten Übertragsbit von der vorherigen ALU-Operation auf, wodurch ein weiterer (höherwertiger) Teil und ein Übertragsausgangsbit erzeugt werden. Wie zuvor wird das Übertragsbit im Statusregister gespeichert und der Teil wird in den bezeichneten Speicher geschrieben. Dieser Vorgang wiederholt sich, bis alle Operandenfragmente verarbeitet wurden, was zu einer vollständigen Sammlung von Teilwerten im Speicher führt, die das arithmetische Ergebnis mit mehreren Genauigkeiten umfassen.

Bei Verschiebeoperationen mit mehrfacher Genauigkeit hängt die Reihenfolge der Operandenfragmentverarbeitung von der Verschieberichtung ab. Bei Linksverschiebungsoperationen werden Fragmente zuerst LS verarbeitet, da das LS-Bit jedes Partials, das über das gespeicherte Übertragsbit übermittelt wird, aus dem MS-Bit des zuvor links verschobenen, niederwertigen Operanden gewonnen werden muss. Umgekehrt werden Operanden bei Rechtsverschiebungsoperationen MS zuerst verarbeitet, da das MS-Bit jedes Teils aus dem LS-Bit des zuvor rechts verschobenen höherwertigen Operanden gewonnen werden muss.

Bei bitweisen logischen Operationen (zB logisches UND, logisches ODER) können die Operandenfragmente in beliebiger Reihenfolge verarbeitet werden, da jeder Teil nur von den entsprechenden Operandenfragmenten abhängt (das gespeicherte Übertragsbit der vorherigen ALU-Operation wird ignoriert).

Komplexe Operationen

Obwohl eine ALU entworfen werden kann, um komplexe Funktionen auszuführen, machen die resultierende höhere Schaltungskomplexität, Kosten, Leistungsaufnahme und größere Größe dies in vielen Fällen unpraktisch. Folglich sind ALUs oft auf einfache Funktionen beschränkt, die mit sehr hohen Geschwindigkeiten (dh sehr kurzen Ausbreitungsverzögerungen) ausgeführt werden können, und die externe Prozessorschaltung ist für die Durchführung komplexer Funktionen durch Orchestrieren einer Folge einfacherer ALU-Operationen verantwortlich.

Zum Beispiel kann die Berechnung der Quadratwurzel einer Zahl je nach ALU-Komplexität auf verschiedene Weise implementiert werden:

  • Berechnung in einer einzigen Uhr : eine sehr komplexe ALU, die eine Quadratwurzel in einer Operation berechnet.
  • Berechnungs - Pipeline : eine Gruppe von einfachen ALUsdie in Stufen mit Zwischenergebnissendie durch ALUs eine Quadratwurzel berechnet angeordnet wie eine Fabrik Produktionslinie . Diese Schaltung kann neue Operanden akzeptieren, bevor die vorherigen beendet werden, und erzeugt Ergebnisse so schnell wie die sehr komplexe ALU, obwohl die Ergebnisse um die Summe der Ausbreitungsverzögerungen der ALU-Stufen verzögert werden. Weitere Informationen finden Sie im Artikel zum Anweisungspipelining .
  • Iterative Berechnung : Eine einfache ALU, die unter Anleitung einer Steuereinheit die Quadratwurzel in mehreren Schritten berechnet .

Die obigen Implementierungen gehen von der schnellsten und teuersten zur langsamsten und kostengünstigsten über. Die Quadratwurzel wird in allen Fällen berechnet, aber Prozessoren mit einfachen ALUs benötigen länger für die Berechnung, da mehrere ALU-Operationen durchgeführt werden müssen.

Implementierung

Eine ALU wird normalerweise entweder als eigenständiger integrierter Schaltkreis (IC) wie der 74181 oder als Teil eines komplexeren IC implementiert . Im letzteren Fall wird eine ALU typischerweise instanziiert, indem sie aus einer in VHDL , Verilog oder einer anderen Hardwarebeschreibungssprache geschriebenen Beschreibung synthetisiert wird . Der folgende VHDL-Code beschreibt beispielsweise eine sehr einfache 8-Bit- ALU:

entity alu is
port (  -- the alu connections to external circuitry:
  A  : in signed(7 downto 0);   -- operand A
  B  : in signed(7 downto 0);   -- operand B
  OP : in unsigned(2 downto 0); -- opcode
  Y  : out signed(7 downto 0));  -- operation result
end alu;

architecture behavioral of alu is
begin
 case OP is  -- decode the opcode and perform the operation:
 when "000" =>  Y <= A + B;   -- add
 when "001" =>  Y <= A - B;   -- subtract
 when "010" =>  Y <= A - 1;   -- decrement
 when "011" =>  Y <= A + 1;   -- increment
 when "100" =>  Y <= not A;   -- 1's complement
 when "101" =>  Y <= A and B; -- bitwise AND
 when "110" =>  Y <= A or B;  -- bitwise OR
 when "111" =>  Y <= A xor B; -- bitwise XOR
 when others => Y <= (others => 'X');
 end case; 
end behavioral;

Geschichte

Der Mathematiker John von Neumann schlug das ALU-Konzept 1945 in einem Bericht über die Grundlagen für einen neuen Computer namens EDVAC vor .

Die Kosten, die Größe und der Stromverbrauch elektronischer Schaltungen waren während der Kindheit des Informationszeitalters relativ hoch . Folglich hatten alle seriellen Computer und viele frühe Computer, wie der PDP-8 , eine einfache ALU, die mit jeweils einem Datenbit operierte, obwohl sie Programmierern oft eine größere Wortgröße boten. Einer der frühesten Computer mit mehreren diskreten Einzelbit-ALU-Schaltungen war der 1948er Whirlwind I , der sechzehn solcher "Mathematikeinheiten" einsetzte, um mit 16-Bit-Wörtern arbeiten zu können.

1967 stellte Fairchild die erste als integrierte Schaltung implementierte ALU vor, den Fairchild 3800, bestehend aus einer 8-Bit-ALU mit Akkumulator. Bald tauchten andere ALUs mit integrierten Schaltkreisen auf, darunter Vier-Bit-ALUs wie die Am2901 und 74181 . Diese Geräte waren typischerweise " Bit-Slice "-fähig, was bedeutet, dass sie "Carry-Look-Ahead"-Signale hatten, die die Verwendung mehrerer miteinander verbundener ALU-Chips erleichterten, um eine ALU mit einer größeren Wortgröße zu erzeugen. Diese Geräte wurden schnell populär und wurden häufig in Bit-Slice-Minicomputern verwendet.

Mikroprozessoren kamen in den frühen 1970er Jahren auf den Markt. Obwohl die Transistoren kleiner geworden waren, war für eine ALU mit voller Wortbreite oft nicht genügend Chipplatz vorhanden, und als Ergebnis verwendeten einige frühe Mikroprozessoren eine schmale ALU, die mehrere Zyklen pro Maschinensprachenbefehl erforderte. Beispiele hierfür sind der beliebte Zilog Z80 , der Acht-Bit-Additionen mit einer Vier-Bit-ALU durchführte. Im Laufe der Zeit schrumpften die Transistorgeometrien gemäß dem Mooreschen Gesetz weiter , und es wurde möglich, breitere ALUs auf Mikroprozessoren zu bauen.

Moderne Transistoren mit integrierten Schaltkreisen (IC) sind um Größenordnungen kleiner als die der frühen Mikroprozessoren, was es ermöglicht, hochkomplexe ALUs auf ICs zu montieren. Heutzutage haben viele moderne ALUs große Wortbreiten und Architekturverbesserungen wie Barrel-Shifter und binäre Multiplizierer , die es ihnen ermöglichen, in einem einzigen Taktzyklus Operationen durchzuführen, die bei früheren ALUs mehrere Operationen erfordert hätten.

ALUs als realisiert werden mechanische , elektromechanische oder elektronische Schaltungen und in den letzten Jahren die Erforschung der biologischen ALUs durchgeführt worden ist (zB Aktin -Basis).

Siehe auch

Verweise

Weiterlesen

Externe Links