/* * 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 };