Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...
Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...
Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
<strong>Grundlegende</strong> <strong>Schaltungen</strong><br />
[<strong>Technische</strong> <strong>Informatik</strong> — Eine Einführung]<br />
Univ.-Prof. Dr. Paul Molitor<br />
<strong>Lehrstuhl</strong> für <strong>Technische</strong> <strong>Informatik</strong><br />
Institut für <strong>Informatik</strong><br />
Martin-Luther-Universität Halle-Wittenberg<br />
29. November 2005<br />
1 / 137
Lernziele<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Nachdem wir uns angeschaut haben, wie allgemein kombinatorische <strong>Schaltungen</strong> zu<br />
Booleschen Funktionen synthetisiert werden können, wollen wir uns nun mit<br />
<strong>Schaltungen</strong> beschäftigen, die in jedem Datenpfad bzw. Prozessor enthalten sind:<br />
effiziente <strong>Schaltungen</strong> für die Addition zweier Festkommazahlen<br />
effiziente <strong>Schaltungen</strong> für die Subtraktion zweier Festkommazahlen<br />
effiziente <strong>Schaltungen</strong> für die Multiplikation zweier Festkommazahlen<br />
Es macht sicherlich keinen Sinn, diese <strong>Schaltungen</strong> ”jedesmal neu zu erfinden”.<br />
2 / 137
Lernziele<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Nachdem wir uns angeschaut haben, wie allgemein kombinatorische <strong>Schaltungen</strong> zu<br />
Booleschen Funktionen synthetisiert werden können, wollen wir uns nun mit<br />
<strong>Schaltungen</strong> beschäftigen, die in jedem Datenpfad bzw. Prozessor enthalten sind:<br />
effiziente <strong>Schaltungen</strong> für die Addition zweier Festkommazahlen<br />
effiziente <strong>Schaltungen</strong> für die Subtraktion zweier Festkommazahlen<br />
effiziente <strong>Schaltungen</strong> für die Multiplikation zweier Festkommazahlen<br />
Es macht sicherlich keinen Sinn, diese <strong>Schaltungen</strong> ”jedesmal neu zu erfinden”.<br />
Hier nur Zweier-Komplement-Darstellung!<br />
3 / 137
Zur Erinnerung:<br />
Definition (Formale Summe)<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Die formale Summe <strong>der</strong> Bitvektoren a = (an, an−1 . . . , a0, a−1, . . . , a−k) und<br />
b = (bn, bn−1, . . . , b0, b−1, . . . , b−k) ist durch s = (sn, sn−1, . . . , s0, s−1, . . . , b−k) mit<br />
gegeben.<br />
si = (ai + bi + ci−1) mod 2<br />
0 falls i = −(k + 1)<br />
ci =<br />
(ai + bi + ci−1) div 2 falls i ≥ −k.<br />
Theorem (Addition im Zweier-Komplement)<br />
Für alle Bitvektoren a = (an, an−1 . . . , a0, a−1, . . . , a−k) und<br />
b = (bn, bn−1, . . . , b0, b−1, . . . , b−k) gilt:<br />
[a]2 + [b2] = [s]2 ⇐⇒ (an = bn o<strong>der</strong> an = bn = sn)<br />
”·” und ”+” bezeichnen hier die ”Multiplikation” und ”Addition” ganzer Zahlen!<br />
4 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
5 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Halbaddierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition (ohne eingehenden Übertrag) realisiert,<br />
nennt man Halbaddierer (engl.: half ad<strong>der</strong>) (HA).<br />
Der HA berechnet die Funktion ha : B 2 → B 2 , die durch ha(a0, b0) := (s1, s0) mit<br />
2 · s1 + s0 = a0 + b0 definiert ist.<br />
6 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Halbaddierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition (ohne eingehenden Übertrag) realisiert,<br />
nennt man Halbaddierer (engl.: half ad<strong>der</strong>) (HA).<br />
Der HA berechnet die Funktion ha : B 2 → B 2 , die durch ha(a0, b0) := (s1, s0) mit<br />
2 · s1 + s0 = a0 + b0 definiert ist.<br />
Es gilt:<br />
2 · s1 + s0<br />
= 2 · (a0 ∧ b0) + (a0 ⊕ b0)<br />
7 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Halbaddierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition (ohne eingehenden Übertrag) realisiert,<br />
nennt man Halbaddierer (engl.: half ad<strong>der</strong>) (HA).<br />
Der HA berechnet die Funktion ha : B 2 → B 2 , die durch ha(a0, b0) := (s1, s0) mit<br />
2 · s1 + s0 = a0 + b0 definiert ist.<br />
Es gilt:<br />
2 · s1 + s0<br />
= 2 · (a0 ∧ b0) + (a0 ⊕ b0)<br />
= 2 · ((a0 + b0) div 2) + ((a0 + b0) mod 2)<br />
8 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Halbaddierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition (ohne eingehenden Übertrag) realisiert,<br />
nennt man Halbaddierer (engl.: half ad<strong>der</strong>) (HA).<br />
Der HA berechnet die Funktion ha : B 2 → B 2 , die durch ha(a0, b0) := (s1, s0) mit<br />
2 · s1 + s0 = a0 + b0 definiert ist.<br />
Es gilt:<br />
2 · s1 + s0<br />
= 2 · (a0 ∧ b0) + (a0 ⊕ b0)<br />
= 2 · ((a0 + b0) div 2) + ((a0 + b0) mod 2)<br />
= a0 + b0<br />
9 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Volladdierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition mit eingehendem Übertrag realisiert, nennt<br />
man Volladdierer (engl.: full ad<strong>der</strong>) (FA).<br />
Der FA berechnet die Funktion fa : B 3 → B 2 , die durch fa(a0, b0, c) := (s1, s0) mit<br />
2s1 + s0 = a0 + b0 + c definiert ist.<br />
10 / 137
Halb- und Volladdierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Basisbausteine für die Berechnung <strong>der</strong> formalen Summe ist <strong>der</strong> Halbaddierer und <strong>der</strong><br />
Volladdierer.<br />
Definition (Volladdierer)<br />
Einen Schaltkreis, <strong>der</strong> eine 1-Bit Addition mit eingehendem Übertrag realisiert, nennt<br />
man Volladdierer (engl.: full ad<strong>der</strong>) (FA).<br />
Der FA berechnet die Funktion fa : B 3 → B 2 , die durch fa(a0, b0, c) := (s1, s0) mit<br />
2s1 + s0 = a0 + b0 + c definiert ist.<br />
Man überlegt sich, dass für<br />
s0 = a0 ⊕ b0 ⊕ c<br />
s1 = (a0 ∧ b0) ∨ (c ∧ (a0 ⊕ b0))<br />
die Gleichung<br />
gilt.<br />
2 · s1 + s0 = a0 + b0 + c<br />
11 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Korrektheitsbeweis zum Volladdierer<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Man überlegt sich, dass für<br />
s0 = a0 ⊕ b0 ⊕ c<br />
s1 = (a0 ∧ b0) ∨ (c ∧ (a0 ⊕ b0))<br />
die Gleichung 2 · s1 + s0 = a0 + b0 + c gilt.<br />
a0 b0 c a0 + b0 + c s1 s0 2 · s1 2 · s1 + s0<br />
0 0 0 0 0 0 0 0<br />
0 0 1 1 0 1 0 1<br />
0 1 0 1 0 1 0 1<br />
0 1 1 2 1 0 2 2<br />
1 0 0 1 0 1 0 1<br />
1 0 1 2 1 0 2 2<br />
1 1 0 2 1 0 2 2<br />
1 1 1 3 1 1 2 3<br />
12 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten von Halb- und Volladdierer<br />
Definition (Aktive Fläche und Laufzeit einer Schaltung)<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Unter den Kosten area(C) eines allgemeinen Schaltkreises C verstehen wir im<br />
Folgenden die Anzahl <strong>der</strong> in dem Schaltkreis enthaltenen Bausteine aus B2.<br />
Die Tiefe depth(C) einer Schaltung C ist gegeben durch die Länge eines längsten<br />
Pfades von einem primären Eingang zu einem primären Ausgang <strong>der</strong> Schaltung.<br />
Example<br />
Es gilt area(HA) = 2, depth(HA) = 1 sowie area(FA) = 5, depth(FA) = 3.<br />
13 / 137
Carry-Ripple-Addierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Der Carry-Ripple-Addierer setzt die Schulmethode für die Addition 1-zu-1 um!<br />
14 / 137
Carry-Ripple-Addierer<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Der Carry-Ripple-Addierer setzt die Schulmethode für die Addition 1-zu-1 um!<br />
15 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Carry-Ripple-Addierers<br />
Es gilt<br />
area(CRn)<br />
= area(CRn−1) + area(FA)<br />
= area(CRn−1) + 5<br />
= 5 · n<br />
16 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Carry-Ripple-Addierers<br />
Es gilt<br />
area(CRn)<br />
= area(CRn−1) + area(FA)<br />
= area(CRn−1) + 5<br />
= 5 · n<br />
depth(CRn)<br />
= 3 + 2 · (n − 1)<br />
Letzteres gilt, da <strong>der</strong> längste Pfad bei a0<br />
o<strong>der</strong> b0 startet und dann über die Übertragsleitungen<br />
zu sn−1 läuft.<br />
17 / 137
Geht’s besser?<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Um von <strong>der</strong> linearen Laufzeit wegzukommen, müssen weitergehende Überlegungen<br />
gemacht werden.<br />
18 / 137
Geht’s besser?<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Um von <strong>der</strong> linearen Laufzeit wegzukommen, müssen weitergehende Überlegungen<br />
gemacht werden.<br />
Unser Ziel ist ein n-Bit Addierer mit<br />
einer Tiefe von cd · log 2 n<br />
einer Fläche von ca · n<br />
19 / 137
Geht’s besser?<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Um von <strong>der</strong> linearen Laufzeit wegzukommen, müssen weitergehende Überlegungen<br />
gemacht werden.<br />
Unser Ziel ist ein n-Bit Addierer mit<br />
einer Tiefe von cd · log 2 n<br />
einer Fläche von ca · n<br />
20 / 137
Geht’s besser?<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Um von <strong>der</strong> linearen Laufzeit wegzukommen, müssen weitergehende Überlegungen<br />
gemacht werden.<br />
Unser Ziel ist ein n-Bit Addierer mit<br />
einer Tiefe von cd · log 2 n<br />
einer Fläche von ca · n<br />
21 / 137
Geht’s besser?<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Um von <strong>der</strong> linearen Laufzeit wegzukommen, müssen weitergehende Überlegungen<br />
gemacht werden.<br />
Unser Ziel ist ein n-Bit Addierer mit<br />
einer Tiefe von cd · log 2 n<br />
einer Fläche von ca · n<br />
wobei cd und ca kleine Konstanten (die unabhängig von n sind) sein.<br />
22 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Conditional-Sum-Addierer<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
23 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Conditional-Sum-Addierer<br />
Grundidee eines Conditiona-Sum-Addierers (CSA)<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
1 Zerteile die beiden Eingabeworte (Operanden) in zwei Teile, in die<br />
höherwertigen Stellen<br />
nie<strong>der</strong>wertigen Stellen<br />
<strong>der</strong> beiden Operanden.<br />
2 Berechne unabhängig voneinan<strong>der</strong> die Additionen auf den nie<strong>der</strong>wertigen und<br />
den höherwertigen Stellen!<br />
3 Wähle in Abhängigkeit von dem durch die nie<strong>der</strong>wertigen Stellen generierten<br />
Übertrag das korrekte Ergebnis aus.<br />
24 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Conditional-Sum-Addierer<br />
Grundidee eines Conditiona-Sum-Addierers (CSA)<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
1 Zerteile die beiden Eingabeworte (Operanden) in zwei Teile, in die<br />
höherwertigen Stellen<br />
nie<strong>der</strong>wertigen Stellen<br />
<strong>der</strong> beiden Operanden.<br />
2 Berechne unabhängig voneinan<strong>der</strong> die Additionen auf den nie<strong>der</strong>wertigen und<br />
den höherwertigen Stellen!<br />
3 Wähle in Abhängigkeit von dem durch die nie<strong>der</strong>wertigen Stellen generierten<br />
Übertrag das korrekte Ergebnis aus.<br />
25 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Conditional-Sum-Addierer<br />
Grundidee eines Conditiona-Sum-Addierers (CSA)<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
1 Zerteile die beiden Eingabeworte (Operanden) in zwei Teile, in die<br />
höherwertigen Stellen<br />
nie<strong>der</strong>wertigen Stellen<br />
<strong>der</strong> beiden Operanden.<br />
2 Berechne unabhängig voneinan<strong>der</strong> die Additionen auf den nie<strong>der</strong>wertigen und<br />
den höherwertigen Stellen!<br />
Da wir nicht vorab wissen können, welcher Übertrag von den nie<strong>der</strong>wertigen<br />
Stellen berechnet wird, berechnen wir die Addition auf den höherwertigen<br />
Stellen sowohl für den Fall, dass <strong>der</strong> eingehende, von den nie<strong>der</strong>wertigen<br />
Stellen generierte Übertrag gleich 1 als auch für den Fall, dass er gleich 0 ist.<br />
3 Wähle in Abhängigkeit von dem durch die nie<strong>der</strong>wertigen Stellen generierten<br />
Übertrag das korrekte Ergebnis aus.<br />
26 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Conditional-Sum-Addierer<br />
Grundidee eines Conditiona-Sum-Addierers (CSA)<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
1 Zerteile die beiden Eingabeworte (Operanden) in zwei Teile, in die<br />
höherwertigen Stellen<br />
nie<strong>der</strong>wertigen Stellen<br />
<strong>der</strong> beiden Operanden.<br />
2 Berechne unabhängig voneinan<strong>der</strong> die Additionen auf den nie<strong>der</strong>wertigen und<br />
den höherwertigen Stellen!<br />
Da wir nicht vorab wissen können, welcher Übertrag von den nie<strong>der</strong>wertigen<br />
Stellen berechnet wird, berechnen wir die Addition auf den höherwertigen<br />
Stellen sowohl für den Fall, dass <strong>der</strong> eingehende, von den nie<strong>der</strong>wertigen<br />
Stellen generierte Übertrag gleich 1 als auch für den Fall, dass er gleich 0 ist.<br />
3 Wähle in Abhängigkeit von dem durch die nie<strong>der</strong>wertigen Stellen generierten<br />
Übertrag das korrekte Ergebnis aus.<br />
27 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
28 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
29 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
30 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
31 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
Der Multiplexer <strong>der</strong> Breite p (p = n/2 + 1)<br />
32 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
Der Multiplexer <strong>der</strong> Breite p (p = n/2 + 1)<br />
Es gilt depth(Mux n/2+1) = 3<br />
33 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
34 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
≤ depth(CSA n/4) + 3 + 3<br />
35 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
≤ depth(CSA n/4) + 3 + 3<br />
≤ depth(CSA n/8) + 3 + 3 + 3<br />
36 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
≤ depth(CSA n/4) + 3 + 3<br />
≤ depth(CSA n/8) + 3 + 3 + 3<br />
≤ depth(CSA n/2 k ) + 3k<br />
37 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
≤ depth(CSA n/4) + 3 + 3<br />
≤ depth(CSA n/8) + 3 + 3 + 3<br />
≤ depth(CSA n/2 k ) + 3k<br />
≤ depth(CSA1) + 3 · log 2 n<br />
38 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
depth(CSAn)<br />
≤ depth(CSA n/2) + depth(Mux n/2+1)<br />
= depth(CSA n/2) + 3<br />
≤ depth(CSA n/4) + 3 + 3<br />
≤ depth(CSA n/8) + 3 + 3 + 3<br />
≤ depth(CSA n/2 k ) + 3k<br />
≤ depth(CSA1) + 3 · log 2 n<br />
= 3 · log 2 n + 3<br />
39 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
area(CSAn)<br />
≤ 3 · area(CSA n/2) + area(Mux n/2+1)<br />
40 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Rekursiver Aufbau eines n-Bit Conditional-Sum-Addierers<br />
Der Multiplexer <strong>der</strong> Breite p (p = n/2 + 1)<br />
Es gilt depth(Mux n/2+1) = 3 und area(Mux n/2+1) = 3 · (n/2 + 1) + 1 = 3·n<br />
2<br />
+ 4.<br />
41 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
area(CSAn)<br />
≤ 3 · area(CSA n/2) + area(Mux n/2+1)<br />
= 3 · area(CSA n/2) +<br />
3 · n<br />
2<br />
+ 4<br />
42 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
area(CSAn)<br />
≤ 3 · area(CSA n/2) + area(Mux n/2+1)<br />
3 · n<br />
= 3 · area(CSAn/2) +<br />
2<br />
≤ 10 · n log2 3 − 3 · n − 2<br />
+ 4<br />
43 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
area(CSAn)<br />
≤ 10 · n log 2 3 − 3 · n − 2<br />
depth(CSAn)<br />
≤ 3 · log 2 n + 3<br />
44 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten eines n-Bit Conditional-Sum-Addierers<br />
Es gilt für jede Zweierpotenz n<br />
area(CSAn)<br />
≤ 10 · n log 2 3 − 3 · n − 2<br />
depth(CSAn)<br />
≤ 3 · log 2 n + 3<br />
Unser Ziel war ein n-Bit Addierer mit<br />
Tiefe cd · log 2 n<br />
Fläche ca · n<br />
45 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Beobachtung<br />
Bei <strong>der</strong> Addition muss man den Übertrag ci−1 an <strong>der</strong> Stelle i − 1 kennen, um das<br />
Summenbit si = ai ⊕ bi ⊕ ci−1 ausrechnen zu können. Wenn die ci ’s schnell berechnet<br />
werden können, dann auch die Summenbits.<br />
46 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Beobachtung<br />
Bei <strong>der</strong> Addition muss man den Übertrag ci−1 an <strong>der</strong> Stelle i − 1 kennen, um das<br />
Summenbit si = ai ⊕ bi ⊕ ci−1 ausrechnen zu können. Wenn die ci ’s schnell berechnet<br />
werden können, dann auch die Summenbits.<br />
Wann entsteht ein Übertrag an <strong>der</strong> i − 1. Stelle?<br />
47 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
48 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Man kann drei Fälle unterscheiden:<br />
die Generierung eines Übertrages<br />
die Propagation des Übertrages<br />
die Absorption des Übertrages.<br />
49 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Man kann drei Fälle unterscheiden:<br />
die Generierung eines Übertrages<br />
die Propagation des Übertrages<br />
die Absorption des Übertrages.<br />
50 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Man kann drei Fälle unterscheiden:<br />
die Generierung eines Übertrages<br />
die Propagation des Übertrages<br />
die Absorption des Übertrages.<br />
51 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Man kann drei Fälle unterscheiden:<br />
die Generierung eines Übertrages<br />
die Propagation des Übertrages<br />
die Absorption des Übertrages.<br />
52 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Definition (Generierung und Propagierung eines Übertrages)<br />
Die Stellen i bis j generieren einen Übertrag, falls cj = 1 ist, unabhängig von dem<br />
Wert des Eingangsübertrages ci−1 <strong>der</strong> Stelle i.<br />
53 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Wir betrachten für die folgenden Überlegungen die Stellen i bis j mit i ≤ j als Block.<br />
Definition (Generierung und Propagierung eines Übertrages)<br />
Die Stellen i bis j generieren einen Übertrag, falls cj = 1 ist, unabhängig von dem<br />
Wert des Eingangsübertrages ci−1 <strong>der</strong> Stelle i.<br />
Die Stellen i bis j propagieren einen Übertrag, falls cj = ci−1 gilt.<br />
54 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Grundidee des Carry-Look-Ahead-Addierers<br />
Um Generierung bzw. Propagation zu fassen, definieren wir die Funktionen gj,i<br />
(generate), und pj,i (propagate), mit gj,i , pj,i : B2n → B, 0 ≤ i < n, i ≤ j < n und<br />
1 , Stellen i bis j von a und b generieren einen Übertrag<br />
gj,i (a, b) =<br />
0 , sonst<br />
1 , Stellen i bis j von a und b propagieren einen Übertrag<br />
pj,i (a, b) =<br />
0 , sonst<br />
Um Schreibarbeit zu sparen, lassen wir im Folgenden a und b ”weg”.<br />
55 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Lemma<br />
Für 0 ≤ i < n gilt ci = gi,0 + pi,0 · c−1.<br />
56 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Lemma<br />
Für 0 ≤ i < n gilt ci = gi,0 + pi,0 · c−1.<br />
Eigenschaften:<br />
1 Für i = j mit 0 ≤ i < n gilt<br />
pi,i = ai ⊕ bi<br />
gi,i = ai · bi<br />
57 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Lemma<br />
Für 0 ≤ i < n gilt ci = gi,0 + pi,0 · c−1.<br />
Eigenschaften:<br />
1 Für i = j mit 0 ≤ i < n gilt<br />
pi,i = ai ⊕ bi<br />
gi,i = ai · bi<br />
2 Für i = j mit i ≤ k < j gilt<br />
gj,i = gj,k+1 + pj,k+1 · gk,i<br />
pj,i = pj,k+1 · pk,i .<br />
58 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Lemma<br />
Für 0 ≤ i < n gilt ci = gi,0 + pi,0 · c−1.<br />
Eigenschaften:<br />
1 Für i = j mit 0 ≤ i < n gilt<br />
pi,i = ai ⊕ bi<br />
gi,i = ai · bi<br />
2 Für i = j mit i ≤ k < j gilt<br />
gj,i = gj,k+1 + pj,k+1 · gk,i<br />
pj,i = pj,k+1 · pk,i .<br />
Die Eigenschaften benachbarter Blöcke<br />
lassen sich also verknüpfen zu <strong>der</strong><br />
Eigenschaft des zusammengesetzten<br />
Blockes<br />
(gj,i , pj,i ) = (gj,k+1, pj,k+1) ◦ (gk,i , pk,i )<br />
mit area(◦) = 3 und depth(◦) = 2.<br />
59 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Weitere Eigenschaften:<br />
3 Die Operation ◦ ist assoziativ, d.h.<br />
4 Es gilt<br />
((g1, p1) ◦ (g2, p2)) ◦ (g3, p3) = (g1, p1) ◦ ((g2, p2) ◦ (g3, p3))<br />
(gj,0, pj,0) = (gj,j , pj,j ) ◦ (gj−1,j−1, pj,j−1) ◦ . . . ◦ (g1,1, p1,1) ◦ (g0,0, p0,0)<br />
60 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Eigenschaften von generate und propagate<br />
Weitere Eigenschaften:<br />
3 Die Operation ◦ ist assoziativ, d.h.<br />
4 Es gilt<br />
((g1, p1) ◦ (g2, p2)) ◦ (g3, p3) = (g1, p1) ◦ ((g2, p2) ◦ (g3, p3))<br />
(gj,0, pj,0) = (gj,j , pj,j ) ◦ (gj−1,j−1, pj,j−1) ◦ . . . ◦ (g1,1, p1,1) ◦ (g0,0, p0,0)<br />
61 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Präfix-Berechnung<br />
Die Berechnung von<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
(gj,0, pj,0) = (gj,j , pj,j ) ◦ (gj−1,j−1, pj,j−1) ◦ . . . ◦ (g1,1, p1,1) ◦ (g0,0, p0,0)<br />
für alle 0 ≤ j ≤ n − 1 ist ein allgemeines Problem: +<br />
Setze hierfür yj := yj,0 := (gj,0, pj,0) und xi := xi,i := (gi,i , pi,i )<br />
Definition (parallele Präfix-Funktion)<br />
Sei M eine Menge und sei ◦ : M × M → M eine assoziative Abbildung. Die parallele<br />
Präfix-Funktion (PP n ) ist definiert durch<br />
mit<br />
PP n : M n → M n<br />
und PP n (xn−1, . . . , x0) = (yn−1, . . . , y0)<br />
∀ 0 ≤ j < n : yj = xj ◦ xj−1 ◦ . . . ◦ x0.<br />
Wir nehmen an, dass ◦ durch ein spezielles Gatter berechnet werden kann.<br />
62 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Präfix-Berechnung<br />
Lemma<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Für alle 2-er Potenzen n = 2 i , i ∈ N , kann die Funktion PP n durch einen Schaltkreis<br />
Pn mit Kosten<br />
und Tiefe<br />
area(Pn) ≤ 2 · n · area(◦)<br />
depth(Pn) ≤ (2 · log 2 n − 1) · depth(◦)<br />
berechnet werden.<br />
63 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
64 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
65 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
66 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
= (2 · 1 − 1) · depth(◦)<br />
67 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
= (2 · 1 − 1) · depth(◦)<br />
= (2 · log 2 2 − 1) · depth(◦)<br />
68 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
= (2 · 1 − 1) · depth(◦)<br />
= (2 · log 2 2 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
69 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
= (2 · 1 − 1) · depth(◦)<br />
= (2 · log 2 2 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(P2) = area(◦)<br />
70 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 1, d. h. n = 2:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P2) = depth(◦)<br />
= 1 · depth(◦)<br />
= (2 · 1 − 1) · depth(◦)<br />
= (2 · log 2 2 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(P2) = area(◦)<br />
< 4 · area(◦)<br />
= 2 · n · area(◦)<br />
71 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
72 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
73 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
74 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
= (2 · 2 − 1) · depth(◦)<br />
75 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
= (2 · 2 − 1) · depth(◦)<br />
= (2 · log 2 4 − 1) · depth(◦)<br />
76 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
= (2 · 2 − 1) · depth(◦)<br />
= (2 · log 2 4 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
77 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
= (2 · 2 − 1) · depth(◦)<br />
= (2 · log 2 4 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(P4) = 3 · area(◦) + area(P2)<br />
78 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = 2, d. h. n = 4:<br />
Die parallele Präfix-<br />
Berechnung wird realisiert<br />
durch:<br />
Es gilt:<br />
depth(P4) = 2 · depth(◦) + depth(P2)<br />
= 3 · depth(◦)<br />
= (2 · 2 − 1) · depth(◦)<br />
= (2 · log 2 4 − 1) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(P4) = 3 · area(◦) + area(P2)<br />
≤ 7 · area(◦)<br />
< 8 · area(◦)<br />
= 2 · n · area(◦)<br />
79 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Fall i = k, d. h. n = 2 k :<br />
80 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
81 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
82 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
83 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
= (x2i+1 ◦ x2i ) ◦ . . . ◦ (x1 ◦ x0)<br />
84 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
= (x2i+1 ◦ x2i ) ◦ . . . ◦ (x1 ◦ x0)<br />
= x2i+1 ◦ x2i ◦ . . . ◦ x1 ◦ x0<br />
85 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
= (x2i+1 ◦ x2i ) ◦ . . . ◦ (x1 ◦ x0)<br />
= x2i+1 ◦ x2i ◦ . . . ◦ x1 ◦ x0<br />
y2i = x2i ◦ y ′<br />
i−1<br />
86 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
= (x2i+1 ◦ x2i ) ◦ . . . ◦ (x1 ◦ x0)<br />
= x2i+1 ◦ x2i ◦ . . . ◦ x1 ◦ x0<br />
y2i = x2i ◦ y ′<br />
i−1<br />
= x2i ◦ (x ′ i−1 ◦ . . . ◦ x′ 0 )<br />
87 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Induktiv gilt für alle 0 ≤ i ≤ n<br />
2<br />
y ′<br />
i = x′ i ◦ . . . ◦ x′ 0<br />
mit x ′ j = x2j+1 ◦ x2j .<br />
Damit gilt:<br />
y2i+1 = y ′<br />
i<br />
= x ′ i ◦ . . . ◦ x′ 0<br />
= (x2i+1 ◦ x2i ) ◦ . . . ◦ (x1 ◦ x0)<br />
= x2i+1 ◦ x2i ◦ . . . ◦ x1 ◦ x0<br />
y2i = x2i ◦ y ′<br />
i−1<br />
= x2i ◦ (x ′ i−1 ◦ . . . ◦ x′ 0 )<br />
= x2i ◦ x2i−1 ◦ . . . ◦ x0<br />
<br />
88 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
89 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
90 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
91 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
92 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
93 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(Pn) =<br />
94 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(Pn) =<br />
= area(P n/2) + (n − 1) · area(◦)<br />
95 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(Pn) =<br />
= area(Pn/2) + (n − 1) · area(◦)<br />
≤ (2 · n<br />
+ n − 1) · area(◦)<br />
2<br />
96 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Beweis zur parallelen Präfix-Berechnung<br />
Kosten:<br />
depth(Pn) =<br />
= depth(◦) + depth(P n/2) + depth(◦)<br />
= ((2 · log 2 n/2 − 1) + 2) · depth(◦)<br />
= ((2 · log 2 n − 3) + 2) · depth(◦)<br />
= (2 · log 2 n − 1) · depth(◦)<br />
area(Pn) =<br />
= area(Pn/2) + (n − 1) · area(◦)<br />
≤ (2 · n<br />
+ n − 1) · area(◦)<br />
2<br />
≤ (2 · n − 1) · area(◦)<br />
< 2 · n · area(◦)<br />
97 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Das Schaltbild des Carry-Look-Ahead Addierers<br />
98 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
99 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
100 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
101 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
102 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
103 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
area(CLAn) =<br />
104 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
area(CLAn) =<br />
= area(Pn) + 2 · n + 3 · n<br />
105 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
area(CLAn) =<br />
= area(Pn) + 2 · n + 3 · n<br />
≤ 2 · n · area(◦) + 5 · n<br />
106 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
area(CLAn) =<br />
= area(Pn) + 2 · n + 3 · n<br />
≤ 2 · n · area(◦) + 5 · n<br />
= 6 · n + 5 · n<br />
107 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Theoretische Basis<br />
Halb- und Volladdierer<br />
Carry-Ripple-Addierer<br />
Conditional-Sum-Addierer<br />
Carry-Look-Ahead-Addierer<br />
Kosten des Carry-Look-Ahead Addierers<br />
Kosten:<br />
depth(CLAn) =<br />
= depth(Pn) + 4<br />
= (2 · log 2 n − 1) · depth(◦) + 4<br />
= (2 · log 2 n − 1) · 2 + 4<br />
= 4 · log 2 n + 2<br />
area(CLAn) =<br />
= area(Pn) + 2 · n + 3 · n<br />
≤ 2 · n · area(◦) + 5 · n<br />
= 6 · n + 5 · n<br />
= 11 · n<br />
108 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Das Schaltbild eines Addierers/Subtrahierers<br />
109 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten eines Addierers/Subtrahierers<br />
Kosten:<br />
depth(ADDSUBn) =<br />
= depth(CLAn) + 1<br />
= 4 · log 2 n + 3<br />
area(ADDSUBn) =<br />
= area(CLAn) + n<br />
= 12 · n<br />
110 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
Grundidee <strong>der</strong> Parallelen Multiplikation<br />
111 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
Grundidee <strong>der</strong> Parallelen Multiplikation<br />
Es gilt für die Multiplikation von zwei nichtnegativen Zahlen a = (an−1, . . . , a0) und<br />
b = (bn−1, . . . , b0) (Darstellung ohne Vorzeichen):<br />
i=0<br />
j=0<br />
n−1<br />
〈a〉 · 〈b〉 = ( ai 2 i n−1<br />
) · ( bj 2 j )<br />
= a02 0 〈b〉 + a12 1 〈b〉 + . . . + an−12 n−1 〈b〉.<br />
112 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
Grundidee <strong>der</strong> Parallelen Multiplikation<br />
Es gilt für die Multiplikation von zwei nichtnegativen Zahlen a = (an−1, . . . , a0) und<br />
b = (bn−1, . . . , b0) (Darstellung ohne Vorzeichen):<br />
i=0<br />
j=0<br />
n−1<br />
〈a〉 · 〈b〉 = ( ai 2 i n−1<br />
) · ( bj 2 j )<br />
= a02 0 〈b〉 + a12 1 〈b〉 + . . . + an−12 n−1 〈b〉.<br />
Anschaulich läßt sich das Produkt <strong>der</strong> Summen in einer Matrix analog zu <strong>der</strong><br />
Schulmethode darstellen.<br />
<br />
<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
Jede <strong>der</strong> Zeilen wird Partialprodukt (PaP) genannt und hat 2 · n Stellen.<br />
<br />
<br />
113 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
aufzuaddieren, könnte man n − 1 (2n)-Bit CLA-Addierer benutzen!<br />
<br />
<br />
114 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
aufzuaddieren, könnte man n − 1 (2n)-Bit CLA-Addierer benutzen!<br />
Kosten<br />
depth(Muln) = 1 + log 2 n · depth(CLA2n)<br />
<br />
<br />
115 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
aufzuaddieren, könnte man n − 1 (2n)-Bit CLA-Addierer benutzen!<br />
Kosten<br />
depth(Muln) = 1 + log 2 n · depth(CLA2n)<br />
= 1 + log 2 n · (4 · log 2 2n + 2)<br />
= Θ(log 2 (n))<br />
<br />
<br />
116 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
aufzuaddieren, könnte man n − 1 (2n)-Bit CLA-Addierer benutzen!<br />
Kosten<br />
depth(Muln) = 1 + log 2 n · depth(CLA2n)<br />
= 1 + log 2 n · (4 · log 2 2n + 2)<br />
= Θ(log 2 (n))<br />
area(Muln) = n 2 + (n − 1) · area(CLA2n)<br />
<br />
<br />
117 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
aufzuaddieren, könnte man n − 1 (2n)-Bit CLA-Addierer benutzen!<br />
Kosten<br />
depth(Muln) = 1 + log 2 n · depth(CLA2n)<br />
= 1 + log 2 n · (4 · log 2 2n + 2)<br />
= Θ(log 2 (n))<br />
area(Muln) = n 2 + (n − 1) · area(CLA2n)<br />
= n 2 + (n − 1) · 11 · n<br />
= 12 · n 2 − 11 · n<br />
= Θ(n 2 )<br />
<br />
<br />
118 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation<br />
<br />
<br />
Bessere Idee, um die Zeilen <strong>der</strong> Partialproduktmatrix<br />
aufzuaddieren:<br />
0 an−1bn−1 an−1bn−2 . . . an−1b0 0 . . . 0<br />
. 0 an−2bn−1 . . . an−2b1 an−2b0 0<br />
.<br />
. 0<br />
. .. . ..<br />
. . . . . .<br />
. ..<br />
0<br />
0 . . . . . . 0 a0bn−1 . . . . . . a0b0<br />
3-zu-2-Reduktion<br />
Reduziere parallel jeweils drei Zeilen 〈u〉, 〈v〉, 〈w〉 <strong>der</strong> Partialmatrix zu zwei<br />
Ausgabeworten 〈s〉, 〈c〉, mit<br />
〈u〉 + 〈v〉 + 〈w〉 = 〈s〉 + 〈c〉<br />
<br />
<br />
119 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 3-zu-2-Reduktionen<br />
3-zu-2-Reduktion<br />
Reduziere parallel jeweils drei Zeilen 〈u〉, 〈v〉, 〈w〉 <strong>der</strong> Partialmatrix zu zwei<br />
Ausgabeworten 〈s〉, 〈c〉, mit 〈u〉 + 〈v〉 + 〈w〉 = 〈s〉 + 〈c〉<br />
Strukturell besteht ein solcher Carry-Save-Addierer (CSavA) aus FA-Zellen, wobei <strong>der</strong><br />
Carry-Ausgang nicht in den nachfolgenden FA eingeht, son<strong>der</strong>n an die nächste<br />
Addiererstufe weitergereicht wird, d. h.<br />
〈u〉 + 〈v〉 + 〈w〉 = 〈(sn−1, . . . , s0)〉 + 〈(cn, cn−1 . . . , c1, 0)〉<br />
120 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
121 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
122 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
= 2 · depth(FA)<br />
123 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
= 2 · depth(FA)<br />
= 6<br />
= O(1)<br />
124 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
= 2 · depth(FA)<br />
= 6<br />
= O(1)<br />
area(4-zu-2n) = 2 · area(CSavAn)<br />
125 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
= 2 · depth(FA)<br />
= 6<br />
= O(1)<br />
area(4-zu-2n) = 2 · area(CSavAn)<br />
= 2 · n · area(FA)<br />
126 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation: 4-zu-2-Reduktionen<br />
Zwei 3-zu-2-Reduktionsbausteine können zu einem<br />
4-zu-2-Reduktionsbaustein zusammengeschaltet<br />
werden!<br />
Kosten<br />
depth(4-zu-2n) = 2 · depth(CSavA)<br />
= 2 · depth(FA)<br />
= 6<br />
= O(1)<br />
area(4-zu-2n) = 2 · area(CSavAn)<br />
= 2 · n · area(FA)<br />
= 10 · n<br />
= O(n)<br />
127 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation nach Luk&Vuillemin<br />
128 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation nach Luk&Vuillemin<br />
129 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation nach Luk&Vuillemin<br />
130 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Parallele Multiplikation nach Luk&Vuillemin<br />
131 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten eines n-Bit Luk&Vuillemin Multiplizieres<br />
Kosten:<br />
depth(LVn) =<br />
= log 2 n · depth(4-zu-22n) + depth(CLAn)<br />
132 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten eines n-Bit Luk&Vuillemin Multiplizieres<br />
Kosten:<br />
depth(LVn) =<br />
= log 2 n · depth(4-zu-22n) + depth(CLAn)<br />
= O(log n)<br />
133 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten eines n-Bit Luk&Vuillemin Multiplizieres<br />
Kosten:<br />
depth(LVn) =<br />
= log 2 n · depth(4-zu-22n) + depth(CLAn)<br />
= O(log n)<br />
area(LVn) =<br />
= (n − 1) · area(4-zu-22n) + area(CLAn)<br />
134 / 137
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
Kosten eines n-Bit Luk&Vuillemin Multiplizieres<br />
Kosten:<br />
depth(LVn) =<br />
= log 2 n · depth(4-zu-22n) + depth(CLAn)<br />
= O(log n)<br />
area(LVn) =<br />
= (n − 1) · area(4-zu-22n) + area(CLAn)<br />
= O(n 2 ) + O(n)<br />
= O(n 2 )<br />
135 / 137
Prinzipieller Aufbau einer ALU<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
136 / 137
Unser ”Hochhaus”<br />
Addierer<br />
Subtrahierer<br />
Multiplizierer<br />
ALU<br />
Question Time<br />
[http://www.moselschatulle.de/]<br />
Sicht auf die Altstadt und das Europa-Zentrum<br />
insbeson<strong>der</strong>e auf ”das Hochhaus” mit seinen 22 Stockwerken.<br />
137 / 137