Was eine ALU macht
Eine Arithmetic-Logic-Unit (ALU) ist der Teil eines Prozessors, der tatsächlich rechnet — sie nimmt zwei Operanden und einen Opcode und erzeugt eines von mehreren möglichen Ergebnissen (AND, OR, ADD, SUB usw.), je nachdem, was der Opcode auswählt. Jede CPU-Instruktion, die Arithmetik oder Vergleiche ausführt, läuft über eine Form von ALU.
Bausteine: Addierer und Logikgatter
Die meisten Funktionen einer ALU werden bereits von Schaltungen aus den anderen Artikeln abgedeckt: Ein Voll-Addierer (oder eine Kette davon) berechnet ADD, und derselbe Addierer berechnet SUB, wenn ein Operand zuvor komplementiert wird (invertiert und inkrementiert — Zweierkomplement-Negation). AND- und OR-Operationen sind einfach bitweise AND/OR-Gatter, die direkt auf die beiden Operandenbusse angewendet werden.
Operationsauswahl mit einem Multiplexer
Da eine ALU je nach Opcode eines von mehreren Ergebnissen liefern muss, wird jedes mögliche Ergebnis (AND, OR, ADD, SUB...) parallel von separaten Teilschaltungen berechnet, und ein Multiplexer wählt aus, welches tatsächlich den Ausgang erreicht, gesteuert durch die Opcode-Bits.
- Opcode = 00 → Ausgang = A AND B
- Opcode = 01 → Ausgang = A OR B
- Opcode = 10 → Ausgang = A + B (Addierer)
- Opcode = 11 → Ausgang = A − B (Addierer mit invertiertem B und Cin=1)
Eine 1-Bit-ALU im Detail
Der integrierte 1-Bit-ALU-Block von Boolflow ist genau diese Struktur: Ein AND-Gatter, ein OR-Gatter und ein Voll-Addierer (durch Invertieren eines Eingangs auf Addition oder Subtraktion konfigurierbar) speisen alle einen 4-zu-1-Multiplexer, wobei der 2-Bit-Opcode die Auswahlleitungen steuert. Das Ändern des Opcodes bei festen A und B zeigt sofort alle vier möglichen Ergebnisse, ohne irgendetwas neu zu verdrahten.
Skalierung auf N Bit
Das Verketten von N 1-Bit-ALU-Scheiben — genauso wie Voll-Addierer sich zu einem N-Bit-Addierer verketten — ergibt eine vollständige N-Bit-ALU, den arithmetischen Kern einer einfachen CPU. Laden Sie das 1-Bit-ALU-Beispiel in Boolflow, schalten Sie die Opcode-Bits um und überprüfen Sie jedes Ergebnis gegen eine Wahrheitstabelle, bevor Sie den Entwurf nach Verilog oder VHDL exportieren.