implemented discrete event simulation in execute stage
This commit is contained in:
parent
42f0925c13
commit
e8e0b9ab4a
|
@ -1,4 +1,4 @@
|
|||
Number of instructions executed = 7609
|
||||
Number of cycles taken = 11172
|
||||
Number of instructions executed = 29
|
||||
Number of cycles taken = 1169
|
||||
Number of data hazards = 0
|
||||
Number of control hazards = 176
|
||||
Number of control hazards = 10
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Number of instructions executed = 926
|
||||
Number of cycles taken = 1169
|
||||
Number of instructions executed = 277
|
||||
Number of cycles taken = 11172
|
||||
Number of data hazards = 0
|
||||
Number of control hazards = 10
|
||||
Number of control hazards = 176
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
package processor.pipeline;
|
||||
import processor.Processor;
|
||||
|
||||
import configuration.Configuration;
|
||||
import generic.Element;
|
||||
import generic.Event;
|
||||
import generic.ExecutionCompleteEvent;
|
||||
import generic.Instruction;
|
||||
import generic.Simulator;
|
||||
import generic.Statistics;
|
||||
import generic.Instruction.OperationType;
|
||||
import generic.Operand.OperandType;
|
||||
|
||||
public class Execute {
|
||||
public class Execute implements Element{
|
||||
Processor containingProcessor;
|
||||
OF_EX_LatchType OF_EX_Latch;
|
||||
EX_MA_LatchType EX_MA_Latch;
|
||||
|
@ -24,8 +28,34 @@ public class Execute {
|
|||
{
|
||||
// storing x31 here itself to not to complicate.
|
||||
// TODO:remove this later in pipeline
|
||||
if(OF_EX_Latch.isEX_enable())
|
||||
if(OF_EX_Latch.isEX_enable()&& !OF_EX_Latch.isEX_busy())
|
||||
{
|
||||
|
||||
OperationType alu_op = OF_EX_Latch.getInstruction().getOperationType();
|
||||
long latency = 0;
|
||||
switch (alu_op) {
|
||||
case mul:
|
||||
case muli:
|
||||
latency = Configuration.multiplier_latency;
|
||||
break;
|
||||
case div:
|
||||
case divi:
|
||||
latency = Configuration.divider_latency;
|
||||
break;
|
||||
default:
|
||||
latency = Configuration.ALU_latency;
|
||||
break;
|
||||
}
|
||||
|
||||
Simulator.getEventQueue().addEvent(new ExecutionCompleteEvent(latency, this, this));
|
||||
OF_EX_Latch.setEX_busy(true);
|
||||
EX_MA_Latch.setMA_enable(false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
int op1 = OF_EX_Latch.getOp1();
|
||||
int op2 = OF_EX_Latch.getOp2();
|
||||
int imm = OF_EX_Latch.getImm();
|
||||
|
@ -166,7 +196,6 @@ public class Execute {
|
|||
}
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
System.out.println("ALU RESULT: " + alu_result+"\n\n");
|
||||
|
@ -179,6 +208,6 @@ public class Execute {
|
|||
}else{
|
||||
Statistics.setControlhazards(Statistics.getControlhazards()+2); // stall 2 cycles
|
||||
}
|
||||
}
|
||||
OF_EX_Latch.setEX_busy(false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package processor.pipeline;
|
||||
|
||||
import generic.Element;
|
||||
import generic.Event;
|
||||
import generic.Instruction;
|
||||
import processor.Processor;
|
||||
import generic.Instruction.OperationType;
|
||||
|
||||
public class MemoryAccess {
|
||||
public class MemoryAccess implements Element {
|
||||
Processor containingProcessor;
|
||||
EX_MA_LatchType EX_MA_Latch;
|
||||
MA_RW_LatchType MA_RW_Latch;
|
||||
|
@ -41,4 +43,10 @@ public class MemoryAccess {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(Event e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ public class OF_EX_LatchType {
|
|||
boolean EX_enable;
|
||||
Instruction instruction;
|
||||
int op1, op2, imm;
|
||||
boolean EX_busy=false;
|
||||
|
||||
public OF_EX_LatchType()
|
||||
{
|
||||
|
@ -53,5 +54,12 @@ public class OF_EX_LatchType {
|
|||
EX_enable = eX_enable;
|
||||
}
|
||||
|
||||
public boolean isEX_busy() {
|
||||
return EX_busy;
|
||||
}
|
||||
|
||||
public void setEX_busy(boolean isEX_busy) {
|
||||
this.EX_busy = isEX_busy;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -195,10 +195,14 @@ public class OperandFetch {
|
|||
System.out.println("\n\nData Hazard - Interlock\n\n");
|
||||
Statistics.setDatahazards(Statistics.getDatahazards() + 1);
|
||||
}
|
||||
OF_EX_Latch.setEX_enable(true);
|
||||
}
|
||||
else if (!Proceed) {
|
||||
// Proceed = true;
|
||||
System.out.println("\n\nControl Hazard - Interlock\n\n");
|
||||
OF_EX_Latch.setEX_enable(false);
|
||||
// System.out.println("\n\nControl Hazard - Interlock\n\n");
|
||||
}else{
|
||||
OF_EX_Latch.setEX_enable(false);
|
||||
}
|
||||
updateQueue(addtoqueue);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue