Entwurf einer 4-Bit-ALU zur Berechnung verschiedener Funktionen

Ich habe daran gearbeitet, eine ALU zu entwerfen, die verschiedene Funktionen berechnet, aber ich weiß nicht wirklich, wie ich jede Funktion voneinander trennen soll. Die Eingänge sind 4-Bit-Zahlen A und B. Ich habe einen Decoder, der auswählt, welche Funktion verwendet werden soll, aber ich weiß nicht, wie ich die Funktionen des Decoders implementieren soll. Die ALU muss arithmetische Operationen und auch logische Operationen ausführen. Wenn jemand weiß, wie man eine ALU strukturiert, die 2 4-Bit-Eingänge und 1 4-Bit-Ausgang hat, wäre jede Anleitung willkommen. Danke.

Ein Logikdiagramm des alten TTL-Chips 74181 finden Sie im PDF unter aeromech.usyd.edu.au/MTRXLAB/ref/components/TTL/DM74LS181.pdf (und an anderen Stellen)

Antworten (5)

In Bezug auf das "Trennen" der Funktionen funktioniert die digitale Logik nicht wirklich. Digitale Logik macht „immer alles“. Da braucht man einen Mux (Multiplexer). Der Multiplexer wird verwendet, um aus allen erzeugten die richtige Ausgabe auszuwählen.

Angenommen, die Eingänge A und B und der Ausgang Q. Angenommen, die ALU macht zwei verschiedene Dinge: Q=A+B oder Q=A&B.

Die ALU wird einen Addierer haben. Es wird auch ein großes UND-Gatter haben.

A und B gehen beide zum Addierer und zum UND-Gatter. Stets. Jeden Moment eines jeden Tages addiert der Addierer A und B, und das Gatter verknüpft A und B mit einer UND-Verknüpfung.

Der Mux wird verwendet, um auszuwählen, welchen der Ausgänge wir an Q weitergeben möchten. Wenn die Steuersignale an die ALU "Addieren" sagen, wählt der Mux den Ausgang des Addierers aus und leitet ihn an Q weiter; der Ausgang des UND-Gatters wird nicht verwendet. Wenn die Steuerung "und" sagt, wählt der Mux den Ausgang des UND-Gatters aus und leitet ihn stattdessen an Q weiter, während der Ausgang des Addierers unbenutzt bleibt.

Stellen Sie sich A = 0b0001 und B = 0b0010 an den Eingängen der ALU vor. Der Addierer erzeugt immer 0b0011 und das UND-Gatter erzeugt immer 0b0000. Wenn Sie das Steuersignal „add“ bereitstellen, wird 0b0011 an Q weitergegeben. Sie können A und B in Ruhe lassen und das Steuersignal auf „and“ ändern, dann wird 0b0000 an Q weitergegeben.

Solide Erklärung. Ich habe die ALU heute früh abgeschlossen, aber dies war eine gute Lektüre. Danke schön. Ich würde dies positiv bewerten, wenn ich die Fähigkeit hätte.

Für eine 4-Bit-Wortbreite ist ein paralleles ROM (EEPROM, Flash) der einfachste Weg, es zu implementieren. Verwenden Sie beide Eingangswörter, kombiniert mit der Operation (wahrscheinlich auch 4 oder 5 Bits) als Adresse des ROMs, und es wird das Ergebnis für diese Kombination ausgeben. Wenn die Operationen eine Multiplikation beinhalten, muss die Ausgabe acht Bits breit sein, was jeder aktuelle parallele ROM handhaben kann. Wenn Sie höchstens 32 Operationen haben, benötigen Sie nur ein 8-KB-ROM ( 2 2 × 4 + 5 = 8192 )
Die schwierigste Aufgabe (und selbst das ist nicht so schwer) besteht darin, ein Programm zu schreiben, um den Inhalt des ROMs zu erstellen.

Hier ist ein Beispiel für eine 2-Bit-ALU. Wie Sie sehen können, sind XOR und, oder Computer durch die ersten 3 Logikgatter. Dann werden zwei XOR-Gatter verwendet, um den Summenwert zu bestimmen. Dann werden zwei UND- und ein ODER-Gatter verwendet, um den Übertragswert zu bestimmen. Sie können die Wahrheitstabelle ausarbeiten und sehen, dass sie funktioniert. Der Übertrag wird dann der Logik für das zweite Bit zugeführt, die auf die gleiche Weise funktioniert. Der Decoder wählt dann die Operation aus. Sie müssen nur das gleiche Muster fortsetzen und es auf 4 Bit erweitern.

Für das Addieren von drei Bits (C ist der Übertrag) lautet die Wahrheitstabelle:

A B C  (A+B) Carry
0 0 0    0     0
0 0 1    1     0
0 1 0    1     0
0 1 1    0     1
1 0 0    1     0
1 0 1    0     1
1 1 0    0     1
1 1 1    1     1

Wie Sie diese beiden Logikfunktionen umsetzen, erfahren Sie anhand einer Karnaugh-Karte

Würden Sie wissen, wie man dies stattdessen mit einem Volladdierer macht?

Hier ist eine 4-Bit-ALU in VHDL. Wenn tatsächliche Hardware erforderlich ist, könnte der Code in einem geeigneten CPLD implementiert werden.

Ich verstehe diesen Code nicht wirklich
Ein HDL wie VHDL oder Verilog ist heutzutage der übliche Weg, solche Dinge zu tun.
Lassen Sie den Kerl eine Pause, nicht jeder kennt VHDL oder arbeitet noch mit programmierbarer Logik. Es ist immer noch möglich, eine ALU mit klassischen Logik-ICs zu bauen.

Artikel zum perfekten ALU-Design finden Sie hier: http://www.6502.org/users/dieter/