Example #1
0
        public void asignaLatencia(Instruccion ins, int sumL, int mulL, int divL)
        {
            switch (ins.Op)
            {
            case "LD":
                ins.Latencia = 2;
                break;

            case "ST":
                ins.Latencia = 1;
                break;

            case "ADD":
            case "SUB":
                ins.Latencia = sumL;
                break;

            case "DIV":
                ins.Latencia = divL;
                break;

            case "MUL":
                ins.Latencia = mulL;
                break;
            }
        }
Example #2
0
        public string verificarDestinoInstruccion(Instruccion ins)
        {
            string opt = "";

            switch (ins.Op)
            {
            case "LD":
                opt = "LOAD";
                break;

            case "ST":
                opt = "STORE";
                break;

            case "ADD":
            case "SUB":
                opt = "ADD";
                break;

            case "DIV":
            case "MUL":
                opt = "MUL";
                break;
            }
            return(opt);
        }
Example #3
0
 public void calcularDependencias(List <Instruccion> instrucciones, List <Dependencias> dependencias)
 {
     //como la lista de instrucciones esta a la inversa, se empieza desde el final
     for (int i = instrucciones.Count - 1; i >= 0; i--)
     {
         Instruccion ins = instrucciones[i];
         for (int j = i + 1; j < instrucciones.Count; j++)
         {
             if ((ins.Rs1 == instrucciones[j].Rd || ins.Rs2 == instrucciones[j].Rd) && instrucciones[j].Op != "ST")
             {
                 Dependencias dep = new Dependencias();
                 dep.IdInsDependiente = ins.IdInstruccion;
                 dep.IdInsOrigen      = instrucciones[j].IdInstruccion;
                 dep.PorQuienDepende  = instrucciones[j].Rd;
                 if (j - i <= 2)
                 {
                     dep.Riesgo = "RAW";
                 }
                 else
                 {
                     dep.Riesgo = "";
                 }
                 dependencias.Add(dep);
             }
             if (ins.Op == "ST" && (ins.Rd == instrucciones[j].Rd))
             {
                 Dependencias dep = new Dependencias();
                 dep.IdInsDependiente = ins.IdInstruccion;
                 dep.IdInsOrigen      = instrucciones[j].IdInstruccion;
                 dep.PorQuienDepende  = instrucciones[j].Rd;
                 dep.Riesgo           = "";
                 dependencias.Add(dep);
             }
         }
     }
 }
 public void asignarInstruccionAEstacionReservaAddSub(BindingList <Estaciones> estacionAddSub, Instruccion instruccion, int indice, Estaciones temp)
 {
     temp.Ocupada           = "SI";
     temp.Tipo              = estacionAddSub[indice].Tipo;
     estacionAddSub[indice] = temp;
 }
 public void asignarInstruccionABufferAlmacenamientoDisponible(BindingList <BufferT> bufferAlmacenamiento, Instruccion ins, int indice)
 {
     bufferAlmacenamiento[indice].Ocupada   = "SI";
     bufferAlmacenamiento[indice].Direccion = ins.Rs1 + "+" + ins.Inmediato;
 }