Rechnerarithmetik Vorlesung im Sommersemester 2008 Eberhard Zehendner FSU Jena Thema: Addierschaltungen Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 1 / 19
Addierer für UInt 2 (l) Berechnung von C = A + B meist in UInt 2 (l + 1): (C l 1,..., C 0 ) = (A + B) mod 2 l Höchstwertiges Resultatbit erlaubt Überlauferkennung: C l = 1 A + B 2 l Überlauf. Bei regulärem Aufbau (nicht hardware-minimal) fällt C l ohnehin an. Optionen für die Überlaufbehandlung: C l wird nicht berechnet (irregulärer Hardwareaufbau): zirkuläre Arithmetik. C l wird berechnet, aber ignoriert (regulärer Hardwareaufbau): zirkuläre Arithmetik. Wert von C l wird in ein Flag abgespeichert: Kann für Überlaufarithmetik, Sättigungsarithmetik oder Überlauferkennung in zirkulärer Arithmetik benutzt werden. Zustandsänderung in C l löst Unterbrechung aus: Kann für Überlaufarithmetik, Sättigungsarithmetik oder Überlauferkennung in zirkulärer Arithmetik benutzt werden. Berechnung der Summe in all diesen Fällen zunächst gleich! In Sättigungsarithmetik bewirkt C l = 1 zusätzlich das Setzen von C auf den Wert 1... 1. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 2 / 19
Beispieladditionen in UInt 2 (4) A (1011) 2 = (11) 10 (1011) 2 = (11) 10 B (0011) 2 = (3) 10 (0111) 2 = (7) 10 exakte Arithmetik A + B (01110) 2 = (14) 10 (10010) 2 = (18) 10 Überlaufarithmetik (1110) 2 = (14) 10 undefiniert zirkuläre Arithmetik A 16 B (1110) 2 = (14) 10 (0010) 2 = (2) 10 Sättigungsarithmetik (1110) 2 = (14) 10 (1111) 2 = (15) 10 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 3 / 19
Sättigung der Addition in UInt 2 (l) Multiplexer (Schaltung) Oder-Verknüpfung (Schaltung) Bedingter Sprung (Maschinensprache) Folge arithmetisch/logischer Operationen (Maschinensprache) Bedingte Anweisung (höhere Programmiersprache) Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 4 / 19
Grundbausteine: Halbaddierer (HA) und Volladdierer (VA) A + B = 2 C + S A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 A i + B i + C i = 2 C i+1 + S i A i B i C i C i+1 S i 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 5 / 19
Halbaddierer: Eigenschaften A + B = 2 C + S A B C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 addiert zwei Eingänge derselben Bitposition (single bit binary adder) liefert 2-Bit-Summe, UInt 2 (1) UInt 2 (1) UInt 2 (2) Ergebnis interpretierbar als Carry-Save-Darstellung der Summe Ausgang S alleine entspricht A 2 B in zirkulärer Arithmetik Wertetabelle durch algebraische Gleichung eindeutig bestimmt verschiedene (aber äquivalente) logische Gleichungen aus der Wertetabelle ableitbar Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 6 / 19
Halbaddierer: Implementierungsvarianten Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 7 / 19
Volladdierer: Eigenschaften A i + B i + C i = 2 C i+1 + S i A i B i C i C i+1 S i 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 addiert drei Eingänge derselben Bitposition (3-operand single bit binary adder) liefert 2-Bit-Summe, UInt 2 (1) UInt 2 (1) UInt 2 (1) UInt 2 (2) Ergebnis interpretierbar als Carry-Save-Darstellung der Summe Wertetabelle durch algebraische Gleichung eindeutig bestimmt verschiedene (aber äquivalente) logische Gleichungen aus der Wertetabelle ableitbar Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 8 / 19
Zeitliche Modellierung eines Volladdierers C i+1 (t) = A i (t 2) B i (t 2) + (A i (t 4) B i (t 4)) C i (t 2) S i (t) = A i (t 4) B i (t 4) C i (t 2) Dabei wird t in Einheiten von t g (eine Gattergrundschaltzeit) gemessen und t and = t or = t g sowie t xor = 2 t g angenommen. Wir setzen t VA = t and + t or zur Beschreibung der Verzögerung auf dem Übertragspfad. Zuordnung der Operanden zu den Eingängen A i, B i, C i nach boolescher Logik beliebig. Minimierung des kritischen Pfads durch Anlegen des zuletzt stabilen Signals an C i. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 9 / 19
Hilfsgrößen der Übertragserzeugung Für die Codierung 0 = false, 1 = true erweisen sich folgende Definitionen als nützlich: G i = A i B i generieren (definitiv Ausgangsübertrag) P i = A i B i propagieren (Eingangsübertrag wird durchgeleitet) T i = A i + B i transferieren ( = G i + P i ) L i = A i B i löschen (definitiv kein Ausgangsübertrag) Genau eines der Prädikate G i, P i oder L i besitzt den Wert true. Genau eines der Prädikate T i oder L i besitzt den Wert true. Wichtig: G i, P i, T i, L i direkt und simultan aus A i und B i, also ohne Kenntnis von C i, berechenbar. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 10 / 19
Implementierungsoptionen für Volladdierer S i = A i B i C i + A i B i C i + A i B i C i + A i B i C i = A i B i C i (3-Bit-XOR) = A i (B i C i ) = (A i B i ) C i = P i C i Formel P i C i akzentuiert die Assimilation der Partialsumme mit dem Eingangsübertrag. C i+1 = A i B i + A i C i + B i C i (3-Bit-Majoritätsfunktion) = A i B i + (A i + B i ) C i = G i + T i C i = A i B i + (A i B i ) C i = G i + P i C i C 0 wird bei der Addition formal identisch Null gesetzt. Formeln S i = P i C i und C i+1 = G i + P i C i zusammen ermöglichen gemeinsame Verwendung des Signals P i. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 11 / 19
Übertragserzeugung aus den Hilfsgrößen C i+1 = G i + P i C i Ripple-Carry-Addierer C i+1 = G i + T i C i Carry-Skip-Addierer Ĉ km = C km + km 1 T i Ĉ km m i=km m C i+1 = L i (G i + P i C i ) Manchester-Addierer C i+1 = G i + P i C i Carry-Completion-Addierer C i+1 = L i + P i C i Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 12 / 19
Standardentwurf von CMOS-Schaltungen Zu berechnen sei eine boolesche Funktion y = f (x 1,..., x n). Gesuchte CMOS-Schaltung besitzt NMOS-Netzwerk (N-Netz) und PMOS-Netzwerk (P-Netz). Das N-Netz kann den Ausgang y mit Masse verbinden. Die Transistoren des N-Netzes leiten, wenn am Eingang die Versorgungsspannung anliegt. Das N-Netz implementiert daher eine Funktion y = g(x 1,..., x n). Damit hat g(x 1,..., x n) = f (x 1,..., x n) zu gelten. Das P-Netz kann den Ausgang y mit der Versorgungsspannung verbinden. Die Transistoren leiten, wenn am Eingang Masse anliegt. Das P-Netz implementiert daher eine Funktion y = h(x 1,..., x n). Damit hat h(x 1,..., x n) = f (x 1,..., x n) zu gelten. Ein N-Netz für g = g 1 g 2 wird als Reihenschaltung der Subnetze für g 1 und g 2 realisiert, für g = g 1 g 2 als Parallelschaltung. Ebenso für ein P-Netz mit boolescher Form h. Ein nur aus einer Variablen x i bestehendes N-Netz wird durch einen NMOS-Transistor mit Eingang x i realisiert, ein nur aus einer negierten Variablen x i bestehendes P-Netz durch einen PMOS-Transistor mit Eingang x i. Es folgt, dass die booleschen Formen g und h zueinander dual sind. Beispiel: f (A, B, C) = (A B) C g(a, B, C) = (A B) C, h(a, B, C) = (A B) C Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 13 / 19
Volladdierer in CMOS-Standardaufbau (aus N. Reifschneider: CAE-gestützte IC-Entwurfsmethoden, 1998, p. 125) Kaskadierter Aufbau. Nur 24 Transistoren. Ergebnisse S i und C i+1 fallen invertiert an. Wenn nicht negierte Signale gewünscht werden, sind zwei Inverter (vier Transistoren) mehr nötig. Kritischer Pfad für Carry-zu-Carry geht durch zwei Gatter. Kritischer Pfad für Carry-zu-Sum geht durch drei Gatter. C i+1 = A i B i + (A i + B i ) C i S i = A i B i C i + (A i + B i + C i ) C i+1 Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 14 / 19
Selbstdualität von XOR und Majoritätsfunktion Die Volladdiererfunktionen S i (3-Bit-XOR) und C i+1 (3-Bit-Majoritätsfunktion) sind selbstdual: S i (A i, B i, C i ) = S i (A i, B i, C i ) C i+1 (A i, B i, C i ) = C i+1 (A i, B i, C i ) Eine Überprüfung ist leicht an Hand der Wertetabelle des Volladdierers möglich. Selbstdualität ist eine seltene Eigenschaft, die zu Optimierungen genutzt werden kann. Aus f (x) = f (x) folgt zum Beispiel g(x) = h(x) für den CMOS-Standardentwurf. Die Selbstdualität impliziert die Inversionseigenschaft des Volladdierers: Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 15 / 19
Volladdierer als Mirror Adder Vollständig symmetrischer CMOS-Addierer (mirror adder). Wie zuvor 28 Transistoren. N-Netz nicht dual zu P-Netz. Selbstdualität des Volladdierers ausgenutzt. Zweck: Weniger Transistoren in Reihe, Widerstand reduziert; uniformes Layout. Kritischer Pfad für Carry-zu-Carry geht immer noch durch zwei Gatter. Kritischer Pfad für Carry-zu-Sum geht immer noch durch drei Gatter. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 16 / 19
Transistor-Dimensionierung im Mirror Adder Beschleunigung durch geeignete Dimensionierung der Transistoren. Nur Transistoren im markierten Bereich liegen auf kritischem Pfad. Alle anderen Transistoren sollten klein sein, um getriebene Last zu reduzieren. Dimensionierungsbeispiel in N. Weste, K. Eshraghian: Principles of CMOS VLSI design. Gilt als langsam, auch bei sorgfältiger Optimierung. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 17 / 19
Nicht kompositionale Implementierung des Volladdierers Für seriellen Addierer, Carry-Save-Addierer, etc. ist es sinnvoll, annähernd gleiche Latenzen für Summe und Carry zu haben. 26 Transistoren (plus 6 Transistoren der Inverter für A, B, C). Kritischer Pfad für Carry-zu-Carry und Carry-zu-Sum geht durch zwei Gatter. Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 18 / 19
Volladdierer mit Transmissionsgattern Anzahl der Transistoren kann durch Transmissionsgatter verringert werden. 26 Transistoren. Mit Inverter für XNOR nur 24 Transistoren, aber langsamer. Variante mit 18 Pass-Transistoren bekannt! Eberhard Zehendner (FSU Jena) Rechnerarithmetik Addierschaltungen 19 / 19