/*
* linea_base.c
* Clase que implementa una linea de la matriz del multiplicador combinacional
* por sumas y desplazamientos
*
* Autores: JOSE LUIS BERENGUEL GOMEZ
* JORGE BARBERO PEREZ
*
* Compilación:
* c++ -c linea_base.c
*
* Ultima modificación: 29-1-02
*/
#include "gates.h"
#include "decods.h"
#include "muxs.h"
#include "alu32.h" // para el sumador completo de 1 bit
#include "celda_base.h"
#include "linea_base.h"
/* METODO run PARA LA LINEA BASE DE 4 BITS */
void LINEA_BASE_4BITS::run(WIRE m[4], // entrada de los 4 bits del multiplicando
WIRE Pp[4], // entrada de los 4 productos parciales
WIRE &qi, // entrada del bit i del multiplicador
WIRE &cin, // acarrao de entrada
WIRE &cout, // acarreo de salida
WIRE Ppsig[4]) // salida de los productos parciales para la siguiente linea
{
/*comienzo del metodo*/
cin=0; // inicializamos la variable para asegurarnos de que esta a cero
/* operamos con las celdas una por una */
celda[0].run(m[0],Pp[0],qi,cin,aux[0],Ppsig[0]);
celda[1].run(m[1],Pp[1],qi,aux[0],aux[1],Ppsig[1]);
celda[2].run(m[2],Pp[2],qi,aux[1],aux[2],Ppsig[2]);
celda[3].run(m[3],Pp[3],qi,aux[2],cout,Ppsig[3]);
} // FIN DEL METODO run DE LA LINEA DE 4 BITS
/* METODO run PARA LA LINEA BASE DE 32 BTIS */
void LINEA_BASE_32BITS:: run(WIRE m[32],// entrada de los 32 bits del multiplicador
WIRE Pp[32], // entrada de los 32 productos parciales
WIRE &qi, // entrada del bit i del multiplicando
WIRE &cin, // acarreo de entrada
WIRE &cout, // acarreo de salida
WIRE Ppsig[32]){ // salida del producto parcial para la siguiente linea
/*comienzo del metodo*/
cin=0;
/* operamos con las celdas */
/* primera celda */
celda[0].run(m[0],Pp[0],qi,cin,aux[0],Ppsig[0]);
/* resto de celdas excepto la última */
for(int i=1;i<31;i++)
celda[i].run(m[i],Pp[i],qi,aux[i-1],aux[i],Ppsig[i]);
/* ultima celda*/
celda[31].run(m[31],Pp[31],qi,aux[30],cout,Ppsig[31]);
} // FIN DEL METODO run DE LA LINEA DE 32 BITS