23.07.2013 Aufrufe

Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...

Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...

Grundlegende Schaltungen - Lehrstuhl Technische Informatik der ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!