Zur Erreichung hoher Verabeitungsgeschwindigkeiten sind schnelle arithmetische Einheiten notwendig. Hierbei sind speziell die Multiplizierer beachtenswert, da sie meist auf mehrfaches Addieren zurückgeführt werden, und deshalb wesentlich mehr Rechenzeit benötigen, als die Addierer.
Die einfachste Möglichkeit wäre ein Multiplizierer aus einem Addierer und Schieberegistern.
Bild 2.1 Addier-Schiebe-Multiplizierer
Bei diesem Aufbau wird mit Clock 1 der eine Faktor in einem Schieberegister bitweise weitergeschoben. Wenn an den Gattern eine 1 ansteht, wird zum Akkumulator (Ergeb¬nis) der Wert des anderen Faktors dazuaddiert. Nach jedem Additions- oder Nichtadditionsvorgang wird der Akkumulator um eine Stelle nach rechts geschoben (Erniedrigung des Stellenwerts).
Dieser Multiplizierer ist zwar vom Aufbau her sehr ein¬fach, aber sehr langsam.
Eine schnellere Möglichkeit ist der Array-Multiplizierer, der gänzlich aus Addierern aufgebaut ist.
Bild 2.2 Array-Multiplizierer
Auch dieser Multiplizierer ist noch nicht sehr zeit¬¬effizient, da er mit Ripple-Carry arbeitet, d. h. der am weitesten links befindliche Addierer liefert erst dann eine gültige Summe, wenn alle Addierer weiter rechts fertig sind.
Bild 2.3 Schnellerer Array-Multiplizierer
Dieser Multiplizierer arbeitet mit diagonalem Carry, sodaß die Summen von niedrigeren Stufen gleichzeitig zu den Addierern auf den höheren Stufen gelangen. Dieses Prinzip heißt Carry-Save und ist auch auf andere als Array-Multiplizierer anwendbar. Die höchste Berechnungszeit ergibt sich hierbei entweder aus 8 Carry-Zeiten, oder 5 Summier-Zeiten, je nach dem welches länger dauert. Im Gegensatz dazu benötigt der Multiplizierer von Bild 2.2 mindestens 2 x 5 Carry-Zeiten + 8 Summier-Zeiten.
Eine weitere Möglichkeit zum Aufbau eines Multiplizierers wäre eine Baum-Struktur, mit der sich die Anzahl der Summier-Zeiten stark verringern ließe. Bild 2.4 zeigt den prinzipiellen Aufbau eines solchen n x 16 Bit-Multiplizie¬rers, wobei jedes Plus-Symbol n Bit repräsentiert. Bei diesem Aufbau sind nur 4 Summier-Zeiten nötig. Es wird hier die selbe Anzahl von Addierern verwendet, aber es arbeiten mehr parallel.
Bild 2.4 Multiplizierer mit Baum-Struktur
Bild 2.5 Realisierung eines 6 x 8 Bit-Multiplizierers
mit Baum-Struktur
Bild 2.5 zeigt die Realisierung eines 6 x 8 Bit-Multipli¬zierers mit Baum-Struktur, wobei die Carries reihenweise verarbeitet werden. Dadurch benötigt jede Reihe die ge¬samte Carry-Ripple-Zeit. Da 4 Reihen vorhanden sind, wird für die gesamte Multiplikation 4 x die Carry-Ripple-Zeit einer Reihe benötigt. Dadurch ist diese Methode nicht so effizient, wie die in Bild 2.3 gezeigte, außer wenn die Summier-Zeit sehr hoch ist. Es ist jedoch auch beim Multi¬plizierer mit Baumstruktur der Übergang auf Diagonal-Carry möglich.
Bild 2.6 Array-Multiplizierer mit Diagonal-Carry und
Baumstruktur
Diese Kombination von Baumstruktur und diagonale Weiter¬gabe des Carrys ist die wahrscheinlich schnellste Möglich¬keit einen Multiplizierer auszuführen.
Die Diskussion der anderen Möglichkeiten des Aufbaus eines Multiplizierers ist aber trotz des eindeutigen Geschwin¬digkeitsvorteils der letztgenannten Methode notwendig, da der Aufwand an ICs bei den einzelnen Methoden stark unter¬schiedlich ist.
|