PAGINA PRINCIPAL

 

SIMULADOR.C

    Este archivo contiene la simulación del procesador R2000 y lo que realiza es la carga de datos y  de instrucciones seguida de la ejecución de nuestro procesador tomando tiempos para ver el tiempo de ejecución. A continuación , se muestra un menú para poder ver los distintos resultados , terminando la simulación cuando se pulsa la tecla 'q'.

    Este archivo debe ser compilado bajo linux.

   Las funciones del menú son :

        -'b'. Ver el contenido de los buses del procesador.

        -'d'. Ver contenido de la memoria de datos.

        -'i'. Ver contenido de la memoria de instrucciones .

        -'r'. Ver contenido de los registros .

        -'t'. Ver el tiempo de ejecución y la frecuencia del procesador.

 

/* Archivo para ejecutar un programa de prueba en el procesador monociclo*/

#include<stdio.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
#include <sys/times.h>
#include"defs.h"
#include"clock.h"
#include"gates.h"
#include"decods.h"
#include"muxs.h"
#include"latches.h"
#include"flip-flops.h"
#include"fr32x32.h"
#include"regs.h"
#include"srams.h"
#include"alucon.h"
#include"alu32.h"
#include"control.h"
#include"r2000.h"

r2000 *monociclo;
void carga_memoria();
void leer_arch (char *nomfi);
char cadena[64][40];


void main(void)
{
int i,j,k;
float tciclo; //para saber el tiempo de un ciclo
clock_t c0,c1; // Para medir el tiempo
struct tms t0,t1; 
float contiempo,frecuencia;
char selecta,pausa;
system("clear");
printf(" SIMULADOR R2000 MONOCICLO. \n");
printf("----------------------------------------------------------\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("Autores: Eduardo Tapia Padilla \n");
printf(" Juan de Dios Campos Lopez\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("Para comenzar la simulacion pulse INTRO.......\n");
getchar();
fflush(stdin);
printf("\nEjecutando.......");
for(i=0;i<10;i++){
system("usleep 100000");
printf(".");
}
printf("\n");
printf("\n");
monociclo=new r2000;
monociclo->cargar_datos(1,1);
monociclo->cargar_datos(2,2);
monociclo->cargar_datos(3,3);
monociclo->cargar_meminst("memoria.txt");
c0=times(&t0);
monociclo->run();
c1=times(&t1);
contiempo=(float)(c1-c0)/CLK_TCK;
tciclo=contiempo/(5*5);
frecuencia=1/tciclo;

do
{
system("clear");
printf ("Seleccione lo que desee ver pulsando la tecla correspondiente.\n");
printf ("--------------------------------------------------------------\n");
printf ("\n");
printf (" b. Ver contenido de los buses.\n");
printf (" d. Ver contenido de la memoria de datos.\n");
printf (" i. Ver contenido de la memoria de instrucciones.\n");
printf (" r. Ver contenido de los registros.\n");
printf (" t. Ver tiempos de ejecucion.\n");
printf ("\n");
printf (" q. Salir del programa.\n");
printf ("\n");
printf ("Elija una opcion.....");
scanf("%c",&selecta);
fflush(stdin);
if (selecta=='b') {
monociclo->imprimir_buses();
scanf("%c",&pausa);
}
if (selecta=='d'){
monociclo->imprimir_memdatos();
scanf("%c",&pausa);}
if (selecta=='i') {
monociclo->imprimir_meminst();
scanf("%c",&pausa);}
if (selecta=='r'){
monociclo->imprimir_registros();
scanf("%c",&pausa);}
if (selecta=='t'){
system("clear");
printf ("\n TIEMPO DE EJECUCION: %f segundos.\n",contiempo);
printf ("\n");
printf ("\n");
printf ("\n FRECUENCIA: %f Hz. \n",frecuencia);
printf ("\n");
scanf("%c",&pausa);}
if (selecta!='q')
{ fflush(stdin);
printf("\nPara continuar pulse INTRO.......\n");
scanf("%c",&pausa);
fflush(stdin);
}
}
while (selecta!='q');
system("clear");
}