/*
* multiplicador.h
* Clase que implementa el multiplicador combinacional por sumas y desplazamientos
*
* Autores: JOSE LUIS BERENGUEL GOMEZ
JORGE BARBERO PEREZ
*
* Ultima modificación: 29-1-02
*/
/*
* Multiplicador de 4 bits
* q[3] q[2] q[1] q[0]
* 0 | 0 | 0 | 0 |
* | | | | | | | |
* | | | | | | | |
* +------------------------+
* -------------| |--mult[0]
* | Linea Base |
* +-| |--0
* | +------------------------+
* \ | | | | | | | |
* auxlin1
* \ | | | | | | | \
* | | | | | | | | \
* | | | | | | | | \
* +------------------------+ |
* ----------| |-----mult[1]
* | Linea Base | |
* +-| |-----0
* | +------------------------+ |
* \ | | | | | | | | |
* auxlin2
* \ | | | | | | | \ |
* | | | | | | | | \ |
* | | | | | | | | \ |
* +------------------------+ | |
* -------| |--------mult[2]
* | Linea Base | | |
* +-| |--------0
* | +------------------------+ | |
* \ | | | | | | | | | |
* auxlin3
* \ | | | | | | | \ | |
* | | | | | | | | \ | |
* | | | | | | | | \ | |
* +------------------------+ | | |
* ----| |-----------mult[3]
* | Linea Base | | | |
* +-| |-----------0
* | +------------------------+ | | |
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* prod[8] ... ... ... ... ... prod[0]
*/
/* clase que implementa un multiplicador de 4 bits */
class MULTIPLICADOR_4BITS{
LINEA_BASE_4BITS linea[4]; // 4 objetos de la clase linea_base para el multiplicador
WIRE aux_lin1[4];
WIRE aux_lin2[4];
WIRE aux_lin3[4];
WIRE aux_lin4[4];
WIRE cout1,cout2,cout3,cout4; // lineas auxiliares desde cin hasta cout
public:
void run(WIRE mult[4], // entrada de los 4 bits del multiplicando
WIRE Pp[4], // entrada de los 4 productos parciales iniciales. Siempre a cero
WIRE q[4], // entrada de los 4 bits del multiplicador
WIRE cin[4], // entrada de los 4 acarreos de cada linea. Siempre a cero
WIRE Prod[8]); // salida de los 8 bits del producto
};
/*
* Multiplicador de 4 bits
* q[31] q[0]
* 0 | 0 |
* | | ... .. ... | |
* | | | |
* +------------------------+
* -------------| |----mult[0]
* | Linea Base |
* +-| |----0
* | +------------------------+
* \ | | | \
* \ | | ... .. ... | \
* | | | | \
* | | | | \
* +------------------------+ |
* ----------| |-------mult[1]
* | Linea Base | |
* +-| |-------0
* | +------------------------+ |
* \ | | | | |
* \ | | ... .. ... | \ |
*
* ... ... ... ... ... ... ... ...
*
* | | ... .. ... | | \ |
* | | | | \ ... |
* +------------------------+ | |
* ----| |-------------mult[31]
* | Linea Base | | |
* +-| |-------------0
* | +------------------------+ | |
* | | | | | | |
* | | | ... .. ... | | | ... |
* prod[63] ... ... .. ... ... ... prod[0]
*/
/* clase que implementa un multiplicador de 32 bits */
class MULTIPLICADOR_32BITS{
LINEA_BASE_32BITS linea[32];// 32 objetos de la clase linea_base para el multiplicador
WIRE auxlin[32][32];
WIRE cout[32]; // lineas auxiliares desde cin hasta cout
public:
void run(WIRE mult[32], // entrada de los 32 bits del multiplicando
WIRE Pp[32], // entrada de los 32 productos parciales iniciales. Siempre a cero
WIRE q[32], // entrada de los 32 bits del multiplicador
WIRE cin[32], // entrada de los 32 acarreos de cada linea. Siempre a cero
WIRE Prod[64]);// salida de los 64 bits del producto
};