3.6 Addition und Subtraktion von Gleitkommazahlen 3.7

Werbung
3.7 Kombinatorischer Multiplizierer
137
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
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.
138
a)
3 Arithmetische Schaltungen
Tragen Sie in nachfolgende Abbildung Verbindungen zur Realisierung der vorzeichenlosen Multiplikation ein.
x3
Eigene Lösung:
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
s
cout
cin
a
HA
cout
a
b
cin
a
VA
cout
a
b
cin
a
VA
cout
s
cout
cin
a
cout
z6
b
cout
z5
a
y1
x0 · y1
x1 · y0
y0
x 0 · y0
z2
z1
z0
y0
cin
a
s
cout
s
cout
cin
a
b
b
VA
cout
s
cin
a
b
cout
s
HA
cout
z3
s
z2
z1
b
HA
HA
s
s
z4
b
y2
x0 · y 2
x1 · y 1
x2 · y 0
y1
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
3.7 Kombinatorischer Multiplizierer
139
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
140
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
141
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
PR0
0 x3 x2 x1 x0
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.
142
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.
Add
Initialisierung
Nach Addition:
Erste Runde
Nach Schieben:
Erste Runde
Nach Addition:
Zweite Runde
Nach Schieben:
Zweite Runde
Nach Addition:
Dritte Runde
Nach Schieben:
Dritte Runde
Nach Addition:
Vierte Runde
Nach Schieben:
Vierte Runde
3.8 Sequentieller Multiplizierer
143
Nachfolgende Abbildung zeigt den (unvollständigen) Aufbau einer Schaltung zur Implementierung des gezeigten Multiplikationsverfahrens.
b) Vervollständigen Sie die Schaltung so, dass sie vorzeichenlose Binärzahlen multipliziert.
Steuerung
Multiplikator
3.7 Multiplizierer
141
n
Init/>>1
Sequentielle
Multiplikation vorzeichenloser Zahlen
0..n-1 Schaltung zur 0..n-1
PR
Mit einer sequentiellen Schaltung kann der Hardwareaufwand deutlich reduziert werden.
Die nächste Abbildung skizziert eine sequentielle Schaltung, die zur Multiplikation von
n..2n
n..2n-1
vorzeichenloser Zahlen der Wortbreite n = 4 verwendet werden kann:
MR
Produkt
y3 y2 y1 y0
2n
Add
PR
0 0
0
0
PR0
0 x3 x2 x1 x0
Addierer
MR
Multiplikand
n
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 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.
Herunterladen