¿Cuántas puertas lógicas se necesitan para multiplicar dos enteros de n bits?

Como sugiere la respuesta del profesor Markov, depende del algoritmo de multiplicación utilizado por el sistema.

La siguiente respuesta se basa en la versión secuencial del algoritmo de multiplicación.
Un hardware de multiplicación binaria implica
1 registro de n bits
1 registro de 2 bits
A n bit ALU
Y un circuito de control

(Fuente: Notas de clase para arquitectura de computadora)

Registros

Suponiendo que los registros están formados por D flip-flips
(Fuente: Wikipedia)

Un solo D-FF contiene 5 puertas lógicas.
El n bit FF contiene 5n puertas lógicas.
Y 2n bit FF contiene 10n puertas lógicas.
Entonces tenemos un total de 15n puertas lógicas que toman ambos registros

ALU
A continuación se muestra una ALU de un solo bit.

(Fuente: Notas de clase para arquitectura de computadora)
Dado que solo se incluye la suma en la multiplicación, consideramos el sumador y los dos multiplexores
Un sumador completo contiene 5 puertas lógicas.

Multiplexor
Si descuidamos las entradas de Habilitar
Un mux 2 × 1 contiene
1 no puerta (para entrada de selección)
2 y puertas
1 puerta OR
Y 1 no es puerta para Q ‘(lo ignoraré)

Un mux 4 × 1 contiene

2 no puerta (para entrada de selección)
4 y puertas
1 puerta OR
Y 1 no es puerta para Q ‘(lo ignoraré)

Entonces, para la operación ALU de un solo bit para la multiplicación, requerimos 4 + 7 + 5 = 16 puertas lógicas

Entonces, para n bits necesitamos 16n puertas lógicas para la operación de ALU

Circuito de control
En el circuito de control podemos combinar la señal de escritura con el 0º bit del multiplicador
usando la compuerta AND, para facilitar la escritura de registros solo si el bit multiplicador es + ive.

De manera similar, combine la señal de control de ALU con el 0 ° bit de producto usando la compuerta AND. Para facilitar la adición de ALU solo cuando el bit multiplicador es + ive.

Esto toma 2 puertas adicionales.

Entonces el total es 15n + 16n + 2 se requieren puertas lógicas para el algoritmo de multiplicación

Los multiplicadores directos de matriz binaria toman el orden de [math] n ^ 2 [/ math] compuertas combinacionales (usaré [math] \ sim [/ math] a continuación para “en el orden de”). Los recuentos exactos varían y dependen de las puertas que permita sin dividirlas en puertas más simples. Por ejemplo, puertas de sumador medias y completas. Es posible implementar la multiplicación de matrices usando un circuito secuencial con menos puertas, pero será más lento. Por cierto, los recuentos de puertas asintóticas coinciden con las estimaciones de tiempo de ejecución en una computadora no paralela (esencialmente, se puede realizar una puerta a la vez).

El algoritmo / circuito de Karatsuba es solo un poco más complicado que la multiplicación de matrices, pero requiere puertas [math] \ sim n ^ {1.585} [/ math]. Comienza a superar la multiplicación de matriz (en tamaño de circuito) para números con al menos cien bits. En general, cuanto más complicado es el algoritmo, mayor es la constante principal junto a la expresión asintótica para su tamaño. Dado que tales algoritmos solo son útiles para números bastante grandes, implementar un circuito completamente combinacional no es práctico: se utilizan circuitos secuenciales, con menos puertas.

La multiplicación Toom-Cook (una familia de algoritmos) es más complicada, pero se ejecuta más rápido para números con al menos varios cientos de bits. Uno de los algoritmos de esta familia utiliza [math] \ sim n ^ {1.465} [/ math] steps / gates.

La multiplicación asintóticamente más rápida conocida puede ilustrarse mediante el algoritmo de Schönhage-Strassen y, más recientemente, el algoritmo de Fürer. Funcionan un poco más lento que [math] n \ log n [/ math] time, pero son útiles solo para números muy grandes, un par de miles de bits o más. Dichos algoritmos son muy complicados y hacer que funcionen bien es un problema de investigación abierto. Aparentemente, algunos algoritmos recientes para la multiplicación de enteros no se han implementado. Aquí no hay mucho espacio para la mejora asintótica, ya que necesita al menos una puerta por bit de entrada. Pero hay mucho margen de mejora para reducir los costos reales de estos algoritmos.

Finalmente, si uno de sus números es una constante, hay una serie de técnicas y optimizaciones que hacen innecesarios los enfoques anteriores. Por ejemplo, para calcular un número binario por 15, primero puede multiplicar por 16 (que es solo un desplazamiento binario) y luego restar el número original. Para multiplicar por 45, primero multiplique por 15, luego multiplique por 3 (primero, multiplique por 2 – un desplazamiento binario, – luego sume el número).