144 3 Arithmetische Schaltungen c) Vervollständigen Sie
Transcription
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.