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
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
FA FA FA HA
FA FA FA HA
M7 M6 M5 M4 M3 M2 M1 M0
8
Multiplicación
9
Multiplicación
A3/1 A2/1 A3/0 A1/1 A2/0 A0/1 A1/0 A0/0
HA FA FA HA
FA FA FA HA
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
end ARC; 11
Multiplicación
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.
• 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
Matriz de sumas
M7 M6 M5 M4 M3 M2 M1 M0
14
Multiplicación de números con signo
15
Multiplicación
16
Multiplicación de números con signo
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
-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
21
Multiplicación
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)
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
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)
• ¿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
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