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