Escolar Documentos
Profissional Documentos
Cultura Documentos
MULTIPLICADOR DE N BITS
Sistemas Digitales
Facultad de Ingeniería - UBA
Entidad de diseño
Op A
Op B Resultado
Clk
Load
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
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
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
Diferencia con la
arquitectura anterior
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
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
Ejemplo: 5 x 6
Ejemplo: 5 x 6
00110
00101
Ejemplo: 5 x 6
00000 00011
00000 00110
00000
00101
Ejemplo: 5 x 6
00010 10001
00000 00011
00101
00101
Ejemplo: 5 x 6
00011 11000
00010 10001
00111
00101
Ejemplo: 5 x 6
00001 11100
00011 11000
00011
00101
Ejemplo: 5 x 6
00000 11110
00001 11100
00001
00101
Ejemplo: 5 x 6
00000 11110
00000
00101
signal entP, entB, salP, salSum, salB, salA, aux: std_logic_vector(N-1 downto 0);
signal Co: std_logic;
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;
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;
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;
BANCO DE PRUEBAS
DUT MONITOR
ESTIMULOS
positivo
potencialmente negativo
1) A x B = Resultado
potencialmente
potencialmente
negativo
negativo
2) A x B = Resultado
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