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 2 2*N resultados posibles en una memoria ROM y utilizar los 2*N bits para el direccionamiento. Calcular los 2 N 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] B[3..0] Se requieren de 2 N compuertas AND. Se requiere de N sumadores de N bits Problema: Extensión del signo. Problema: Tratamiento del signo del operando B. MULT (AxB) M[7..0] 3
Multiplicación A3 A2 A1 A0 A X B3 B2 B1 B0 B B A/0 A/2 A/1 A A codificado (+/-)(A/N)2 i + A*B A/3 R= Bi A 2 i 4
Codificación de los productos parciales a 3 a 2 a 1 a 0 a 3 b 0 a 2 b 0 a 1 b 0 a 0 b 0 b 0 a 3 b 1 a 2 b 1 a 1 b 1 a 0 b 1 b 1 a 3 b 2 a 2 b 2 a 1 b 2 a 0 b 2 b 2 a 3 b 3 a 2 b 3 a 1 b 3 a 0 b 3 b 3 M 7 M 6 M 5 M 4 M 3 M 2 M 1 M 0 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(0) <= A(0) and B(0); PARTIAL(1) <= A(1) and B(0); PARTIAL(2) <= A(2) and B(0); PARTIAL(3) <= A(3) and B(0); PARTIAL(4) <= A(0) and B(1); PARTIAL(5) <= A(1) and B(1); PARTIAL(6) <= A(2) and B(1); PARTIAL(7) <= A(3) and B(1); PARTIAL(8) <= A(0) and B(2); PARTIAL(9) <= A(1) and B(2); PARTIAL(10) <= A(2) and B(2); PARTIAL(11) <= A(3) and B(2); PARTIAL(12) <= A(0) and B(3); PARTIAL(13) <= A(1) and B(3); PARTIAL(14) <= A(2) and B(3); PARTIAL(15) <= A(3) and B(3); 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 component HalfAdder is PORT ( Aha, Bha : in std_logic; Sha, Co_ha : out std_logic); end component HalfAdder; component FullAdder is PORT ( Afa, Bfa, Cin_fa : in std_logic; Sfa, Co_fa : out std_logic); end component FullAdder; signal C : std_logic_vector (8 downto 1); signal S : std_logic_vector (6 downto 1); begin I0 : halfadder port map (PARTIAL(1), PARTIAL(4), MI(1), C(1)); I1 : fulladder port map (PARTIAL(2), PARTIAL(5), C(1), S(1), C(2)); I2 : fulladder port map (PARTIAL(3), PARTIAL(6), C(2), S(2), C(3)); I3 : halfadder port map (PARTIAL(7), C(3), S(3), C(4)); I4 : halfadder port map (S(1), PARTIAL(8), MI(2), C(5)); I5 : fulladder port map (S(2), PARTIAL(9), C(5), S(4), C(6)); I6 : fulladder port map (S(3), PARTIAL(10), C(6), S(5), C(7)); I7 : fulladder port map (PARTIAL(11), C(4), C(7), S(6), C(8)); 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)); I10: fulladder port map (PARTIAL(14), S(6), C(10), MI(5), C(12)); 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 Codificador A/N B0 B1 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*2 3 *(/A+1) = 2 3 *(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) X 0 1 1 0 (6) 1 1 0 1 (-3) X 0 1 0 1 (5) 1 0 1 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) X 0 1 1 0 (6) 0 0 0 0 0 1 0 1-0 1 0 1 - - 0 0 0 0 - - - 0 0 1 1 1 1 0 (30) 1 1 0 1 (-3) X 0 1 0 1 (5) 1 1 1 1 1 0 1 0 0 0 0 0 0-1 1 1 0 1 - - 0 0 0 0 - - - 1 1 1 0 0 0 1 (-15) 1 0 1 1 (-5) X 1 0 1 0 (-6) 0 0 0 0 0 0 0 1 1 1 0 1 1-0 0 0 0 0 - - 0 1 0 1 - - - 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 b N A N 1 b A b 2 N 1 N 1 N 1 1 2 1 Físicamente, la implementación consiste en complementar el operando A y sumar el término: b N N 12 1 18
Multiplicación de números con signo a 3 a 2 a 1 a 0 -a 3 b 0 a 2 b 0 a 1 b 0 a 0 b 0 b 0 -a 3 b 1 a 2 b 1 a 1 b 1 a 0 b 1 b 1 -a 3 b 2 a 2 b 2 a 1 b 2 a 0 b 2 b 2 -a 3 b 3 a 2 b 3 a 1 b 3 a 0 b 3 b 3 b 3 M 7 M 6 M 5 M 4 M 3 M 2 M 1 M 0 19
Multiplicación de números con signo A3 A2 A1 A0 B0 A3/0 A3/0 A2/0 A1/0 A0/0 B1 A3/1 A3/1 A2/1 A1/1 A0/1 B2 A3/2 A3/2 A2/2 A1/2 A0/2 B3 A3/3 A2/3 A1/3 A0/3 Matriz de sumas 2 3 B3 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 La suma del término: b 12 1 N 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 0 1 1 0 x 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 0 (-36) Operando A Operando B A x B0 A x B1 A x B2 A x B3 Shift a la Izquierda según la potencia de n 2 que corresponda a cada bit de B 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 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 0 (-36) 0 1 1 0 x 1 0 1 0 0 0 0 0 Shift 0 0 0 0 Add + 0 1 1 0 Shift 0 1 1 0 0 Add + 0 0 0 0 Shift 0 0 1 1 0 0 Add + 1 0 1 0 Shift 1 0 1 1 1 0 0 ADD 25
Multiplicador Serie-Paralelo Producto parcial = 0 Producto parcial = A Producto parcial = 0 Producto parcial = A 0 1 1 0 x 1 0 1 0 0 0 0 0 Shift 0 0 0 0 Add + 0 1 1 0 Shift 0 1 1 0 0 Add + 0 0 0 0 Shift 0 0 1 1 0 0 Add + 1 0 1 0 Shift 1 0 1 1 1 0 0 ADD 26
Arquitectura del circuito 0 A B (serial) MUX 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 CLK Accumulator Shift sense Multiplier (B) Ad : Add enable signal Sh : Shift enable signal C : Carry out signal M: Multiplier bit M C Adder Ad Control (FSM) Start CLK Multiplicand (A) Sh 30
Arquitectura del circuito: Ejemplo Multiplicar 13x11 = 143 ( 1101 x 1011 = 10001111 ) Contenido inicial del registro ( "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 ( "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 (Salto de suma en M 0) Shift 0 0 1 0 0 1 1 1 1 ( "A" en M 1) 1 1 0 1 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 0 0 0 0 0 1 0 1 1 M M M M Línea divisoria entre el producto y el multiplicador 31
Arquitectura del circuito Pseudo-código Máquina de Estados 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 b i = 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 serieparalelo 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