Teil 2: Rechnerorganisation Inhalt: Zahlendarstellungen Rechnerarithmetik Mikroprogrammierung schrittweiser Entwurf eines hypothetischen Prozessors mit Daten-, Adreß- und Kontrollpfad Speicherorganisation 1 Zahlendarstellungen Zahlendarstellungen in positionaler Notation : n-stellige ganze Dezimalzahl x: x = (x n-1 x n-2... x 2 x 1 x 0 ) 10 = 10 n-1 x n-1 + 10 n-2 x n-2 +... + 10 1 x 1 + 10 0 x 0 mit x i {0,1,2,3,4,5,6,7,8,9} n-stellige ganze Binär- oder Dualzahl y: y = (y n-1 y n-2... y 2 y 1 y 0 ) 2 = 2 n-1 y n-1 + 2 n-2 y n-2 +... + 2 2 y 2 + 2 1 y 1 + 2 0 y 0 mit y i {0,1} 2 1
Zahlendarstellungen (Forts.) Allgemein: b-adisches Zahlensystem Jede natürliche Zahl z mit 0 z 2 n 1 ist eindeutig als n-stellige Zahl zur Basis b darstellbar: z = (z n-1 z n-2... z 2 z 1 z 0 ) b = b n-1 z n-1 + b n-2 z n-2 +... + b 2 z 2 + b 1 z 1 + b 0 z 0 mit Ziffer z i {0,1,2,...,b 1} Typische Werte für Basis b: b=2: Dualzahl b=8: Oktalzahl b=10: Dezimalzahl b=16: Hexadezimalzahl mit z i {0,1,2,...,9,A,B,C,D,E,F} 3 Zahlendarstellungen (Forts.) Verallgemeinerung für Festkommazahlen : Zahl zur Basis b mit k Vor- und m Nachkommastellen : z = (z k-1 z k-2... z 1 z 0, z -1 z -2... z -m ) b = b k-1 z k-1 + b k-2 z k-2 +... + b 2 z 2 + b 1 z 1 + b 0 z 0 + b -1 z -1 + b -2 z -2 +... + b -m z -m Ziffern z k-1 z k-2... z 1 z 0 stellen ganzzahligen Teil, Ziffern z -1 z -2... z -m stellen gebrochenen Teil von z dar gesamte Stellenzahl: n = k + m Ziffern 4 2
Zahlendarstellungen (Forts.) Darstellung positiver und negativer Zahlen in n Stellen: höchstwertige Ziffer z n-1 stellt das Vorzeichen dar (Zahl ist positiv bei z n-1 = 0, negativ bei z n-1 = b 1) für positive Zahl gilt stets: z = (0 z n-2 z n-3... z 1 z 0 ) b drei Möglichkeiten für negative Zahlen (mit z i = b 1 z i ): A) Vorzeichen und Betrag : z = (b 1 z n-2 z n-3... z 1 z 0 ) b B) (b 1)-Komplement : z = (b 1 z n-2 z n-3... z 1 z 0 ) b = b n 1 z C) b-komplement : z = (b 1 z n-2 z n-3... z 1 z 0 ) b +1 = b n z bei A und B hat die Zahl 0 zwei Darstellungen für Binärzahlen (d.h. für b=2) heißt B das Einerkomplement und C das Zweierkomplement 5 Zahlendarstellungen im Digitalrechner ausschließliche Verwendung von Binärzahlen Darstellung negativer Zahlen i.a. im Zweierkomplement Abbildung aller Zahlen auf Worte der Länge w, ggf. durch Ergänzung führender Vorzeichenbits typische Wortlängen: w = 8 (byte, in Mikroprozessoren der ersten Generation, wie z.b. Intel 8080 oder Z80) w = 16 (word / half word, in Minicomputern und Mikroprozessoren der zweiten Generation, wie z.b. PDP-11, Intel 8086, Motorola 68000) w = 32 (double word / word, in Mikroprozessoren der dritten Generation, wie z.b. Intel Pentium, Motorola 68040) w = 64 (quad word / double word, in aktuellen Hochleistungsprozessoren, wie z.b. PowerPC, Alpha 21264, UltraSPARC) 6 3
Binäre Addition Addition zweier positiver n-stelliger Binärzahlen a und b kann einfach spaltenweise durchgeführt werden: für Addition in letzter Spalte wird ein Halbaddierer benötigt, der aus a 0 und b 0 Summe s 0 und Übertrag (Carry) c 0 ermittelt: 7 Binäre Addition (Forts.) für Addition in Spalten 1 bis n wird ein Volladdierer benötigt, der Summe s i und Übertrag (Carry) c i aus den Eingangssignalen a i, b i und c i 1 ermittelt: 8 4
Binäre Addition (Forts.) paralleles binäres Addierwerk für zwei n-bit Worte: serielles binäres Addierwerk für zwei n-bit Worte: 9 Binäre Subtraktion Statt der Entwicklung eines eigenen Subtrahierwerkes ist es sinnvoller, für die binäre Subtraktion die gleiche Hardware wie für die Addition einzusetzen Idee: a b = a+( b) einfach bei Verwendung des Zweierkomplements für b: korrektes Ergebnis bei Unterdrückung des Überlaufs 10 5
Binäre Subtraktion (Forts.) Realisierung eines parallelen binären Addier-/Subtrahierwerkes (C=0 : Addition a+b, C=1: Subtraktion a b) (wirklicher) Überlauf nur bei c out c in im FA der Stelle n 1 11 Weitere Addierwerke Problem des parallelen binären n-bit Addierwerkes, das auch als Ripple Carry Adder (RCA) bezeichnet wird: Propagation des Carry Signals bis zur Stelle n 1 ist sehr langsam; max. Verzögerung: 2n t (mit t Gatterlaufzeit) alternative Addierwerke: Carry Look Ahead Addierer (CLA) Carry Select Addierer Carry Save Addierer (CSA) für m Summanden gemeinsam ist die Vermeidung der Propagation des Carry-Signals 12 6
Carry Look Ahead Addierer (CLA) Idee: a priori Berechnung der Carry-Signale c i für alle n Stellen für i-ten Volladdierer gilt: c i+1 = a i b i + (a i +b i )c i := G i + P i c i G i = a i b i gibt an, ob in Stelle i Carry-Signal erzeugt wird ( Generate ) P i = a i +b i gibt an, ob Stelle i das Carry-Signal propagiert (=1) oder nicht (=0) für die c i der ersten Stellen ergibt sich: c 1 = a 0 b 0 + (a 0 + b 0 )c 0 := G 0 + P 0 c 0 c 2 = G 1 + P 1 G 0 + P 1 P 0 c 0 c 3 = G 2 + P 2 G 1 + P 2 P 1 G 0 + P 2 P 1 P 0 c 0 c 4 = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0 + P 3 P 2 P 1 P 0 c 0 alle Signale c i lassen sich prinzipiell mit Gatterlaufzeit 2 t bestimmen, jedoch sind UND-Gatter mit max. i+1 Eingängen und ODER-Gatter mit max. i Eingängen nötig 13 Carry Look Ahead Addierer (Forts.) Beispiel: 4-Bit CLA Addierer Kaskadierung möglich durch Ausgangssignale G ( Block Generate ) und P ( Block Propagate ): G = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0, P = P 3 P 2 P 1 P 0 14 7
Carry Select Addierer In einem n-bit Carry Select Addierblock werden die Summenbits s n-1, s n-2,...,s 0 sowohl für c 0 = 0 als auch für c 0 =1 bestimmt und das Ergebnis über Multiplexer ausgewählt Beispiel: 4-Bit Carry Select Addierer 15 Carry Save Addierer (CSA) Baustein zur Realisierung eines mehrstufigen Addiernetzes für die Addition von m Binärzahlen Idee: Carry-Signale werden nicht propagiert, sondern erst bei Addition des nächsten Summanden berücksichtigt zur Addition von m Zahlen werden m 2 CSA-Bausteine benötigt ein RCA oder CLA-Addierer dient der Addition der noch verbleibenden Überträge 16 8
Binäre Multiplikation Multiplikation zweier 1-Bit Werte entspricht einer logischen UND-Verknüpfung 0 0=0, 0 1=0, 1 0=0, 1 1=1 Multiplikation zweier mehrstelliger Zahlen ist zurückführbar auf wiederholte bedingte Additionen und Schiebeoperationen (in einfachen Prozessoren wird daher oft auf Multiplizierwerke verzichtet) Multiplikation zweier positiver n-stelliger Zahlen a und b ergibt 2n-stelliges Produkt p 17 Multiplizierwerke Implementierungsvariante A serielle Multiplikation durch Addition und Rechtsschieben Register p = (ph, pl) doppelter Wortbreite zur Addition partieller Produkte durch Schieben von b wird nur Multiplikatorbit b 0 benötigt mit zwei n-bit Registern, einem 2n-Bit Register, einem n-bit Addierer und Steuerwerk direkt in Hardware implementierbar Multiplikation zweier n-bit Zahlen benötigt n Takte 18 9
Multiplizierwerke (Forts.) Implementierungsvariante B Idee: Implementierung des Multiplikationsschemas in Hardware ( multiplier array zur parallelen Multiplikation) max. Zeitverzögerung bei der Multiplikation zweier 4-Bit Zahlen: 15 t (mit Gatterlaufzeit t) max. Zeitverzögerung bei der Multiplikation zweier n-bit Zahlen: 2(2n 1)+1 t 19 Multiplizierwerke (Forts.) Implementierungsvariante C Idee: Addition der n Zeilen z i aus n n Bit Multiplikationsschema mit CSA-Bausteinen entweder als CSA-Kette oder CSA-Baum realisierbar max. Zeitverzögerung bei der Multiplikation zweier n-bit Zahlen (mit RCA am Ende): (2(n-2) + 4n) t [Kette] ~ (2 log 2 n + 4n) t [Baum] 20 10
Multiplizierwerke (Forts.) Implementierungsvariante D Idee: Herleitung eines Schaltnetzes aus Wahrheitstabelle eines n n Bit Multiplizieres Realisierung als ROM max. Zeitverzögerung bei der Multiplikation zweier n-bit Zahlen: 2 t Aufwand jedoch extrem hoch: ROM mit 2 2n 2n Bit nötig Alternative: Verwendung von k k Bit Multiplizierern im ROM und Addition der geschobenen partiellen Produkte 21 Binäre Multiplikation negativer Zahlen bislang Betrachtung ausschließlich positiver Multiplikatoren und Multiplikanden Was passiert bei negativen im Zweierkomplement kodierten n-bit Multiplikatoren und n-bit Multiplikanden? a b = a (2 n b) = a 2 n a b (statt 2 n a b) a b = (2 n a) b = b 2 n a b (statt 2 n a b) a b = (2 n a) (2 n b) = 2 2n a 2 n b 2 n + a b (statt [2 2n ]+ a b) ohne besondere Maßnahme (Addition von Korrekturtermen) liefert binärer Multiplizierer falsche Ergebnisse! Alternative: Trennung von Vorzeichen und Betrag und separate Generierung des korrekten Vorzeichens ( hoher Aufwand) 22 11
Multiplizierer nach Booth Idee: Vereinfachung der Multiplikation mit einer 1-Folge im Multiplikator, z.b.: a 001110 = a 010000 a 000010 Analyse zweier benachbarter Bits b i und b i-1 im Multiplikator: Addition von a 2 i bei (b i b i-1 ) = 01 Addition von a 2 i bei (b i b i-1 ) = 10 (im Zweierkomplement, ergänzt) keine Addition bei (b i b i-1 ) = 00 oder (b i b i-1 ) = 11 Ergänzung von b -1 = 0 erforderlich Beispiele: 23 Multiplizierer nach Booth (Forts.) Multiplikation nach Booth funktioniert für beliebige positive und negative Multiplikanden und Multiplikatoren Algorithmus für serielle Multiplikation nach Booth mit doppelt breitem Schieberegister p: parallele Multiplikation nach Booth und schnelle Addition der resultierenden Zeilen des Multiplikationsschemas mittels Wallace-Baum ist in den meisten modernen Prozessoren implementiert (jedoch häufig ergänzt mit Registern zwischen manchen Stufen zur des Durchsatzes, auch als pipelined multiplier bezeichnet) 24 12
Binäre Division Umkehrung der Multiplikation: Berechnung von q = a/b durch wiederholte bedingte Subtraktionen und Schiebeoperationen in jedem Schritt wird Divisor b testweise vom Dividenden a subtrahiert: q i = 1, falls a b > 0 q i = 0 und Korrektur durch a = a + b, falls a b < 0 Beispiel: 103 10 / 9 10 = 11 10 mit Rest 4 10 25 Binäre Division (Forts.) serieller Algorithmus zur Division zweier n-bit Zahlen a und b: mit einem n-bit Register b, einem 2n-Bit Register q, einem n-bit Addierer/Subtrahierer direkt in Hardware implementierbar nach n Schritten befindet sich der Quotient q in ql, der Rest in qh in aktuellen Prozessorarchitekturen eingesetzte Divisionsverfahren: iterative Approximation (durch Multiplikation und Addition) SRT Algorithmus (simultane tabellenbasierte Generierung mehrerer Quotientenbits) 26 13
Gleitkommazahlen in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision und Genauigkeit große Dynamik möglich durch Verwendung von Gleitkommazahlen allgemeine Gleitkommazahl zur Basis r ( radix ) definiert durch x = a r e mit Argument oder Mantisse a Exponent oder Charakteristik e eine Gleitkommazahl x 0 zur Basis r heißt normalisiert, wenn für die Mantisse a gilt: 1/r a < 1 27 Binäre Gleitkommazahlen Verwendung der Basis 2, d.h. eine binäre Gleitkommazahl x ist definiert durch x = a 2 e mit m-stelliger Mantisse a und p-stelligem Exponent e eine binäre Gleitkommazahl x 0 heißt normalisiert, wenn das höchstwertige Mantissenbit den Wert 1 hat zwei Interpretationen: 1.XXXXXXX und [0].1XXXXXX häufig Darstellung des Exponenten mit Bias b: x = a 2 e b Wahl von b = 2 p 1 1 bewirkt Transformation des Bereiches für den Exponenten e von 0... 2 p 1 in (2 p 1 1)... 2 p 1 einfache Kodierung positiver und negativer Exponenten 28 14
Binäre Gleitkommazahlen (Forts.) Mantisse und Exponent können positiv und negativ sein viele Variationsmöglichkeiten bei der Definition eines Formates zur Kodierung binärer Gleitkommazahlen: 1) Wahl der Gesamtwortbreite n 2) Wahl vom m und p = n m 3) Wahl einer Reihenfolge von a und e 4) Darstellung der Mantisse im Einerkomplement, im Zweierkomplement oder mittels Vorzeichen und Betrag 5) Darstellung des Exponenten im Einer- oder Zweierkomplement, mittels Vorzeichen und Betrag oder durch Subtraktion eines Bias früher unterschiedliches Gleitkommaformat in jedem Prozessor, heute überwiegend Verwendung des IEEE 754 Standard 29 IEEE 754 Standard allgemeine Definition: x = ( 1) s 1.f 2 e b Mantisse aus Vorzeichen s und normalisiertem Betrag a = 1.f im Bereich 1.00..00 bis 1.11..11 (1 vor dem Komma wird nicht kodiert erhöhte Präzision) Aufbau einer n-bit IEEE Gleitkommazahl: p-stelliger Exponent mit Bias b = 2 p 1 1, gültiger Exponent e nur im Bereich e min = 0 < e < e max = 2 p 1 = 2b+1 darstellbarer Zahlenbereich: ± 2 1 b... (2 2 m ) 2 b 30 15
IEEE 754 Standard (Forts.) 3 verschiedene Formate spezifiziert: single precision double precision quad precision n 32 64 128 m 23 52 112 s 1 1 1 p 8 11 15 e min 0 0 0 e max 255 2047 32767 b 127 1023 16383 x min 2 126 10 38 2 1022 10 308 2 16382 10 4932 x max (2 2 23 ) 2 127 10 38 (2 2 52 ) 2 1023 10 308 (2 2 112 ) 2 16383 10 4932 31 IEEE 754 Standard (Forts.) e = e min = (00..00) 2 und e = e max = (11..11) 2 werden zur Kodierung besonderer Zahlen verwendet: x = +0 ( positive Zero ): e = 0, f = 0, s = 0 x = 0 ( negative Zero ): e = 0, f = 0, s = 1 x = + ( positive Infinity ): e = e max, f = 0, s = 0 x = ( negative Infinity ): e = e max, f = 0, s = 1 x = NaN ( Not a Number ): e = e max, f 0, s beliebig x = ( 1) s 0.f 2 1 b ( Denormalized Number ): e = 0, f 0 Denormalisierte Gleitkommazahlen ermöglichen die Darstellung sehr kleiner Werte im Bereich 2 1 b m... 2 1 b 32 16
Multiplikation von Gleitkommazahlen Algorithmus zur Multiplikation zweier IEEE-Gleitkommazahlen x = ( 1) s a 2 α bias und y = ( 1) t b 2 β bias : 1) Multipliziere Mantissen: c = a b a=1.f a und b=1.f b haben m+1 Stellen c hat 2m+2 Stellen! 2) Addiere Exponenten: γ = α + β bias 3) Berechne Vorzeichen des Produktes: u = s t 4) Normalisiere Ergebnis z = ( 1) u c 2 γ-bias a) Falls c 2, schiebe c um 1 nach rechts und inkrementiere γ b) Schiebe c um 1 nach links c) Setze c = 1.f c = (c 2m+1 c 2m c 2m 1... c m+1 ), ggf. mit Rundung 5) Behandlung von Sonderfällen: a) Überlauf, falls γ 2 p 1 z := + oder z := (bei u = 0 bzw. 1) b) Unterlauf, falls γ < 1 Denormalisierung durchführen c) Zero, falls c = 0 z := 0 33 Addition/Subtraktion von Gleitkommazahlen Algorithmus zur Addition/Subtraktion zweier Gleitkommazahlen x = ( 1) s a 2 α bias und y = ( 1) t b 2 β bias im IEEE Format: 1) Sortiere x und y derart, daß x die Zahl mit kleinerem Exponenten ist 2) Anpassung der Exponenten: Transformiere x in die Gleitkommazahl x = ( 1) s a 2 β bias durch Rechtsschieben von a um β α Bitstellen 3) Addiere/Subtrahiere Mantissen: a) Falls nötig, bilde Zweierkomplement von a oder b b) Berechne c = a + b bzw. c = a + ( b) c) Falls c < 0, setze Vorzeichenbit u = 1 und bilde Zweierkomplement 4) Normalisiere Ergebnis z = ( 1) u c 2 β bias a) Falls c 2, schiebe c nach rechts (ggf. Rundung) und inkrementiere β b) Falls c < 1, schiebe c nach links und dekrementiere β c) Wiederhole a) bzw. b), bis 1 c < 2 oder c = 0 5) Behandlung von Sonderfällen (Überlauf?, Unterlauf?, c = 0? ) 34 17