Ripple Carry-multiplier
Ir para navegação
Ir para pesquisar
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
--Book: GUIDE/
--Ripple carry multiplier
architecture ripple_carry_mult of multiplier is
signal u: std_logic_vector (n-1 downto 0);
constant v : std_logic_vector (n-1 downto 0) := (others => '0');
TYPE matrix IS ARRAY (0 TO n-1) OF STD_LOGIC_VECTOR(n-1 DOWNTO 0);
SIGNAL c, d, e, f : matrix;
BEGIN
u <= cin;
main_iteration: FOR i IN 0 TO n-1 GENERATE
internal_iteration: FOR j IN 0 TO n-1 GENERATE
f(i)(j) <= (a(j) AND b(i)) XOR c(i)(j) XOR d(i)(j);
e(i)(j) <= (a(j) AND b(i) AND c(i)(j)) OR (a(j) AND b(i) AND d(i)(j)) OR (c(i)(j) AND d(i)(j));
END GENERATE;
END GENERATE;
connections1: FOR j IN 0 TO n-1 GENERATE
c(0)(j) <= u(j);
END GENERATE;
connections2: FOR i IN 1 TO n-1 GENERATE
connections3: FOR j IN 0 TO n-2 GENERATE
c(i)(j) <= f(i-1)(j+1);
END GENERATE;
c(i)(n-1) <= e(i-1)(n-1);
END GENERATE;
connections4: FOR i IN 0 TO n-1 GENERATE
d(i)(0) <= v(i);
connections5: FOR j IN 1 TO n-1 GENERATE
d(i)(j) <= e(i)(j-1);
END GENERATE;
END GENERATE;
outputs: FOR j IN 0 TO n-1 GENERATE prod(j) <= f(j)(0); END GENERATE;
prod(n+n-2 DOWNTO n) <= f(n-1)(n-1 DOWNTO 1);
prod(n+n-1) <= e(n-1)(n-1);
END architecture;