Wie werden die meisten ALUs erstellt und ist es möglich, eigene zu erstellen?

11

Ich habe WIRKLICH wirklich versucht, etwas über das sehr niedrige Niveau der Computer zu lernen. Ich habe mir viele Homebrew-Seiten angesehen und es ist ziemlich viel zu beachten. Ich habe Kurse in Elektrotechnik am College besucht, aber wir haben uns nicht wirklich eingehend mit diesem 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 nur mit Logikgattern (zu Lernzwecken) erstellen? Ich verstehe, dass dies für Fachleute wahrscheinlich dumm klingt, aber ich versuche nur zu verstehen. (Heck, sogar ein einfacher Addierer wäre ein ordentliches Projekt.) Wenn ja, wie würde dies getan werden? Gibt es Hardwarebeispiele? (Ich habe mich bei Google umgesehen, aber ich kann nichts finden, das eine Schritt-für-Schritt-Anleitung enthält, in der die Dinge erklärt werden.)

Brian Carlton
quelle
1
Sie könnte dich interessieren diese .
Dean
6
Wenn Sie sich innerhalb eines CPU-Chip-Teams für Computer- und CPU-Architektur interessieren, lauten die kanonischen Bücher "Computerorganisation und -design: Die Hardware- / Software-Schnittstelle", gefolgt von "Computerarchitektur: Ein quantitativer Ansatz". Diese werden als "Patterson und Hennessy" bzw. "Hennessy und Patterson" bezeichnet.
Ross Rogers
@ Dean - Ja, farbcodierte Drähte sind für Weichlinge! :-)
Stevenvh
Unser Semesterprojekt in EE360M an der UT Austin im Jahr 1994 war eine stapelbasierte 4-Bit-ALU, die auf einer Xilinx-Demokarte mit einem XC3000-Etwas implementiert wurde und als 16-Ebenen-Stapel verwendet wurde, der seinen Spitzenwert auf ein LED-7-Segment-Display übertrug und ein XC4000-etwas, das die eigentliche ALU war. Stellen Sie Ihren Eingang und Ihre 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 Note basierte teilweise darauf, wie schnell unser Design arbeiten konnte und immer noch funktioniert.
Mike DeSimone
1
@ Shubham: Als ich sah, dass ich wusste, dass ich mich von Minecraft fernhalten musste ... würde ich nichts anderes erledigen ... O_o
Mike DeSimone

Antworten:

15

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

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

Heutzutage besteht der richtige Weg zum Erstellen einer ALU darin, dies in einer CPLD oder einem FPGA zu tun . Dies gibt Ihnen viele Gatter, und die HDL (Hardware Description Language), mit der Sie die ALU entwerfen, ist viel einfacher und weniger fehleranfällig als der Versuch, herauszufinden, wie Sie die Verbindungen selbst mit den Logikgattern herstellen können. VHDL und Verilog sind die HDLs des Tages.

Eine alternative Methode zum Erstellen einer ALU (jedoch ohne Verwendung von Logikgattern) wäre ein einzelnes paralleles EEPROM / Flash . Sie verwenden die Eingänge A und B und die Operation als Eingabe (Adresse) und erhalten das Ergebnis der Operation als Ausgabe (Daten). Alles, was Sie tun müssen, ist den Inhalt des ROM zu kompilieren, was bedeutet, dass Sie an jeder Adresse schreiben müssen, 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.

stevenvh
quelle
5

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

Olin Lathrop
quelle
Es tut mir leid, ignorant zu klingen, aber wie genau unterscheiden sich TTL-Chips von Logic-Gates? und wurde TTL vor oder nach Logikgattern verwendet? oder sind sie aus Logikgattern gemacht: verwirrt:
@Sauron - Ich habe meiner Antwort einen Hinweis zu Logikfamilien hinzugefügt
stevenvh
5

Ich würde in der HDL-Welt zuerst starten. Schreiben Sie einen Verilog, simulieren Sie ihn mit Verilator oder icarus verilog. Schreiben Sie den Code so, dass er diskreten und oder oder nicht Toren ähnelt. Wenn Sie dazu neigen, finden Sie einige Teile der Serie 74xx (recycelt?) Und ein Steckbrett. ODER es gibt eine Reihe von CPLD- und FPGA-Karten im Wert von 50 USD plus oder minus, und Sie können die Alu in eine der Karten einbauen, die außen eine Schnittstelle haben, um zu sehen, ob sie funktioniert. Ich würde argumentieren, dass die HDL-Ausbildung dieselbe ist, bei der Sie die Grundlagen des Addierers usw. lernen und die Ein- und Ausgänge sowie die Bedienung muxen. Sie können dies jedoch in einer benutzerfreundlichen und sichtbaren Umgebung tun, bevor Sie es auf Hardware übertragen. Sehr ähnlich wie die Leute es heute tun, entwerfen und simulieren und dann bereitstellen.

Oldtimer
quelle
1
Absolut. Zuerst simulieren. Wenn Sie dann Hardware benötigen, ist ein FPGA am praktischsten. Die Verkabelung von 74xx TTL für etwas in diesem Komplex wäre ein riesiges Projekt, das erst angegangen werden sollte, wenn ein Design wirklich durchdacht ist.
Chris Stratton
5

Für Bücher unterstütze ich definitiv die "Patterson and Hennessy" -Bücher (IIRC gibt es 3, getarnt als 3 Ausgaben, aber in Wirklichkeit völlig andere Bücher. Wenn Sie es ernst meinen: holen Sie sich alle.)

Wenn Sie sich in die grundlegende ALU oder sogar in das CPU-Design einarbeiten möchten, experimentieren Sie mit einem Logiksimulator. Wir haben DigitalWorks für unsere Kurse verwendet, aber ich würde es nicht empfehlen. Logisim ( http://sourceforge.net/projects/circuit/ ) sieht vielversprechend aus. Was Sie beherrschen müssen, ist Layering: Erstellen Sie Basisblöcke wie einen Volladdierer, einen Selektor und ein flankengetriggertes Flipflop von Gates, und erstellen Sie dann Register, ALU, Sequenzierungslogik von diesen Bausteinen bis hin zu einer CPU mit Erinnerung. Es ist wirklich nicht so schwer zu bauen, sagen wir das Äquivalent einer PIC-CPU (14-Bit-Kern), schließen Sie eine Reihe von LEDs an und programmieren Sie sie so, dass sie ein Kitt-Display anzeigt.

Danach wird es Spaß machen, einen 32-Bit-Kern zu erstellen, GCC darauf zu portieren, ihn in einem FPGA zu realisieren und Linux darauf auszuführen. Aber du wirst nicht der erste sein ...

Wouter van Ooijen
quelle
4

Es ist überhaupt keine dumme Frage. Die Wikipedia-Seite zeigt eine solche Schaltung auf Gate-Ebene für eine 2-Bit-ALU. ALU-ICs, die üblicherweise in "Slices" verfügbar sind - normalerweise 4-Bit-ICs, die Sie kaskadieren können, um größere Busbreiten zu erhalten (siehe Bit-Slicing ).

Das Datenblatt für die 4-Bit-Slice-ALU Texas 74181 enthält ebenfalls ein Schema auf Gate-Ebene.

MikeJ-UK
quelle
4

Die Geschichte der CPUs handelt von einer zunehmenden Menge an Dingen pro Paket.

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

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

Der Apollo Guidance Computer (AGM), vielleicht der erste Computer, der aus integrierten Schaltkreisen aufgebaut ist, verwendete nur eine Art von IC außerhalb des Speichers: NOR-Gatter mit 3 Eingängen. Die ALU und jeder andere Teil der CPU wurde vollständig aus einer großen Anzahl von NOR-Gate-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 einem Chip stopft, verwendeten spätere CPUs (relativ) weniger Chips, um eine ALU zu implementieren.

Eine ALU kann vollständig aus Multiplexern ( "Multiplexer: der taktische Kern des Logikdesigns" ) aufgebaut werden, wobei viel weniger Chips als bei der NOR-Implementierung verwendet werden.

Dieter Mueller hat ein 8-Bit-ALU-Design veröffentlicht, das mehr Funktionalität als zwei 74181-Chips bietet - der 74181 kann nicht nach rechts verschoben werden - und aus noch weniger Chips aufgebaut ist: 14 komplexe TTL-Chips: zwei 74283-4-Bit-Addierer, einige 4: 1 Mux und einige 2: 1 Mux.

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

Viele dieser CPUs haben eine 8-Bit-ALU oder eine 16-Bit-ALU (oder beides) aus einigen 74181-Chips und einigen 74182-Chips erstellt - jede 74181 verarbeitet nur 4-Bit-Operationen. Homebrew-Maschinen verwenden normalerweise das einfachste, was funktionieren wird - das Ausführen eines 74181, das in das Einführen des nächsten eingespeist wird und einen Ripple-Carry-Addierer bildet. Kommerzielle Maschinen, die 74181-Chips verwenden, verwenden normalerweise einen 74182-Look-Ahead-Carry-Generator, um das Addieren und Subtrahieren erheblich zu beschleunigen.

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

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

Die Leute haben es getan, deshalb muss es möglich sein.

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

Davidcary
quelle
2

In der Vergangenheit wurden einige ALU-Arbeiten mit Diskreten (ja, Transistoren und dergleichen) und einige mit Gates und viele mit 4-Bit-Slice-Chips durchgeführt (SN74181 von TI war früh und Fairchild 29F01 hatte seinen Tag).
Aber HEUTE geht es darum, die Logikgleichungen 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 integrieren. Sie benötigen lediglich Geld, um das "IP" (geistiges Eigentum) zu lizenzieren.

Whit3rd
quelle
1
Wenn Widerstände im Vergleich zu Widerständen billig waren, gab es eine Reihe von Tricks, die den Aufbau 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 erhebliche Kosten sparen.
Supercat