/* * test_multiplicador.c * Prueba del multiplicador de sumas y desplazamientos de 4 y 32 bits * * Autores: JOSE LUIS BERENGUEL GOMEZ * JORGE BARBERO PEREZ * * Compilación: * c++ -D_MULTIPLICADOR_4BITS_ test_multiplicador.c multiplicador.o linea_base.o celda_base.o gates.o muxs.o decods.o alu32.o -o test_multiplicador_4bits * c++ -D_MULTIPLICADOR_32BITS_ test_multiplicador.c multiplicador.o linea_base.o celda_base.o gates.o muxs.o decods.o alu32.o -o test_multiplicador_32bits * Ultima modificación: 29-1-02 */ #include "gates.h" #include "decods.h" #include "muxs.h" #include "alu32.h" #include "celda_base.h" #include "linea_base.h" #include "multiplicador.h" #include <stdio.h> /* TEST PARA EL MULTIPLICADOR DE 4 BITS */ #ifdef _MULTIPLICADOR_4BITS_ int main(void){ WIRE m[4],Pp[4],q[4],cin[4],Prod[8]; // lineas de entrada y salida del multiplicador int cont; // Nos sirve para generar las combinaciones de las variables de entrada MULTIPLICADOR_4BITS multiplicador; // Objeto que vamos a simular /* COMIENZO DEL PROGRAMA PRINCIPAL */ printf("q3 q2 q1 q0 m3 m2 m1 m0 Prod7 Prod6 Prod5 Prod4 Prod3 Prod2 Prod1 Prod0\n"); //generamos las combinaciones de las 8 variables de entrada (2^8 combinaciones) for (int i=0;i<256;i++){ cont=i; if ((cont%2)==1) m[0]=VCC; else m[0]=GND; cont=i>>1; if ((cont%2)==1) m[1]=VCC; else m[1]=GND; cont=i>>2; if ((cont%2)==1) m[2]=VCC; else m[2]=GND; cont=i>>3; if ((cont%2)==1) m[3]=VCC; else m[3]=GND; cont=i>>4; if ((cont%2)==1) q[0]=VCC; else q[0]=GND; cont=i>>5; if ((cont%2)==1) q[1]=VCC; else q[1]=GND; cont=i>>6; if ((cont%2)==1) q[2]=VCC; else q[2]=GND; cont=i>>7; if ((cont%2)==1) q[3]=VCC; else q[3]=GND; // Comienzo de la simulación for(int j=0;j<20;j++){ multiplicador.run(m,Pp,q,cin,Prod); printf("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",q[3],q[2],q[1],q[0],m[3],m[2],m[1],m[0],Prod[7],Prod[6],Prod[5],Prod[4],Prod[3],Prod[2],Prod[1],Prod[0]); } //fflush(stdin); //getchar(); } return 0; } #endif #ifdef _MULTIPLICADOR_32BITS_ #include "random.h" int main(void) { WIRE m[32],Pp[32],q[32],cin[32],Prod[64]; //unsigned long int cont; MULTIPLICADOR_32BITS multiplicador; /* // generamos las combinaciones de las variables de entrada: 2^64 (64 variables de entrada) for(unsigned long int i=0;i<(2^64);i++){ cont=i; for(int j=0;j<32;j++){ cont=i>>j; if ((cont%2)==1) q[j]=VCC; else q[j]=GND; } for(int j=0;j<32;j++){ cont=i>>(j+32); if((cont%2)==1) m[j]=VCC; else m[j]=GND; } // comienzo de la simulacion for(int k=0;k<100;k++) multiplicador.run(m,Pp,q,cin,Prod); } */ // generamos 10 multiplicaciones con numeros aleatorios en cada una de ellas printf("\n\t\tSIMULACION DEL MULTIPLICADOR DE 32 BITS \n"); for(int i=0;i<32;i++) m[i]=q[i]=VCC; for(int i=0;i<160;i++){ multiplicador.run(m,Pp,q,cin,Prod); for(int j=63;j>=0;j--) if(Prod[j]!=0) printf("1"); else printf("0"); printf("\n"); } /* for(int i=0;i<10;i++){ printf("Multiplicacion aleatoria %d \n",i); printf("Contenido del multiplicando m[]: \n"); for(int j=31;j>=0;j--){ Random(1,1,m[j]); printf("%4d",m[j]); } printf("\nContenido del multiplicador q[]: \n"); for(int j=31;j>=0;j--){ Random(1,1,q[j]); printf("%4d",q[j]); } printf("\n Igual a: \n"); for(int j=0;j<100;j++){ multiplicador.run(m,Pp,q,cin,Prod); for(int k=63;k>=0;k--){ printf("%4d",Prod[k]); } } printf("\n"); } */ return 0; } #endif