public void Init()
        {
            clocks = 0;
            originalInstructions = instructionUnit.GetCurrentInstructions();

            issueClocks   = new int[100];
            executeClocks = new int[100];
            writeClocks   = new int[100];

            for (int i = 0; i < 100; i++)
            {
                issueClocks[i]   = -1;
                executeClocks[i] = -1;
                writeClocks[i]   = -1;
            }

            loadStation     = new ReservationStation(3, ReservationStation.RSType.Load);
            storeStation    = new ReservationStation(3, ReservationStation.RSType.Store);
            addStation      = new ReservationStation(3, ReservationStation.RSType.Add);
            multiplyStation = new ReservationStation(2, ReservationStation.RSType.Multiply);
            branchStation   = new ReservationStation(5, ReservationStation.RSType.Multiply);

            floatRegs = new FloatingPointRegisters(30);
            for (int i = 0; i < 30; i++)
            {
                floatRegs.Set(WaitInfo.WaitState.Avail, i + 1, i);
            }
            intRegs = new IntegerRegisters(30);
            memLocs = new FloatingPointMemoryArrary(64);
            for (int i = 0; i < 64; i++)
            {
                memLocs.Set(i + 1, i);
            }

            UpdateInstructionQueueBox();
            UpdateIssuedInstructionsBox();
            UpdateReservationStationBoxes();
            UpdateFPRegisterBox();
            UpdateIntRegisterBox();
            UpdateClockCountBox();
        }
Esempio n. 2
0
 public int GetFromMemory(int index, FloatingPointMemoryArrary memory)
 {
     if (remainingCycles[index] == -1)
     {
         remainingCycles[index] = cyclesToComplete[index];
         states[index]          = Instruction.State.Exec_Inprog;
         return(remainingCycles[index]--);
     }
     else
     {
         if (remainingCycles[index] == 0)
         {
             isReady[index] = true;
             states[index]  = Instruction.State.Exec_Fin;
             return(0);
         }
         else
         {
             return(remainingCycles[index]--);
         }
     }
 }