144 3 Arithmetische Schaltungen c) Vervollständigen Sie

Werbung
144
c)
3 Arithmetische Schaltungen
Vervollständigen Sie nachfolgend abgebildeten Zustands-Automaten so, dass er
den Multiplizierer wie gewünscht steuert. Nehmen Sie an, dass Sie zur Detektion
des Schleifen-Abbruchs das Signal Runde_n zur Verfügung haben, das Ihnen
anzeigt, ob Sie bereits alle Runden durchlaufen haben (Runde_n = 1) oder noch
nicht (Runde_n = 0).
1
Initialisierung
clk_mkand=
2
Initialisierung
clk_mkand=
3
Addieren
clk_mkand=
clk_produkt=
clk_produkt=
clk_produkt=
multiplexer=
multiplexer=
multiplexer=
init/>>1=
init/>>1=
init/>>1=
6
Schieben
clk_mkand=
5
Schieben
clk_mkand=
4
Addieren
clk_mkand=
clk_produkt=
clk_produkt=
clk_produkt=
multiplexer=
multiplexer=
multiplexer=
init/>>1=
init/>>1=
init/>>1=
7
Ende
clk_mkand=
clk_produkt=
multiplexer=
init/>>1=
3.8 Sequentieller Multiplizierer
145
Multiplexer-basierte Implementierung der Steuerung
Für den Fall n = 4 soll die Steuerung wie folgt implementiert werden:
clk_mkand
clk_produkt
multiplexer
Kombinatorische
Schaltung
init/>>1
3
...
clk
...
D0 Q0
D2 Q2
D3 Q3
D4 Q4
2
2
3
PR0
Das Zustandsregister speichert die Information über
• den aktuellen Zustand (d.h. in welchem Zustand des Zustandsdiagramms sich
die Steuerung gerade befindet) und
• den Rundenzähler (d.h. welche Iterations-Runde gerade ausgeführt wird).
a)
In welchen Bits des Zustandsregisters wird
• der aktuelle Zustand und
• die aktuelle Runde
gespeichert?
146
3 Arithmetische Schaltungen
b) Tragen Sie in nachfolgende Abbildung die Eingangswerte des Multiplexers ein, die
die Ausgangs-Funktion der Steuerung implementieren. Womit muss der Steuereingang des Multiplexers verbunden werden?
3
4
4
4
4
4
4
4
4
0
1
2
3
clk_mkand
3
2
clk_produkt
1
multiplexer
0
init/>>1
4
5
6
7
4
3.8 Sequentieller Multiplizierer
c)
147
Tragen Sie in nachfolgende Abbildung diejenigen Eingangswerte ein, welche die
Zustands-Übergangs-Funktion aller unbedinger Verzweigungen implementieren.
Aktueller
Zustand
3
3
3
3
3
3
3
3
3
0
1
2
2
3
1
4
3
0
5
6
7
d) Tragen Sie in nachfolgende Abbildung ein Schaltung ein, die den Folgezustand
des Zustands 2 liefert.
PR0
3
Folgezustand
von Zustand 2
148
e)
3 Arithmetische Schaltungen
Tragen Sie in nachfolgende Abbildung eine Schaltung ein, die im Zustand 5 den
Eingang Runde um 1 erhöht und den neuen Rundenwert am Ausgang bereitstellt
(00 ! 01, 01 ! 10, 10 ! 11, 11 ! 00). In Zuständen 6= 5 soll die am Eingang
angelegte Runde an den Ausgang durchgereicht werden.
Zustand
(Bit 2 ... 0)
3
2
Runde
(Bit 4, 3)
f)
Neue Runde
(Bit 4, 3)
2
Tragen Sie in nachfolgende Abbildung eine Implementierung des Runde_nDetektors ein, der in Runde 1, 2 und 3 den Ausgang auf Low-Pegel legt und
in Runde 4 auf High-Pegel (Runde 1 , 01, Runde 2 , 10, Runde 3 , 11, Runde
4 , 00).
Runde
(Bit 4,3)
2
1
Runde_n
3.8 Sequentieller Multiplizierer
149
g) Tragen Sie in nachfolgende Abbildung eine Multiplexer-basierte Schaltung ein, die
in Abhängigkeit der Eingänge Runde_n und PR0 den auf Zustand 6 folgenden
Zustand am Ausgang ausgibt.
Runde_n
1
3
PR0
h)
Folgezustand
von Zustand 6
1
Tragen Sie in nachfolgende Abbildung eine Schaltung ein, die den auf Zustand
6 folgenden Zustand mit Hilfe eines Inverters und zweier ODER-Gatter bestimmt
und am Ausgang ausgibt.
Runde_n
1
3
PR0
1
Folgezustand
von Zustand 6
150
3 Arithmetische Schaltungen
ROM-basierte Implementierung der Steuerung
In diesem Abschnitt soll die Multiplizierer-Steuerung mit nachfolgend abgebildeter ROMbasierten Schaltung implementiert werden.
clk_mkand
clk_produkt
multiplexer
init/>>1
Q0
Q1
Q2
Q3
Q4
ROM
5 4 3 2 1 0
clk
D0
D1
D2
D3
D4
8 7 6 5 4 3 2 1 0
PR0
1
Initialisierung
clk_mkand= 0
immer
2
Initialisierung
clk_mkand= 1
PR0 = 1
3
Addieren
clk_mkand= 0
clk_produkt= 0
clk_produkt= 1
clk_produkt= 0
multiplexer= 0
multiplexer= 0
multiplexer= 1
init/>>1= 0
init/>>1= 0
init/>>1= 0
Runde_n = 0 && PR0 = 0
immer
PR0 = 0
6
Schieben
clk_mkand= 0
5
Schieben
clk_mkand= 0
4
Addieren
clk_mkand= 0
clk_produkt= 1
clk_produkt= 0
clk_produkt= 1
multiplexer= X
multiplexer= X
multiplexer= 1
init/>>1= 1
init/>>1= 1
immer
immer
Runde_n = 1
7
Ende
clk_mkand= 0
clk_produkt= 0
Runde_n = 0 && PR0 = 1
multiplexer= X
init/>>1= X
immer
init/>>1= 0
3.8 Sequentieller Multiplizierer
a)
151
Welche Organisation hat das ROM?
Im ROM wird durch die Adress-Bits 0, 1 und 2 der Zustand festgelegt, durch die
Adress-Bits 3 und 4 der Rundenzähler, der die Anzahl der Iterationen mitzählt.
Zum Start der Multiplikation wird das Zustandsregister mit [Q0, Q1] = [0, 0] und [Q2, Q3,
Q4] = [0, 0, 1] initialisiert, d.h. Runde 00, Zustand 001.
b) Geben Sie den ROM-Inhalt an, der zur Implementierung der Zustände 1 und 2
benötigt wird.
PR0
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
Zust. 1
Zust. 2
c)
Geben Sie den Inhalt des ROM-Speichers für Zustand 3 an.
PR0
Zust. 3
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
152
3 Arithmetische Schaltungen
d) Geben Sie den Inhalt des ROM-Speichers für Zustand 4 an.
PR0
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
Zust. 4
e)
Geben Sie den Inhalt des ROM-Speichers für Zustand 5 an.
PR0
Zust. 5
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
3.8 Sequentieller Multiplizierer
f)
153
Geben Sie den Inhalt des ROM-Speichers für Zustand 6 an.
PR0
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
Zust. 6
g) Geben Sie den Inhalt des ROM-Speichers für Zustand 7 an.
PR0
Zust. 7
Runde
Zustand
Ausgang
Folgerunde
Folgezust.
154
3 Arithmetische Schaltungen
Multiplikation vorzeichenbehafteter Zahlen
Zur Multiplikation vorzeichenbehafteter Zahlen (2er-Komplement) kann auf die Schaltung
für vorzeichenlose Multiplikation zurückgegriffen werden, wenn negative Zahlen zuerst
negiert werden, das Vorzeichen separat berechnet wird (XOR) und das Ergebnis ggf.
noch invertiert wird.
Es gibt jedoch auch noch andere Verfahren wie z.B. den sog. Baugh-WooleyMultiplizierer. Dieser ist sehr ähnlich wie der Multiplizierer für vorzeichenbehaftete Zahlen
aufgebaut, verwendet jedoch an einigen Stellen ein NICHT-UND-Gatter statt eines UNDGatters sowie einen zusätzlichen Halbaddierer für die höherwertigste Ergebnis-Stelle.
Multiplikation von Gleitkomma-Zahlen
• Zur Multiplikation von Gleitkommazahlen müssen die Mantissen inkl. führender
‘‘1,’’ als Festkommazahlen multipliziert werden.
• Die Exponenten werden addiert. Der Offset ‘‘k’’ ist nach der Addition doppelt
berücksichtigt und muss deswegen vom Ergebnis noch einmal subtrahiert
werden.
• Zur Re-Normalisierung wird die Ergebnis-Mantisse nach rechts geschoben und
zum Exponenten die Anzahl der geschobenen Stellen addiert.
3.9 Subtraktion
155
3.9 Subtraktion
Allgemein
Bezeichnungen: Minuend - Subtrahend = Differenz
Die Subtraktion zweier Zahlen wird stellenweise ausgeführt. Dabei kann es vorkommen,
dass eine größere Zahl von einer kleineren Zahl subtrahiert werden muss. Um dies zu
bewerkstelligen, kann aus der nachfolgenden Stelle ein Wert geborgt werden.
Beispiel:
11
2 + 1 1 + 1 11
4 3 2 1
- 1 2 3 4
= 3 0 8 7
• 4 und wieviel ist 1? ) geht nicht ) 1 von 10-er Stelle borgen ) aus 1 wird 11
• 4 und wieviel ist 11? ) 7
• Durch das Borgen steht an der Zehner-Stelle jetzt nur noch eine 1 statt einer 2
• 3 und wieviel ist 1? ) geht nicht ) 1 von 100-er Stelle borgen ) aus 1 an der
Zehner-Stelle wird 11
• 3 und wieviel ist 11? ) 8
• Durch das Borgen steht an der Hunderter-Stelle jetzt nur noch eine 2 statt einer
3
• 2 und wieviel ist 2? ) 0
• 1 und wieviel ist 4 ) 1
Statt beim Borgen die Minuenden-Stellen zu verkleinern, kann die Subtrahenden-Stelle
vergrößert werden (wie Übertrag).
4 3 2 1
- 1 2 3 4
0
1
1
= 3 0 8 7
Das Ergebnis ist das gleiche, da die Differenz zwischen Minuenden-Stelle und
Subtrahenden-Stelle gleich bleibt. Beim Borgen über mehrere Stellen hinweg kann
einem dieses Vorgehen jedoch leichter fallen.
156
a)
3 Arithmetische Schaltungen
Subtrahieren Sie 11 - 6 = 5 im Binärsystem bei einer Wortbreite n = 4.
b) Subtrahieren Sie 12 - 5 = 7 im Binärsystem bei einer Wortbreite n = 4.
T
c)
Subtrahieren Sie 14 - 11 = 3 im Binärsystem bei einer Wortbreite n = 4.
3.9 Subtraktion
157
Halb-Subtrahierer
Ein Halb-Subtrahierer ist ein Schaltung, die ein Eingangs-Bit yi von einem Eingangs-Bits
xi subtrahiert. Das Ergebnis ist ein Differenz-Bit di und ein Borge-Bit bi (b = borgen =
engl. borrow).
Eingang xi
Eingang yi
Differenz di
Borgen bi
0
0
1
1
0
1
0
1
0
1
1
0
0
1
0
0
Die Differenz di entspricht der XOR-Verknüpfung der Eingänge, bi hat den Wert 1, wenn
der Minuend 0 ist und der Subtrahend 1 ist.
xi
yi
xi
yi
HS
bi
bi
di
di
Der Halbsubtrahierer kann eine Binärzahlen nur halb subtrahieren: Der Halbsubtrahierer
an Stelle i erkennt zwar, ob er ein Bit von Stelle i + 1 borgen musste, kann jedoch selbst
nicht berücksichtigen, ob der Halbsubtrahierer an Stelle i 1 von ihm selbst ein Bit
borgen musste.
3.10 Dividierer
158
157
3 Arithmetische Schaltungen
Voll-Subtrahierer
Voll-Subtrahierer
Im Gegensatz zum Halbsubtrahierer kann ein Vollsubtrahierer berücksichtigen, ob die
Im Gegensatz Stelle
zum Halbsubtrahierer
kann
ein Vollsubtrahierer berücksichtigen, ob die
vorangegangene
i 1 ein Bit borgen
musste.
vorangegangene Stelle i 1 ein Bit borgen musste.
a) Vervollständigen Sie nachfolgende Wertetabelle eines Vollsubtrahierers.
a) Vervollständigen
nachfolgende
Wertetabelle eines Vollsubtrahierers.
Tabelle,
die in die GrafikSie
eingebettet
wurde:
xi
yi
0
0
0
bi
bi
di
0
0
0
0
1
1
1
0
1
0
1
1
0
1
1
1
0
1
0
0
0
1
1
0
1
0
0
1
1
0
0
0
1
1
1
1
1
1
b) Tragen Sie in nachfolgende Abbildung (links) eine Implementierung einer
Vollsubtrahierer-Schaltung ein.
b) Tragen Sie in nachfolgende Abbildung (links) eine Implementierung einer
Ripple-Borrow-Subtrahierer
Vollsubtrahierer-Schaltung ein.
a)
Berechnen Siex537 - 48 im Dezimalsystem.
y
i
i
b) Berechnen Sie
c)
xi
yi
Vervollständigen Sie nachfolgende Wertetabelle eines
bi-1
b
3.10 Dividierer
bi
VS
di
di
bi-1
3.9 Subtraktion
159
Ripple-Borrow-Subtrahierer
Beim Ripple-Borrow Subtrahierer werden n Vollsubtrahierer so verschaltet, dass sich
damit die Differenz d = x y zweier n Bit umfassender Zahlen berechnen lässt.
xn-1
x2
…
yn-1
xi
bi
x1
y2
…
yi
xi
VS bi-1
bi
y1
yi
xi
VS bi-1
di
dn-1
x0
bi
di
yi
xi
VS bi-1
di
d2
…
y0
bi
yi
VS bi-1
0
di
d1
d0
Betrachten Sie den Zahlenring für vorzeichenlose Zahlen.
1111
0000
1110
0001
15
1101
0
14
1
13
1100
1011
2
12
3
11
4
10
0011
0100
Richtung
steigender
Werte
5
9
1010
6
8
0101
7
1001
0110
1000
a)
0010
0111
Nehmen Sie an, die Eingangswerte des entworfenen Ripple-Borrow-Subtrahierer
sind vorzeichenlos. Welches Zahlenformat hat die Differenz d? Welche Funktion
hat das ‘‘Borrow Out’’?
160
3 Arithmetische Schaltungen
Betrachten Sie den Zahlenring für Zahlen im Zweier-Komplement:
1111
0000
1110
0001
-1
1101
0
-2
1
-3
1100
-4
3
negativ
1011
0010
2
-5
4
-6
1010
0011
positiv
0100
5
-7
-8
7
1001
6
0101
0110
1000
0111
b) Funktioniert der Subtrahierer auch mit dem Zweier-Komplement? Wenn ja: Wie
kann man einen Überlauf feststellen? Wenn nein: Warum nicht?
3.9 Subtraktion
c)
161
Tragen Sie in nachfolgende Abbildung eine Schaltung ein, die einen Überlauf von
Zahlen im Zweierkomplement feststellt.
xn-1
yn-1
dn-1
u
Herunterladen