← Volver al blogCircuitos aritméticos

Multiplicador de Booth explicado (con ejemplos)

Aprende la recodificación Booth radix-2 y radix-4, sigue paso a paso −3 × 5 y evita errores de anchura con signo en un multiplicador iterativo.

DennyDenny
9 min de lectura
Chalkboard feature illustration for “Multiplicador de Booth explicado (con ejemplos)”

Resumen: La recodificación Booth reescribe las rachas de bits 1 del multiplicador como dígitos con signo. Booth radix-2 examina el par (Q0,Q−1)(Q_0,Q_{-1}) en cada iteración: 01 suma el multiplicando, 10 lo resta y 00 o 11 no hacen nada antes de un desplazamiento aritmético a la derecha. Una implementación segura en anchura para nn bits extiende el signo del multiplicando y usa un acumulador de (n+1)(n+1) bits, evitando el fallo especial del valor más negativo. Booth modificado radix-4 reduce aproximadamente a la mitad el número de productos parciales al elegir entre 0,±M,±2M0,\pm M,\pm2M.

La multiplicación binaria puede construirse con desplazamientos y sumas. El reto no es que sea imposible multiplicar operandos en complemento a 2 sin Booth —no lo es—, sino que el tratamiento del signo y la generación de productos parciales deben diseñarse correctamente.

El método de Booth proporciona una recodificación con signo uniforme y comprime las rachas de bits 1. Es útil en dos arquitecturas diferentes:

  • un multiplicador iterativo, que reutiliza un sumador durante varios ciclos
  • un multiplicador paralelo, que genera productos parciales recodificados y los reduce con un árbol de sumadores/compresores

Ambas arquitecturas comparten la idea de recodificación, pero tienen distinta latencia, área y temporización.

La identidad de las rachas de unos

Considera una racha de unos binarios desde el bit jj hasta el bit kk, donde k≥jk\ge j:

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

Por ejemplo:

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

La técnica ordinaria de desplazamiento y suma sin signo añadiría cuatro copias desplazadas del multiplicando para 1111. La recodificación Booth representa esa racha con una resta en su límite inferior y una suma en la posición situada por encima de su límite superior.

Esto no garantiza menos operaciones distintas de cero para todos los patrones de bits. Una racha larga se beneficia; unos aislados o alternos pueden no reducir nada e incluso aumentar el número de decisiones de suma/resta. Un multiplicador iterativo radix-2 de latencia fija sigue realizando nn iteraciones: la recodificación cambia la acción aritmética de cada iteración, no el número de ciclos automáticamente.

Recodificación Booth radix-2

Añade un cero implícito por debajo del multiplicador:

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

En la iteración ii, inspecciona el bit menos significativo actual del multiplicador, Q0Q_0, y el bit anterior guardado, Q−1Q_{-1}:

Q0Q_0Q−1Q_{-1}Acción del acumulador
00sin cambios
01suma MM
10resta MM
11sin cambios

Después desplaza aritméticamente a la derecha una posición el acumulador, el multiplicador y el bit guardado combinados.

El par detecta los límites:

  • 10 marca el extremo bajo de una racha de unos, así que se resta
  • 01 marca el extremo alto después de desplazar la racha, así que se suma
  • dos bits adyacentes iguales están dentro de una racha constante, así que no hace falta acción aritmética

El orden de los bits de la tabla importa. Algunos textos imprimen (Q−1,Q0)(Q_{-1},Q_0); eso invierte las etiquetas de las filas. Declara siempre la convención.

Ruta de datos iterativa segura en anchura

Sean ambos operandos de entrada valores con signo de nn bits en complemento a 2:

  • MM: multiplicando
  • QQ: multiplicador

Usa:

  • MeM_e: MM extendido con signo a n+1n+1 bits
  • AA: un acumulador de n+1n+1 bits, inicialmente cero
  • QQ: el registro multiplicador de nn bits
  • Q−1Q_{-1}: un bit guardado, inicialmente cero
  • un contador de iteraciones de 0 a n−1n-1

Para cada una de las nn iteraciones:

  1. inspecciona (Q0,Q−1)(Q_0,Q_{-1})
  2. si es 01, establece A←A+MeA \leftarrow A+M_e
  3. si es 10, establece A←A−MeA \leftarrow A-M_e
  4. si es 00 o 11, deja AA sin cambios
  5. desplaza aritméticamente a la derecha una posición la concatenación {A,Q,Q−1}\{A,Q,Q_{-1}\}

Después de nn iteraciones, descarta el bit superior redundante de extensión de signo de AA. Los nn bits restantes de AA, concatenados con QQ, forman el producto con signo de 2n2n bits.

Por qué importa el bit adicional del acumulador

Para un número de nn bits en complemento a 2, el intervalo representable es:

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

La magnitud positiva de −2n−1-2^{n-1} no cabe en nn bits. Por tanto, un diseño que precalcule -M usando solo nn bits puede fallar cuando MM es el valor más negativo. Extender el signo de MM y usar un acumulador de (n+1)(n+1) bits hace representables tanto MeM_e como −Me-M_e durante el algoritmo.

Ejemplo resuelto: −3×5-3 \times 5

Usa operandos de 4 bits:

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

Extiende con signo el multiplicando a cinco bits:

Me=111012M_e=11101_2

Inicializa:

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

La tabla muestra el par y la acción aritmética, seguidos del estado después del desplazamiento aritmético combinado a la derecha:

IteraciónPar (Q0,Q−1)(Q_0,Q_{-1})Acción antes del desplazamientoAA después del desplazamientoQQ después del desplazamientoQ−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

Después de cuatro iteraciones, descarta el bit de signo alto redundante de AA:

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

Como valor de 8 bits en complemento a 2:

111100012=−1511110001_2=-15

que coincide con −3×5-3\times5.

Traza un desplazamiento combinado

Después de la primera resta:

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

El desplazamiento aritmético a la derecha copia el bit de signo del acumulador en la nueva posición superior y mueve todos los demás bits una posición:

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

El desplazamiento debe actuar sobre el registro concatenado completo. Desplazar AA y QQ de forma independiente perdería la transferencia de bits entre sus límites.

Bloques de hardware

Un multiplicador Booth iterativo reutilizable contiene:

  • un registro multiplicando o ruta de entrada de (n+1)(n+1) bits
  • un acumulador de (n+1)(n+1) bits
  • un registro multiplicador de nn bits más Q−1Q_{-1}
  • un sumador/restador de (n+1)(n+1) bits
  • control de decodificación del par para add, subtract o hold
  • un desplazador aritmético combinado
  • un contador de iteraciones y control busy/done

El sumador se reutiliza en todas las iteraciones, lo que ahorra área frente a un multiplicador totalmente paralelo, pero cuesta latencia. Que una iteración ocupe un reloj o varios micro pasos depende del controlador y de la ruta de datos.

El componente ALU puede proporcionar el comportamiento de suma/resta en un circuito didáctico, pero confirma su anchura y su comportamiento ante desbordamiento con signo. Un registro de desplazamiento ilustra el movimiento serie; la ruta de datos Booth necesita un registro combinado más ancho cuyo bit superior se rellene con el signo.

Booth modificado radix-4

Booth modificado radix-4 examina ventanas de 3 bits solapadas y recodifica dos bits del multiplicador por dígito. Añade un cero en el extremo bajo y extiende con signo el multiplicador en el extremo alto cuando sea necesario.

Para una ventana (Q2i+1,Q2i,Q2i−1)(Q_{2i+1},Q_{2i},Q_{2i-1}):

VentanaMúltiplo recodificado
00000
001+M+M
010+M+M
011+2M+2M
100−2M-2M
101−M-M
110−M-M
11100

Los múltiplos disponibles son:

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

2M2M es un desplazamiento a la izquierda, por lo que estos productos parciales son relativamente económicos de generar. Para un multiplicador de nn bits, radix-4 produce aproximadamente ⌈n/2⌉\lceil n/2\rceil dígitos recodificados en lugar de nn dígitos radix-2.

Esa reducción puede:

  • reducir a la mitad las iteraciones en un diseño iterativo radix-4
  • reducir el número de filas de productos parciales en un diseño paralelo

No hace que el multiplicador completo sea automáticamente el doble de rápido. La recodificación, la corrección de signo, la generación de productos parciales, la reducción, el enrutamiento, la suma final y la segmentación contribuyen a la temporización.

Reducción paralela: Wallace, Dadda y sumadores finales

Un multiplicador de alto rendimiento puede generar productos parciales en paralelo, reducir sus columnas con compresores de acarreo guardado y terminar con un sumador de propagación de acarreo.

Los árboles de Wallace y Dadda son dos planificaciones clásicas de reducción. La recodificación Booth modificada puede colocarse antes de un árbol de este tipo para reducir el número de filas. El sumador final puede usar acarreo anticipado, prefijo paralelo, selección de acarreo u otra estructura elegida para la tecnología objetivo.

«Combinacional» no significa necesariamente «un ciclo de procesador». Un multiplicador ancho puede segmentarse en varias etapas para cumplir un periodo de reloj objetivo, y algunos procesadores usan unidades iterativas por razones de área o potencia. La arquitectura es una decisión de implementación.

Booth frente a otras estructuras de multiplicador

EnfoqueOperación con signoNúmero de productos parciales o ciclosCompromiso habitual
Desplazamiento/suma iterativos básicosposible con tratamiento correcto del signonormalmente nn iteracionesruta de datos pequeña, control sencillo
Booth iterativo radix-2recodificación nativa en complemento a 2nn iteracionesalgoritmo con signo uniforme; suma/resta/salto
Booth iterativo radix-4recodificación nativa en complemento a 2aproximadamente ⌈n/2⌉\lceil n/2\rceil iteracionesmás decodificación/selección de múltiplos
Matriz/árbol paralelo de productos parcialesvariantes con o sin signofilas procesadas simultáneamentemás hardware; puede segmentarse
Booth radix-4 más árbol de reducciónrecodificación nativa con signoaproximadamente la mitad de filas inicialesopción habitual de diseño de alto rendimiento

No hay un ganador universal. La anchura de los operandos, las celdas objetivo o los recursos FPGA, el rendimiento, la latencia, el área, la potencia y el esfuerzo de verificación determinan la estructura adecuada.

Constrúyelo en DigiSim

Para una implementación didáctica de 4 bits:

  1. Crea un acumulador de 5 bits con elementos de almacenamiento visibles.
  2. Extiende con signo el multiplicando de 4 bits a 5 bits.
  3. Usa una ruta de suma/resta de 5 bits.
  4. Almacena el multiplicador de 4 bits y un bit Q−1Q_{-1} separado.
  5. Decodifica (Q0, Q−1) como suma, resta o retención.
  6. Implementa el desplazamiento aritmético sobre el estado completo {A,Q,Q−1}.
  7. Cuenta exactamente cuatro iteraciones.
  8. Expón busy, done y el producto final de 8 bits.

Recorre la tabla de −3×5-3\times5 y compara cada estado posterior al desplazamiento. Un desacuerdo en la primera iteración suele indicar que se invirtió el orden del par o la polaridad de la resta; un desacuerdo después de desplazar un acumulador negativo suele indicar un desplazamiento lógico en lugar de uno aritmético.

Lista de comprobación de verificación

Para verificar exhaustivamente un multiplicador pequeño de nn bits, prueba los:

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

pares de entrada frente a un producto de referencia con signo representado en 2n2n bits.

Como mínimo, incluye:

  • 0×x0\times x y 1×x1\times x
  • positivo × positivo
  • positivo × negativo
  • negativo × positivo
  • negativo × negativo
  • valores positivos máximos
  • el valor más negativo −2n−1-2^{n-1}
  • −2n−1×−1-2^{n-1}\times -1
  • patrones del multiplicador 0000, 1111, 0101 y 1010
  • reinicio o rearranque mientras está ocupado

Comprueba también que:

  • se producen exactamente nn iteraciones radix-2
  • done se emite una vez por cada operación aceptada
  • las entradas se capturan o el contrato exige que permanezcan estables
  • el resultado no se consume antes de ser válido
  • el desplazamiento combinado conserva el signo del acumulador

Una simulación funcional ideal demuestra la secuencia aritmética, no la frecuencia máxima del reloj del hardware. Usa análisis temporal estático después de asignar el diseño a su objetivo.

Sigue aprendiendo

Repasa la aritmética en complemento a 2 para la extensión de signo y el intervalo, y después compara la suma con acarreo en cascada con las estructuras de acarreo anticipado.

Andrew D. Booth introdujo el método uniforme con signo en su artículo de 1951, «A Signed Binary Multiplication Technique». La recodificación central sigue siendo relevante, pero una implementación profesional aún necesita anchuras explícitas, un contrato de latencia definido, pruebas exhaustivas con signo y análisis temporal específico del objetivo.

Convierte la idea en un circuito funcional.