Sei sulla pagina 1di 33

Multiplicador Digital

Dr. Andrés David García García


Departamento de Mecatrónica
Escuela de Ingeniería y Ciencias
Multiplicador
• Existen varios métodos básicos para el cálculo de la multiplicación de
dos números (A, B) de N bits:

• Almacenamiento de los 22*N resultados posibles en una memoria ROM y utilizar


los 2*N bits para el direccionamiento.

• Calcular los 2N funciones lógicas y realizar la suma correspondiente.

• Con base en la codificación anterior optimizar teniendo en cuenta una relación


de dependencia entre los números A y B y el resultado M.

2
Multiplicador
• La multiplicación consiste en una serie de operaciones AND entre los
distintos bits y una serie de sumas.

A[3..0]
M[7..0]
MULT (AxB)
B[3..0]
• Se requieren de 2N compuertas AND.
• Se requiere de N sumadores de N bits
• Problema: Extensión del signo.
• Problema: Tratamiento del signo del operando B.

3
Multiplicación

A3 A2 A1 A0 A

X B3 B2 B1 B0 B B

A/0

A codificado
+
A/1 A*B
A
(+/-)(A/N)2 i
A/2

A/3

R=  Bi A 2 i
4
Codificación de los productos parciales

a3 a2 a1 a0
a3 b0 a2 b0 a1 b0 a0 b0 b0
a3 b1 a2 b1 a1 b1 a0 b1 b1
a3 b2 a2 b2 a1 b2 a0 b2 b2
a3 b3 a2 b3 a1 b3 a0 b3 b3

M7 M6 M5 M4 M3 M2 M1 M0

Arreglo de compuertas AND


ADGG / LFGP 5
Multiplicación
A3 A2 A1 A0

B0
A3/0 A2/0 A1/0 A0/0

B1
A3/1 A2/1 A1/1 A0/1

B2
A3/2 A2/2 A1/2 A0/2

B3
A3/3 A2/3 A1/3 A0/3

Matriz de sumas

M7 M6 M5 M4 M3 M2 M1 M0
6
Productos Parciales. Descripción en VHDL
ENTITY encod_mul IS
PORT ( A, B : IN std_logic_vector(3 downto 0);
PARTIAL: OUT std_logic_vector(15 downto 0));
END encod_mul;

ARCHITECTURE mx OF encod_mul IS
BEGIN PARTIAL(8) <= A(0) and B(2);
PARTIAL(9) <= A(1) and B(2);
PARTIAL(0) <= A(0) and B(0); PARTIAL(10) <= A(2) and B(2);
PARTIAL(1) <= A(1) and B(0); PARTIAL(11) <= A(3) and B(2);
PARTIAL(2) <= A(2) and B(0);
PARTIAL(3) <= A(3) and B(0); PARTIAL(12) <= A(0) and B(3);
PARTIAL(13) <= A(1) and B(3);
PARTIAL(4) <= A(0) and B(1); PARTIAL(14) <= A(2) and B(3);
PARTIAL(5) <= A(1) and B(1); PARTIAL(15) <= A(3) and B(3);
PARTIAL(6) <= A(2) and B(1);
PARTIAL(7) <= A(3) and B(1); END mx; 7
Multiplicación
A3/1 A2/1 A3/0 A1/1 A2/0 A0/1 A1/0 A0/0

HA FA FA HA

A3/2 A2/2 A1/2 A0/2

FA FA FA HA

A3/3 A2/3 A1/3 A0/3

FA FA FA HA

M7 M6 M5 M4 M3 M2 M1 M0

8
Multiplicación

• Si suponemos que todos los productos intermedios se calculan en un


tiempo T, y que cada sumador realiza su operación en un tiempo ts, el
resultado para una multiplicación de dos números de N bits será igual
al número de operadores de suma que compone el camino crítico:

• Total de células sumadoras: 12 (8 FA, y 4 HA)

• CAMINO CRÍTICO: 10 (8 FA, 2 HA)

9
Multiplicación
A3/1 A2/1 A3/0 A1/1 A2/0 A0/1 A1/0 A0/0

HA FA FA HA

A3/2 A2/2 A1/2 A0/2

FA FA FA HA

A3/3 A2/3 A1/3 A0/3

FA FA FA HA

M7 M6 M5 M4 M3 M2 M1 M0

10
Arreglo de sumas. Descripción en VHDL
entity SUM_MUL is
port (PARTIAL: in std_logic_vector(15 downto 0);
MI : out std_logic_vector(7 downto 0));
end SUM_MUL;
architecture ARC of SUM_MUL is begin

component HalfAdder is I0 : halfadder port map (PARTIAL(1), PARTIAL(4), MI(1), C(1));


PORT ( Aha, Bha : in std_logic; I1 : fulladder port map (PARTIAL(2), PARTIAL(5), C(1), S(1), C(2));
Sha, Co_ha : out std_logic); I2 : fulladder port map (PARTIAL(3), PARTIAL(6), C(2), S(2), C(3));
end component HalfAdder; I3 : halfadder port map (PARTIAL(7), C(3), S(3), C(4));
I4 : halfadder port map (S(1), PARTIAL(8), MI(2) , C(5));
component FullAdder is I5 : fulladder port map (S(2), PARTIAL(9), C(5), S(4), C(6));
PORT ( Afa, Bfa, Cin_fa : in std_logic; I6 : fulladder port map (S(3), PARTIAL(10), C(6), S(5), C(7));
Sfa, Co_fa : out std_logic); I7 : fulladder port map (PARTIAL(11), C(4), C(7), S(6), C(8));
end component FullAdder; I8 : halfadder port map (PARTIAL(12),S(4), MI(3), C(9));
I9 : halfadder port map (PARTIAL(13),S(5), C(9), MI(4), C(10));
signal C : std_logic_vector (8 downto 1); I10: fulladder port map (PARTIAL(14), S(6), C(10), MI(5), C(12));
signal S : std_logic_vector (6 downto 1); I11: fulladder port map (PARTIAL(15), C(8), C(11), MI(6), MI(7));

end ARC; 11
Multiplicación

• Descripción de la multiplicación sin signo en dos


bloques: A3 A2 A1 A0

B0
B1
Codificador A/N
B2
B3

Sumatoria de A/N

M7 M6 M5 M4 M3 M2 M1 M0

12
Multiplicación de números con signo
• Multiplicación de números negativos:
• Representación en complemento a 2.

• Si B es negativo, entonces el último producto parcial se obtiene con el


complemento a 2 de A:

• B3*23*(/A+1) = 23*(B3*/A+B3)
• En este caso si B3=‘1’ se realiza el complemento a 2 y el ajuste.
• Si B3=‘0’ el producto parcial es cero y no hay ajuste.

13
Extensión de signo (Si B es negativo)
A3 A2 A1 A0

B0
A3/0 A2/0 A1/0 A0/0

B1
A3/1 A2/1 A1/1 A0/1

B2
A3/2 A2/2 A1/2 A0/2

B3

A3/3 A2/3 A1/3 A0/3

Matriz de sumas

M7 M6 M5 M4 M3 M2 M1 M0
14
Multiplicación de números con signo

• Multiplicación de números negativos:

• Si A y B son negativos, se representan en ‘2 y se expande el


resultado de cada producto intermedio copiando el MSb. También
se aplica el ajuste anterior (B negativo)

• Si sólo A es negativo solamente se expande el resultado de cada


producto intermedio copiando el MSb.

15
Multiplicación

• Realice los siguientes ejercicios:

0 1 0 1 (5) 1 1 0 1 (-3) 1 0 1 1 (-5)


X 0 1 1 0 (6) X 0 1 0 1 (5) X 1 0 1 0 (-6)

16
Multiplicación de números con signo

• Solución de los ejercicios:


Extensión de signo

0 1 0 1 (5) 1 1 0 1 (-3) 1 0 1 1 (-5)


X 0 1 1 0 (6) X 0 1 0 1 (5) X 1 0 1 0 (-6)
0000 1111101 0000000
0101- 000000 - 111011 -
0101-- 11101 - - 00000 - -
0000--- 0000- - - 0101 - - -
0 0 1 1 1 1 0 (30) 1 1 1 0 0 0 1 (-15) 0 0 1 1 1 1 0 (30)

Complemento a 2
17
Multiplicación de números con signo
• Efectuar el corrimiento hacia la izquierda y extensión de signo.
• El último operando se representa en complemento a 2 de A si
B es negativo (MSB = ‘1’), en otro caso, el último operando es
cero:
 A  bN 1 2 N 1
A 1 2 bN 1 A  bN 1 
N 1

• Físicamente, la implementación consiste en complementar el


operando A y sumar el término: N 1
bN 1 2
18
Multiplicación de números con signo
a3 a2 a1 a0

-a3 b0 a2 b0 a1 b0 a0 b0 b0

-a3 b1 a2 b1 a1 b1 a0 b1 b1

-a3 b2 a2 b2 a1 b2 a0 b2 b2

-a3 b3 a2 b3 a1 b3 a0 b3 b3

b3

M7 M6 M5 M4 M3 M2 M1 M0
19
Multiplicación de números con signo
A3 A2 A1 A0

B0
A3/0 A2/0 A1/0 A0/0
A3/0

B1
A3/1 A2/1 A1/1 A0/1
A3/1
B2
A3/2 A2/2 A1/2 A0/2
A3/2

B3
A3/3 A2/3 A1/3 A0/3

23B3
Matriz de sumas

M7 M6 M5 M4 M3 M2 M1 M0
20
Multiplicación de números con signo

• La codificación de los productos parciales se realiza en


paralelo.
N 1
• La suma del término: bN 1 2 se realizará en el arreglo
sumador.
• El camino crítico se compone de una AND y una compuerta
NOT.
• La velocidad del multiplicador dependerá en gran medida del
bloque de sumas

21
Multiplicación

• Para acelerar el resultado de la multiplicación se debe optimizar


el camino crítico, es decir, el camino mas largo que deben
recorrer las entradas A y B para generar el resultado M.
• En este caso, todos los productos intermedios estarán
calculados al mismo tiempo por lo que no representan parte del
camino crítico.
• El camino crítico estará definido por la suma de productos
intermedios mas grande.

22
Multiplicador Serie-Paralelo
• La Multiplicación puede ser re-estructurada en base a
operaciones simples a realizarse de forma sucesiva o
iterativa.
• Esto permite reducir drásticamente la complejidad
material del circuito.
• Arquitectura Serie-Paralelo:
• Multiplicar el operando “A” con cada bit del operando “B”
• Recorrer hacia la izquierda cada producto parcial
• Acumular los productos parciales conforme se generan
• Utilizar un circuito síncrono para controlar el proceso

23
Multiplicador Serie-Paralelo

Operando “A”
0 1 1 0
Operando “B”
x 1 0 1 0
0 0 0 0 0 0 0 “A” x B0 Shift a la
0 0 0 1 1 0 “A” x B1 Izquierda según
la potencia de n2
0 0 0 0 0 “A” x B2 que corresponda
1 0 1 0 “A” x B3 a cada bit de “B”
1 0 1 1 1 0 0 (-36)

El resultado es producto de una suma de todos los productos parciales


24
Multiplicador Serie-Paralelo

0 1 1 0
x 1 0 1 0
0 1 1 0
0 0 0 0 Shift
x 1 0 1 0
0 0 0 0 Add
0 0 0 0 0 0 0
+ 0 1 1 0 Shift
0 0 0 1 1 0
0 1 1 0 0 Add
0 0 0 0 0
+ 0 0 0 0 Shift
1 0 1 0
0 0 1 1 0 0 Add
1 0 1 1 1 0 0 (-36)
+ 1 0 1 0 Shift
1 0 1 1 1 0 0 ADD

25
Multiplicador Serie-Paralelo

0 1 1 0
x 1 0 1 0
Producto parcial = 0 0 0 0 0 Shift
0 0 0 0 Add
Producto parcial = A + 0 1 1 0 Shift
0 1 1 0 0 Add
Producto parcial = 0 + 0 0 0 0 Shift
0 0 1 1 0 0 Add
Producto parcial = A + 1 0 1 0 Shift
1 0 1 1 1 0 0 ADD

26
Arquitectura del circuito

0 A

B MUX
(serial)

Fast Adder

Shift / Accumulation Register

27
Arquitectura del circuito
• El multiplicador Serie-Paralelo es un circuito secuencial
• La arquitectura consiste de:

• Un multiplexor:
• Producto Parcia = 0, si Bn = ‘0’
• Producto Parcial = A, si Bn = ‘1’
• Sumador: suma la salida del multiplexor (A ó 0) que corresponde al producto parcial Bn con el
contenido del registro (Producto Parcial previamente acumulado correspondiente a Bn-1)
• Shift / accumulation register: Almacena el resultado en el acumulador y realiza el corrimiento
(shift)

• En lugar de hacer corrimientos hacia la izquierda (como se haría en la multiplicación


normal) se hace un corrimiento a la derecha del contenido del acumulador
28
Diseño del circuito
• Requerimientos para un multiplicador de n-bits

• Un registro de n-bits para el multiplicando


• Un registro de n-bits para el multiplicador
• Un registro de corrimiento para el producto de 2n-bits

• El registro del producto también se usa como registro acumulador para


almacenar las sumas de los productos parciales conforme son generados

• IDEA: al usar una arquitectura iterativa de este tipo, el corrimiento dentro


del registro de 2n-bits es hacia la derecha.

• ¿explique porqué?
29
Arquitectura del circuito
Ad : Add enable signal
Sh : Shift enable signal
Shift sense C : Carry out signal
Accumulator Multiplier (B) M: Multiplier bit
CLK
M

C Ad Start
Adder Control
(FSM) CLK

Sh
Multiplicand (A)

30
Arquitectura del circuito: Ejemplo
• Multiplicar 13x11 = 143 (“1101” x “1011”=
“10001111”)
Contenido inicial del registro 0 0 0 0 0 1 0 1 1 M
( "A" en M  1) 1 1 0 1
Después de sumar 0 1 1 0 1 1 0 1 1
Shift 0 0 1 1 0 1 1 0 1 M
( "A" en M  1) 1 1 0 1
Despúes de sumar 1 0 0 1 1 1 1 0 1
Shift 0 1 0 0 1 1 1 1 0 M
(Salto de suma en M  0)
Shift 0 0 1 0 0 1 1 1 1 M
( "A" en M  1) 1 1 0 1 Línea divisoria entre el
producto y el multiplicador
Después de sumar 1 0 0 0 1 1 1 1 1
Shift (Resultado final) 0 1 0 0 0 1 1 1 1
31
Arquitectura del circuito
• Máquina de Estados
• Pseudo-código

A, B son los operandos (n bits)


P es el registro en donde se almacenará el
producto final

P = 0; // inicialización
for i=0 to n-1 do
if bi = 1 then
P = P + A;
end if;
left-shift A;
end for;

32
Desempeño:
• El cálculo de la multiplicación a través de un arreglo serie-
paralelo es más pequeño que un multiplicador paralelo
tradicional

• Serie-paralelo: una multiplicación en B ciclos de reloj


• Paralelo: una multiplicación por ciclo de reloj

• Sin embargo, el camino crítico es mas pequeño en el arreglo


serie-paralelo El circuito puede operar a frecuencias de
reloj superiores
33