144 3 Arithmetische Schaltungen c) Vervollständigen Sie

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 unbedingter 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 kombinatorische Multiplizierer für vorzeichenbehaftete Zahlen aufgebaut, verwendet jedoch an einigen Stellen ein NICHTUND-Gatter statt eines UND-Gatters 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.