Você está na página 1de 33

IMPLEMENTACION EN VHDL DE UN

MULTIPLICADOR DE N BITS

Sistemas Digitales
Facultad de Ingeniería - UBA
Entidad de diseño

Op A

Op B Resultado

Clk

Load

Sistemas Digitales - UBA Multiplicador de N bits


Entidad de diseño

entity multiplicador is
generic(N: natural:= 5);
port(
OpA: in std_logic_vector(N-1 downto 0);
OpB: in std_logic_vector(N-1 downto 0);
Puertos de entrada
Load: in std_logic;
Clk: in std_logic;
Puerto de salida Resultado: out std_logic_vector(2*N-1 downto 0)
);
end;

Op A

Op B Resultado

Clk

Load

Sistemas Digitales - UBA Multiplicador de N bits


Método tradicional de multiplicación

Pasos a ejecutar
• Obtención de los productos parciales (cada producto parcial debe estar
desplazado una posición a la izquierda respecto del producto parcial anterior)
• Suma de los productos parciales para obtener el resultado

0 0 1 0 1 Multiplicando
x 0 0 1 1 0 Multiplicador
0 0 0 0 0
0 0 1 0 1
0 0 1 0 1 Productos parciales
0 0 0 0 0
+ 0 0 0 0 0
0 0 0 0 1 1 1 1 0 Resultado

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Hardware básico necesario para la implementación


• Tres registros (multiplicando, multiplicador y producto)
• Un sumador destinado a realizar las operaciones parciales

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Pasos a ejecutar en hardware (operandos sin signo)

0 0 1 0 1
x 0 0 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 1
0 0 0 1 0 1 0
0 0 0 1 0 1
0 0 0 1 1 1 1 0
0 0 0 0 0
0 0 0 0 1 1 1 1 0
0 0 0 0 0
0 0 0 0 0 1 1 1 1 0

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Arquitectura tentativa (operandos sin signo)


• Dos registros de N bits (uno para cada operando)
• Un registro de 2N bits (resultado parciales y resultado final)
• Un sumador de N bits destinado a realizar las operaciones parciales
• Un multiplexor

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Arquitectura optimizada (operandos sin signo)


• Tres registros de N bits (uno para cada operando y otro para las sumas
parciales)
• Un sumador de N bits destinado a realizar las operaciones parciales

Diferencia con la
arquitectura anterior

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Arquitectura optimizada: funcionamiento

0 0 1 0 1
x 0 0 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 1
0 0 0 1 0 1 0
0 0 0 1 0 1
0 0 0 1 1 1 1 0
0 0 0 0 0
0 0 0 0 1 1 1 1 0
0 0 0 0 0
0 0 0 0 0 1 1 1 1 0

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Arquitectura optimizada: funcionamiento (operandos sin signo)

0 0 1 0 1 0 0 1 0 1
x 0 0 1 1 0 x 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 + 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 1 0 1 + 0 0 1 0 1
0 0 0 1 0 1
0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1
0 0 1 0 1 + 0 0 1 0 1
0 0 0 1 1 1
0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
0 0 0 0 0 + 0 0 0 0 0
0 0 0 0 1 1
0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 0 + 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00110

00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00000 00011

00000 00110

00000
00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00010 10001

00000 00011

00101
00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00011 11000

00010 10001

00111
00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00001 11100

00011 11000

00011
00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00000 11110

00001 11100

00001
00101

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Ejemplo: 5 x 6

00000 11110

00000
00101

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Contenido de la arquitectura del componente multiplicador:


• Declaración del componente registro
• Declaración del componente sumador Parte declarativa

• Declaración de señales a utilizar


• Instanciación del registro A
• Instanciación del registro B
• Instanciación del registro P
• Instanciación del sumador
• Descripción inline de los dos multiplexores
• Descripción de las señales de entrada de los registros P y B
• Descripción del resultado

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Contenido de la arquitectura del componente multiplicador (parte declarativa):

component registro is component sumador is


generic(N: integer:= 4); generic(N: integer:= 4);
port( port(
D: in std_logic_vector(N-1 downto 0); A: in std_logic_vector(N-1 downto 0);
clk: in std_logic; B: in std_logic_vector(N-1 downto 0);
rst: in std_logic; Cin: in std_logic;
ena: in std_logic; Sal: out std_logic_vector(N-1 downto 0);
Q: out std_logic_vector(2*N-1 downto 0) Cout: out std_logic
); );
end component; end component;

signal entP, entB, salP, salSum, salB, salA, aux: std_logic_vector(N-1 downto 0);
signal Co: std_logic;

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Componente sumador

entity sumador is
generic(N: integer:= 4); -- valor genérico
port(
A: in std_logic_vector(N-1 downto 0); -- operando A
B: in std_logic_vector(N-1 downto 0); -- operando B
Cin: in std_logic; -- carry de entrada
Sal: out std_logic_vector(N-1 downto 0);-- resultado de la operación
Cout: out std_logic -- carry de salida
);
end;

architecture sum of sumador is


-- declaración de una señal auxiliar
signal Sal_aux: std_logic_vector(N+1 downto 0);
begin
Sal_aux <= ('0' & A & Cin) + ('0' & B & '1');
Sal <= Sal_aux(N downto 1);
Cout <= Sal_aux(N+1);
end;

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Componente registro

entity registro is
generic(N: integer:= 4); -- valor genérico
port(
D: in std_logic_vector(N-1 downto 0); -- entrada del registro
clk: in std_logic; -- señal de reloj
rst: in std_logic; -- señal de reset
ena: in std_logic; -- señal de habilitación
Q: out std_logic_vector(N-1 downto 0) -- salida del registro
);
end;

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Componente registro

architecture pp of registro is
begin
process(clk, rst)
begin
if rst = '1' then
Q <= (others => '0');
elsif clk = '1' and clk'event then
if ena = '1' then
Q <= D;
end if;
end if;
end process;
end;

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Aquitectura

Contenido de la arquitectura del componente multiplicador (parte descriptiva):

-- instanciación del registro A


regA: registro generic map(N) port map(A, clk, '0', '1', salA);
-- instanciación del registro B
regB: registro generic map(N) port map(entB, clk, '0', '1', salB);
-- instanciación del registro P
regP: registro generic map(N) port map(entP, clk, load, '1', salP);
-- instanciación del sumador
sum: sumador generic map(N) port map(salP, aux, '0', salSum, Co);

entP <= Co & salSum(N-1 downto 1);


entB <= B when load = '1' else
Sal <= salP & salB;
salSum(0) & salB(N-1 downto 1);
aux <= salA when salB(0) = '1' else
(others => '0');

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Banco de pruebas

Para poder validar el funcionamiento de cualquier componente se lo debe


someter a pruebas por medio de un banco de pruebas.

BANCO DE PRUEBAS

DUT MONITOR

ESTIMULOS

Sistemas Digitales - UBA Multiplicador de N bits


Código VHDL - Simulación

Utilizando el programa ModelSim se mostrará el código que describe el


multiplicador y una simulación del mismo

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Todo lo desarrollado hasta aquí se aplica a la multiplicación de números sin


signo. Seguidamente se mostrarán dos variantes para incluir la multiplicación de
dos operandos signados (complemento a la base), en un caso con uno de ellos
pudiendo ser negativo y el otro positivo, y en el otro con ambos pudiendo ser
negativos.

positivo
potencialmente negativo

1) A x B = Resultado

potencialmente
potencialmente
negativo
negativo

2) A x B = Resultado

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Caso 1: Multiplicando potencialmente negativo y multiplicador positivo

Modificaciones/Agregados: En este caso lo que se debe tener en cuenta


es que cada vez que se realiza un desplazamiento de P se debe realizar
aritméticamente, es decir que el bit insertado en la posición más
significativa de P debe ser su signo en lugar del carry obtenido de la suma

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Caso 1: Multiplicando potencialmente negativo y multiplicador positivo

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Caso 2: Multiplicando y multiplicador potencialmente negativos

La manera de resolver este caso es la utilización del algoritmo de Booth


(recodificación)

Operación:
Sea bN-1 ... b0 el contenido inicial de B (multiplicador), entonces en
el paso i del proceso de multiplicación el bit más bajo del registro B
es bi, y el paso i de multiplicación sería:
a) Si bi = 0 y bi-1 = 0, entonces se suma 0 a P
b) Si bi = 0 y bi-1 = 1, entonces se suma A a P
c) Si bi = 1 y bi-1 = 0, entonces se resta A de P
d) Si bi = 1 y bi-1 = 1, entonces se suma 0 a P

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Caso 2: Multiplicando y multiplicador potencialmente negativos

Modificaciones/Agregados: en este caso es necesario contar con un


sumador/restador y con un bloque que genere las señales necesarias para
el control de las operaciones indicadas anteriormente

Sistemas Digitales - UBA Multiplicador de N bits


Arquitectura del multiplicador

Caso 2: Multiplicando y multiplicador potencialmente negativos

Sistemas Digitales - UBA Multiplicador de N bits


FIN

Sistemas Digitales - UBA Multiplicador de N bits

Você também pode gostar