Wie werden verschiedene Funktionen (z. B. Addieren, Subtrahieren usw.) in ALU implementiert?

9

Ich frage mich, da eine ALU so viele Funktionen ausführen muss, wie ich mit der Implementierung beginnen könnte (eine Hausaufgabe, bei der ich ein MIPS-System mit Logisim unter Verwendung grundlegender Gates, Flip-Flops usw. implementieren soll).

Der Teil, über den ich verwirrt bin, ist, wie ich eine ALU implementieren kann, die verschiedene Funktionen wie Hinzufügen / Subtrahieren / UND / ODER / etc. Ausführen kann. Benötige ich mehr Steuerlogik (siehe oben rechts unter "Vorherige Zuordnung" unten)?

In einer früheren Aufgabe habe ich eine ALU implementiert, die Addieren / Subtrahieren / Negieren ausführen kann. Jetzt denke ich, dass eine ALU Funktionen wie ausführen kann

Meine vorherige Aufgabe

Jiew Meng
quelle

Antworten:

7

Während das interne Berechnen aller Antworten und das anschließende Auswählen eines Mux zur Auswahl unter ihnen funktioniert, handelt es sich sicherlich nicht um ein minimales Design.

Bedenken Sie, dass Sie das Problem aufteilen können. Anstelle eines einzelnen Logikblocks mit zwei 8-Bit-Eingängen können Sie diesen auch in zwei 4-Bit-Abschnitte unterteilen, sofern Sie diese verknüpfen können, um ein korrektes Gesamtergebnis zu erhalten. Glücklicherweise ist das Verknüpfen der Slices nicht schlechter als ein einzelnes Bit, das im Fall der Addition das Übertragsbit darstellt. Jeder 4-Bit-Slice hat also ein Übertragsbit und ein Übertragsbit. (Beachten Sie, dass Logiken wie AND und NOR dies nicht einmal benötigen. Wenn Sie jedoch später Links- / Rechtsverschiebungen implementieren, kann dieses Bit leicht neu verwendet werden.)

Bis zum Äußersten getragen, könnten Sie 8 Scheiben von jeweils 1 Bit verwenden. Es ist nützlich, über die 1-Bit-Slices nachzudenken, da es einfacher ist, über einen Ansatz nachzudenken, der auf größere Slices zurückskaliert. Bei einem 1-Bit-Slice haben Sie also nur 7 Eingänge: den 4-Bit-Funktionscode, ein Bit von Eingang A, ein Bit von Eingang B und ein Übertragsbit. Sie haben auch nur zwei Ausgänge: Funktion aus und ausführen. Jetzt können Sie die beiden Ausgabefunktionen in Form von nur 7 Eingaben schreiben, was im Bereich der menschlichen Fähigkeit liegt, diese angemessen zu reduzieren. Sie werden am Ende eine Handvoll Gates haben, die nicht unbedingt immer alle Funktionen berechnen, aber es spielt keine Rolle, was innerhalb des Slice passiert , nur dass es von außen betrachtet das richtige Ergebnis liefert.

Jetzt können Sie ein paar Wege gehen. Eine Möglichkeit besteht darin, einfach 8 dieser 1-Bit-Slices zu verwenden, und fertig. Eine andere Möglichkeit besteht darin, größere Scheiben zu erstellen und diese dann zu verwenden. Beim Übergang von 1-Bit zu 2-Bit gehen die Gleichungen von 7 Eingängen zu 9, und für 4-Bit sind Funktionen mit 13 Eingängen erforderlich. Es ist nicht unbedingt einfach, liefert aber kompaktere Ergebnisse als der Compute-Everything-Then-Mux-Ansatz. Wenn Sie sich die Interna eines 74181 4-Bit-ALU-Slice ansehen, sehen Sie dort keinen Mux.

JustJeff
quelle
Ich habe meine Antwort eher auf das Ende des Spektrums ausgerichtet, bei dem es einfach ist, den Anfang zu machen, aber danke, dass Sie auf eine optimalere (hardwarebezogene) Möglichkeit hingewiesen haben.
Martin Thompson
5

Ja, Sie benötigen mehr Steuerlogik.

Ihre vorherige Aufgabe war rein arithmetisch (ist das ein Wort?), Sodass Sie einen einzelnen Addierer verwenden und die Eingänge mithilfe der Steuersignale massieren können, um die gewünschten Funktionen zu erstellen

Ihre neuen Funktionen sind logisch , daher benötigen Sie einen weiteren Block, um logische Operationen auszuführen. Die Steuersignale ändern die Funktionalität dieses Blocks.

Am Ende Ihres Diagramms benötigen Sie dann einen Multiplexer (manchmal als "Mux" bezeichnet), der von den Steuersignalen angesteuert wird, um auszuwählen, welche der Antworten Sie ausgeben möchten (die vom Addierer und die "Eingangsmassage" -Schaltung oder die vom Logikoperator).

Wenn Sie neue Codierungen für Ihre ALU-Steuerleitungen auswählen können, könnte ich versucht sein, das MSB als "Arithmetik / Logik" -Auswahl zu verwenden, und die anderen, um die "Unterfunktion" auszuwählen, wenn dies sinnvoll ist, da dies die Decodierung für die vereinfacht letzte mux.

Martin Thompson
quelle
Ja, Rechnen ist ein Wort :)
Majenko
1
Mir scheint, nur Arithmetik ist das Wort, das Sie wollen. Beachten Sie, dass dieses Wort den Akzent auf der dritten Silbe hat. Mit dem Akzent auf der zweiten Silbe ist es ein anderes Wort, das sich auf die Mechanik bezieht, grundlegende numerische Operationen auszuführen, wie Sie sie in der Grundschule lernen.
Olin Lathrop
1

Ein guter Ansatz zur Behandlung logischer Operationen besteht darin, dass die Bits der beiden Operanden als Selektoreingänge für einen Multiplexer mit 4 Eingängen dienen und den "Daten" -Eingängen des Multiplexers ein Vier-Bit-Muster zuführen, das der gewünschten Operation entspricht (typischerweise in Bei einer 8-Bit-ALU gäbe es acht Multiplexer - einen für jedes Bit - und die "Daten" -Eingänge aller 8 Multiplexer wären miteinander verbunden.

Superkatze
quelle
Verwenden eines Multiplexers als sehr kleines ROM - und das ist ein weiterer Weg, um tatsächliche ROMs zu verwenden.
JustJeff
Ein Nx1-Bit-ROM ist ein Multiplexer, dessen "Daten" -Eingänge fest verdrahtet sind. In dem von mir beschriebenen Szenario wären die "Daten" -Eingänge des Multiplexers eine vom Bediener ausgewählte. In der Praxis würde man wahrscheinlich ein kleines ROM verwenden, um einige der 16 möglichen logischen Operationen sowie einige andere Operationen aus einem 3- oder 4-Bit-Opcode auszuwählen (man könnte, falls gewünscht, den Opcode direkt an den weiterleiten logische Einheit, aber verwenden Sie andere Multiplexer, um andere Operationen auszuwählen, wenn der Opcode keine nützliche logische Operation erzeugen würde.
Supercat