Wie werden die meisten ALUs gebaut und ist es möglich, eigene zu bauen?

Ich habe WIRKLICH wirklich versucht, etwas über das sehr niedrige Niveau von Computern zu lernen. Ich habe mir viele Homebrew-Seiten angesehen und es gibt ziemlich viel zu verarbeiten. Ich habe am College Kurse in Elektrotechnik belegt, aber wir haben uns nicht wirklich mit dem Thema befasst (es war Informatik, also die meisten davon waren in der Tat Algorithmen und so).

Wie werden / wurden die meisten ALUs gebaut? Mir ist klar, dass dies nicht der einzige Teil eines Computers ist, aber dennoch ein wichtiger Teil.

Und könnten Sie Ihre eigene ALU bauen, indem Sie nur Logikgatter verwenden (für Lernzwecke)? Ich verstehe, dass dies für diejenigen, die sich besser auskennen, wahrscheinlich dumm klingt, aber ich versuche nur zu verstehen. (Verdammt, sogar ein einfacher Addierer wäre ein nettes Projekt.) Wenn ja, wie würde das gemacht werden? Gibt es Hardwarebeispiele? (Ich habe mich bei Google umgesehen, aber ich kann nichts finden, was eine Schritt-für-Schritt-Anleitung enthält, die die Dinge erklärt).

Das könnte Sie interessieren .
Wenn Sie innerhalb eines CPU-Chip-Teams sprechen, wenn Sie sich für Computer- und CPU-Architektur interessieren, dann sind die kanonischen Bücher "Computer Organization and Design: The Hardware/Software Interface", gefolgt von "Computer Architecture: A Quantitative Approach". Diese werden als „Patterson and Hennessy“ bzw. „Hennessy and Patterson“ bezeichnet.
@Dean - Ja, farbcodierte Drähte sind für Weicheier! :-)
Unser Semesterprojekt in EE360M an der UT Austin im Jahr 1994 war eine Stack-basierte 4-Bit-ALU, die auf einem Xilinx-Demoboard mit einem XC3000-irgendwas implementiert wurde, das als 16-Level-Stack verwendet wurde und seinen Spitzenwert zu einer LED-7-Segment-Anzeige führte , und ein XC4000-etwas, das die eigentliche ALU war. Stellen Sie Ihre Eingabe und Bedienung an den DIP-Schaltern ein, drücken Sie eine Taste und los geht's. Der XC4k hatte einen internen Oszillator mit mehreren Frequenzen von 63 kHz bis 8 MHz, und unsere Bewertung basierte teilweise darauf, wie schnell unser Design gehen und trotzdem funktionieren konnte.
@Brian ist auf einer Reinigungsmission...
@mike vor ein paar Monaten habe ich in Minecraft ein Video über eine 16-Bit-ALU gesehen und dachte, das sei verrückt, haha, aber 32-Bit ... das ist einfach verrückt! lol!
Aus pädagogischer Sicht ist diese "binäre Murmel-Addiermaschine" super, um das Grundprinzip zu verstehen: woodgears.ca/marbleadd/index.html
@Shubham: Sobald ich sah, dass ich wusste, dass ich mich von Minecraft fernhalten musste ... Ich würde nichts anderes tun ... O_o
Der alte Minecraft-ALU-Link ist ausgefallen, hier ist ein weiterer youtube.com/watch?v=6tDVENBFhAE

Antworten (8)

Sie können sie vollständig aus einfachen Logikgattern bauen , und das Ergebnis wird ein schönes Kunstwerk sein :-).

Die 74xx-Logikserie enthält auch einen 74LS181 , eine 4-Bit-Slice-ALU , was die Dinge drastisch vereinfacht. Bit-Slice-ALUs wurden verwendet, um komplexere ALUs (sprich: längere Wortlängen) zu bauen, aber neuere Technologien haben diese Art von ICs obsolet gemacht.
Hinweis: TTL (74xx) ist nur eine Technologie, die für Logikgatter verwendet wird. Wird selten mehr benutzt. Es folgte Low-Power Schottky: 74LSxx, streng genommen auch eine Form von TTL. Heutzutage gibt es Dutzende von Logikfamilien, die alle auf Hochgeschwindigkeits-CMOS basieren (74HCxx, 74HCTxx, 74ACxx, ...)

Heutzutage wäre der richtige Weg, eine ALU zu erstellen, dies in einem CPLD oder einem FPGA zu tun . Dadurch erhalten Sie viele Gatter, und die HDL (Hardware Description Language), die Sie zum Entwerfen der ALU verwenden, ist viel einfacher und weniger fehleranfällig als der Versuch, herauszufinden, wie Sie die Verbindungen mit den Logikgattern selbst herstellen können. VHDL und Verilog sind die HDLs des Tages.

Eine alternative Methode zum Erstellen einer ALU (allerdings ohne Verwendung von Logikgattern) wäre ein einzelnes paralleles EEPROM / Flash . Sie verwenden die Eingaben A und B und die Operation als Eingabe (Adresse) und erhalten das Ergebnis der Operation als Ausgabe (Daten). Sie müssen lediglich den Inhalt des ROMs kompilieren, dh Sie müssen an jeder Adresse schreiben, was das Ergebnis der Operation für die entsprechenden Eingänge A, B und Operation sein wird. Die Wortgröße wird durch die größte ROM-Größe begrenzt, die Sie finden können.

Es ist überhaupt keine dumme Frage. Die Wikipedia-Seite zeigt eine solche Gate-Level-Schaltung für eine 2-Bit-ALU. ALU-ICs waren früher allgemein in "Slices" erhältlich - typischerweise 4-Bit, die Sie kaskadieren konnten, um größere Busbreiten zu erhalten (siehe Bit-Slicing ).

Das Datenblatt für die Texas 74181 4-Bitslice ALU enthält auch ein Schaltbild auf Gate-Ebene.

Sie können Ihre eigene ALU bauen, aber selbst alte Computer mit diskreten TTL-Chips verwendeten dafür eine gewisse Integration. Schauen Sie sich zum Beispiel den 74x181-Chip an. Das ist ein 4-Bit-Slice einer ALU und wurde in einigen TTL-Computern verwendet, um die vollständige ALU zu implementieren, indem für jeweils 4 Bits einer dieser Chips verwendet wurde.

Es tut mir leid, ignorant zu klingen, aber wie genau unterscheiden sich TTL-Chips von Logikgattern? und wurde TTL vor oder nach Logikgattern verwendet? oder bestehen sie aus logischen Gattern :confused:
@Sauron - Ich habe meiner Antwort einen Hinweis zu Logikfamilien hinzugefügt

Bei den Büchern stimme ich definitiv den "Patterson and Hennessy"-Büchern zu (IIRC gibt es 3, getarnt als 3 Ausgaben, aber in Wirklichkeit völlig unterschiedliche Bücher. Wenn Sie es ernst meinen: Holen Sie sich alle.)

Wenn Sie sich in das grundlegende ALU- oder sogar CPU-Design hineinexperimentieren möchten: Beginnen Sie mit dem Experimentieren mit einem Logiksimulator. Wir haben DigitalWorks für unseren Unterricht verwendet, aber ich würde es nicht empfehlen. Logisim ( http://sourceforge.net/projects/circuit/ ) sieht vielversprechend aus. Was Sie beherrschen müssen, ist Layering: Bauen Sie grundlegende Blöcke wie einen Volladdierer, einen Selektor und ein flankengesteuertes Flip-Flop aus Gattern, bauen Sie dann Register, ALU, Sequenzlogik aus diesen Bausteinen bis hin zu einer CPU mit Erinnerung. Es ist wirklich nicht so schwer, sagen wir, das Äquivalent einer PIC-CPU (14-Bit-Kern) zu bauen, ein paar LEDs anzubringen und es so zu programmieren, dass es ein Kitt-Display zeigt.

Danach wird es Spaß machen, einen 32-Bit-Kern zu machen, GCC darauf zu portieren, ihn in einem FPGA zu realisieren und Linux darauf laufen zu lassen. Aber du wirst nicht der Erste sein...

Die Geschichte der CPUs ist eine der zunehmenden Menge an Material pro Paket.

Die frühesten CPUs verwendeten immer serielle ALUs, die aus einigen Relais oder Vakuumröhren bestanden. Der erste, der sich dieser Tradition widersetzte, war der Whirlwind von 1947.

Die frühesten transistorisierten CPUs bauten alles aus einzelnen Transistoren auf.

Der Apollo Guidance Computer (AGM), vielleicht der erste Computer, der aus integrierten Schaltkreisen gebaut wurde, verwendete nur eine Art von IC außerhalb des Speichers: NOR-Gatter mit drei Eingängen. Die ALU und alle anderen Teile der CPU wurden vollständig aus einer großen Anzahl von NOR-Gatter-ICs aufgebaut. Der (viel schnellere) Cray 1 verwendete auch nur eine Art von IC außerhalb des Speichers: eine andere Art von NOR-Gatter.

Als die Leute herausfanden, wie man mehr Transistoren auf einen Chip packen kann, verwendeten spätere CPUs (relativ) weniger Chips, um eine ALU zu implementieren.

Eine ALU kann vollständig aus Multiplexern aufgebaut werden ( „Multiplexers: the tactical Nuke of Logic Design“ ), wobei viel weniger Chips verwendet werden als bei der NOR-Implementierung.

Dieter Mueller hat ein 8-Bit-ALU-Design gepostet, das mehr Funktionalität hat als zwei 74181-Chips – der 74181 kann nicht nach rechts verschieben – gebaut aus noch weniger Chips: 14 komplexe TTL-Chips: zwei 74283 4-Bit-Addierer, etwa 4:1 Mux und einige 2:1-Mux.

Wie viele historisch wichtige kommerzielle Computer verwenden viele selbstgebaute CPUs eine Version des 74181, der ersten "vollständigen" ALU auf einem einzelnen Chip.

Viele dieser CPUs bauten eine 8-Bit-ALU oder eine 16-Bit-ALU (oder beides) aus ein paar 74181-Chips und ein paar 74182-Chips – jeder 74181 verarbeitet nur 4-Bit-Operationen. Homebrew-Maschinen verwenden normalerweise die einfachste Sache, die funktioniert – das Carry-out eines 74181, der in den Carry-in des nächsten einspeist und einen Ripple-Carry-Addierer bildet. Kommerzielle Maschinen, die 74181-Chips verwenden, verwenden typischerweise einen 74182-Look-Ahead-Carry-Generator, um Addition und Subtraktion deutlich schneller zu machen.

Heutzutage sind die meisten ALUs in einem Chip versteckt – einem kleinen Teil einer CPU, einer anderen Art von ASIC oder einem CPLD oder FPGA.

Selbst nachdem "Ein-Chip-Computer" verfügbar waren, baut gelegentlich jemand eine 74181-kompatible ALU aus einer GAL oder einer ALU, die nur einfachere Logikgatter oder sogar einzelne Transistoren oder Relais zu Lernzwecken verwendet.

Menschen haben es getan, also muss es möglich sein.

Eine Schritt-für-Schritt-Anleitung, die ALU-Design und -Implementierung erklärt, klingt nach einer wirklich guten Idee. Bitte helfen Sie uns, eines im Microprocess Design Wikibook zu schreiben, vielleicht die Abschnitte "ALU" oder "Wire Wrap" .

Sie sollten sich The Elements of Computing Systems von Nisan & Schocken ansehen.

Ich würde zuerst in der HDL-Welt anfangen. Schreiben Sie etwas Verilog, verwenden Sie Verilator oder Icarus Verilog, um es zu simulieren. Schreiben Sie den Code so, dass er diskreten und, oder, und nicht Gattern ähnelt, dann finden Sie, wenn Sie dazu neigen, einige Teile der 74xx-Serie (recycelt?) Und etwas auf dem Steckbrett. ODER, es gibt eine Reihe von CPLD- und FPGA-Boards im Wert von mehr als 50 US-Dollar, die erhältlich sind, und Sie können die Alu in eines davon stecken, das mit einer Art Schnittstelle an der Außenseite kommt, um zu sehen, ob es funktioniert. Ich würde argumentieren, dass die HDL-Ausbildung dieselbe ist, in der Sie die Grundlagen des Addierers usw. und das Muxen der Ein- und Ausgänge und des Betriebs erlernen. Aber Sie können es in einer einfach zu bedienenden und übersichtlichen Umgebung tun, bevor Sie es auf die Hardware bringen. Ganz ähnlich wie die Leute es heute machen, entwerfen und simulieren und dann bereitstellen.

Absolut. Zuerst simulieren. Wenn Sie dann Hardware haben müssen, ist ein FPGA am praktischsten. Die Verkabelung von 74xx TTL für etwas so Komplexes wäre ein riesiges Projekt, das nicht in Angriff genommen werden sollte, bis ein Design wirklich durchdacht ist.

In der Vergangenheit wurden einige ALU-Arbeiten mit Diskreten (ja, Transistoren und dergleichen) und einige mit Gattern und viel mit 4-Bit-Slice-Chips durchgeführt (TIs SN74181 war ein früher, und Fairchild 29F01 hatte seine Zeit).
Aber HEUTE geht es darum, die logischen Gleichungen in einer Gate-Array- oder PLA-Logikbeschreibungssprache zu erstellen. Es gibt im Handel erhältliche vorgefertigte Module, die jede ausgewählte kleine Logikeinheit in Ihr Design einbauen. Alles, was Sie brauchen, ist Geld, um das "IP" (geistiges Eigentum) zu lizenzieren.

Als Widerstände im Vergleich zu Widerständen billig waren, gab es eine Reihe von Tricks, die den Bau von ALUs mit sehr geringen Transistorzahlen ermöglichen konnten (z. B. ein Volladdierer mit zwei Transistoren pro Stufe). Solche Schaltungen waren leistungshungrig und nicht besonders schnell, aber wenn Transistoren teuer waren, konnten sie beträchtliche Kosten einsparen.