Eine arithmetisch-logische Einheit (englisch: arithmetic logic unit, daher oft abgekürzt ALU) ist ein elektronisches Rechenwerk, welches in Prozessoren zum Einsatz kommt. Die ALU berechnet arithmetische und logische Funktionen. Sinnvollerweise kann sie mindestens folgende Minimaloperationen durchführen: - Arithmetisch: Addition (ADD) - Logisch: Konjunktion (Und-Verknüpfung, AND) Disjunktion (Oder-Verknüpfung, OR) Negation (Nicht-Verknüpfung, NOT) Eine ALU kann meistens zwei Binärwerte (hier A und B) mit gleicher Stellenzahl (n) miteinander verknüpfen. Man spricht von n-bit ALUs. Typische Werte für n sind 8, 16, 32 und 64. Die n-bit ALU ist meist aus einzelnen 1-Bit ALUs zusammengesetzt. Die Anwahl der durchzuführenden Verknüpfung erfolgt durch die Steuereingänge (Hier und ). 1-Bit ALU L E D 3 L E D 2 A B UND O D E R E X O R (N IC H T ) A N D 1 1 = O R 1 E X O R 1 L o g is c h e E in h e it A N D 2 A N D 3 A N D 4 E rg e b n is T o r T o r T o r L E D 1 O R 2 A u s w a h l d e r F u n k tio n S3 S4 Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 1 von 7
Aufgaben: 1. Überlegen Sie sich, wie die Anwahl der Funktionen realisiert werden kann und zeichnen Sie die sich ergebende Logik in die Schaltung mit ein. Hinweis: orientieren Sie sich am Aufbau der unten stehenden Wahrheitstabelle. 2. Tragen Sie festgelegten logischen Verknüpfungen in die Felder bei der Wahrheitstabelle ein. 3. Vervollständigen Sie die Wahrheitstabelle für das Ergebnis E für die logischen Verknüpfungen. 4. Setzen Sie die Wahrheitstabelle mit Hilfe von isplever Project Navigator in ein ABEL-Programm (TRUTH_TABLE) für die PLD-Hardware um. Hinweis: Legen Sie vor dem Erstellen des Projektes einen neuen Ordner dafür an. Achten Sie darauf, dass sie als Ziel den LC4128V aus der ispmach4000 und als Typ ABEL verwenden. 5. Testen Sie ihr Programm mit Hilfe der TEST_VECOTRS und auf der Hardware. Aus Aufgabe 1 ist noch eine Kombination frei. Diese soll nun dazu verwendet werden, die Arithmetische Einheit zu realisieren. Diese soll die Funktion des Addierens erfüllen. Das Ergebnis soll mit Hilfe von Ergebnis E und dem Übertrag (Carry Out) Cout ausgegeben werden. 6. Vervollständigen Sie die Wahrheitstabelle für das Ergebnis E und Übertrag Cout für die arithmetische Verknüpfung. 7. Speichern Sie ihr aktuelles Projekt unter einem neuen Namen in einen zweiten Ordner. Ergänzen Sie nun das neue Projekt im Programm mit der Arithmetischen Einheit. 8. Testen Sie ihr erweitertes Programm auf der Hardware. 9. Zeichen Sie die sich ergebenden Verknüpfungen für die Arithmetisch Einheit in die obige Schaltung mit ein. Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 2 von 7
Wahrheitstabelle für die 1 Bit Arithmetisch-Logische Einheit B A E Cout 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 Logik- Verknüpfungen Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 3 von 7
Lösungen: Programmierbare Logik Logische Einheit LED3 LED2 A B UND ODER EXOR(NICHT) AND1 OR1 =1 EXOR1 Logische Einheit AND2 AND3 AND4 Ergebnis LED1 OR2 Auswahl der Funktion S3 S4 AND5 AND6 AND8 AND7 Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 4 von 7
MODULE LOGIC TITLE '1Bit Logische Einheit' " Programm zur Umsetzung 1Bit Logische Einheit " DECLARATIONS " Eingänge:,, A und B: Steuereingänge und Variablen,, A, B PIN 19, 20, 21, 22; " Ausgänge: Ergebnis E E PIN 53 ISTYPE 'COM'; "istype 'com' gibt an, dass die Ausgänge statisch sind. "Sie haben kein Speicherverhalten " Zuordnung der Eingangsgrößen zum Ausgang TRUTH_TABLE ([,, B, A] - [ E ]); //Anlegen einer Wahrheitstabelle [ 0, 0, 0, 0] - [ 0 ]; [ 0, 0, 0, 1] - [ 0 ]; [ 0, 0, 1, 0] - [ 0 ]; [ 0, 0, 1, 1] - [ 1 ]; [ 0, 1, 0, 0] - [ 0 ]; [ 0, 1, 0, 1] - [ 1 ]; [ 0, 1, 1, 0] - [ 1 ]; [ 0, 1, 1, 1] - [ 1 ]; [ 1, 0, 0, 0] - [ 0 ]; [ 1, 0, 0, 1] - [ 1 ]; [ 1, 0, 1, 0] - [ 1 ]; [ 1, 0, 1, 1] - [ 0 ]; [ 1, 1, 0, 0] - [ 0 ]; // Steuereingaenge 1 1 Nicht belegt [ 1, 1, 0, 1] - [ 0 ]; [ 1, 1, 1, 0] - [ 0 ]; [ 1, 1, 1, 1] - [ 0 ]; "Hinweis: Strichpunkt am Ende der Befehlszeile nicht vergessen!! END Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 5 von 7
Addierer (2) Programmierbare Logik Arithmetik Logic Unit ALU (Arithmetik Logic Unit) LED3 LED2 Arithmetische Einheit A A0 A1 B0 B1 S0 C2 B UND ODER C0 2ADD1 EXOR(NICHT) AND10 LED4 AND1 OR1 =1 EXOR1 AND9 Logische Einheit AND2 AND3 AND4 Ergebnis LED1 OR2 Auswahl der Funktion AND5 S0 S3 S4 AND6 AND8 AND7 Lösung in ABEL Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 6 von 7
MODULE ALU TITLE '1bit_ALU' Declarations "Eingaenge definieren "Programiereingaenge haben den Namen und S0, S0 pin 3,2; //Port1 D0 und D1 E1, E0 pin 6,5; "Variablen, jeweils 1 bit "Ausgaenge definieren Cout, Ausg pin 14,15, istype 'com'; "istype 'com' gibt an, dass die Ausgaenge statisch sind truth_table //Wahrheitstabelle ([, S0, E1, E0]-[Ausg, Cout]); "UND" [ 0, 0, 0, 0]-[ 0, 0]; [ 0, 0, 0, 1]-[ 0, 0]; [ 0, 0, 1, 0]-[ 0, 0]; [ 0, 0, 1, 1]-[ 1, 0]; "ODER" [ 0, 1, 0, 0]-[ 0, 0]; [ 0, 1, 0, 1]-[ 1, 0]; [ 0, 1, 1, 0]-[ 1, 0]; [ 0, 1, 1, 1]-[ 1, 0]; "exor" [ 1, 0, 0, 0]-[ 0, 0]; [ 1, 0, 0, 1]-[ 1, 0]; [ 1, 0, 1, 0]-[ 1, 0]; [ 1, 0, 1, 1]-[ 0, 0]; "+" [ 1, 1, 0, 0]-[ 0, 0]; [ 1, 1, 0, 1]-[ 1, 0]; [ 1, 1, 1, 0]-[ 1, 0]; [ 1, 1, 1, 1]-[ 0, 1]; END Datei: ArithmeticLogicUnit Aufgabe_Loesung Seite 7 von 7