Ripple Carry-multiplier

De MediaWiki do Campus São José
Revisão de 11h15min de 3 de julho de 2016 por Kamila.r (discussão | contribs) (Criou página com '<syntaxhighlight lang=vhdl> ------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
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;