# HG changeset patch # User sohan # Date 1331658445 -3600 # Node ID 36fc881c883e0dd74d357acd309a8cd4e0f7afa0 # Parent 29981612638fc93c196b01a4a1407dc578768d6e Activities for various inports and Instruction Fetch defined diff -r 29981612638f -r 36fc881c883e HWSim__LPGPU_Arch__HWDef/ContextUnitElem_Activities.c --- a/HWSim__LPGPU_Arch__HWDef/ContextUnitElem_Activities.c Tue Mar 13 18:05:16 2012 +0100 +++ b/HWSim__LPGPU_Arch__HWDef/ContextUnitElem_Activities.c Tue Mar 13 18:07:25 2012 +0100 @@ -55,4 +55,191 @@ contextUnitElem_SchedulerActivity_timing( void * dataFromBehaviorFn ) { return 10; - } \ No newline at end of file + } + + +void +contextUnitElem_FetchInstrActivity_behavior( void *triggeringMsg, void *elemState ) + { + ScheduledCtxtForFetch *msgToInstrCache; + + DEBUG( dbgHW, "Fetch Instruction activity\n", elemState ); + + ContextUnitState *state; + AnimatorContext *currentCtxt; + int32 lastFetchedContext; + + state = (ContextUnitState *)elemState; + + + lastFetchedContext = state->lastFetchedContext; + currentCtxt = state->animatorContexts[lastFetchedContext]; + + numChecked = 0; + while( currentCtxt->FSMState.IF.ReadyForIF != true && numChecked < NUM_CONTEXTS ) + { currentCtxt += 1; //Addr arithmetic advances entire struct + numChecked += 1; + } + + msgToInstrCache->PC = &(currentCtxt->PC); + msgToInstrCache->ctxtAddr = &(currentCtxt->ctxtAddr); + //This HWSim command sends the message on the port, and also + HWSim__send_on_port_w_cont( msgToInstrCache, PORT_TO_PIPE, elemState ); + } + +HWSimTimeSpan +contextUnitElem_FetchInstrActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + +void +contextUnitElem_FsmUpdateIFActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update on Instruction Fetch \n", elemState); + + MsgOnPortFromInstrCache *msg; + msg = (MsgOnPortFromInstrCache *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->instr=msg->Instr; + updateCtxt->FSMState.PS.ReadyForPipe=true; + +} + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyIFActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + +void +contextUnitElem_FsmUpdatebyDecActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update Activity on Msg from Decode stage\n", elemState); + + MsgOnPortFromDecStage *msg; + msg = (MsgOnPortFromDecStage *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->PC=msg->PC; + updateCtxt->FSMState.IF.ReadyForIF=true; + +} + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyDecActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + +void +contextUnitElem_FsmUpdatebyRegActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update Activity on Msg from Register Stage1 \n", elemState); + + MsgOnPortFromRegStage *msg; + msg = (MsgOnPortFromRegStage *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->PC=msg->PC; + updateCtxt->FSMState.IF.ReadyForIF=true; + +} + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyRegActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + + +void +contextUnitElem_FsmUpdateWbActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update Activity on New PC from WB Stage\n", elemState); + + MsgOnPortFromWbStage *msg; + msg = (MsgOnPortFromWbStage *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->PC=msg->PC; + updateCtxt->FSMState.IF.ReadyForIF=true; + +} + + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyWbActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + + +void +contextUnitElem_FsmUpdateWBActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update Activity on InstrInLdSt\n", elemState); + + MsgOnPortFromWBStage *msg; + msg = (MsgOnPortFromWBStage *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->FSMState.LS.InLdSt=msg->InstrInLdst; + +} + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyWBActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + + +void +contextUnitElem_FsmUpdateWBBActivity_behavior( void *triggeringMsg, void *elemState ) +{ + DEBUG( dbgHW, "FSM Update Activity on Instr Done\n", elemState); + + MsgOnPortFromWBBStage *msg; + msg = (MsgOnPortFromWBStage *)triggeringMsg; + AnimatorContext *updateCtxt; + ContextUnitState *state; + + state =(ContextUnitState *)elemState; + // + updateCtxt=state->animatorContexts[msg->ctxtAddr]; + updateCtxt->FSMState.IF.ReadyForIF=msg->InstrDone; + +} + +HWSimTimeSpan +contextUnitElem_FsmUpdatebyWBBActivity_timing( void * dataFromBehaviorFn ) + { + return 10; + } + + + + +