Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
How Computers Calculate - the ALU: Crash Course Computer Science #5
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 78 Zeilen
- Hi, mein Name ist Carrie Ann und Du schaust den "Crash Course Computer Science" In der letzten Folge haben wir darüber gesprochen, wie Zahlen im Binärsystem dargestellt werden können.
- Zum Beispiel ist 00101010 als Dezimalzahl dargestellt 42. Die Darstellung und Speicherung von Zahlen ist eine wichtige Funktion eines Computers, aber das eigentliche Ziel sind Berechnungen
- oder anders gesagt Zahlen auf strukturierte und zielgerichtete Weise zu manipulieren, zum Beispiel die Addition von zwei Zahlen. Diese Operationen werden von der Arithmetik- und Logikeinheit eines Computers durchgeführt,
- aber die meisten Leute nennen Sie entsprechend der üblichen Abkürzung: die ALU (Arithmetical Logical Unit). Die ALU ist das mathematische Gehirn eines Computers.
- Wenn Sie das Design und die Funktion einer ALU verstehen, verstehen Sie einen grundlegenden Teil moderner Computer. Es ist DAS Ding was sämtliche Rechnungen in einem Computer erledigt,
- also wird die ALU im Grunde von allem im Computer verwendet. Schauen Sie sich zuerst diese Schönheit an.
- Dies ist vielleicht die berühmteste ALU aller Zeiten, die Intel 74181. Als sie 1970 veröffentlicht wurde, war ie
- die erste komplette ALU, die vollständig in einen einzelnen Chip passte - was zu dieser Zeit eine enorme technische Leistung war.
- Heute nutzen wir diese booleschen Logikgatter, von denen wir letzte Woche erfahren haben um einen einfachen ALU-Schaltkreis mit der gleichen Funktionalität wie der 74181 zu bauen.
- Und in den nächsten Folgen verwenden wir diesen Schaltkreis, um einen Computer von Grund auf neu zu konstruieren. Also wird es ein bisschen kompliziert,
- aber ich denke ihr könnt damit umgehen. INTRO
- Eine ALU beinhaltet in Wirklichkeit zwei Dinge in einem - es gibt eine Recheneinheit und eine Logikeinheit. Beginnen wir mit der Recheneinheit, die für alle numerischen Operationen
- in einem Computer zuständig ist, wie z.B. Addition und Subtraktion. Sie macht auch ein paar andere einfache Dinge wie z.B. eins zu einer Zahl hinzuaddieren, was als Inkrementierungsoperation bezeichnet wird, aber darüber werden wir später sprechen.
- Heute konzentrieren wir uns auf das Pièce de Résistance, die Crème de la Crème der Operationen, die fast allem zugrunde liegt, was ein Computer sonst noch tut - zwei Zahlen addieren.
- Wir könnten diese Schaltung vollständig aus einzelne Transistoren bauen, aber das würde sehr schnell verwirrend.
- Stattdessen können wir, wie wir in Folge 3 beschrieben haben, ein hohes Maß an Abstraktion verwenden und unsere Komponenten aus Logikgattern erstellen. In diesem Fall: AND, OR, NOT- und XOR-Gatter.
- Die einfachste Additionsschaltung, die wir erstellen können, nimmt zwei Binärziffern und addiert diese. Wir haben also zwei Eingänge, A und B, und einen Ausgang, der die Summe dieser beiden Zahlen ist.
- Zur Verdeutlichung: A, B und der Ausgang sind allesamt Einzelbits. Es gibt nur vier mögliche Eingabekombinationen.
- Die ersten drei sind: 0 + 0 = 0 1 + 0 = 1 0 + 1 = 1
- Denke daran, dass im Binären 1 dasselbe ist wie "wahr" und 0 ist dasselbe wie "falsch". Diese Eingangskombinationen entsprechen also genau der Boole'schen Logik eines XOR-Gatters, und wir können dieses Gatter als
- unseren 1-Bit-Addierer verwenden. Allerdings ist die vierte Eingabekombination, 1 + 1, offensichtlich ein Sonderfall. 1 + 1 ist 2
- aber es gibt keine Ziffer 2 im Binären. Wie wir bereits in der letzten Folge besprochen haben, ist das Ergebnis 0 und die 1 wird in die nächste Spalte übernommen. Die Summe ist also in Wirklichkeit 1 0 im Binären.
- Jetzt ist die Ausgabe unseres XOR-Gatters teilweise korrekt - 1 plus 1, gibt 0 aus. Für das Übertragsbit benötigen wir jedoch einen zusätzlichen Ausgang.
- Das Übertragsbit ist nur dann "wahr", wenn die Eingänge 1 UND 1 sind, da dies der einzige Zeitpunkt ist zu dem das Ergebnis (zwei) größer ist als 1 Bit speichern kann .. und glücklicherweise haben wir
- ein Gatter dafür! Ein UND-Gatter, dessen Ausgang nur wahr ist wenn beide Eingänge wahr sind, also werden wir auch dieses Gatter zu unserer Schaltung hinzufügen.
- Und das war's. Diese Schaltung wird als Halbaddierer bezeichnet. Die Schaltung ist nicht besonders kompliziert - nur zwei logische Gatter - aber wir wollen auch in diesem Level
- von Details abstrahieren und unseren neu zusammengebauten Halbaddierer als eigene Komponente mit zwei Eingängen - A und B - und zwei Ausgänge, die Summe und das Übertragsbit, betrachten.
- Dies bringt uns auf eine andere Abstraktionsebene ... heh ... ich habe das Gefühl, dass ich das oft sage. Ich frage mich, ob das zu einer Gewohnheit werden wird...
- Wie auch immer, wenn Sie mehr als 1 + 1 hinzufügen möchten brauchen wir einen "Volladdierer". Der Halbaddierer hat uns ein Übertragsbit als Ausgang hinterlassen.
- Das heißt, wenn wir uns die nächste Spalte in einer Multiplikation mit mehreren Spalten ansehen und jede Spalte links davon müssen wir drei Bits addieren, nicht nur zwei.
- Ein Volladdierer ist etwas komplizierter - er benötigt drei Bits als Eingabe: A, B und C. Das bedeutet die maximal mögliche Eingabe ist 1 + 1 + 1,
- was gleich 1, mit dem Übertrag 1 ist, wir brauchen also wie bisher zwei Ausgaben: sum und carry (Übertrag). Wir können einen Volladdierer aus Halbaddierern aufbauen. Dazu verwenden wir einen Halbaddierer, um A und B zu addieren
- genau wie vorhin - aber dann leiten wird das Ergebnis und C als Eingaben in einen zweiten Halbaddierer weiter. Zuletzt benötigen wir ein ODER-Gatter, um zu überprüfen, ob eines der Übertragbits wahr ist.
- Das war's, wir haben soeben einen Volladdierer erstellt! Auch hier können wir eine Stufe in der Abstraktion aufsteigen und diesen Volladdierer als eine eigene Komponente betrachten. Er nimmt drei Eingaben, addiert sie und gibt
- die Summe und den Übertrag aus, falls vorhanden. Mit unseren neuen Komponenten können wir jetzt eine Schaltung aufbauen, die zwei 8-Bit-Zahlen
- - Nennen wir sie A und B - als Eingabe akzeptiert sie dann addiert. Beginnen wir mit dem allerersten Bit von
- A und B, die wir als A0 und B0 bezeichnen. Zunächst muss hier kein Carry-Bit berücksichtigt werden, weil dies unsere erste Addition ist. Also können wir unseren Halbaddierer verwenden, um diese
- zwei Bits zu addieren. Die Ausgabe ist sum0. Nun addieren wir A1 und B1. Es ist möglich, dass es einen Übertrag von der vorherigen Addition von A0 und B0 gab, also brauchen wir diesmal
- einen Volladdierer, der auch den Übertrag addiert. Wir geben dieses Ergebnis als sum1 aus. Dann nehmen wir den Übertrag von diesem Volladdierer und führen ihn in den nächsten Volladdierer, der
- A2 und B2 addiert. Und wir machen das immer so weiter, bis alle 8 Bits hinzugefügt wurden. Beachten Sie, wie die Übertragsbits nach vorne "rieseln" (ripple) an jeden nachfolgenden Addierer. Aus diesem Grund
- wird er als 8-Bit-Carry--Ripple-Addierer bezeichnet. Sie sehen auch einen Carry-Bit-Ausgang an dem letzten Volladierer. Wenn es einen Übertrag in das 9. Bit gibt, bedeutet dies, dass die Summe der beiden Zahlen zu groß ist, um in 8 Bits zu passen.
- Dies wird als Überlauf bezeichnet. Im Allgemeinen tritt ein "Überlauf" auf, wenn das Ergebnis einer Addition zu groß ist, um durch die Anzahl der verwendeten Bits dargestellt zu werden.
- Dies kann zu Fehlern und unerwartetem Verhalten führen. Das berühmte ursprüngliche PacMan-Arcade-Spiel hat 8 Bit verwendet, um festzustellen, auf welchem Level Sie sich befinden.
- Dies bedeutet, dass, wenn Sie es nach Level 255 geschafft haben - die größte in 8 Bits speicherbare Zahl - ist die ALU beim Übergang in Level 256 übergelaufen.
- Dies verursachte eine Reihe von Fehlern und Störungen, die das Level unlösbar machten. Der Fehler wurde für die größten PacMan-Spieler zu einer nie gelösten Herausforderung.
- Wenn wir also Überläufe vermeiden möchten, können wir unsere Schaltung mit mehr Volladdierern erweitern, um 16 oder 32 Bit Zahlen zu addieren. Dadurch ist es weniger wahrscheinlich, dass Überläufe auftreten,
- aber wir haben höhere Kosten für mehr Gatter. Ein weiterer Nachteil ist, dass es einige Zeit braucht bis die Übertragsbits "durch die Schaltung nach vorne gerieselt" (ripple) sind.
- Zugegeben, nicht sehr viel Zeit, Elektronen bewegen sich ziemlich schnell, also reden wir über Milliardstelsekunden. Aber das ist genug, um einen Unterschied in den heutigen schnellen Computern zu machen.
- Aus diesem Grund verwenden moderne Computer eine etwas andere Addierschaltung, die als "Carry-Look-Ahead" -Addierer bezeichnet wird Die ist schneller, macht aber letztendlich genau das Gleiche - sie addiert Binärzahlen.
- Die Recheneinheit der ALU hat auch Schaltkreise für andere mathematische Operationen , im Allgemeinen werden diese 8 Operationen immer unterstützt.
- Und wie unser Addierer sind diese anderen Operationen aus einzelnen Logikgattern aufgebaut. Interessanterweise haben Sie vielleicht bemerkt, dass es keine Multiplikations- und Divisionsoperation gibt.
- Das liegt daran, dass einfache ALUs keine Schaltung dafür haben und stattdessen nur eine Reihe von Additionen durchführen. Angenommen, Sie möchten 12 und 5 multiplizieren.
- Das ist das Gleiche wie 5 mal 12 auf sich selbst addiert. Es würde also 5 Durchgänge für die ALU dauern diese eine Multiplikation durchzuführen. Und auf diese Weise führen viele einfache Prozessoren
- zu finden z.b. in Ihrem Heizungs-Thermostat, Ihrer TV-Fernbedienung und Ihrer Mikrowelle eine Multiplikation durch. Es ist langsam, aber die Arbeit wird erledigt.
- Anspruchsvollere Prozessoren, wie die Ihres Laptops oder Smartphones haben arithmetische Einheiten mit dedizierten Schaltungen für die Multiplikation.
- Und wie zu erwarten ist, ist die Schaltung komplizierter als eine Addition - es gibt keine Magie, es braucht einfach viel mehr logische Gatter - weshalb kostengünstigere Prozessoren
- diese Operation nicht anbieten können. Ok, fahren wir mit der anderen Hälfte der ALU fort: der Logikeinheit.
- Anstelle von Arithmetischen Operationen führt die Logikeinheit ... klar ... logische Operationen wie AND, OR und NOT durch, über die haben wir ja bereits gesprochen.
- Sie führt auch einfache numerische Tests durch, z. B. das Überprüfen, ob eine Zahl negativ ist. Hier ist zum Beispiel eine Schaltung, die testet ob der Ausgang der ALU Null ist.
- Dies geschieht mit einer Reihe von ODER-Gattern, um festzustellen, ob eines der Bits 1 ist. Selbst wenn ein einzelnes Bit 1 ist, wissen wir, dass die Zahl nicht Null sein kann, und verwenden dann ein abschliessendes NICHT-Gatter, um diesen Wert zu negieren,
- so dass der Ausgang nur 1 ist, wenn der Wert am Eingang 0 ist. Das ist also ein umfassender Überblick darüber, was eine ALU ausmacht. Wir haben sogar mehrere
- der Hauptkomponenten von Grund auf neu gebaut, wie z.B. unseren Ripple-Addierer. Wie Sie gesehen haben, handelt es sich nur um eine Große Anzahl von Logikgattern, die auf clevere Weise miteinander verbunden sind.
- Das bringt uns zurück zu der ALU, die wir zu Beginn der Episode so sehr bewundert haben. Die Intel 74181.
- Anders als die 8-Bit-ALU, die wir heute hergestellt haben, konnte die 74181 nur 4-Bit-Eingänge verarbeiten. was bedeutet, dass DU EINE ALU GEBAUT HAST, DIE
- ZWEIMAL SO GUT WIE DIESE SUPER BERÜHMTE ALU IST. MIT DEINEM VERSTAND! Naja, so ungefähr. Wir haben nicht alles gebaut ... aber Du hast das Prinzip verstanden.
- Die 74181 verwendete ungefähr 70 Logikgatter und konnte weder multiplizieren noch dividieren. Aber sie war ein großer Fortschritt in der Miniaturisierung, der die Türen zu leistungsfähigeren und kostengünstigeren Computern öffnete.
- Diese 4-Bit-ALU-Schaltung braucht bereits eine Menge Gatter, aber für unsere 8-Bit-ALU wären Hunderte von Logikgattern erforderlich, um sie vollständig zu erstellen und die Ingenieure
- möchten nicht all diese Komplexität sehen, wenn Sie eine ALU verwenden, deshalb haben sie sich ein spezielles Symbol ausgedacht, um alles zusammenzufassen, es sieht aus wie wie ein großes "V". Und wir haben einen weiteren Abstraktionslevel erreicht!
- Unsere 8-Bit-ALU verfügt über zwei Eingänge A und B mit jeweils 8 Bits. Wir brauchen auch eine Möglichkeit anzugeben, welche Operation die ALU ausführen soll, Zum Beispiel Addition oder Subtraktion.
- Dafür verwenden wir einen 4-Bit-Operationscode. Wir werden in einer späteren Folge mehr darüber sprechen, aber in Kürze: 1000 könnte der Befehl
- zum Addieren sein, und 1100 der Befehl zum Subtrahieren. Grundsätzlich teilt der Operationscode der ALU mit welche Operation sie ausführen soll. Das Ergebnis dieser Operation ist eine 8-Bit-Zahl am Ausgang.
- ALUs geben auch eine Reihe von sogenannten Flags aus, dass sind 1-Bit-Ausgaben für bestimmte Zustände in der ALU Wenn wir zum Beispiel zwei Zahlen subtrahieren und das Ergebnis 0 ist, setzt unsere Null-Testschaltung die, die wir bereits gebaut haben
- das Zero Flag auf True (1). Dass ist nützlich, wenn wir feststellen wollen ob zwei Zahlen gleich sind. Wenn wir testen wollten, ob A kleiner als B ist,
- können wir die ALU benutzen, um A minus B zu berechnen und dann zu sehen, ob das negative Flag auf wahr gesetzt wurde. Wenn ja, wissen wir, dass A kleiner als B war.
- Und schließlich gibt es noch eine Leitung, die mit dem Carry-Ausgang des von uns gebauten Addierers verbunden ist. Wenn es einen Überlauf gibt, werden wir also jetzt darüber Bescheid wissen. Das wird als Überlauf-Flag bezeichnet.
- Aufwendigere ALUs haben mehr Flags, aber diese drei Flags sind universell und werden häufig verwendet. Tatsächlich werden wir sie bald in einer zukünftigen Folge verwenden.
- Jetzt wissen Sie also, wie Ihr Computer alle grundlegenden mathematischen Operationen digital ausführt ohne Getriebe oder Hebel!
- Wir werden diese ALU verwenden, wenn wir in der übernächsten Folge unsere CPU erstellen. Aber vorher braucht unser Computer Speicher! Wir werden nächste Woche darüber reden.