← Zurück zum BlogArithmetische Schaltungen

Booth-Multiplizierer erklärt (mit Beispielen)

Lernen Sie Booth-Rekodierung mit Radix-2 und Radix-4, verfolgen Sie −3 × 5 Schritt für Schritt und vermeiden Sie Vorzeichen- und Breitenfehler in iterativen Hardware-Multiplizierern.

DennyDenny
7 Min. Lesezeit
Chalkboard feature illustration for “Booth-Multiplizierer erklärt (mit Beispielen)”

Kurz gesagt: Booth-Rekodierung schreibt Folgen von 1-Bits als vorzeichenbehaftete Ziffern um. Radix-2-Booth untersucht pro Iteration das Paar (Q0,Q−1)(Q_0,Q_{-1}): 01 addiert den Multiplikanden, 10 subtrahiert ihn, 00 und 11 tun nichts, anschließend folgt ein arithmetischer Rechtsshift. Eine sichere nn-Bit-Implementierung erweitert das Vorzeichen des Multiplikanden und verwendet einen (n+1)(n+1)-Bit-Akkumulator. Modified Booth mit Radix 4 reduziert die Zahl der Teilprodukte ungefähr auf die Hälfte, indem es aus 0,±M,±2M0,\pm M,\pm2M wählt.

Binärmultiplikation lässt sich aus Shifts und Additionen aufbauen. Die Herausforderung besteht nicht darin, dass sich Zweierkomplement-Operanden ohne Booth nicht multiplizieren ließen – das ist durchaus möglich –, sondern darin, Vorzeichenbehandlung und Teilprodukterzeugung korrekt zu entwerfen.

Booths Verfahren bietet eine einheitliche vorzeichenbehaftete Rekodierung und komprimiert Folgen von 1-Bits. Es ist für zwei unterschiedliche Architekturen nützlich:

  • einen iterativen Multiplizierer, der einen Addierer über mehrere Takte wiederverwendet
  • einen parallelen Multiplizierer, der rekodierte Teilprodukte erzeugt und sie mit einem Addierer-/Kompressortree reduziert

Beide Architekturen nutzen dieselbe Rekodierungsidee, unterscheiden sich jedoch bei Latenz, Fläche und Timing.

Die Identität einer Einsenfolge

Betrachten Sie eine Folge binärer Einsen von Bit jj bis Bit kk, wobei k≥jk\ge j gilt:

2j+2j+1+⋯+2k=2k+1−2j2^j + 2^{j+1} + \cdots + 2^k = 2^{k+1} - 2^j

Beispiel:

0011112=0100002−0000012001111_2 = 010000_2 - 000001_2

Bei einer gewöhnlichen vorzeichenlosen Shift-and-Add-Multiplikation würden für 1111 vier verschobene Kopien des Multiplikanden addiert. Die Booth-Rekodierung stellt diese Folge durch eine Subtraktion an ihrer unteren Grenze und eine Addition an der Stelle oberhalb ihrer oberen Grenze dar.

Das garantiert nicht bei jedem Bitmuster weniger von null verschiedene Operationen. Eine lange Folge profitiert; isolierte oder alternierende Einsen können keine Reduktion bringen und die Zahl der Addier-/Subtrahierentscheidungen sogar erhöhen. Ein iterativer Radix-2-Multiplizierer mit fester Latenz führt weiterhin nn Iterationen aus – die Rekodierung ändert die Rechenaktion innerhalb jeder Iteration, nicht automatisch die Zykluszahl.

Radix-2-Booth-Rekodierung

Unterhalb des Multiplikators wird ein implizites Nullbit angehängt:

Q−1=0Q_{-1}=0

In Iteration ii betrachtet man das aktuelle niederwertigste Multiplikatorbit Q0Q_0 und das gespeicherte vorherige Bit Q−1Q_{-1}:

Q0Q_0Q−1Q_{-1}Aktion des Akkumulators
00unverändert
01MM addieren
10MM subtrahieren
11unverändert

Danach wird die Verkettung aus Akkumulator, Multiplikator und gespeichertem Bit arithmetisch um eine Stelle nach rechts geschoben.

Das Paar erkennt die Grenzen einer Folge:

  • 10 markiert das untere Ende einer Einsenfolge, daher wird subtrahiert
  • 01 markiert nach dem Durchlaufen der Folge ihr oberes Ende, daher wird addiert
  • gleiche benachbarte Bits liegen innerhalb einer konstanten Folge, sodass keine Rechenaktion nötig ist

Die Bitreihenfolge in der Tabelle ist wichtig. Manche Texte schreiben stattdessen (Q−1,Q0)(Q_{-1},Q_0); dadurch kehren sich die Zeilenbezeichnungen um. Geben Sie die verwendete Konvention stets ausdrücklich an.

Breiten-sicherer iterativer Datenpfad

Beide Eingangsoperanden seien vorzeichenbehaftete nn-Bit-Zweierkomplementwerte:

  • MM: Multiplikand
  • QQ: Multiplikator

Verwendet werden:

  • MeM_e: auf n+1n+1 Bit vorzeichenerweiterter Multiplikand
  • AA: (n+1)(n+1)-Bit-Akkumulator, anfangs null
  • QQ: das nn-Bit-Multiplikatorregister
  • Q−1Q_{-1}: gespeichertes Bit, anfangs null
  • ein Iterationszähler von 0 bis n−1n-1

In jeder der nn Iterationen:

  1. (Q0,Q−1)(Q_0,Q_{-1}) prüfen
  2. bei 01 A←A+MeA \leftarrow A+M_e setzen
  3. bei 10 A←A−MeA \leftarrow A-M_e setzen
  4. bei 00 oder 11 AA unverändert lassen
  5. die Verkettung {A,Q,Q−1}\{A,Q,Q_{-1}\} arithmetisch um eine Stelle nach rechts schieben

Nach nn Iterationen wird das redundante oberste Vorzeichenerweiterungsbit von AA verworfen. Die verbleibenden nn Bits von AA bilden zusammen mit QQ das vorzeichenbehaftete 2n2n-Bit-Produkt.

Warum das zusätzliche Akkumulatorbit wichtig ist

Der nn-Bit-Zweierkomplementbereich lautet:

−2n−1≤x≤2n−1−1-2^{n-1} \le x \le 2^{n-1}-1

Der positive Betrag von −2n−1-2^{n-1} passt nicht in nn Bit. Wer -M nur mit nn Bit vorab berechnet, kann daher beim kleinsten Wert scheitern. Vorzeichenerweiterung und ein (n+1)(n+1)-Bit-Akkumulator stellen MeM_e und −Me-M_e dar.

Beispiel: −3×5-3\times5

Verwenden Sie 4-Bit-Operanden:

M=−3=11012,Q=5=01012M=-3=1101_2,\qquad Q=5=0101_2

Erweitern Sie das Vorzeichen des Multiplikanden auf fünf Bit:

Me=111012M_e=11101_2

Initialisieren Sie:

A=00000,Q=0101,Q−1=0A=00000,\quad Q=0101,\quad Q_{-1}=0

Die Tabelle zeigt das Paar und die Rechenaktion, gefolgt vom Zustand nach dem kombinierten arithmetischen Rechtsshift:

IterationPaar (Q0,Q−1)(Q_0,Q_{-1})Aktion vor ShiftAA nach ShiftQQ nach ShiftQ−1Q_{-1}
initial––0000001010
110A−Me=00011A-M_e=000110000110101
201A+Me=11110A+M_e=111101111101010
310A−Me=00010A-M_e=000100000100101
401A+Me=11110A+M_e=111101111100010

Nach vier Iterationen wird das redundante obere Vorzeichenbit von AA verworfen:

A[3:0]  ∣∣  Q=1111  00012A[3:0]\;||\;Q = 1111\;0001_2

Als 8-Bit-Zweierkomplementwert gilt:

111100012=−1511110001_2=-15

Das stimmt mit −3×5-3\times5 überein.

Einen kombinierten Shift nachverfolgen

Nach der ersten Subtraktion:

{A,Q,Q−1}={00011, 0101, 0}\{A,Q,Q_{-1}\} = \{00011,\ 0101,\ 0\}

Der arithmetische Rechtsshift kopiert das Vorzeichenbit des Akkumulators an die neue oberste Stelle und verschiebt jedes andere Bit um eine Position:

{00001, 1010, 1}\{00001,\ 1010,\ 1\}

Der Shift muss auf das gesamte verkettete Register wirken. Würden AA und QQ getrennt geschoben, ginge der Bittransfer über ihre Grenze verloren.

Hardwareblöcke

Ein wiederverwendbarer iterativer Booth-Multiplizierer enthält:

  • ein (n+1)(n+1)-Bit-Multiplikandenregister,
  • einen (n+1)(n+1)-Bit-Akkumulator,
  • ein nn-Bit-Multiplikatorregister plus Q−1Q_{-1},
  • einen (n+1)(n+1)-Bit-Addierer/Subtrahierer,
  • Paardecoder für addieren/subtrahieren/halten,
  • einen kombinierten arithmetischen Shifter,
  • Iterationszähler sowie busy/done-Steuerung.

Der Addierer wird in allen Iterationen wiederverwendet. Das spart gegenüber einem vollständig parallelen Multiplizierer Fläche, kostet jedoch Latenz. Ob eine Iteration einen Takt oder mehrere Mikroschritte benötigt, hängt von Steuerwerk und Datenpfad ab.

Der ALU-Baustein kann Addier-/Subtrahierverhalten in einer Lehrschaltung bereitstellen; prüfen Sie jedoch seine Breite und sein Verhalten bei vorzeichenbehaftetem Überlauf. Ein Schieberegister veranschaulicht serielle Bewegung. Der Booth-Datenpfad benötigt dagegen ein breiteres kombiniertes Register, dessen oberstes Bit mit dem Vorzeichen aufgefüllt wird.

Modified Booth mit Radix 4

Modified Booth mit Radix 4 untersucht überlappende 3-Bit-Fenster und rekodiert jeweils zwei Multiplikatorbits. Am unteren Ende wird eine Null angehängt, am oberen Ende wird der Multiplikator bei Bedarf mit seinem Vorzeichen erweitert.

Für ein Fenster (Q2i+1,Q2i,Q2i−1)(Q_{2i+1},Q_{2i},Q_{2i-1}) gilt:

FensterRekodiertes Vielfaches
00000
001+M+M
010+M+M
011+2M+2M
100−2M-2M
101−M-M
110−M-M
11100

Die verfügbaren Vielfachen sind:

{0, +M, −M, +2M, −2M}\{0,\ +M,\ -M,\ +2M,\ -2M\}

2M2M entsteht durch einen Linksshift, weshalb diese Teilprodukte vergleichsweise günstig zu erzeugen sind. Für einen nn-Bit-Multiplikator liefert Radix 4 ungefähr ⌈n/2⌉\lceil n/2\rceil rekodierte Ziffern statt nn Radix-2-Ziffern.

Diese Reduktion kann:

  • die Zahl der Iterationen in einem iterativen Radix-4-Entwurf halbieren
  • die Zahl der Teilproduktzeilen in einem parallelen Entwurf verringern

Sie macht den vollständigen Multiplizierer nicht automatisch doppelt so schnell. Rekodierung, Vorzeichenkorrektur, Teilprodukterzeugung, Reduktion, Routing, Endaddition und Pipeline tragen ebenfalls zum Timing bei.

Parallele Reduktion: Wallace, Dadda und Endaddierer

Ein Hochdurchsatz-Multiplizierer kann Teilprodukte parallel erzeugen, ihre Spalten mit Carry-Save-Kompressoren reduzieren und die Berechnung mit einem Carry-Propagate-Addierer abschließen.

Wallace- und Dadda-Bäume sind zwei klassische Reduktionspläne. Die Modified-Booth-Rekodierung kann vor einem solchen Baum eingesetzt werden, um die Zeilenzahl zu verringern. Der Endaddierer kann eine Carry-Lookahead-, Parallel-Prefix-, Carry-Select- oder eine andere für die Zieltechnologie gewählte Struktur verwenden.

„Kombinatorisch“ bedeutet nicht zwangsläufig „ein Prozessortakt“. Ein breiter Multiplizierer kann auf mehrere Pipeline-Stufen verteilt werden, um eine Zieltaktperiode einzuhalten. Andere Prozessoren verwenden aus Flächen- oder Leistungsgründen iterative Einheiten. Die Architektur ist eine Implementierungsentscheidung.

Booth im Vergleich

AnsatzSignierter BetriebTeilprodukte/ZyklenTypischer Kompromiss
Iteratives Shift/Addmit korrekter Vorzeichenbehandlung möglichmeist nn Iterationenkleiner Datenpfad, einfache Steuerung
Iteratives Radix-2-Boothnative Zweierkomplement-Rekodierungnn Iterationeneinheitlich signiert, add/sub/skip
Iteratives Radix-4-Boothnative Zweierkomplement-Rekodierungetwa ⌈n/2⌉\lceil n/2\rceilmehr Decodierung und Auswahl
Paralleles Teilprodukt-Array/Baumsigniert oder unsigniertZeilen parallelmehr Hardware, pipelinefähig
Radix-4-Booth plus Reduktionsbaumnative signierte Rekodierungetwa halb so viele Anfangszeilenhäufige Hochleistungsoption

Es gibt keinen universellen Sieger. Operandenbreite, Zielzellen oder FPGA-Ressourcen, Durchsatz, Latenz, Fläche, Leistung und Verifikationsaufwand bestimmen die geeignete Struktur.

In DigiSim aufbauen

Für eine 4-Bit-Lehrschaltung:

  1. Einen sichtbaren 5-Bit-Akkumulator aus Speicherelementen erzeugen.
  2. Den 4-Bit-Multiplikanden auf 5 Bit vorzeichenerweitern.
  3. Einen 5-Bit-Addier/Subtrahierpfad verwenden.
  4. Multiplikator und separates Q−1Q_{-1} speichern.
  5. (Q0, Q−1) in Addieren, Subtrahieren und Halten decodieren.
  6. Den arithmetischen Shift über den kompletten Zustand {A,Q,Q−1} führen.
  7. Genau vier Iterationen zählen.
  8. busy, done und das 8-Bit-Produkt ausgeben.

Gehen Sie die Tabelle für −3×5-3\times5 schrittweise durch und vergleichen Sie jeden Zustand nach dem Shift. Eine Abweichung in der ersten Iteration deutet meist auf eine vertauschte Paarreihenfolge oder Subtraktionspolarität hin. Eine Abweichung nach dem Shift eines negativen Akkumulators weist häufig auf einen logischen statt eines arithmetischen Shifts hin.

Prüfliste

Für eine erschöpfende Prüfung eines kleinen nn-Bit-Multiplizierers werden alle

2n×2n=22n2^n \times 2^n = 2^{2n}

Eingangspaare gegen ein vorzeichenbehaftetes Referenzprodukt mit 2n2n Bit geprüft.

Berücksichtigen Sie mindestens:

  • 0×x0\times x und 1×x1\times x
  • positiv × positiv
  • positiv × negativ
  • negativ × positiv
  • negativ × negativ
  • die maximal positiven Werte
  • den kleinsten Wert −2n−1-2^{n-1}
  • −2n−1×−1-2^{n-1}\times -1
  • die Multiplikatormuster 0000, 1111, 0101 und 1010
  • Reset oder Neustart während busy

Prüfen Sie außerdem mit Assertions:

  • Es finden genau nn Radix-2-Iterationen statt.
  • done wird für jede angenommene Operation genau einmal ausgegeben.
  • Die Eingänge werden entweder zwischengespeichert oder müssen laut Schnittstellenvertrag stabil bleiben.
  • Das Ergebnis wird nicht vor seiner Gültigkeit verwendet.
  • Der kombinierte Shift erhält das Vorzeichen des Akkumulators.

Eine ideale funktionale Simulation belegt die Rechenfolge, nicht die maximale Hardwaretaktfrequenz. Führen Sie nach der Abbildung des Entwurfs auf die Zieltechnologie eine statische Timing-Analyse durch.

Weiterlernen

Vertiefen Sie die Zweierkomplement-Arithmetik für Vorzeichenerweiterung und Wertebereich. Vergleichen Sie anschließend die Ripple-Carry-Addition mit Carry-Lookahead-Strukturen.

Andrew D. Booth stellte das einheitliche vorzeichenbehaftete Verfahren 1951 in seinem Aufsatz „A Signed Binary Multiplication Technique“ vor. Die zentrale Rekodierung ist weiterhin relevant; eine professionelle Implementierung benötigt jedoch explizite Breiten, einen definierten Latenzvertrag, erschöpfende vorzeichenbehaftete Tests und eine auf die Zieltechnologie zugeschnittene Timing-Analyse.

Machen Sie aus der Idee eine funktionierende Schaltung.