inorder: dont handle multiple faults on same cycle
if a faulting instruction reaches an execution unit, then ignore it and pass it through the pipeline. Once we recognize the fault in the graduation unit, dont allow a second fault to creep in on the same cycle.
This commit is contained in:
@@ -196,7 +196,6 @@ InOrderCPU::InOrderCPU(Params *params)
|
||||
timeBuffer(2 , 2),
|
||||
removeInstsThisCycle(false),
|
||||
activityRec(params->name, NumStages, 10, params->activity),
|
||||
stCondFails(0),
|
||||
#if FULL_SYSTEM
|
||||
system(params->system),
|
||||
#endif // FULL_SYSTEM
|
||||
@@ -372,7 +371,8 @@ InOrderCPU::InOrderCPU(Params *params)
|
||||
|
||||
endOfSkedIt = skedCache.end();
|
||||
frontEndSked = createFrontEndSked();
|
||||
|
||||
faultSked = createFaultSked();
|
||||
|
||||
lastRunningCycle = curTick();
|
||||
|
||||
lockAddr = 0;
|
||||
@@ -417,11 +417,21 @@ InOrderCPU::createFrontEndSked()
|
||||
D.needs(FetchSeq, FetchSeqUnit::UpdateTargetPC);
|
||||
|
||||
|
||||
DPRINTF(SkedCache, "Resource Sked created for instruction \"front_end\"\n");
|
||||
DPRINTF(SkedCache, "Resource Sked created for instruction Front End\n");
|
||||
|
||||
return res_sked;
|
||||
}
|
||||
|
||||
RSkedPtr
|
||||
InOrderCPU::createFaultSked()
|
||||
{
|
||||
RSkedPtr res_sked = new ResourceSked();
|
||||
StageScheduler W(res_sked, NumStages - 1);
|
||||
W.needs(Grad, GraduationUnit::CheckFault);
|
||||
DPRINTF(SkedCache, "Resource Sked created for instruction Faults\n");
|
||||
return res_sked;
|
||||
}
|
||||
|
||||
RSkedPtr
|
||||
InOrderCPU::createBackEndSked(DynInstPtr inst)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user