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