# Wallace-Tree-Multiplizierer

Ein Wallace-Tree-Multiplizierer ist ein Multiplizierer, der in der Digitaltechnik eingesetzt wird. Das Verfahren ist benannt nach Christopher Stewart Wallace, welcher diesen Multiplizierer 1964 vorstellte.

## Funktionsweise

Ein $n$-Bit Wallace-Tree-Multiplizierer basiert wie der Dadda-Tree-Multiplizierer auf der Formel
    $\left(\sum _{k=0}^{n}a_{k}2^{k}\right)\cdot \left(\sum _{k=0}^{n}b_{k}2^{k}\right)=\sum _{k=0}^{2n}\sum _{i+j=k}a_{i}b_{j}2^{k}$.
Hierbei sind $\sum _{k=0}^{n}a_{k}2^{k}$ und $\sum _{k=0}^{n}b_{k}2^{k}$, $a_{k},b_{k}\in \{0,1\}$ die Binärdarstellungen der zwei zu multiplizierenden Zahlen.
Der Wallace-Tree-Multiplizierer geht in drei Schritten vor:
* Berechne für jedes Paar $(i,j)$ mit $1\leq i\leq n$ und $1\leq j\leq n$ das Partialprodukt $a_{i}\cdot b_{j}\cdot 2^{i+j}$.
* Addiere die Resultate dieser Berechnung innerhalb der für den Wallace-Tree-Multiplizierer spezifischen Baumstruktur stufenweise mithilfe von Voll- und Halbaddierern, bis nur noch zwei Zahlen übrig sind, die addiert werden müssen.
* Addiere diese beiden Zahlen mit einem normalen Addierwerk.

### Baumstruktur des Wallace-Tree-Multiplizierers

In Schritt 2 der obigen Schritte werden die Partialprodukte in einer Baumstruktur addiert. Dabei werden zunächst die Partialprodukte in Spalten angeordnet, sodass in einer Spalte jeweils alle Partialprodukte $a_{i}\cdot b_{j}$ mit $i+j=k$ stehen. Dann fasst man die Spalten der so entstandenen Tabelle in Dreiergruppen zusammen. Jede Spalte dieser Dreiergruppen wird als Eingang für einen Volladdierer verwendet, sofern in der Spalte drei Eingänge sind, für einen Halbaddierer, sofern zwei Einträge vorhanden sind, und gar nicht modifiziert, sofern nur ein Eintrag vorhanden ist. Der höher gewichtete Ausgang der Addierer wird dann jeweils der nächsten Spalte zugeordnet. Dieser Vorgang wird solange wiederholt, bis nur noch eine Dreiergruppe vorhanden ist, bei der in jeder Spalte nur zwei Einträge stehen. Diese beiden letzten Zeilen werden dann mittels eines normalen Addierwerks addiert.

### Beispiel 8-Bit

Hier sieht man die obige Vorgehensweise für einen 8-Bit-Wallace-Tree-Multiplizierer. Die Punkte stehen dabei für die Partialprodukte bzw. für die Ausgänge der vormalig verwendeten Voll- und Halbaddierer, welche durch die dünnen Linien gekennzeichnet sind.

## Laufzeit

Oben wurde die Funktionsweise des Wallace-Tree-Multiplizierers unter Rückgriff auf Tabellen beschrieben. Jede dieser Tabellen steht dabei für einen Schritt, den ein elektronisches Signal durchlaufen muss. Um die Laufzeit des Wallace-Tree-Multiplizierers zu ermitteln, finden wir daher heraus, wie viele Tabellen es gibt.
Da ein Volladdierer drei Signale in zwei verwandelt, und ggf. in einer Dreiergruppe (siehe oben) weniger Elemente als für einen Volladdierer benötigt werden vorhanden sind, gilt, wenn wir mit $w_{j}$ die Höhe der j-ten Tabelle und mit $n$ die Anzahl der Eingangsbits bezeichnen:
    $w_{0}=n{\text{ , }}w_{j+1}\leq 2\cdot \left\lfloor {\frac {w_{j}}{3}}\right\rfloor +(w_{j}\mod 3)$
Hieraus kann man folgende Abschätzung herleiten:
    $w_{j}\leq 2\cdot \left\lfloor {\frac {w_{j}}{3}}\right\rfloor +(w_{j}\mod 3)\leq 2\cdot \left\lfloor {\frac {w_{j}}{3}}+1\right\rfloor$ $\leq 2\cdot \left\lfloor {\frac {2\cdot \left\lfloor {\frac {w_{j-1}}{3}}+1\right\rfloor }{3}}+1\right\rfloor \leq \ldots \leq \left({\frac {2}{3}}\right)^{j+1}w_{0}+2\sum _{k=0}^{j}{\frac {2^{k}}{3^{k}}}$ $<\left({\frac {2}{3}}\right)^{j+1}w_{0}+2\sum _{k=0}^{\infty }{\frac {2^{k}}{3^{k}}}=\left({\frac {2}{3}}\right)^{j+1}w_{0}+6$
Somit folgt
    $w_{j}\leq \left({\frac {2}{3}}\right)^{j+1}w_{0}+6$.
Wählt man nun $j+1=\lceil \log _{3/2}(n)\rceil \Leftrightarrow \left({\frac {3}{2}}\right)^{j+1}=n=w_{0}$, so gilt
    $w_{j}\leq \left({\frac {2}{3}}\right)^{j+1}\cdot \left({\frac {3}{2}}\right)^{j+1}+6=7$
Eine Tabelle mit sieben Zeilen kann man jedoch nach obiger Vorgehensweise in konstant vielen Schritten reduzieren. Somit gilt für die Laufzeit $L=j+k$ für eine konstante Schrittanzahl $k\in \mathbb {N}$:
$L\leq \lceil \log _{3/2}(n)\rceil +k\in {\mathcal {O}}(\log(n))$
Da die Laufzeit eines Addierwerks (der letzte Schritt beim Wallace-Tree-Multiplizierer) auch in ${\mathcal {O}}(\log(n))$ liegt, hat der Wallace-Tree-Multiplizierer dieselbe asymptotische Laufzeit wie ein Addierwerk und ist damit schneller als ein vorzeichenloser paralleler Multiplizierer, der eine asymptotische Laufzeit von ${\mathcal {O}}(\log ^{2}(n))$ aufweist.
Der Wallace-Tree-Multiplizierer ist ferner absolut gesehen langsamer als der Dadda-Tree-Multiplizierer, obwohl beide Multiplizierer dieselbe asymptotische Laufzeit von ${\mathcal {O}}(\log(n))$ besitzen.