3.5 Carry-Look-Ahead 145 Kaskadierung von Carry-Look-Ahead-Schaltungen Mit einer Kaskadierung kann der mit großer Wortbreite einhergehenden großen Anzahl an Gattern entgegengewirkt werden. Dazu werden Carry-Look-Ahead-Schaltungen hoher Wortbreite aus mehreren Carry-Look-Ahead-Schaltungen niedrigerer Wortbreite zusammengesetzt. Nachfolgende Abbildung zeigt eine Erweiterung der bekannten 4 Bit Carry-Look-Ahead-Schaltung zur Ausgabe von Generate- und Propagate-Signalen. x y 3 2 3 0 1 3 2 1 0 0 2 1 1 0 1 0 1 0 0 :÷ | 1 G inv g3 p3 g2 x3 y3 p2 c2 g1 x2 VA c3 P y2 p1 g0 c1 x1 VA s3 c2 3 y1 p0 c0 x0 VA s2 c1 VA s1 2 y0 c-1 c0 s0 1 0 s C Zur Zusammenfassung mehrerer Carry-Look-Ahead-Schaltungen werden die Generate/Propagate-Signale mit einer sog. Carry-Look-Ahead-Einheit verbunden. 4 4 4 4 4 4 4 4 CLA CLA CLA CLA 4 4 4 4 1 x y inv. . s G3P3 C3 G2P2 C2 G1P1 C1 G0P0 C0 Carry-Look-Ahead-Einheit GG0 PP0 CC0 146 3 Arithmetische Schaltungen Die Carry-Look-Ahead-Einheit berechnet aus den Eingangssignalen CC0 , P0 , P1 , P2 , P3 , G0 , G1 , G2 und G3 die Überträge C0 , C1 , C2 und C3 und leitet diese an die jeweiligen Carry-Look-Ahead-Schaltungen weiter. Da Generate-/Propagate-Signale auf zwei unterschiedlichen Hierarchie-Ebenen berechnet werden, spricht man von einer zweistufigen Carry-Look-Ahead-Schaltung. Über die Ein-/Ausgänge CC0 , PP0 und GG0 können mehrere 16 Bit Carry-Look-Ahead-Schaltungen zu einer Carry-Look-Ahead-Schaltung mit noch größerer Wortbreite, z.B. 64 Bit, zusammengesetzt werden. a) Wie muss die zweistufigen Carry-Look-Ahead-Schaltung zur Subtraktion beschaltet werden? in + auf Cco setzen 1 b) Hängen die Signale G und P von Carry-In-Signal C ab? Warum? Nein von c) Mp Mpu nach am am C P und G , sein da , sollen sonst unabhängig " wieder durch Bestimmen Sie die Anzahl der Gatterlaufzeiten ⌧ für die einstufige 4 Bit CarryLook-Ahead-Schaltung bei einer Subtraktion für den Fall Fan-In = 4. ttläz 3kt tcllnltipkxf 37 Inverter . g o y . y . ° rippe C : Inverter über nach P nach G nach S nach Mux 2T : : / : 3T 3T +3T = = 5g 6T s :3 7T lu " 3.5 Carry-Look-Ahead 147 d) Bestimmen Sie die Anzahl der Gatterlaufzeiten ⌧ falls Fan-In = 2. ⇐ - ⇐ - Em mu am am . yoss yes . Ja o . ⇒ criss ⇒ G - TEE QF F Ezct 9T : P : - 6T : 8T : : 5T ( 1 mehr bei 4- fach UND 148 3 Arithmetische Schaltungen Im Folgenden wird die Carry-Look-Ahead-Einheit betrachtet. 4 4 4 4 4 4 4 4 CLA CLA CLA CLA 4 4 4 4 x y inv. 1 s G3P3 C3 G2P2 C2 G1P1 C1 G0P0 C0 Carry-Look-Ahead-Einheit GG0 PP0 e) CC0 Bestimmen Sie die Signale C0 , C1 , C2 und C3 in Abhängigkeit der Signale CC0 , P0 , P1 , P2 , P3 , G0 , G1 , G2 und G3 . Co . . . cn = Cz ° C Co F = ↳ Go V ( Po ^ C Co ) Gn V ( Ps ^ Go v Gn ) ) Gzv ( Pz = ( f) pz n ^ Po Pen v n ( Pn ( Pz C Co ) ^ n Po 1 Pen Go Bestimmen Sie die Signale GG0 und PP0 in Abhängigkeit der Signale P0 , P1 , P2 , P3 , G0 , G1 , G2 und G3 . Ppo GG P = o = , Gs ( B Pz n v ~ n Pn ( Bn Gz Pz n R Po n ) v 1 (B Go n ) Pz n CCD Gr ) V ) V 3.5 Carry-Look-Ahead 149 g) Bestimmen Sie für Fan-In = 4 die Anzahl der Gatterlaufzeiten ⌧ der Carry-LookAhead-Einheit von den Eingängen zu den Ausgängen C3 , GG0 und PP0 . ↳ Ptt , GGO h) Ko d.h. , , dh . P / GIP Ppoi1 : → d.h.MG 2÷ → GGO : 2T f : Skizzieren Sie für Fan-In = 2 eine Gatterschaltung zur Bestimmung von PP0 . Bestimmen Sie die maximale Anzahl an Gatterlaufzeiten ⌧ . - CE , - i) ↳ → ⇐ - Fn : 3 Skizzieren Sie für Fan-In = 2 eine Gatterschaltung zur Bestimmung von GG0 . Zeichnen Sie den kritischen Pfad ein und bestimmen Sie die maximale Anzahl an Gatterlaufzeiten ⌧ . IÄTEE -1=1 : Eu ICEI ⇐ iii a. 150 T j) 3 Arithmetische Schaltungen Skizzieren Sie für Fan-In = 2 eine Gatterschaltung zur Bestimmung von C3 . Zeichnen Sie den kritischen Pfad ein und bestimmen Sie die maximale Anzahl an Gatterlaufzeiten ⌧ . Nehmen Sie die für Fan-In = 4 bestimmten Gatterlaufzeiten an, vgl. c), f), g). k) Bestimmen Sie die maximale Gatterlaufzeit der zweistufigen 16 Bit Carry-LookAhead-Schaltung zur korrekten Bestimmung von s. Ts = l) ( Txtynps MAX = 1 THING TG (7,6+2+3) max = , P t AS ) TGP pcst 11T Bestimmen Sie die maximale Gatterlaufzeit der zweistufigen 16 Bit Carry-LookAhead-Schaltung zur korrekten Bestimmung von PP0 . Tppo Tx = , ftp.xppo p ⇒ y ~ um flg C = 5T + T = 6T - 3.5 Carry-Look-Ahead 151 m) Bestimmen Sie die maximale Gatterlaufzeit der zweistufigen 16 Bit Carry-LookAhead-Schaltung zur korrekten Bestimmung von GG0 . TGGO Tx , p ⇒ y Tag 1 → G) t PAGETT TG ← fl 9) ( max = , 6T = : t zu = Nachfolgende Abbildung zeigt eine dreistufige Carry-Look-Ahead-Schaltung zur Verarbeitung von 64 Bit breiten Zahlen. x 64 CLA-Einheit d GG3 PP3 CC3 y 64 add/sub CLA-Einheit c GG2 PP2 CC2 CLA-Einheit b GG1 PP1 CC1 CLA-Einheit a GG0 PP0 CC0 CLA-Einheit e CC4 ÜberlaufErkennung 64 s n) Bestimmen Sie die max. Gatterlaufzeit zur Berechnung von CC3 für Fan-In = 4. 152 3 Arithmetische Schaltungen o) Bestimmen Sie die maximale Gatterlaufzeit zur korrekten Bestimmung von s für Fan-In = 4. p) Bestimmen Sie die maximale Gatterlaufzeit zur korrekten Bestimmung des CarryOuts CC4 für Fan-In = 4. 3.7 Kombinatorischer Multiplizierer 153 3.6 Addition und Subtraktion von Gleitkommazahlen Zur Addition von Gleitkommazahlen wird auf Festkomma-Addierer und -Subtrahierer zurückgegriffen. Zwei positive Gleitkommazahlen können wie folgt addiert werden: • Als Exponent des Ergebnisses wird der größere Exponent verwendet • Bilden der Differenz der beiden Exponenten • Mantisse der Zahl mit dem kleineren Exponenten zusammen mit der führenden ‘‘1,’’ um die zuvor berechnete Differenz nach rechts schieben • Beide Mantissen addieren • Falls Ergebnis nicht in Form ‘‘1,...’’ ist, Mantisse um 1 Stelle nach rechts schieben und 1 zum Ergebnis-Exponenten addieren (= Re-Normalisieren) Um Gleitkommazahlen zu subtrahieren, kann wie oben vorgegangen werden, wenn der Subtrahend negiert wird. Das gleiche gilt für die Addition von Zahlen unterschiedlichen Vorzeichens. 3.7 Kombinatorischer Multiplizierer Bei der Multiplikation gilt allgemein: Multiplikator · Multiplikand = Produkt Mit Multiplikator x und Multiplikand y berechnet sich bei vorzeichenlosen Zahlen das Produkt z zu: x3 + + + = z7 x2 x 3 · y3 z6 0000 ÷÷ x1 x0 x2 · y 3 x3 · y 2 z5 x1 · y3 x2 · y2 x3 · y1 z4 · y3 x 0 · y3 x 1 · y2 x 2 · y1 x 3 · y0 z3 y2 x0 · y 2 x1 · y 1 x2 · y 0 y1 x0 · y1 x1 · y0 y0 x 0 · y0 z2 z1 z0 Die Multiplikation zweier n Ziffern breiter Zahlen ergibt ein 2n breites Produkt. Das Produkt berechnet sich als Summe von n Teilprodukten. Die Multiplikation der Einzel-Terme xi · yj entspricht einer logischen UND-Verknüpfung. Die Addition der Teilprodukte xi · yj kann mit Halb- und Volladdierern durchgeführt werden. 154 a) 3 Arithmetische Schaltungen Tragen Sie in nachfolgende Abbildung Verbindungen zur Realisierung der vorzeichenlosen Multiplikation ein. x3 Eigene Lösung: x3 + + + = x2 z7 x1 x2 x1 x0 x 3 · y3 z6 x2 · y 3 x3 · y 2 z5 x1 · y3 x2 · y2 x3 · y1 z4 x0 | × y3 · ? . · y3 x 0 · y3 x 1 · y2 x 2 · y1 x 3 · y0 z3 y2 y2 x0 · y 2 x1 · y 1 x2 · y 0 y1 x0 · y1 x1 · y0 y0 x0 O · y0 I V z2 z1 y1 z0 y0 . t.gl?Ty? ° 9 IY µ ;) × g) ? , a q b ) • y . , ) s p . a HA cout ? b b cin a VA cout • . b cout g) cin cout cin a b cin a VA cout s ' a VA s a VA b cin s VA a cout b HA s cout s cin a b cout s ... a b cin a VA cout VA s z7 b cout z6 b VA cout s z5 s z4 HA cout z3 s z2 z1 b HA Do .dz/.: a cin z0 s 3.7 Kombinatorischer Multiplizierer 155 Zur Mitschrift: x3 + + + = x3 x2 z7 x1 x0 a x2 x1 x0 x 3 · y3 z6 x2 · y 3 x3 · y 2 z5 x1 · y3 x2 · y2 x3 · y1 z4 y3 · b a HA cout a b cin a VA cout a b cin a VA cout s cout cin a cout z6 b s cout cin a cout z5 b y2 x0 · y 2 x1 · y 1 x2 · y 0 y1 x0 · y1 x1 · y0 y0 x 0 · y0 z2 z1 z0 y1 a b y0 cin a VA cout s cin a b cout HA cout s cin a b cout s HA cout z3 s z2 z1 b HA s s s z4 cin VA VA s y2 VA VA VA s z7 b b b · y3 x 0 · y3 x 1 · y2 x 2 · y1 x 3 · y0 z3 z0 s 156 3 Arithmetische Schaltungen b) Tragen Sie in die Multiplizierer-Schaltung den längsten Pfad ein. Wie lange (in Gatterlaufzeiten ⌧ ) dauert die Ausführung? Der Hardwareaufwand der gezeigten Schaltung ist sehr hoch: Mit steigender Wortbreite n steigt der notwendige Hardwareaufwand mit ca. n2 . 3.8 Sequentieller Multiplizierer 157 3.8 Sequentieller Multiplizierer Mit einer sequentiellen Schaltung kann der Hardwareaufwand reduziert werden. Die nächste Abbildung skizziert eine sequentielle Schaltung, die zur Multiplikation vorzeichenloser Zahlen der Wortbreite n = 4 verwendet werden kann. MR y3 y2 y1 y0 Add PR 0 0 0 0 ← dmhipühaud gbit PR0 0 x3 x2 x1 x0 g Nv . 0 des Produkt reg Multiplikator Das Multiplikand-Register MR ist n = 4 Bit breit, das Produkt-Register PR ist 2n + 1 = 9 Bit breit. PR0 ist das niederwertigste Bit des im Produktregister gespeicherten Werts. Der sequentielle Ablauf ist wie folgt: • Zunächst wird der Multiplikand im Multiplikand-Register MR und der Multiplikator in den unteren n Bits des Produkt-Registers abgelegt. Die restlichen Bits des Produktregisters werden mit 0 initialisiert. • Anschließend wird iterativ n = 4 mal folgendes ausgeführt: • Wenn PR0 = 1, dann • wird der in MR stehende Wert zu den Bits PR7 ... PR4 des Produktsregisters addiert; ein ggf. auftretender Überlauf wird in PR8 abgelegt; anschließend • wird das gesamte Produktregister um eine Stelle nach rechts geschoben; dabei wird von links mit Nullen aufgefüllt. • Wenn PR0 = 0, dann • wird keine Addition durchgeführt, sondern lediglich das gesamte Produktregister um eine Stelle nach rechts geschoben; dabei wird wieder von links mit Nullen aufgefüllt. • Nach n = 4 Iterationen (=Runden) steht im Produktregister das Ergebnis. . 158 a) 3 Arithmetische Schaltungen Tragen Sie in folgende Abbildung für n = 4 die Registerinhalte ein, die sich für die Multiplikation 13 · 5 = 65 ergeben. 0 1 1 0 Add 0 Nach Addition: Nach Schieben: 0 000 00101 11 01 11 ¥4574130 Nach Addition: Nach Schieben: 00001 Nach Addition: 0011 ttttt.INT 0 Nach Schieben: .im öööxeiöö Nach Addition: 01000 Nach Schieben: 1 0 Initialisierung Erste Runde → , Erste Runde Zweite Runde 0111 Zweite Runde 0111 Dritte Runde 0011 .io#uoFovn öü Dritte Runde Vierte Runde Vierte Runde