Multiplicador de 8 bits en VHDL

#1
Lo que pasa es que llevo algúnas semanas sin poder dar con una solución a un multiplicador de 8 bits de dos números A y B.
Sin usar m[as librerias aparte de estas : ieee.std_logic_1164.all -- ieee.std_logic_unsigned.all;
No puedo usar ni la libreria math ni, ni numeric o ningúna otra , tampoco algo que tenga que ver con lógica secuencial.

Si uds han desarrollado algo así o tienen una idea de como hacerlo, me ayudaría mucho :). ...
 
Última edición:
#3
Si. Digamos quieres multiplicar 2 x 3 entonces tienes que sumar 3 veces 2 o al revés, pero ahí es mi problema, en internet está que tengo que agregar sumadores de esta manera :: La imágen esta adjuntada. :)(Caso multiplicador de 2 bits Numeros A y B) , Mi duda ahora que saben eso, es como aplicar un código en VHDL que me haga esa lógica de ir sumando de esa manera para 8 bits.

Nota : Los sumadores se ven que son Full Adders porque necesito el carry de entrada para la siguiente columna de sumas de derecha a izquierda.

Me explico mas detalladamente, la multiplicacion de números es así (Img adjuntada), Entonces digamos que en la parte de rojo en vez de 2 y 2 hubiera sido algo que cuya suma sobrepase a 9 , digamos 5 y 5 , esto hubiera generado un carry para la siguiente columna, he ahí mi problema en vhdl, no se como hacer eso :(.
 

Adjuntos

Última edición:
#4
Si queres sumar dos numeros de dos bits y recibir el acarreo basta con que el resultado de la operacion tenga tres bits, el acarreo sera almacenado en el MSB del registro de resultado
 
#6
Aca te pongo fragmentos de codigo que realizan la multiplicacion de dos numeros de dos bits (a y b) dando como resultado uno de cuatro bits, con dos sumas parciales (p1 y p2).

Vos deberas agregarle todo lo que falta, entidad, arquitectura, simulacion, y ampliarlo a la cantidad de bits que necesitas. Ademas presta atencion que son dos trozos de codigo que deben ir en partes diferentes:

Parte declarativa:

Código:
  signal a  : std_logic_vector(1 downto 0) := "11";
  signal b  : std_logic_vector(1 downto 0) := "10";
  signal p1 : std_logic_vector(1 downto 0);
  signal p2 : std_logic_vector(2 downto 0);
  signal y : std_logic_vector(3 downto 0);
Parte de "ejecucion"
Código:
p1 <= a and (b(0) & b(0));
p2 <= (a and (b(1) & b(1)) ) & '0';
y  <= ('0' & p2) + p1;
Yo agregue en mi PC lo que falta y lo simule, el resultado es y = "0110", lo que concuerda con 3x2 = 6
 
Última edición:
Arriba