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.
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.
quelle
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.
quelle